You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2015/03/05 00:08:19 UTC
svn commit: r1664184 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/
oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/
oak-jcr/src/test...
Author: mreutegg
Date: Wed Mar 4 23:08:18 2015
New Revision: 1664184
URL: http://svn.apache.org/r1664184
Log:
OAK-2576: ServiceEvent on each session login/logout
Applied patch from Michael Duerig
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/GCMonitorTracker.java
- copied, changed from r1664170, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/GCMonitorTracker.java
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/GCMonitorTracker.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1664184&r1=1664183&r2=1664184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Wed Mar 4 23:08:18 2015
@@ -70,6 +70,7 @@ import org.apache.jackrabbit.oak.spi.blo
import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
+import org.apache.jackrabbit.oak.spi.gc.GCMonitorTracker;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
import org.apache.jackrabbit.oak.spi.state.RevisionGC;
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java?rev=1664184&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java Wed Mar 4 23:08:18 2015
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.spi.gc;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Sets.newConcurrentHashSet;
+
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+
+/**
+ * This {@link GCMonitor} implementation simply delegates all its call
+ * to registered monitors.
+ */
+public class DelegatingGCMonitor implements GCMonitor {
+ private final Set<GCMonitor> gcMonitors = newConcurrentHashSet();
+
+ /**
+ * Register a {@link GCMonitor}.
+ * @param gcMonitor
+ * @return a {@link Registration} instance, which removes the registered
+ * {@code GCMonitor} instance when called.
+ */
+ public Registration registerGCMonitor(@Nonnull final GCMonitor gcMonitor) {
+ gcMonitors.add(checkNotNull(gcMonitor));
+ return new Registration() {
+ @Override
+ public void unregister() {
+ gcMonitors.remove(gcMonitor);
+ }
+ };
+ }
+
+ @Override
+ public void info(String message, Object... arguments) {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.info(message, arguments);
+ }
+ }
+
+ @Override
+ public void warn(String message, Object... arguments) {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.warn(message, arguments);
+ }
+ }
+
+ @Override
+ public void error(String message, Exception exception) {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.error(message, exception);
+ }
+ }
+
+ @Override
+ public void skipped(String reason, Object... arguments) {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.skipped(reason, arguments);
+ }
+ }
+
+ @Override
+ public void compacted() {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.compacted();
+ }
+ }
+
+ @Override
+ public void cleaned(long reclaimedSize, long currentSize) {
+ for (GCMonitor gcMonitor : gcMonitors) {
+ gcMonitor.cleaned(reclaimedSize, currentSize);
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/DelegatingGCMonitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/GCMonitorTracker.java (from r1664170, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/GCMonitorTracker.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/GCMonitorTracker.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/GCMonitorTracker.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/GCMonitorTracker.java&r1=1664170&r2=1664184&rev=1664184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/GCMonitorTracker.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/gc/GCMonitorTracker.java Wed Mar 4 23:08:18 2015
@@ -17,9 +17,8 @@
* under the License.
*/
-package org.apache.jackrabbit.oak.plugins.segment;
+package org.apache.jackrabbit.oak.spi.gc;
-import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
import org.apache.jackrabbit.oak.spi.whiteboard.AbstractServiceTracker;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java?rev=1664184&r1=1664183&r2=1664184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java Wed Mar 4 23:08:18 2015
@@ -56,6 +56,7 @@ import org.apache.jackrabbit.oak.jcr.ses
import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.jcr.session.SessionStats;
import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
+import org.apache.jackrabbit.oak.spi.gc.DelegatingGCMonitor;
import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
@@ -97,8 +98,9 @@ public class RepositoryImpl implements J
private final SecurityProvider securityProvider;
private final int observationQueueLength;
private final CommitRateLimiter commitRateLimiter;
-
private final Clock clock;
+ private final DelegatingGCMonitor gcMonitor = new DelegatingGCMonitor();
+ private final Registration gcMonitorRegistration;
/**
* {@link ThreadLocal} counter that keeps track of the save operations
@@ -131,6 +133,7 @@ public class RepositoryImpl implements J
this.descriptors = determineDescriptors();
this.statisticManager = new StatisticManager(whiteboard, scheduledExecutor);
this.clock = new Clock.Fast(scheduledExecutor);
+ this.gcMonitorRegistration = whiteboard.register(GCMonitor.class, gcMonitor, emptyMap());
}
//---------------------------------------------------------< Repository >---
@@ -273,7 +276,7 @@ public class RepositoryImpl implements J
RefreshStrategy refreshStrategy,
ContentSession contentSession) {
- final RefreshOnGC refreshOnGC = new RefreshOnGC();
+ final RefreshOnGC refreshOnGC = new RefreshOnGC(gcMonitor);
refreshStrategy = Composite.create(refreshStrategy, refreshOnGC);
return new SessionDelegate(
@@ -298,6 +301,7 @@ public class RepositoryImpl implements J
@Override
public void shutdown() {
statisticManager.dispose();
+ gcMonitorRegistration.unregister();
scheduledExecutor.shutdown();
if (contentRepository instanceof Closeable) {
IOUtils.closeQuietly((Closeable) contentRepository);
@@ -451,21 +455,21 @@ public class RepositoryImpl implements J
}
}
- private class RefreshOnGC implements RefreshStrategy {
- private final GCMonitor gcMonitor = new GCMonitor.Empty() {
- @Override
- public void compacted() {
- compacted = true;
- }
- };
-
- private final Registration reg = whiteboard.register(GCMonitor.class, gcMonitor, emptyMap());
-
+ private static class RefreshOnGC extends GCMonitor.Empty implements RefreshStrategy {
+ private final Registration registration;
private volatile boolean compacted;
- private int refreshCount;
+
+ public RefreshOnGC(DelegatingGCMonitor gcMonitor) {
+ registration = gcMonitor.registerGCMonitor(this);
+ }
public void close() {
- reg.unregister();
+ registration.unregister();
+ }
+
+ @Override
+ public void compacted() {
+ compacted = true;
}
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java?rev=1664184&r1=1664183&r2=1664184&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RefreshOnGCTest.java Wed Mar 4 23:08:18 2015
@@ -39,7 +39,7 @@ import javax.jcr.SimpleCredentials;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.oak.Oak;
-import org.apache.jackrabbit.oak.plugins.segment.GCMonitorTracker;
+import org.apache.jackrabbit.oak.spi.gc.GCMonitorTracker;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;