The base calculation in ReaderUtil.Gather is so complicated, add some assert to verify that it is still correct. The code lead to another bug I fixed in CompositeReaderContext long time ago (at least it explains why Simon did it wrong...)

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1351129 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Uwe Schindler 2012-06-17 17:22:28 +00:00
parent 7f9d6b89aa
commit bcaa52c562
2 changed files with 7 additions and 5 deletions

View File

@ -111,6 +111,7 @@ public final class CompositeReaderContext extends IndexReaderContext {
children[i] = build(newParent, sequentialSubReaders[i], i, newDocBase);
newDocBase += sequentialSubReaders[i].maxDoc();
}
assert newDocBase == cr.maxDoc();
return newParent;
}
}

View File

@ -101,20 +101,21 @@ public final class ReaderUtil {
return run(docBase, topReader);
}
private int run(int base, IndexReader reader) throws IOException {
private int run(final int base, final IndexReader reader) throws IOException {
if (reader instanceof AtomicReader) {
// atomic reader
add(base, (AtomicReader) reader);
base += reader.maxDoc();
return base + reader.maxDoc();
} else {
assert reader instanceof CompositeReader : "must be a composite reader";
int newBase = base;
IndexReader[] subReaders = ((CompositeReader) reader).getSequentialSubReaders();
for (int i = 0; i < subReaders.length; i++) {
base = run(base, subReaders[i]);
newBase = run(newBase, subReaders[i]);
}
assert newBase == base + reader.maxDoc();
return newBase;
}
return base;
}
protected abstract void add(int base, AtomicReader r) throws IOException;