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;