Author: chetanm
Date: Wed Nov 16 08:45:03 2016
New Revision: 1769939

URL: http://svn.apache.org/viewvc?rev=1769939&view=rev
Log:
OAK-4114 - Cached lucene index gets corrupted in case of unclean shutdown and 
journal rollback in SegmentNodeStore

Add ignored test case which simulates such a rollback by deleting dir content 
from remote

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java?rev=1769939&r1=1769938&r2=1769939&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
 Wed Nov 16 08:45:03 2016
@@ -62,6 +62,7 @@ import org.apache.lucene.store.IndexInpu
 import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -1021,6 +1022,42 @@ public class IndexCopierTest {
         executorService.shutdown();
     }
 
+    @Ignore("OAK-4114")
+    @Test
+    public void directoryContentMismatch_COR() throws Exception{
+        Directory baseDir = new CloseSafeDir();
+        IndexDefinition defn = new IndexDefinition(root, 
builder.getNodeState());
+        IndexCopier copier = new RAMIndexCopier(baseDir, sameThreadExecutor(), 
getWorkDir(), true);
+
+        Directory remote = new RAMDirectory();
+        byte[] t1 = writeFile(remote, "t1");
+        byte[] t2 = writeFile(remote, "t2");
+
+        //State of remote directory should set before wrapping as later
+        //additions would not be picked up given COW assume remote directory
+        //to be read only
+        Directory local = copier.wrapForRead("/foo", defn, remote, 
INDEX_DATA_CHILD_NAME);
+
+        readAndAssert(local, "t1", t1);
+        readAndAssert(local, "t2", t2);
+
+        copier.close();
+
+        //2. Modify the same file in remote directory simulating rollback 
scenario
+        Directory remoteModified = new RAMDirectory();
+        t1 = writeFile(remoteModified, "t1");
+
+        //3. Reopen the copier
+        copier = new RAMIndexCopier(baseDir, sameThreadExecutor(), 
getWorkDir(), true);
+
+        //4. Post opening local the content should be in sync with remote
+        //So t1 should be recreated matching remote
+        //t2 should be removed
+        local = copier.wrapForRead("/foo", defn, remoteModified, 
INDEX_DATA_CHILD_NAME);
+        readAndAssert(baseDir, "t1", t1);
+        assertFalse(baseDir.fileExists("t2"));
+    }
+
     private static void doReindex(NodeBuilder builder) {
         builder.child(IndexDefinition.STATUS_NODE).remove();
         LuceneIndexEditorContext.configureUniqueId(builder);


Reply via email to