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


Reply via email to