Author: mduerig
Date: Mon Nov 6 17:06:24 2017
New Revision: 1814430
URL: http://svn.apache.org/viewvc?rev=1814430&view=rev
Log:
OAK-6909: FileStore.compact does not persist compacted head to journal
Add call to flush after successful compaction. Add test ensuring compaction
persisted the compacted head state
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1814430&r1=1814429&r2=1814430&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
Mon Nov 6 17:06:24 2017
@@ -826,6 +826,7 @@ public class FileStore extends AbstractF
if (success) {
writer.flush();
+ flush();
gcListener.info("TarMK GC #{}: compaction succeeded in {}
({} ms), after {} cycles",
GC_COUNT, watch, watch.elapsed(MILLISECONDS),
cycles);
return compactionSucceeded(newGeneration,
after.getRecordId());
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1814430&r1=1814429&r2=1814430&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
Mon Nov 6 17:06:24 2017
@@ -110,6 +110,34 @@ public class CompactionAndCleanupIT {
}
@Test
+ public void compactPersistsHead() throws Exception {
+ FileStore fileStore = fileStoreBuilder(getFileStoreFolder())
+ .withGCOptions(defaultGCOptions().setRetainedGenerations(2))
+ .withMaxFileSize(1)
+ .build();
+ SegmentNodeStore nodeStore =
SegmentNodeStoreBuilders.builder(fileStore).build();
+
+ try {
+ // Create ~2MB of data
+ NodeBuilder extra = nodeStore.getRoot().builder();
+ NodeBuilder content = extra.child("content");
+ for (int i = 0; i < 10000; i++) {
+ NodeBuilder c = content.child("c" + i);
+ for (int j = 0; j < 1000; j++) {
+ c.setProperty("p" + i, "v" + i);
+ }
+ }
+ nodeStore.merge(extra, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+ fileStore.flush();
+
+ fileStore.compactFull();
+ assertEquals(fileStore.getRevisions().getHead(),
fileStore.getRevisions().getPersistedHead());
+ } finally {
+ fileStore.close();
+ }
+ }
+
+ @Test
public void compactionNoBinaryClone() throws Exception {
ScheduledExecutorService executor = newSingleThreadScheduledExecutor();
FileStore fileStore = fileStoreBuilder(getFileStoreFolder())