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;


Reply via email to