Author: amitj
Date: Tue Jan 17 06:07:54 2017
New Revision: 1779140

URL: http://svn.apache.org/viewvc?rev=1779140&view=rev
Log:
OAK-5461: [BlobGC] BlobIdTracker remove() should merge generations

- Merging generations in the reference file before removing deleted blob ids

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTracker.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTracker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTracker.java?rev=1779140&r1=1779139&r2=1779140&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTracker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTracker.java
 Tue Jan 17 06:07:54 2017
@@ -443,6 +443,12 @@ public class BlobIdTracker implements Cl
          * @throws IOException
          */
         protected void removeRecords(File recs) throws IOException {
+            // Create a new generation writer.
+            // Merge the generations also before removing so that any id to be 
removed and also
+            // tracked in the generations are not resurrected
+            nextGeneration();
+            merge(generations, false);
+
             refLock.lock();
             try {
                 sort(getBlobRecordsFile());

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java?rev=1779140&r1=1779139&r2=1779140&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreTrackerGCTest.java
 Tue Jan 17 06:07:54 2017
@@ -143,6 +143,13 @@ public class DataStoreTrackerGCTest {
         assertEquals(state.blobsPresent, existingAfterGC);
         // Tracked blobs should reflect deletions after gc
         assertEquals(state.blobsPresent, retrieveTracked(tracker));
+
+        // Create a snapshot
+        ScheduledFuture<?> scheduledFuture = newSingleThreadScheduledExecutor()
+            .schedule(tracker.new SnapshotJob(), 0, MILLISECONDS);
+        scheduledFuture.get();
+        // Tracked blobs should reflect deletions after gc and the deleted 
should not get resurrected
+        assertEquals(state.blobsPresent, retrieveTracked(tracker));
     }
 
     private HashSet<String> addNodeSpecialChars(DocumentNodeStore ds) throws 
Exception {
@@ -206,6 +213,13 @@ public class DataStoreTrackerGCTest {
         assertEquals(state.blobsPresent, existingAfterGC);
         // Tracked blobs should reflect deletions after gc and also the 
additions after
         assertEquals(state.blobsPresent, retrieveTracked(tracker));
+
+        // Create a snapshot
+        scheduledFuture = newSingleThreadScheduledExecutor()
+            .schedule(tracker.new SnapshotJob(), 0, MILLISECONDS);
+        scheduledFuture.get();
+        // Tracked blobs should reflect deletions after gc and the deleted 
should not get resurrected
+        assertEquals(state.blobsPresent, retrieveTracked(tracker));
     }
 
     @Test


Reply via email to