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 th...@apache.org on 2019/03/01 08:49:44 UTC

svn commit: r1854565 - in /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory: CopyOnWriteDirectory.java DefaultDirectoryFactory.java

Author: thomasm
Date: Fri Mar  1 08:49:44 2019
New Revision: 1854565

URL: http://svn.apache.org/viewvc?rev=1854565&view=rev
Log:
OAK-8097 Load Lucene index files before writing to the index

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java?rev=1854565&r1=1854564&r2=1854565&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java Fri Mar  1 08:49:44 2019
@@ -428,7 +428,7 @@ public class CopyOnWriteDirectory extend
 
                  if (!validLocalCopyPresent) {
                      log.warn("COWRemoteFileReference::file ({}) differs in length. local: {}; remote: {}, init-remote-length",
-                             localFileLength, remoteFileLength, length);
+                             name, localFileLength, remoteFileLength);
                  }
             } else if (!IndexCopier.REMOTE_ONLY.contains(name)) {
                 log.warn("COWRemoteFileReference::local file ({}) doesn't exist", name);

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java?rev=1854565&r1=1854564&r2=1854565&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java Fri Mar  1 08:49:44 2019
@@ -37,6 +37,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.lucene.store.NoLockFactory.getNoLockFactory;
 
 public class DefaultDirectoryFactory implements DirectoryFactory {
+    private static final boolean READ_BEFORE_WRITE = !Boolean.getBoolean("oak.lucene.readBeforeWriteDisabled");
     private final IndexCopier indexCopier;
     private final GarbageCollectableBlobStore blobStore;
     private final BlobDeletionCallback blobDeletionCallback;
@@ -56,6 +57,13 @@ public class DefaultDirectoryFactory imp
                                  String dirName, boolean reindex) throws IOException {
         Directory directory = newIndexDirectory(definition, builder, dirName);
         if (indexCopier != null && !(SUGGEST_DATA_CHILD_NAME.equals(dirName) && definition.getUniqueId() == null)) {
+            if (READ_BEFORE_WRITE) {
+                // prefetch the index when writing to it
+                // (copy from the remote directory to the local directory)
+                // to avoid having to stream it when merging
+                String indexPath = definition.getIndexPath();
+                indexCopier.wrapForRead(indexPath, definition, directory, dirName);
+            }
             directory = indexCopier.wrapForWrite(definition, directory, reindex, dirName);
         }
         return directory;