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;