Index: contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java =================================================================== --- contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (revision 575910) +++ contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (working copy) @@ -282,6 +282,37 @@ assertEquals(totalTokenCount1, totalTokenCount2); } + /** + * Test that " {[AddDoc(4000)]: 4} : * " works corrcetly (for LUCENE-941) + */ + public void testParallelExhausted() throws Exception { + // 1. alg definition (required in every "logic" test) + String algLines[] = { + "# ----- properties ", + "doc.maker="+Reuters20DocMaker.class.getName(), + "doc.add.log.step=3", + "doc.term.vector=false", + "doc.maker.forever=false", + "directory=RAMDirectory", + "doc.stored=false", + "doc.tokenized=false", + "debug.level=1", + "# ----- alg ", + "CreateIndex", + "{ [ AddDoc]: 4} : * ", + "CloseIndex", + }; + + // 2. execute the algorithm (required in every "logic" test) + Benchmark benchmark = execBenchmark(algLines); + + // 3. test number of docs in the index + IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory()); + int ndocsExpected = 20; // Reuters20DocMaker exhausts after 20 docs. + assertEquals("wrong number of docs in the index!", ndocsExpected, ir.numDocs()); + ir.close(); + } + // create the benchmark and execute it. public static Benchmark execBenchmark(String[] algLines) throws Exception { String algText = algLinesToText(algLines); Index: contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java =================================================================== --- contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java (revision 575910) +++ contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/TaskSequence.java (working copy) @@ -35,7 +35,8 @@ private boolean letChildReport = true; private int rate = 0; private boolean perMin = false; // rate, if set, is, by default, be sec. - private String seqName; + private String seqName; + private boolean exhausted = false; public TaskSequence (PerfRunData runData, String name, TaskSequence parent, boolean parallel) { super(runData); @@ -110,6 +111,7 @@ for(int l=0;l