LUCENE-5969: improve checks for livedocs

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5969@1627593 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Muir 2014-09-25 19:12:40 +00:00
parent 47cb7232c7
commit bf5fd714f6
2 changed files with 19 additions and 10 deletions

View File

@ -102,8 +102,12 @@ public class Lucene40LiveDocsFormat extends LiveDocsFormat {
public void writeLiveDocs(MutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) throws IOException {
String filename = IndexFileNames.fileNameFromGeneration(info.info.name, DELETES_EXTENSION, info.getNextDelGen());
final BitVector liveDocs = (BitVector) bits;
assert liveDocs.count() == info.info.getDocCount() - info.getDelCount() - newDelCount;
assert liveDocs.length() == info.info.getDocCount();
if (liveDocs.length() != info.info.getDocCount()) {
throw new CorruptIndexException("liveDocs.length()=" + liveDocs.length() + "info.docCount=" + info.info.getDocCount(), filename);
}
if (liveDocs.count() != info.info.getDocCount() - info.getDelCount() - newDelCount) {
throw new CorruptIndexException("liveDocs.count()=" + liveDocs.count() + " info.docCount=" + info.info.getDocCount() + " info.getDelCount()=" + info.getDelCount() + " newDelCount=" + newDelCount, filename);
}
liveDocs.write(dir, filename, context);
}

View File

@ -55,14 +55,7 @@ public class AssertingLiveDocsFormat extends LiveDocsFormat {
public Bits readLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) throws IOException {
Bits raw = in.readLiveDocs(dir, info, context);
assert raw != null;
assert raw.length() == info.info.getDocCount();
int deletedCount = 0;
for (int i = 0; i < raw.length(); i++) {
if (!raw.get(i)) {
deletedCount++;
}
}
assert deletedCount == info.getDelCount();
check(raw, info.info.getDocCount(), info.getDelCount());
return new AssertingBits(raw);
}
@ -70,8 +63,20 @@ public class AssertingLiveDocsFormat extends LiveDocsFormat {
public void writeLiveDocs(MutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) throws IOException {
assert bits instanceof AssertingMutableBits;
MutableBits raw = (MutableBits) ((AssertingMutableBits)bits).in;
check(raw, info.info.getDocCount(), info.getDelCount() + newDelCount);
in.writeLiveDocs(raw, dir, info, newDelCount, context);
}
private void check(Bits bits, int expectedLength, int expectedDeleteCount) {
assert bits.length() == expectedLength;
int deletedCount = 0;
for (int i = 0; i < bits.length(); i++) {
if (!bits.get(i)) {
deletedCount++;
}
}
assert deletedCount == expectedDeleteCount;
}
@Override
public void files(SegmentCommitInfo info, Collection<String> files) throws IOException {