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 2017/05/19 11:53:07 UTC
svn commit: r1795605 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/
test/java/org/apache/jackrabbit/oak/plugins/index/lucen...
Author: chetanm
Date: Fri May 19 11:53:07 2017
New Revision: 1795605
URL: http://svn.apache.org/viewvc?rev=1795605&view=rev
Log:
OAK-6243 - Refactor directory construction logic via DirectoryFactory
Fold in the directory construction method from IndexWriterUtils
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/DefaultDirectoryFactory.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectoryTest.java
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=1795605&r1=1795604&r2=1795605&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 May 19 11:53:07 2017
@@ -19,22 +19,28 @@
package org.apache.jackrabbit.oak.plugins.index.lucene.directory;
+import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.plugins.index.lucene.IndexCopier;
import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition;
-import org.apache.jackrabbit.oak.plugins.index.lucene.writer.IndexWriterUtils;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory;
import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+
+import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.PERSISTENCE_PATH;
+import static org.apache.lucene.store.NoLockFactory.getNoLockFactory;
public class DefaultDirectoryFactory implements DirectoryFactory {
private final IndexCopier indexCopier;
private final GarbageCollectableBlobStore blobStore;
- public DefaultDirectoryFactory(@Nullable IndexCopier indexCopier, @Nullable GarbageCollectableBlobStore blobStore) {
+ public DefaultDirectoryFactory(@Nullable IndexCopier indexCopier, @Nullable GarbageCollectableBlobStore blobStore) {
this.indexCopier = indexCopier;
this.blobStore = blobStore;
}
@@ -42,8 +48,7 @@ public class DefaultDirectoryFactory imp
@Override
public Directory newInstance(IndexDefinition definition, NodeBuilder builder,
String dirName, boolean reindex) throws IOException {
- Directory directory = IndexWriterUtils.newIndexDirectory(definition, builder, dirName,
- indexCopier != null, blobStore);
+ Directory directory = newIndexDirectory(definition, builder, dirName);
if (indexCopier != null) {
directory = indexCopier.wrapForWrite(definition, directory, reindex, dirName);
}
@@ -54,4 +59,32 @@ public class DefaultDirectoryFactory imp
public boolean remoteDirectory() {
return indexCopier == null;
}
+
+ private Directory newIndexDirectory(IndexDefinition indexDefinition,
+ NodeBuilder definition, String dirName)
+ throws IOException {
+ String path = null;
+ if (LuceneIndexConstants.PERSISTENCE_FILE.equalsIgnoreCase(
+ definition.getString(LuceneIndexConstants.PERSISTENCE_NAME))) {
+ path = definition.getString(PERSISTENCE_PATH);
+ }
+ if (path == null) {
+ if (!remoteDirectory()) {
+ return new BufferedOakDirectory(definition, dirName, indexDefinition, blobStore);
+ } else {
+ return new OakDirectory(definition, dirName, indexDefinition, false, blobStore);
+ }
+ } else {
+ // try {
+ File file = new File(path);
+ file.mkdirs();
+ // TODO: no locking used
+ // --> using the FS backend for the index is in any case
+ // troublesome in clustering scenarios and for backup
+ // etc. so instead of fixing these issues we'd better
+ // work on making the in-content index work without
+ // problems (or look at the Solr indexer as alternative)
+ return FSDirectory.open(file, getNoLockFactory());
+ }
+ }
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java?rev=1795605&r1=1795604&r2=1795605&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java Fri May 19 11:53:07 2017
@@ -19,32 +19,21 @@
package org.apache.jackrabbit.oak.plugins.index.lucene.writer;
-import java.io.File;
-import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
-import javax.annotation.Nullable;
-import org.apache.jackrabbit.oak.plugins.index.lucene.directory.BufferedOakDirectory;
import org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames;
import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition;
import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
-import org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory;
import org.apache.jackrabbit.oak.plugins.index.lucene.util.SuggestHelper;
-import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
import org.apache.lucene.analysis.shingle.ShingleAnalyzerWrapper;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.SerialMergeScheduler;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.FSDirectory;
-import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.PERSISTENCE_PATH;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION;
-import static org.apache.lucene.store.NoLockFactory.getNoLockFactory;
public class IndexWriterUtils {
@@ -73,39 +62,4 @@ public class IndexWriterUtils {
thread.setContextClassLoader(loader);
}
}
-
- public static Directory newIndexDirectory(IndexDefinition indexDefinition,
- NodeBuilder definition, String dirName, boolean buffered,
- @Nullable GarbageCollectableBlobStore blobStore)
- throws IOException {
- String path = null;
- if (LuceneIndexConstants.PERSISTENCE_FILE.equalsIgnoreCase(
- definition.getString(LuceneIndexConstants.PERSISTENCE_NAME))) {
- path = definition.getString(PERSISTENCE_PATH);
- }
- if (path == null) {
- if (buffered) {
- return new BufferedOakDirectory(definition, dirName, indexDefinition, blobStore);
- } else {
- return new OakDirectory(definition, dirName, indexDefinition, false, blobStore);
- }
- } else {
- // try {
- File file = new File(path);
- file.mkdirs();
- // TODO: close() is never called
- // TODO: no locking used
- // --> using the FS backend for the index is in any case
- // troublesome in clustering scenarios and for backup
- // etc. so instead of fixing these issues we'd better
- // work on making the in-content index work without
- // problems (or look at the Solr indexer as alternative)
- return FSDirectory.open(file, getNoLockFactory());
- // } catch (IOException e) {
- // throw new CommitFailedException("Lucene", 1,
- // "Failed to open the index in " + path, e);
- // }
- }
- }
-
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java?rev=1795605&r1=1795604&r2=1795605&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java Fri May 19 11:53:07 2017
@@ -52,7 +52,6 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition;
import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition;
import static org.apache.jackrabbit.oak.plugins.index.lucene.writer.IndexWriterUtils.getIndexWriterConfig;
-import static org.apache.jackrabbit.oak.plugins.index.lucene.writer.IndexWriterUtils.newIndexDirectory;
import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
import static org.apache.jackrabbit.oak.InitialContent.INITIAL_CONTENT;
@@ -75,6 +74,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DefaultDirectoryFactory;
import org.apache.jackrabbit.oak.plugins.index.lucene.directory.LocalIndexDir;
import org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProvider;
import org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProviderFactory;
@@ -116,6 +116,7 @@ import org.apache.lucene.index.IndexWrit
import org.apache.lucene.queries.CustomScoreProvider;
import org.apache.lucene.queries.CustomScoreQuery;
import org.apache.lucene.search.Query;
+import org.apache.lucene.store.Directory;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
@@ -371,13 +372,15 @@ public class LuceneIndexTest {
}
private void purgeDeletedDocs(NodeBuilder idx, IndexDefinition definition) throws IOException {
- IndexWriter writer = new IndexWriter(newIndexDirectory(definition, idx, LuceneIndexConstants.INDEX_DATA_CHILD_NAME, false, null), getIndexWriterConfig(definition, true));
+ Directory dir = new DefaultDirectoryFactory(null, null).newInstance(definition, idx, LuceneIndexConstants.INDEX_DATA_CHILD_NAME, false);
+ IndexWriter writer = new IndexWriter(dir, getIndexWriterConfig(definition, true));
writer.forceMergeDeletes();
writer.close();
}
public int getDeletedDocCount(NodeBuilder idx, IndexDefinition definition) throws IOException {
- IndexReader reader = DirectoryReader.open(newIndexDirectory(definition, idx, LuceneIndexConstants.INDEX_DATA_CHILD_NAME, false, null));
+ Directory dir = new DefaultDirectoryFactory(null, null).newInstance(definition, idx, LuceneIndexConstants.INDEX_DATA_CHILD_NAME, false);
+ IndexReader reader = DirectoryReader.open(dir);
int numDeletes = reader.numDeletedDocs();
reader.close();
return numDeletes;
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectoryTest.java?rev=1795605&r1=1795604&r2=1795605&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectoryTest.java Fri May 19 11:53:07 2017
@@ -90,9 +90,7 @@ public class CopyOnWriteDirectoryTest {
public void copyOnWrite() throws Exception {
IndexDefinition def = new IndexDefinition(ns.getRoot(), ns.getRoot(), "/foo");
NodeBuilder builder = ns.getRoot().builder();
- Directory remote = IndexWriterUtils.newIndexDirectory(
- def, builder.child("foo"), INDEX_DATA_CHILD_NAME, true, null);
- Directory dir = copier.wrapForWrite(def, remote, false, INDEX_DATA_CHILD_NAME);
+ Directory dir = new DefaultDirectoryFactory(copier, null).newInstance(def, builder.child("foo"), INDEX_DATA_CHILD_NAME, false);
addFiles(dir);
writeTree(builder);
dir.close();