This is an automated email from the ASF dual-hosted git repository. mkataria pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push: new c5eb75abce OAK-9771: IndexWriter config should be customisable from oak (#572) c5eb75abce is described below commit c5eb75abce6cac9fd9e9244d0fd34b1345a285e8 Author: Mohit Kataria <mkata...@apache.org> AuthorDate: Fri May 20 18:29:57 2022 +0530 OAK-9771: IndexWriter config should be customisable from oak (#572) * OAK-9771: IndexWriter config should be customisable from oak --- oak-lucene/pom.xml | 6 +++ .../index/lucene/writer/IndexWriterUtils.java | 2 + .../lucene/writer/LuceneIndexWriterConfig.java | 24 ++++++++++ .../index/lucene/LuceneIndexConfigTest.java | 54 ++++++++++++++++++++++ 4 files changed, 86 insertions(+) diff --git a/oak-lucene/pom.xml b/oak-lucene/pom.xml index aa3093fadb..74fed24108 100644 --- a/oak-lucene/pom.xml +++ b/oak-lucene/pom.xml @@ -444,6 +444,12 @@ <artifactId>tomcat-jdbc</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.github.stefanbirkner</groupId> + <artifactId>system-rules</artifactId> + <version>1.19.0</version> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java index dce828af25..e4058e7d0b 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java @@ -75,6 +75,8 @@ public class IndexWriterUtils { config.setCodec(definition.getCodec()); } config.setRAMBufferSizeMB(writerConfig.getRamBufferSizeMB()); + config.setMaxBufferedDeleteTerms(writerConfig.getMaxBufferedDeleteTerms()); + config.setRAMPerThreadHardLimitMB(writerConfig.getRamPerThreadHardLimitMB()); return config; } finally { thread.setContextClassLoader(loader); diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java index e45efcf773..e474e6624c 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java @@ -22,7 +22,23 @@ package org.apache.jackrabbit.oak.plugins.index.lucene.writer; import org.apache.lucene.index.IndexWriterConfig; public class LuceneIndexWriterConfig { + /** + * This property will be used to set Lucene's IndexWriter.maxBufferedDeleteTerms + * IndexWriter.maxBufferedDeleteTerms is used to flush buffered data to lucene index. + */ + public final static String MAX_BUFFERED_DELETE_TERMS_KEY = "oak.index.lucene.maxBufferedDeleteTerms"; + + /** + * This property will be used to set Lucene's IndexWriter.perThreadHardLimitMB. + * IndexWriter.perThreadHardLimitMB is used to flush buffered data to lucene index. + */ + public final static String RAM_PER_THREAD_HARD_LIMIT_MB_KEY = "oak.index.lucene.ramPerThreadHardLimitMB"; + private final double ramBufferSizeMB; + private final int maxBufferedDeleteTerms = Integer.getInteger(MAX_BUFFERED_DELETE_TERMS_KEY, + IndexWriterConfig.DISABLE_AUTO_FLUSH); + private final int ramPerThreadHardLimitMB = Integer.getInteger(RAM_PER_THREAD_HARD_LIMIT_MB_KEY, + IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB); public LuceneIndexWriterConfig() { this(IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB); @@ -35,4 +51,12 @@ public class LuceneIndexWriterConfig { public double getRamBufferSizeMB() { return ramBufferSizeMB; } + + public int getMaxBufferedDeleteTerms() { + return maxBufferedDeleteTerms; + } + + public int getRamPerThreadHardLimitMB() { + return ramPerThreadHardLimitMB; + } } diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConfigTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConfigTest.java new file mode 100644 index 0000000000..6660b1dc79 --- /dev/null +++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConfigTest.java @@ -0,0 +1,54 @@ +/* + * 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 org.apache.jackrabbit.oak.spi.state.NodeBuilder; +import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.apache.lucene.index.IndexWriterConfig; +import org.junit.Rule; +import org.junit.Test; +import org.junit.contrib.java.lang.system.ProvideSystemProperty; +import org.junit.contrib.java.lang.system.RestoreSystemProperties; + +import static org.apache.jackrabbit.oak.InitialContentHelper.INITIAL_CONTENT; +import static org.apache.jackrabbit.oak.plugins.index.lucene.writer.IndexWriterUtils.getIndexWriterConfig; +import static org.junit.Assert.assertEquals; + +public class LuceneIndexConfigTest { + + private NodeState root; + + @Rule + public final ProvideSystemProperty updateSystemProperties + = new ProvideSystemProperty("oak.index.lucene.maxBufferedDeleteTerms", "1000") + .and("oak.index.lucene.ramPerThreadHardLimitMB", "100"); + + @Rule + public final RestoreSystemProperties restoreSystemProperties + = new RestoreSystemProperties(); + + @Test + public void testIndexWriterConfig() { + root = INITIAL_CONTENT; + NodeBuilder idx = root.builder(); + LuceneIndexDefinition definition = new LuceneIndexDefinition(root, idx.getNodeState(), "/foo"); + IndexWriterConfig config = getIndexWriterConfig(definition, true); + assertEquals(config.getRAMBufferSizeMB(), 16.0, .01); + assertEquals(100, config.getRAMPerThreadHardLimitMB()); + assertEquals(1000, config.getMaxBufferedDeleteTerms()); + } +}