Author: amitj
Date: Mon Jul 8 04:15:13 2019
New Revision: 1862713
URL: http://svn.apache.org/viewvc?rev=1862713&view=rev
Log:
OAK-8463: Fix merge in consistency check to allow paths suffixed to blob ids
- Fix merge to ignore paths if present
Modified:
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
Modified:
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java?rev=1862713&r1=1862712&r2=1862713&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
(original)
+++
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
Mon Jul 8 04:15:13 2019
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Lists.newArrayList;
import static java.io.File.createTempFile;
+import static java.util.Comparator.comparing;
import static org.apache.commons.io.FileUtils.copyFile;
import static org.apache.jackrabbit.oak.commons.FileIOUtils.copy;
import static org.apache.jackrabbit.oak.commons.FileIOUtils.merge;
@@ -702,7 +703,7 @@ public class MarkSweepGarbageCollector i
File file = copy(refFile.getStream());
files.add(file);
}
- merge(files, fs.getMarkedRefs());
+ merge(files, fs.getMarkedRefs(), comparing(s ->
s.split(DELIM)[0]));
}
}
Modified:
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java?rev=1862713&r1=1862712&r2=1862713&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
(original)
+++
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
Mon Jul 8 04:15:13 2019
@@ -94,6 +94,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.mockito.internal.util.collections.Iterables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -386,10 +387,11 @@ public class BlobGCTest {
log.info("Staring checkConsistencyGlobal()");
// Setup a different cluster/repository sharing the blob store
- MemoryBlobStoreNodeStore secondClusterNodeStore = new
MemoryBlobStoreNodeStore(cluster.blobStore);
+ MemoryBlobStoreNodeStore secondClusterNodeStore = new
MemoryBlobStoreNodeStore(cluster.blobStore, true);
Cluster secondCluster = new Cluster(folder.newFolder(),
cluster.blobStore, secondClusterNodeStore, 100);
closer.register(secondCluster);
+
secondCluster.blobStoreState.blobsPresent.add(Iterables.firstOf(cluster.blobStoreState.blobsPresent));
// Execute mark on the default cluster
executeGarbageCollection(cluster, cluster.getCollector(0), true);
MarkSweepGarbageCollector globalCollector =
secondCluster.getCollector(0, true);
@@ -642,10 +644,16 @@ public class BlobGCTest {
*/
public static class MemoryBlobStoreNodeStore extends MemoryNodeStore {
private final BlobStore blobStore;
+ private final boolean fakePath;
Set<String> referencedBlobs;
public MemoryBlobStoreNodeStore(BlobStore blobStore) {
+ this(blobStore, false);
+ }
+
+ public MemoryBlobStoreNodeStore(BlobStore blobStore, boolean fakePath)
{
this.blobStore = blobStore;
+ this.fakePath = fakePath;
}
public void setReferencedBlobs(Set<String> referencedBlobs) {
@@ -669,8 +677,8 @@ public class BlobGCTest {
public BlobReferenceRetriever getBlobReferenceRetriever() {
return collector -> {
- for(String id : referencedBlobs) {
- collector.addReference(id, null);
+ for (String id : referencedBlobs) {
+ collector.addReference(id, (fakePath ?
UUID.randomUUID().toString() : null));
}
};
}