Index: contrib/benchmark/CHANGES.txt =================================================================== --- contrib/benchmark/CHANGES.txt (revision 931438) +++ contrib/benchmark/CHANGES.txt (working copy) @@ -2,6 +2,10 @@ The Benchmark contrib package contains code for benchmarking Lucene in a variety of ways. +4/07/2010 + LUCENE-2377: Enable the use of NoMergePolicy and NoMergeScheduler by + CreateIndexTask. (Shai Erera) + 3/28/2010 LUCENE-2353: Fixed bug in Config where Windows absolute path property values were incorrectly handled (Shai Erera) Index: contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java =================================================================== --- contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java (revision 931438) +++ contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java (working copy) @@ -25,6 +25,8 @@ import org.apache.lucene.index.MergeScheduler; import org.apache.lucene.index.ConcurrentMergeScheduler; import org.apache.lucene.index.MergePolicy; +import org.apache.lucene.index.NoMergePolicy; +import org.apache.lucene.index.NoMergeScheduler; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.util.Version; @@ -70,34 +72,42 @@ final String mergeScheduler = config.get("merge.scheduler", "org.apache.lucene.index.ConcurrentMergeScheduler"); - try { - writer.setMergeScheduler(Class.forName(mergeScheduler).asSubclass(MergeScheduler.class).newInstance()); - } catch (Exception e) { - throw new RuntimeException("unable to instantiate class '" + mergeScheduler + "' as merge scheduler", e); - } - - if (mergeScheduler.equals("org.apache.lucene.index.ConcurrentMergeScheduler")) { - ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler) writer.getMergeScheduler(); - int v = config.get("concurrent.merge.scheduler.max.thread.count", -1); - if (v != -1) { - cms.setMaxThreadCount(v); + if (mergeScheduler.equals(NoMergeScheduler.class.getName())) { + writer.setMergeScheduler(NoMergeScheduler.INSTANCE); + } else { + try { + writer.setMergeScheduler(Class.forName(mergeScheduler).asSubclass(MergeScheduler.class).newInstance()); + } catch (Exception e) { + throw new RuntimeException("unable to instantiate class '" + mergeScheduler + "' as merge scheduler", e); } - v = config.get("concurrent.merge.scheduler.max.merge.count", -1); - if (v != -1) { - cms.setMaxMergeCount(v); + + if (mergeScheduler.equals("org.apache.lucene.index.ConcurrentMergeScheduler")) { + ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler) writer.getMergeScheduler(); + int v = config.get("concurrent.merge.scheduler.max.thread.count", -1); + if (v != -1) { + cms.setMaxThreadCount(v); + } + v = config.get("concurrent.merge.scheduler.max.merge.count", -1); + if (v != -1) { + cms.setMaxMergeCount(v); + } } } final String mergePolicy = config.get("merge.policy", "org.apache.lucene.index.LogByteSizeMergePolicy"); - try { - writer.setMergePolicy(Class.forName(mergePolicy).asSubclass(MergePolicy.class).newInstance()); - } catch (Exception e) { - throw new RuntimeException("unable to instantiate class '" + mergePolicy + "' as merge policy", e); + boolean isCompound = config.get("compound", true); + if (mergePolicy.equals(NoMergePolicy.class.getName())) { + writer.setMergePolicy(isCompound ? NoMergePolicy.COMPOUND_FILES : NoMergePolicy.NO_COMPOUND_FILES); + } else { + try { + writer.setMergePolicy(Class.forName(mergePolicy).asSubclass(MergePolicy.class).newInstance()); + } catch (Exception e) { + throw new RuntimeException("unable to instantiate class '" + mergePolicy + "' as merge policy", e); + } + writer.setUseCompoundFile(isCompound); + writer.setMergeFactor(config.get("merge.factor",OpenIndexTask.DEFAULT_MERGE_PFACTOR)); } - - writer.setUseCompoundFile(config.get("compound",true)); - writer.setMergeFactor(config.get("merge.factor",OpenIndexTask.DEFAULT_MERGE_PFACTOR)); writer.setMaxFieldLength(config.get("max.field.length",OpenIndexTask.DEFAULT_MAX_FIELD_LENGTH)); final double ramBuffer = config.get("ram.flush.mb",OpenIndexTask.DEFAULT_RAM_FLUSH_MB); Index: contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java =================================================================== --- contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java (revision 931438) +++ contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java (working copy) @@ -25,6 +25,8 @@ import org.apache.lucene.benchmark.BenchmarkTestCase; import org.apache.lucene.benchmark.byTask.PerfRunData; import org.apache.lucene.benchmark.byTask.utils.Config; +import org.apache.lucene.index.NoMergePolicy; +import org.apache.lucene.index.NoMergeScheduler; /** Tests the functionality of {@link CreateIndexTask}. */ public class CreateIndexTaskTest extends BenchmarkTestCase { @@ -33,7 +35,9 @@ Properties props = new Properties(); props.setProperty("print.props", "false"); // don't print anything props.setProperty("directory", "RAMDirectory"); - props.setProperty("writer.info.stream", infoStreamValue); + if (infoStreamValue != null) { + props.setProperty("writer.info.stream", infoStreamValue); + } Config config = new Config(props); return new PerfRunData(config); } @@ -77,4 +81,18 @@ assertTrue(outFile.length() > 0); } + public void testNoMergePolicy() throws Exception { + PerfRunData runData = createPerfRunData(null); + runData.getConfig().set("merge.policy", NoMergePolicy.class.getName()); + new CreateIndexTask(runData).doLogic(); + new CloseIndexTask(runData).doLogic(); + } + + public void testNoMergeScheduler() throws Exception { + PerfRunData runData = createPerfRunData(null); + runData.getConfig().set("merge.scheduler", NoMergeScheduler.class.getName()); + new CreateIndexTask(runData).doLogic(); + new CloseIndexTask(runData).doLogic(); + } + }