You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/12/02 08:10:53 UTC

svn commit: r1772311 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java

Author: chetanm
Date: Fri Dec  2 08:10:52 2016
New Revision: 1772311

URL: http://svn.apache.org/viewvc?rev=1772311&view=rev
Log:
OAK-5211 - OakDirectory should not save dir listing if no change is done

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

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java?rev=1772311&r1=1772310&r2=1772311&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java Fri Dec  2 08:10:52 2016
@@ -89,6 +89,7 @@ public class OakDirectory extends Direct
     private LockFactory lockFactory;
     private final boolean readOnly;
     private final Set<String> fileNames = Sets.newConcurrentHashSet();
+    private final Set<String> fileNamesAtStart;
     private final boolean activeDeleteEnabled;
     private final String indexName;
     @Nullable
@@ -110,6 +111,7 @@ public class OakDirectory extends Direct
         this.definition = definition;
         this.readOnly = readOnly;
         this.fileNames.addAll(getListing());
+        this.fileNamesAtStart = ImmutableSet.copyOf(this.fileNames);
         this.activeDeleteEnabled = definition.getActiveDeleteEnabled();
         this.indexName = definition.getIndexName();
         this.blobStore =  blobStore;
@@ -215,7 +217,9 @@ public class OakDirectory extends Direct
     @Override
     public void close() throws IOException {
         if (!readOnly && definition.saveDirListing()) {
-            directoryBuilder.setProperty(createProperty(PROP_DIR_LISTING, fileNames, STRINGS));
+            if (!fileNamesAtStart.equals(fileNames)) {
+                directoryBuilder.setProperty(createProperty(PROP_DIR_LISTING, fileNames, STRINGS));
+            }
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java?rev=1772311&r1=1772310&r2=1772311&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java Fri Dec  2 08:10:52 2016
@@ -148,6 +148,24 @@ public class OakDirectoryTest {
         assertEquals(fileNames, newHashSet(dir.listAll()));
     }
 
+    @Test
+    public void skipSaveListingIfUnchanged() throws Exception{
+        builder.setProperty(LuceneIndexConstants.SAVE_DIR_LISTING, true);
+        Directory dir = createDir(builder, false);
+        Set<String> fileNames = newHashSet();
+        for (int i = 0; i < 10; i++) {
+            String fileName = "foo" + i;
+            createFile(dir, fileName);
+            fileNames.add(fileName);
+        }
+        dir.close();
+
+        dir = createDir(new ReadOnlyBuilder(builder.getNodeState()), false);
+        Set<String> files =  newHashSet(dir.listAll());
+        dir.close();
+        assertEquals(fileNames, files);
+    }
+
     byte[] assertWrites(Directory dir, int blobSize) throws IOException {
         byte[] data = randomBytes(fileSize);
         IndexOutput o = dir.createOutput("test", IOContext.DEFAULT);