Author: amitj
Date: Tue Feb 10 05:15:06 2015
New Revision: 1658618

URL: http://svn.apache.org/r1658618
Log:
OAK-2493: DataStore GC: Fix incorrect tests

Modified:
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java?rev=1658618&r1=1658617&r2=1658618&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
 Tue Feb 10 05:15:06 2015
@@ -56,10 +56,11 @@ public class MongoBlobGCTest extends Abs
         NodeBuilder a = s.getRoot().builder();
 
         int number = 10;
+        int maxDeleted = 5;
         // track the number of the assets to be deleted
         List<Integer> processed = Lists.newArrayList();
         Random rand = new Random(47);
-        for (int i = 0; i < 5; i++) {
+        for (int i = 0; i < maxDeleted; i++) {
             int n = rand.nextInt(number);
             if (!processed.contains(n)) {
                 processed.add(n);
@@ -67,7 +68,7 @@ public class MongoBlobGCTest extends Abs
         }
         for (int i = 0; i < number; i++) {
             Blob b = s.createBlob(randomStream(i, 4160));
-            if (processed.contains(i)) {
+            if (!processed.contains(i)) {
                 Iterator<String> idIter =
                         ((GarbageCollectableBlobStore) s.getBlobStore())
                                 .resolveChunks(b.toString());
@@ -144,7 +145,7 @@ public class MongoBlobGCTest extends Abs
         addInlined();
         gc(set);
     }
-    private void gc(HashSet<String> set) throws Exception {
+    private void gc(HashSet<String> remaining) throws Exception {
         DocumentNodeStore store = mk.getNodeStore();
         MarkSweepGarbageCollector gc = new MarkSweepGarbageCollector(
                 new DocumentBlobReferenceRetriever(store),
@@ -153,9 +154,9 @@ public class MongoBlobGCTest extends Abs
                 "./target", 5, true, 0);
         gc.collectGarbage();
 
-        Set<String> existing = iterate();
-        boolean empty = Sets.intersection(set, existing).isEmpty();
-        assertTrue(empty && !existing.isEmpty());
+        Set<String> existingAfterGC = iterate();
+        boolean empty = Sets.symmetricDifference(remaining, 
existingAfterGC).isEmpty();
+        assertTrue(empty);
     }
 
     protected Set<String> iterate() throws Exception {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCTest.java?rev=1658618&r1=1658617&r2=1658618&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentDataStoreBlobGCTest.java
 Tue Feb 10 05:15:06 2015
@@ -29,17 +29,18 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 import java.util.Set;
+import java.util.concurrent.Callable;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import com.google.common.util.concurrent.MoreExecutors;
 import org.apache.commons.io.FileUtils;
-import org.apache.jackrabbit.core.data.FileDataStore;
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
+import org.apache.jackrabbit.oak.plugins.document.blob.ds.DataStoreUtils;
+import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
@@ -49,17 +50,28 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.junit.After;
 import org.junit.Test;
 
+import javax.annotation.Nonnull;
+
 /**
  * Tests for SegmentNodeStore DataStore GC
  */
 public class SegmentDataStoreBlobGCTest {
     SegmentNodeStore nodeStore;
-    SegmentStore store;
+    FileStore store;
     DataStoreBlobStore blobStore;
 
     protected SegmentNodeStore getNodeStore(BlobStore blobStore) throws 
IOException {
         if (nodeStore == null) {
             store = new FileStore(blobStore, getWorkDir(), 256, false);
+            CompactionStrategy compactionStrategy =
+                new CompactionStrategy(false, true,
+                    CompactionStrategy.CleanupType.CLEAN_OLD, 0, 
CompactionStrategy.MEMORY_THRESHOLD_DEFAULT) {
+                    @Override
+                    public boolean compacted(@Nonnull Callable<Boolean> 
setHead) throws Exception {
+                        return setHead.call();
+                    }
+                };
+            store.setCompactionStrategy(compactionStrategy);
             nodeStore = new SegmentNodeStore(store);
         }
         return nodeStore;
@@ -70,31 +82,30 @@ public class SegmentDataStoreBlobGCTest
     }
 
     public HashSet<String> setUp() throws Exception {
-        FileDataStore fds = new FileDataStore();
-        fds.setMinRecordLength(4092);
-        fds.init(getWorkDir().getAbsolutePath());
-        blobStore = new DataStoreBlobStore(fds);
+        blobStore = DataStoreUtils.getBlobStore();
         nodeStore = getNodeStore(blobStore);
 
         HashSet<String> set = new HashSet<String>();
 
         NodeBuilder a = nodeStore.getRoot().builder();
 
-        int number = 2;
+        int number = 10;
+        int maxDeleted  = 5;
+
         // track the number of the assets to be deleted
         List<Integer> processed = Lists.newArrayList();
         Random rand = new Random();
-        for (int i = 0; i < 1; i++) {
+        for (int i = 0; i < maxDeleted; i++) {
             int n = rand.nextInt(number);
             if (!processed.contains(n)) {
                 processed.add(n);
             }
         }
         for (int i = 0; i < number; i++) {
-            Blob b = nodeStore.createBlob(randomStream(i, 16516));
-            if (processed.contains(i)) {
+            SegmentBlob b = (SegmentBlob) nodeStore.createBlob(randomStream(i, 
16516));
+            if (!processed.contains(i)) {
                 Iterator<String> idIter = blobStore
-                        .resolveChunks(b.toString());
+                        .resolveChunks(b.getBlobId());
                 while (idIter.hasNext()) {
                     set.add(idIter.next());
                 }
@@ -106,7 +117,7 @@ public class SegmentDataStoreBlobGCTest
         for (int id : processed) {
             delete("c" + id);
         }
-        store.gc();
+        store.compact();
 
         return set;
     }
@@ -120,7 +131,7 @@ public class SegmentDataStoreBlobGCTest
 
     @Test
     public void gc() throws Exception {
-        HashSet<String> set = setUp();
+        HashSet<String> remaining = setUp();
 
         MarkSweepGarbageCollector gc = new MarkSweepGarbageCollector(
                 new SegmentBlobReferenceRetriever(store.getTracker()),
@@ -129,9 +140,8 @@ public class SegmentDataStoreBlobGCTest
                     "./target", 2048, true,  0);
         gc.collectGarbage();
 
-        Set<String> existing = iterate();
-        boolean empty = Sets.intersection(set, existing).isEmpty();
-        assertTrue(empty);
+        Set<String> existingAfterGC = iterate();
+        assertTrue(Sets.symmetricDifference(remaining, 
existingAfterGC).isEmpty());
     }
 
     protected Set<String> iterate() throws Exception {


Reply via email to