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 fr...@apache.org on 2017/06/29 15:24:08 UTC

svn commit: r1800291 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/file/ main/java/org/apache/jackrabbit/oak/segment/file/tar/ test/java/org/apache/jackrabbit/oa...

Author: frm
Date: Thu Jun 29 15:24:08 2017
New Revision: 1800291

URL: http://svn.apache.org/viewvc?rev=1800291&view=rev
Log:
OAK-6405 - Remove usage of ReferenceCollector

ReferenceCollector is the only interface enforcing a dependency from
org.apache.jackrabbit.oak.segment.file.tar to
org.apache.jackrabbit.oak.plugins.blob. Since the ReferenceCollector is only a
glorified Consumer, the former has been replaced with the latter when possible.
This removes the awkward situation of having a lower-level package depend on a
higher-level, unrelated one.

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlobReferenceRetriever.java
    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/tar/TarFiles.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlobReferenceRetriever.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlobReferenceRetriever.java?rev=1800291&r1=1800290&r2=1800291&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlobReferenceRetriever.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlobReferenceRetriever.java Thu Jun 29 15:24:08 2017
@@ -39,7 +39,7 @@ public class SegmentBlobReferenceRetriev
 
     @Override
     public void collectReferences(final ReferenceCollector collector) throws IOException {
-        store.collectBlobReferences(collector);
+        store.collectBlobReferences(s -> collector.addReference(s, null));
     }
 }
 

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=1800291&r1=1800290&r2=1800291&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 Thu Jun 29 15:24:08 2017
@@ -59,6 +59,7 @@ import java.util.concurrent.ExecutionExc
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
@@ -400,7 +401,7 @@ public class FileStore extends AbstractF
      * running.
      * @param collector  reference collector called back for each blob reference found
      */
