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 md...@apache.org on 2016/10/24 16:07:58 UTC

svn commit: r1766427 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file: FileStore.java FileStoreBuilder.java GCListener.java

Author: mduerig
Date: Mon Oct 24 16:07:58 2016
New Revision: 1766427

URL: http://svn.apache.org/viewvc?rev=1766427&view=rev
Log:
OAK-4989: Simplify GCListener
Move delegation to the GCMonitor to GCListener

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1766427&r1=1766426&r2=1766427&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java Mon Oct 24 16:07:58 2016
@@ -34,8 +34,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.apache.jackrabbit.oak.segment.SegmentId.isDataSegmentId;
 import static org.apache.jackrabbit.oak.segment.SegmentWriterBuilder.segmentWriterBuilder;
-import static org.apache.jackrabbit.oak.segment.file.GCListener.Status.FAILURE;
-import static org.apache.jackrabbit.oak.segment.file.GCListener.Status.SUCCESS;
 import static org.apache.jackrabbit.oak.segment.file.TarRevisions.EXPEDITE_OPTION;
 import static org.apache.jackrabbit.oak.segment.file.TarRevisions.timeout;
 
@@ -76,10 +74,7 @@ import org.apache.jackrabbit.oak.api.jmx
 import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.segment.Compactor;
 import org.apache.jackrabbit.oak.segment.RecordId;
-import org.apache.jackrabbit.oak.segment.RecordType;
 import org.apache.jackrabbit.oak.segment.Segment;
-import org.apache.jackrabbit.oak.segment.Segment.RecordConsumer;
-import org.apache.jackrabbit.oak.segment.SegmentBlob;
 import org.apache.jackrabbit.oak.segment.SegmentBufferWriter;
 import org.apache.jackrabbit.oak.segment.SegmentId;
 import org.apache.jackrabbit.oak.segment.SegmentIdTable;
@@ -899,12 +894,12 @@ public class FileStore extends AbstractF
                 }
 
                 if (success) {
-                    gcListener.compacted(SUCCESS, newGeneration);
+                    gcListener.compactionSucceeded(newGeneration);
                     gcListener.info("TarMK GC #{}: compaction succeeded in {} ({} ms), after {} cycles",
                             GC_COUNT, watch, watch.elapsed(MILLISECONDS), cycles);
                     return newGeneration;
                 } else {
-                    gcListener.compacted(FAILURE, newGeneration);
+                    gcListener.compactionFailed(newGeneration);
                     gcListener.info("TarMK GC #{}: compaction failed after {} ({} ms), and {} cycles",
                             GC_COUNT, watch, watch.elapsed(MILLISECONDS), cycles);
                     return -newGeneration;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java?rev=1766427&r1=1766426&r2=1766427&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java Mon Oct 24 16:07:58 2016
@@ -36,7 +36,6 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
 import com.google.common.base.Predicate;
-
 import org.apache.jackrabbit.oak.segment.RecordCache;
 import org.apache.jackrabbit.oak.segment.RecordId;
 import org.apache.jackrabbit.oak.segment.Template;
@@ -44,7 +43,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.compaction.LoggingGCMonitor;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
-import org.apache.jackrabbit.oak.spi.gc.DelegatingGCMonitor;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.slf4j.Logger;
@@ -87,60 +85,20 @@ public class FileStoreBuilder {
     @Nonnull
     private SegmentGCOptions gcOptions = defaultGCOptions();
 
-    @Nonnull
-    private final DelegatingGCMonitor gcMonitor = new DelegatingGCMonitor();
-
     @CheckForNull
     private EvictingWriteCacheManager cacheManager;
 
     @Nonnull
-    private final GCListener gcListener = new GCListener() {
-        @Override
-        public void info(String message, Object... arguments) {
-            gcMonitor.info(message, arguments);
-        }
-
-        @Override
-        public void warn(String message, Object... arguments) {
-            gcMonitor.warn(message, arguments);
-        }
-
-        @Override
-        public void error(String message, Exception exception) {
-            gcMonitor.error(message, exception);
-        }
-
-        @Override
-        public void skipped(String reason, Object... arguments) {
-            gcMonitor.skipped(reason, arguments);
-        }
-
-        @Override
-        public void compacted(long[] segmentCounts, long[] recordCounts, long[] compactionMapWeights) {
-            gcMonitor.compacted(segmentCounts, recordCounts, compactionMapWeights);
-        }
-
+    private final GCListener gcListener = new GCListener(){
         @Override
-        public void cleaned(long reclaimedSize, long currentSize) {
-            gcMonitor.cleaned(reclaimedSize, currentSize);
+        public void compactionSucceeded(int newGeneration) {
+            compacted(null, null, null);
+            cacheManager.evictOldGeneration(newGeneration);
         }
 
         @Override
-        public void compacted(@Nonnull Status status, final int newGeneration) {
-            checkNotNull(cacheManager);
-            switch (status) {
-                case SUCCESS:
-                    // FIXME OAK-4283: Align GCMonitor API with implementation
-                    // This call is still needed to ensure upstream consumers
-                    // of GCMonitor callback get properly notified. See
-                    // RepositoryImpl.RefreshOnGC and
-                    // LuceneIndexProviderService.registerGCMonitor().
-                    gcMonitor.compacted(new long[0], new long[0], new long[0]);
-                    cacheManager.evictOldGeneration(newGeneration);
-                    break;
-                case FAILURE:
-                    cacheManager.evictGeneration(newGeneration);
-            }
+        public void compactionFailed(int failedGeneration) {
+            cacheManager.evictGeneration(failedGeneration);
         }
     };
 
@@ -158,7 +116,7 @@ public class FileStoreBuilder {
 
     private FileStoreBuilder(@Nonnull File directory) {
         this.directory = checkNotNull(directory);
-        this.gcMonitor.registerGCMonitor(new LoggingGCMonitor(LOG));
+        this.gcListener.registerGCMonitor(new LoggingGCMonitor(LOG));
     }
 
     /**
@@ -277,7 +235,7 @@ public class FileStoreBuilder {
      */
     @Nonnull
     public FileStoreBuilder withGCMonitor(@Nonnull GCMonitor gcMonitor) {
-        this.gcMonitor.registerGCMonitor(checkNotNull(gcMonitor));
+        this.gcListener.registerGCMonitor(checkNotNull(gcMonitor));
         return this;
     }
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java?rev=1766427&r1=1766426&r2=1766427&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCListener.java Mon Oct 24 16:07:58 2016
@@ -19,12 +19,24 @@
 
 package org.apache.jackrabbit.oak.segment.file;
 
-import javax.annotation.Nonnull;
+import org.apache.jackrabbit.oak.spi.gc.DelegatingGCMonitor;
 
-import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
+/**
+ * Listener receiving notifications about the garbage collection process
+ */
+abstract class GCListener extends DelegatingGCMonitor {
 
-// FIXME OAK-4283: Align GCMonitor API with implementation: Unify with GCMonitor
-public interface GCListener extends GCMonitor {
-    enum Status {SUCCESS, FAILURE}
-    void compacted(@Nonnull Status status, int generation);
+    /**
+     * Notification of a successfully completed compaction resulting in
+     * a new generation of segments
+     * @param newGeneration  the new generation number
+     */
+    public abstract void compactionSucceeded(int newGeneration);
+
+    /**
+     * Notification of a failed compaction. A new generation of
+     * segments could not be created.
+     * @param failedGeneration  the generation number that could not be created
+     */
+    public abstract void compactionFailed(int failedGeneration);
 }