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();