diagnostics for merged segments weren't being; add test coverage for that and for segment warming

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1346465 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael McCandless 2012-06-05 16:53:38 +00:00
parent 2fc08cec9e
commit 24ac5fdd13
2 changed files with 22 additions and 5 deletions

View File

@ -3288,20 +3288,21 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
checkpoint();
}
Map<String,String> details = new HashMap<String,String>();
details.put("mergeMaxNumSegments", ""+merge.maxNumSegments);
details.put("mergeFactor", Integer.toString(merge.segments.size()));
// Bind a new segment name here so even with
// ConcurrentMergePolicy we keep deterministic segment
// names.
final String mergeSegmentName = newSegmentName();
SegmentInfo si = new SegmentInfo(directory, Constants.LUCENE_MAIN_VERSION, mergeSegmentName, -1, false, codec, details, null);
SegmentInfo si = new SegmentInfo(directory, Constants.LUCENE_MAIN_VERSION, mergeSegmentName, -1, false, codec, null, null);
merge.info = new SegmentInfoPerCommit(si, 0, -1L);
// Lock order: IW -> BD
bufferedDeletesStream.prune(segmentInfos);
Map<String,String> details = new HashMap<String,String>();
details.put("mergeMaxNumSegments", ""+merge.maxNumSegments);
details.put("mergeFactor", Integer.toString(merge.segments.size()));
setDiagnostics(si, "merge", details);
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "merge seg=" + merge.info.info.name);
}

View File

@ -334,6 +334,19 @@ public abstract class ThreadedIndexingAndSearchingTestCase extends LuceneTestCas
try {
final IndexSearcher s = getCurrentSearcher();
try {
// Verify 1) IW is correctly setting
// diagnostics, and 2) segment warming for
// merged segments is actually happening:
for(AtomicReader sub : ((DirectoryReader) s.getIndexReader()).getSequentialSubReaders()) {
SegmentReader segReader = (SegmentReader) sub;
Map<String,String> diagnostics = segReader.getSegmentInfo().info.getDiagnostics();
assertNotNull(diagnostics);
String source = diagnostics.get("source");
assertNotNull(source);
if (source.equals("merge")) {
assertTrue("sub reader " + sub + " wasn't warmed", warmed.containsKey(((SegmentReader) sub).core));
}
}
if (s.getIndexReader().numDocs() > 0) {
smokeTestSearcher(s);
Fields fields = MultiFields.getFields(s.getIndexReader());
@ -405,6 +418,8 @@ public abstract class ThreadedIndexingAndSearchingTestCase extends LuceneTestCas
protected void doClose() throws Exception {
}
private final Map<SegmentCoreReaders,Boolean> warmed = new WeakHashMap<SegmentCoreReaders,Boolean>();
public void runTest(String testName) throws Exception {
failed.set(false);
@ -442,6 +457,7 @@ public abstract class ThreadedIndexingAndSearchingTestCase extends LuceneTestCas
if (VERBOSE) {
System.out.println("TEST: now warm merged reader=" + reader);
}
warmed.put(((SegmentReader) reader).core, Boolean.TRUE);
final int maxDoc = reader.maxDoc();
final Bits liveDocs = reader.getLiveDocs();
int sum = 0;