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 2014/10/16 15:04:37 UTC
svn commit: r1632293 - in /jackrabbit/oak/trunk:
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
oak-run/src/main/groovy/org/apache/jackrabbit/oak/console...
Author: chetanm
Date: Thu Oct 16 13:04:37 2014
New Revision: 1632293
URL: http://svn.apache.org/r1632293
Log:
OAK-2201 - Make blobSize in OakDirectory configurable
Added:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java (with props)
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
jackrabbit/oak/trunk/oak-run/src/main/groovy/org/apache/jackrabbit/oak/console/commands/LuceneCommand.groovy
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Thu Oct 16 13:04:37 2014
@@ -31,6 +31,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import com.google.common.primitives.Ints;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper;
@@ -38,6 +39,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.BLOB_SIZE;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXCLUDE_PROPERTY_NAMES;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXPERIMENTAL_STORAGE;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.FULL_TEXT_ENABLED;
@@ -47,6 +49,13 @@ import static org.apache.jackrabbit.oak.
public class IndexDefinition {
private static final Logger log = LoggerFactory.getLogger(IndexDefinition.class);
+
+ /**
+ * Blob size to use by default. To avoid issues in OAK-2105 the size should not
+ * be power of 2.
+ */
+ static final int DEFAULT_BLOB_SIZE = OakDirectory.DEFAULT_BLOB_SIZE - 300;
+
private final int propertyTypes;
private final Set<String> excludes;
@@ -65,6 +74,8 @@ public class IndexDefinition {
private final String funcName;
+ private final int blobSize;
+
public IndexDefinition(NodeBuilder defn) {
this.definition = defn;
PropertyState pst = defn.getProperty(INCLUDE_PROPERTY_TYPES);
@@ -85,6 +96,7 @@ public class IndexDefinition {
this.excludes = toLowerCase(getMultiProperty(defn, EXCLUDE_PROPERTY_NAMES));
this.includes = getMultiProperty(defn, INCLUDE_PROPERTY_NAMES);
this.orderedProps = getMultiProperty(defn, ORDERED_PROP_NAMES);
+ this.blobSize = getOptionalValue(defn, BLOB_SIZE, DEFAULT_BLOB_SIZE);
this.fullTextEnabled = getOptionalValue(defn, FULL_TEXT_ENABLED, true);
//Storage is disabled for non full text indexes
@@ -165,6 +177,14 @@ public class IndexDefinition {
return funcName != null;
}
+ /**
+ * Size in bytes for the blobs created while storing the index content
+ * @return size in bytes
+ */
+ public int getBlobSize() {
+ return blobSize;
+ }
+
//~------------------------------------------< Internal >
private static boolean getOptionalValue(NodeBuilder definition, String propName, boolean defaultVal){
@@ -172,6 +192,11 @@ public class IndexDefinition {
return ps == null ? defaultVal : ps.getValue(Type.BOOLEAN);
}
+ private static int getOptionalValue(NodeBuilder definition, String propName, int defaultVal){
+ PropertyState ps = definition.getProperty(propName);
+ return ps == null ? defaultVal : Ints.checkedCast(ps.getValue(Type.LONG));
+ }
+
private static String getOptionalValue(NodeBuilder definition, String propName, String defaultVal){
PropertyState ps = definition.getProperty(propName);
return ps == null ? defaultVal : ps.getValue(Type.STRING);
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java Thu Oct 16 13:04:37 2014
@@ -37,15 +37,15 @@ import org.apache.lucene.store.FSDirecto
class IndexNode {
- static IndexNode open(String name, NodeState definition)
+ static IndexNode open(String name, NodeState defnNodeState)
throws IOException {
Directory directory = null;
-
- NodeState data = definition.getChildNode(INDEX_DATA_CHILD_NAME);
+ IndexDefinition definition = new IndexDefinition(new ReadOnlyBuilder(defnNodeState));
+ NodeState data = defnNodeState.getChildNode(INDEX_DATA_CHILD_NAME);
if (data.exists()) {
- directory = new OakDirectory(new ReadOnlyBuilder(data));
- } else if (PERSISTENCE_FILE.equalsIgnoreCase(definition.getString(PERSISTENCE_NAME))) {
- String path = definition.getString(PERSISTENCE_PATH);
+ directory = new OakDirectory(new ReadOnlyBuilder(data), definition);
+ } else if (PERSISTENCE_FILE.equalsIgnoreCase(defnNodeState.getString(PERSISTENCE_NAME))) {
+ String path = defnNodeState.getString(PERSISTENCE_PATH);
if (path != null && new File(path).exists()) {
directory = FSDirectory.open(new File(path));
}
@@ -80,10 +80,10 @@ class IndexNode {
private boolean closed = false;
- IndexNode(String name, NodeState definition, Directory directory)
+ IndexNode(String name, IndexDefinition definition, Directory directory)
throws IOException {
this.name = name;
- this.definition = new IndexDefinition(new ReadOnlyBuilder(definition));
+ this.definition = definition;
this.directory = directory;
this.reader = DirectoryReader.open(directory);
this.searcher = new IndexSearcher(reader);
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java Thu Oct 16 13:04:37 2014
@@ -80,6 +80,11 @@ public interface LuceneIndexConstants {
String ORDERED_PROP_NAMES = "orderedProps";
/**
+ * Size in bytes used for splitting the index files when storing them in NodeStore
+ */
+ String BLOB_SIZE = "blobSize";
+
+ /**
* Native function name associated with this index definition. Any query can
* use this as the function name to ensure that this index gets used for invoking
* the index
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java Thu Oct 16 13:04:37 2014
@@ -66,7 +66,7 @@ public class LuceneIndexEditorContext {
throws IOException {
String path = definition.getString(PERSISTENCE_PATH);
if (path == null) {
- return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME));
+ return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(definition));
} else {
// try {
File file = new File(path);
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java Thu Oct 16 13:04:37 2014
@@ -24,8 +24,11 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
+
+import com.google.common.primitives.Ints;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
@@ -50,12 +53,15 @@ import static org.apache.jackrabbit.oak.
*/
class OakDirectory extends Directory {
+ static final String PROP_BLOB_SIZE = "blobSize";
protected final NodeBuilder directoryBuilder;
+ private final IndexDefinition definition;
private LockFactory lockFactory;
- public OakDirectory(NodeBuilder directoryBuilder) {
+ public OakDirectory(NodeBuilder directoryBuilder, IndexDefinition definition) {
this.lockFactory = NoLockFactory.getNoLockFactory();
this.directoryBuilder = directoryBuilder;
+ this.definition = definition;
}
@Override
@@ -88,7 +94,14 @@ class OakDirectory extends Directory {
@Override
public IndexOutput createOutput(String name, IOContext context)
throws IOException {
- return new OakIndexOutput(name, directoryBuilder.child(name));
+ NodeBuilder file;
+ if (!directoryBuilder.hasChildNode(name)) {
+ file = directoryBuilder.child(name);
+ file.setProperty(PROP_BLOB_SIZE, definition.getBlobSize());
+ } else {
+ file = directoryBuilder.child(name);
+ }
+ return new OakIndexOutput(name, file);
}
@@ -137,7 +150,7 @@ class OakDirectory extends Directory {
* Size of the blob entries to which the Lucene files are split.
* Set to higher than the 4kB inline limit for the BlobStore,
*/
- private static final int BLOB_SIZE = 32 * 1024;
+ static final int DEFAULT_BLOB_SIZE = 32 * 1024;
private static class OakIndexFile {
@@ -145,6 +158,8 @@ class OakDirectory extends Directory {
private final NodeBuilder file;
+ private final int blobSize;
+
private long position = 0;
private long length;
@@ -155,13 +170,15 @@ class OakDirectory extends Directory {
private int index = -1;
- private final byte[] blob = new byte[BLOB_SIZE];
+ private final byte[] blob;
private boolean blobModified = false;
public OakIndexFile(String name, NodeBuilder file) {
this.name = name;
this.file = file;
+ this.blobSize = determineBlobSize(file);
+ this.blob = new byte[blobSize];
PropertyState property = file.getProperty(JCR_DATA);
if (property != null && property.getType() == BINARIES) {
@@ -170,16 +187,18 @@ class OakDirectory extends Directory {
this.data = newArrayList();
}
- this.length = data.size() * BLOB_SIZE;
+ this.length = data.size() * blobSize;
if (!data.isEmpty()) {
Blob last = data.get(data.size() - 1);
- this.length -= BLOB_SIZE - last.length();
+ this.length -= blobSize - last.length();
}
}
private OakIndexFile(OakIndexFile that) {
this.name = that.name;
this.file = that.file;
+ this.blobSize = that.blobSize;
+ this.blob = new byte[blobSize];
this.position = that.position;
this.length = that.length;
@@ -193,7 +212,7 @@ class OakDirectory extends Directory {
flushBlob();
checkState(!blobModified);
- int n = (int) Math.min(BLOB_SIZE, length - i * BLOB_SIZE);
+ int n = (int) Math.min(blobSize, length - i * blobSize);
InputStream stream = data.get(i).getNewStream();
try {
ByteStreams.readFully(stream, blob, 0, n);
@@ -206,7 +225,7 @@ class OakDirectory extends Directory {
private void flushBlob() throws IOException {
if (blobModified) {
- int n = (int) Math.min(BLOB_SIZE, length - index * BLOB_SIZE);
+ int n = (int) Math.min(blobSize, length - index * blobSize);
Blob b = file.createBlob(new ByteArrayInputStream(blob, 0, n));
if (index < data.size()) {
data.set(index, b);
@@ -237,12 +256,12 @@ class OakDirectory extends Directory {
throw new IOException("Invalid byte range request");
}
- int i = (int) (position / BLOB_SIZE);
- int o = (int) (position % BLOB_SIZE);
+ int i = (int) (position / blobSize);
+ int o = (int) (position % blobSize);
while (len > 0) {
loadBlob(i);
- int l = Math.min(len, BLOB_SIZE - o);
+ int l = Math.min(len, blobSize - o);
System.arraycopy(blob, o, b, offset, l);
offset += l;
@@ -256,13 +275,13 @@ class OakDirectory extends Directory {
public void writeBytes(byte[] b, int offset, int len)
throws IOException {
- int i = (int) (position / BLOB_SIZE);
- int o = (int) (position % BLOB_SIZE);
+ int i = (int) (position / blobSize);
+ int o = (int) (position % blobSize);
while (len > 0) {
- int l = Math.min(len, BLOB_SIZE - o);
+ int l = Math.min(len, blobSize - o);
if (index != i) {
- if (o > 0 || (l < BLOB_SIZE && position + l < length)) {
+ if (o > 0 || (l < blobSize && position + l < length)) {
loadBlob(i);
} else {
flushBlob();
@@ -282,6 +301,13 @@ class OakDirectory extends Directory {
}
}
+ private static int determineBlobSize(NodeBuilder file){
+ if (file.hasProperty(PROP_BLOB_SIZE)){
+ return Ints.checkedCast(file.getProperty(PROP_BLOB_SIZE).getValue(Type.LONG));
+ }
+ return DEFAULT_BLOB_SIZE;
+ }
+
public void flush() throws IOException {
flushBlob();
if (dataModified) {
Added: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java?rev=1632293&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java (added)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java Thu Oct 16 13:04:37 2014
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.plugins.index.lucene;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
+import org.junit.Test;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.apache.jackrabbit.JcrConstants.JCR_DATA;
+import static org.apache.jackrabbit.oak.api.Type.BINARIES;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory.PROP_BLOB_SIZE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class OakDirectoryTest {
+ private Random rnd = new Random();
+
+ private NodeState root = INITIAL_CONTENT;
+
+ private NodeBuilder builder = root.builder();
+
+ int fileSize = OakDirectory.DEFAULT_BLOB_SIZE + rnd.nextInt(1000);
+
+ @Test
+ public void writes_DefaultSetup() throws Exception{
+ Directory dir = createDir(builder);
+ assertWrites(dir, IndexDefinition.DEFAULT_BLOB_SIZE);
+ }
+
+ @Test
+ public void writes_CustomBlobSize() throws Exception{
+ builder.setProperty(LuceneIndexConstants.BLOB_SIZE, 300);
+ Directory dir = createDir(builder);
+ assertWrites(dir, 300);
+ }
+
+ @Test
+ public void testCompatibility() throws Exception{
+ builder.setProperty(LuceneIndexConstants.BLOB_SIZE, OakDirectory.DEFAULT_BLOB_SIZE);
+ Directory dir = createDir(builder);
+ byte[] data = assertWrites(dir, OakDirectory.DEFAULT_BLOB_SIZE);
+
+ NodeBuilder testNode = builder.child(INDEX_DATA_CHILD_NAME).child("test");
+ //Remove the size property to simulate old behaviour
+ testNode.removeProperty(PROP_BLOB_SIZE);
+
+ //Read should still work even if the size property is removed
+ IndexInput i = dir.openInput("test", IOContext.DEFAULT);
+ assertEquals(fileSize, i.length());
+
+ byte[] result = new byte[fileSize];
+ i.readBytes(result, 0, result.length);
+
+ assertTrue(Arrays.equals(data, result));
+ }
+
+ byte[] assertWrites(Directory dir, int blobSize) throws IOException {
+ byte[] data = randomBytes(fileSize);
+ IndexOutput o = dir.createOutput("test", IOContext.DEFAULT);
+ o.writeBytes(data, data.length);
+ o.close();
+
+ assertTrue(dir.fileExists("test"));
+ assertEquals(fileSize, dir.fileLength("test"));
+
+ IndexInput i = dir.openInput("test", IOContext.DEFAULT);
+ assertEquals(fileSize, i.length());
+
+ byte[] result = new byte[fileSize];
+ i.readBytes(result, 0, result.length);
+
+ assertTrue(Arrays.equals(data, result));
+
+ NodeBuilder testNode = builder.child(INDEX_DATA_CHILD_NAME).child("test");
+ assertEquals(blobSize, testNode.getProperty(PROP_BLOB_SIZE).getValue(Type.LONG).longValue());
+
+ List<Blob> blobs = newArrayList(testNode.getProperty(JCR_DATA).getValue(BINARIES));
+ assertEquals(blobSize, blobs.get(0).length());
+
+ return data;
+ }
+
+ private Directory createDir(NodeBuilder builder){
+ return new OakDirectory(builder.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(builder));
+ }
+
+ byte[] randomBytes(int size) {
+ byte[] data = new byte[size];
+ rnd.nextBytes(data);
+ return data;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-run/src/main/groovy/org/apache/jackrabbit/oak/console/commands/LuceneCommand.groovy
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/groovy/org/apache/jackrabbit/oak/console/commands/LuceneCommand.groovy?rev=1632293&r1=1632292&r2=1632293&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/groovy/org/apache/jackrabbit/oak/console/commands/LuceneCommand.groovy (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/groovy/org/apache/jackrabbit/oak/console/commands/LuceneCommand.groovy Thu Oct 16 13:04:37 2014
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.consol
import com.google.common.base.Stopwatch
import org.apache.jackrabbit.oak.commons.PathUtils
+import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition
import org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory
import org.apache.jackrabbit.oak.spi.state.NodeState
import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder
@@ -96,7 +97,7 @@ class LuceneCommand extends ComplexComma
//OakDirectory is package scope but Groovy allows us
//to use it. Good or bad but its helpful debug scripts
//can access inner classes and prod code cannot. Win win :)
- return new OakDirectory(new ReadOnlyBuilder(data));
+ return new OakDirectory(new ReadOnlyBuilder(data), new IndexDefinition(definition));
}
return null
}