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);
}