-    public void collectBlobReferences(ReferenceCollector collector) throws IOException {
+    public void collectBlobReferences(Consumer<String> collector) throws IOException {
         garbageCollector.collectBlobReferences(collector);
     }
 
@@ -988,7 +989,7 @@ public class FileStore extends AbstractF
          * running.
          * @param collector  reference collector called back for each blob reference found
          */
-        synchronized void collectBlobReferences(ReferenceCollector collector) throws IOException {
+        synchronized void collectBlobReferences(Consumer<String> collector) throws IOException {
             segmentWriter.flush();
             int oldGeneration = getGcGeneration() - gcOptions.getRetainedGenerations();
             tarFiles.collectBlobReferences(collector, CompactionResult.newOldReclaimer(oldGeneration));

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java?rev=1800291&r1=1800290&r2=1800291&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java Thu Jun 29 15:24:08 2017
@@ -42,6 +42,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -50,7 +51,6 @@ import javax.annotation.Nonnull;
 import com.google.common.base.Predicate;
 import com.google.common.base.Supplier;
 import com.google.common.collect.Iterables;
-import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.segment.SegmentGraph.SegmentGraphVisitor;
 import org.apache.jackrabbit.oak.segment.file.FileStoreStats;
 import org.slf4j.Logger;
@@ -669,7 +669,7 @@ public class TarFiles implements Closeab
         return result;
     }
 
-    public void collectBlobReferences(ReferenceCollector collector, Predicate<Integer> reclaim) throws IOException {
+    public void collectBlobReferences(Consumer<String> collector, Predicate<Integer> reclaim) throws IOException {
         Node head;
         lock.writeLock().lock();
         try {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java?rev=1800291&r1=1800290&r2=1800291&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java Thu Jun 29 15:24:08 2017
@@ -51,6 +51,7 @@ import java.util.Set;
 import java.util.SortedMap;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.CRC32;
@@ -62,7 +63,6 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Stopwatch;
 import com.google.common.collect.Sets;
 import org.apache.commons.io.FileUtils;
-import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.segment.SegmentGraph.SegmentGraphVisitor;
 import org.apache.jackrabbit.oak.segment.SegmentId;
 import org.slf4j.Logger;
@@ -774,14 +774,13 @@ class TarReader implements Closeable {
      * returns {@code false}, entries from that generation will be inspected for
      * references.
      * <p>
-     * The provided {@link ReferenceCollector} is callback object that will be
-     * invoked for every reference found in the inspected entries.
+     * The provided {@link Consumer} is callback object that will be invoked for
+     * every reference found in the inspected entries.
      *
-     * @param collector      An instance of {@link ReferenceCollector}.
+     * @param collector      An instance of {@link Consumer}.
      * @param skipGeneration An instance of {@link Predicate}.
      */
-    // TODO frm this package depends on org.apache.jackrabbit.oak.plugins.blob only because of ReferenceCollector
-    void collectBlobReferences(@Nonnull ReferenceCollector collector, Predicate<Integer> skipGeneration) {
+    void collectBlobReferences(@Nonnull Consumer<String> collector, Predicate<Integer> skipGeneration) {
         Map<Integer, Map<UUID, Set<String>>> generations = getBinaryReferences();
 
         if (generations == null) {
@@ -795,7 +794,7 @@ class TarReader implements Closeable {
 
             for (Set<String> references : entry.getValue().values()) {
                 for (String reference : references) {
-                    collector.addReference(reference, null);
+                    collector.accept(reference);
                 }
             }
         }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1800291&r1=1800290&r2=1800291&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java Thu Jun 29 15:24:08 2017
@@ -60,15 +60,12 @@ import java.util.concurrent.atomic.Atomi
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
-import javax.annotation.Nullable;
-
 import com.google.common.io.ByteStreams;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
-import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.OakFileDataStore;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
@@ -1305,14 +1302,7 @@ public class CompactionAndCleanupIT {
         final SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
         ExecutorService executorService = newFixedThreadPool(300);
         final AtomicInteger counter = new AtomicInteger();
-        final ReferenceCollector dummyCollector = new ReferenceCollector() {
-            
-            @Override
-            public void addReference(String reference, String nodeId) {
-                // do nothing
-            }
-        };
-        
+
         try {
             Callable<Void> concurrentWriteTask = new Callable<Void>() {
                 @Override
@@ -1336,7 +1326,9 @@ public class CompactionAndCleanupIT {
             Callable<Void> concurrentReferenceCollector = new Callable<Void>() {
                 @Override
                 public Void call() throws Exception {
-                    fileStore.collectBlobReferences(dummyCollector);
+                    fileStore.collectBlobReferences(s -> {
+                        // Do nothing.
+                    });
                     return null;
                 }
             };
@@ -1450,26 +1442,13 @@ public class CompactionAndCleanupIT {
             nodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
             fileStore.flush();
 
-            class RefCollector implements ReferenceCollector {
-                final Set<String> references;
-
-                RefCollector(Set<String> references) {this.references = references;}
-
-                @Override
-                public void addReference(String reference, @Nullable String nodeId) {
-                    references.add(reference);
-                }
-            }
-
             Set<String> expectedReferences = newHashSet();
-            ReferenceCollector refCollector = new RefCollector(expectedReferences);
-            fileStore.collectBlobReferences(refCollector);
+            fileStore.collectBlobReferences(expectedReferences::add);
 
             for(int k = 1; k <= 3; k++) {
                 fileStore.gc();
                 Set<String> actualReferences = newHashSet();
-                refCollector = new RefCollector(actualReferences);
-                fileStore.collectBlobReferences(refCollector);
+                fileStore.collectBlobReferences(actualReferences::add);
                 assertEquals("Binary should be retained after " + k + "-th gc cycle",
                         expectedReferences, actualReferences);
             }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java?rev=1800291&r1=1800290&r2=1800291&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobIT.java Thu Jun 29 15:24:08 2017
@@ -43,7 +43,6 @@ import org.apache.jackrabbit.core.data.F
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
 import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob;
 import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
@@ -121,16 +120,13 @@ public class ExternalBlobIT {
         cb.setProperty("anotherBlob3", createBlob(Segment.MEDIUM_LIMIT + 1));
         nodeStore.merge(nb, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
-        final List<String> refrences = Lists.newArrayList();
-        store.collectBlobReferences(new ReferenceCollector() {
-            @Override
-            public void addReference(String reference, String nodeId) {
+        final List<String> references = Lists.newArrayList();
+        store.collectBlobReferences(reference -> {
                 assertNotNull(reference);
-                refrences.add(reference);
-            }
+                references.add(reference);
         });
 
-        assertEquals(noOfBlobs + 2, refrences.size());
+        assertEquals(noOfBlobs + 2, references.size());
     }
 
     private Blob testCreateAndRead(Blob blob) throws Exception {