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);