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 {