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