LUCENE-3598: always call InfoStream.isEnabled before InfoStream.message

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1213085 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael McCandless 2011-12-11 21:55:45 +00:00
parent 118005d308
commit 9a8bde3c8b
13 changed files with 224 additions and 106 deletions

View File

@ -18,7 +18,6 @@ package org.apache.lucene.index;
*/
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.ThreadInterruptedException;
import org.apache.lucene.util.CollectionUtil;
@ -336,8 +335,9 @@ public class ConcurrentMergeScheduler extends MergeScheduler {
// merges to do first (the easiest ones?), etc.
MergePolicy.OneMerge merge = writer.getNextMerge();
if (merge == null) {
if (verbose())
if (verbose()) {
message(" no more merges pending; now return");
}
return;
}
@ -348,7 +348,9 @@ public class ConcurrentMergeScheduler extends MergeScheduler {
boolean success = false;
try {
synchronized(this) {
message(" consider merge " + merge.segString(dir));
if (verbose()) {
message(" consider merge " + merge.segString(dir));
}
// OK to spawn a new merge thread to handle this
// merge:
@ -440,8 +442,9 @@ public class ConcurrentMergeScheduler extends MergeScheduler {
try {
if (verbose())
if (verbose()) {
message(" merge thread: start");
}
while(true) {
setRunningMerge(merge);
@ -453,15 +456,17 @@ public class ConcurrentMergeScheduler extends MergeScheduler {
if (merge != null) {
tWriter.mergeInit(merge);
updateMergeThreads();
if (verbose())
if (verbose()) {
message(" merge thread: do another merge " + merge.segString(dir));
}
} else {
break;
}
}
if (verbose())
if (verbose()) {
message(" merge thread: done");
}
} catch (Throwable exc) {

View File

@ -277,8 +277,8 @@ final class DocFieldProcessor extends DocConsumer {
perField.consumer.processFields(perField.fields, perField.fieldCount);
}
if (docState.maxTermPrefix != null && docState.infoStream != null) {
docState.infoStream.println("WARNING: document contains at least one immense term (whose UTF8 encoding is longer than the max length " + DocumentsWriterPerThread.MAX_TERM_LENGTH_UTF8 + "), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '" + docState.maxTermPrefix + "...'");
if (docState.maxTermPrefix != null && docState.infoStream.isEnabled("IW")) {
docState.infoStream.message("IW", "WARNING: document contains at least one immense term (whose UTF8 encoding is longer than the max length " + DocumentsWriterPerThread.MAX_TERM_LENGTH_UTF8 + "), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '" + docState.maxTermPrefix + "...'");
docState.maxTermPrefix = null;
}
}

View File

@ -18,7 +18,6 @@ package org.apache.lucene.index;
*/
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
@ -216,7 +215,9 @@ final class DocumentsWriter {
}
try {
infoStream.message("DW", "abort");
if (infoStream.isEnabled("DW")) {
infoStream.message("DW", "abort");
}
final Iterator<ThreadState> threadsIterator = perThreadPool.getActivePerThreadsIterator();
while (threadsIterator.hasNext()) {
@ -298,8 +299,10 @@ final class DocumentsWriter {
maybeMerge |= doFlush(flushingDWPT);
}
if (infoStream.isEnabled("DW") && flushControl.anyStalledThreads()) {
infoStream.message("DW", "WARNING DocumentsWriter has stalled threads; waiting");
if (infoStream.isEnabled("DW")) {
if (flushControl.anyStalledThreads()) {
infoStream.message("DW", "WARNING DocumentsWriter has stalled threads; waiting");
}
}
flushControl.waitIfStalled(); // block if stalled

View File

@ -21,7 +21,6 @@ import static org.apache.lucene.util.ByteBlockPool.BYTE_BLOCK_MASK;
import static org.apache.lucene.util.ByteBlockPool.BYTE_BLOCK_SIZE;
import java.io.IOException;
import java.io.PrintStream;
import java.text.NumberFormat;
import org.apache.lucene.analysis.Analyzer;
@ -88,14 +87,15 @@ public class DocumentsWriterPerThread {
static class DocState {
final DocumentsWriterPerThread docWriter;
Analyzer analyzer;
PrintStream infoStream;
InfoStream infoStream;
SimilarityProvider similarityProvider;
int docID;
Iterable<? extends IndexableField> doc;
String maxTermPrefix;
DocState(DocumentsWriterPerThread docWriter) {
DocState(DocumentsWriterPerThread docWriter, InfoStream infoStream) {
this.docWriter = docWriter;
this.infoStream = infoStream;
}
// Only called by asserts
@ -131,7 +131,9 @@ public class DocumentsWriterPerThread {
void abort() throws IOException {
hasAborted = aborting = true;
try {
infoStream.message("DWPT", "now abort");
if (infoStream.isEnabled("DWPT")) {
infoStream.message("DWPT", "now abort");
}
try {
consumer.abort();
} catch (Throwable t) {
@ -144,7 +146,9 @@ public class DocumentsWriterPerThread {
} finally {
aborting = false;
infoStream.message("DWPT", "done abort");
if (infoStream.isEnabled("DWPT")) {
infoStream.message("DWPT", "done abort");
}
}
}
private final static boolean INFO_VERBOSE = false;
@ -181,7 +185,7 @@ public class DocumentsWriterPerThread {
this.writer = parent.indexWriter;
this.infoStream = parent.infoStream;
this.codec = parent.codec;
this.docState = new DocState(this);
this.docState = new DocState(this, infoStream);
this.docState.similarityProvider = parent.indexWriter.getConfig()
.getSimilarityProvider();
bytesUsed = Counter.newCounter();

View File

@ -20,7 +20,6 @@ import java.util.Iterator;
import org.apache.lucene.index.DocumentsWriterPerThreadPool.ThreadState;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.SetOnce;
/**
@ -129,7 +128,9 @@ public abstract class FlushPolicy {
}
private boolean assertMessage(String s) {
writer.get().infoStream.message("FP", s);
if (writer.get().infoStream.isEnabled("FP")) {
writer.get().infoStream.message("FP", s);
}
return true;
}

View File

@ -501,8 +501,10 @@ final class IndexFileDeleter {
void incRef(String fileName) throws IOException {
assert locked();
RefCount rc = getRefCount(fileName);
if (infoStream.isEnabled("IFD") && VERBOSE_REF_COUNTS) {
infoStream.message("IFD", " IncRef \"" + fileName + "\": pre-incr count is " + rc.count);
if (infoStream.isEnabled("IFD")) {
if (VERBOSE_REF_COUNTS) {
infoStream.message("IFD", " IncRef \"" + fileName + "\": pre-incr count is " + rc.count);
}
}
rc.IncRef();
}
@ -517,8 +519,10 @@ final class IndexFileDeleter {
void decRef(String fileName) throws IOException {
assert locked();
RefCount rc = getRefCount(fileName);
if (infoStream.isEnabled("IFD") && VERBOSE_REF_COUNTS) {
infoStream.message("IFD", " DecRef \"" + fileName + "\": pre-decr count is " + rc.count);
if (infoStream.isEnabled("IFD")) {
if (VERBOSE_REF_COUNTS) {
infoStream.message("IFD", " DecRef \"" + fileName + "\": pre-decr count is " + rc.count);
}
}
if (0 == rc.DecRef()) {
// This file is no longer referenced by any past

View File

@ -332,7 +332,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
final long tStart = System.currentTimeMillis();
infoStream.message("IW", "flush at getReader");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "flush at getReader");
}
// Do this up front before flushing so that the readers
// obtained during this flush are pooled, the first time
// this method is called:
@ -372,8 +374,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// never reached but javac disagrees:
return null;
} finally {
if (!success && infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during NRT reader");
if (!success) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during NRT reader");
}
}
// Done: finish the full flush!
docWriter.finishFullFlush(success);
@ -873,8 +877,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
segmentInfos.replace(oldInfos);
changeCount++;
segmentInfos.changed();
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "init: loaded commit \"" + commit.getSegmentsFileName() + "\"");
}
}
}
@ -910,7 +915,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
} finally {
if (!success) {
infoStream.message("IW", "init: hit exception on init; releasing write lock");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "init: hit exception on init; releasing write lock");
}
try {
writeLock.release();
} catch (Throwable t) {
@ -1078,14 +1085,17 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
mergeScheduler.close();
infoStream.message("IW", "now call final commit()");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "now call final commit()");
}
if (!hitOOM) {
commitInternal(null);
}
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "at close: " + segString());
}
// used by assert below
final DocumentsWriter oldWriter = docWriter;
synchronized(this) {
@ -1109,7 +1119,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
closing = false;
notifyAll();
if (!closed) {
infoStream.message("IW", "hit exception while closing");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception while closing");
}
}
}
}
@ -1338,8 +1350,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
anySegmentFlushed = docWriter.updateDocuments(docs, analyzer, delTerm);
success = true;
} finally {
if (!success && infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception updating document");
if (!success) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception updating document");
}
}
}
if (anySegmentFlushed) {
@ -1485,8 +1499,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
anySegmentFlushed = docWriter.updateDocument(doc, analyzer, term);
success = true;
} finally {
if (!success && infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception updating document");
if (!success) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception updating document");
}
}
}
@ -1744,8 +1760,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
flush(true, true);
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "forceMergeDeletes: index now " + segString());
}
MergePolicy.MergeSpecification spec;
@ -1938,7 +1955,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
boolean success = false;
infoStream.message("IW", "rollback");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "rollback");
}
try {
synchronized(this) {
@ -1946,7 +1965,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
stopMerges = true;
}
infoStream.message("IW", "rollback: done finish merges");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "rollback: done finish merges");
}
// Must pre-close these two, in case they increment
// changeCount so that we can then set it to false
@ -1998,7 +2019,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
if (!success) {
closing = false;
notifyAll();
infoStream.message("IW", "hit exception during rollback");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during rollback");
}
}
}
}
@ -2050,8 +2073,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
} catch (OutOfMemoryError oom) {
handleOOM(oom, "deleteAll");
} finally {
if (!success && infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during deleteAll");
if (!success) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during deleteAll");
}
}
}
}
@ -2063,16 +2088,18 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// Abort all pending & running merges:
for (final MergePolicy.OneMerge merge : pendingMerges) {
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "now abort pending merge " + merge.segString(directory));
}
merge.abort();
mergeFinish(merge);
}
pendingMerges.clear();
for (final MergePolicy.OneMerge merge : runningMerges) {
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "now abort running merge " + merge.segString(directory));
}
merge.abort();
}
@ -2082,8 +2109,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// because the merge threads periodically check if
// they are aborted.
while(runningMerges.size() > 0) {
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "now wait for " + runningMerges.size() + " running merge to abort");
}
doWait();
}
@ -2092,7 +2120,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
assert 0 == mergingSegments.size();
infoStream.message("IW", "all running merges have aborted");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "all running merges have aborted");
}
} else {
// waitForMerges() will ensure any running addIndexes finishes.
@ -2112,7 +2142,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
*/
public synchronized void waitForMerges() {
ensureOpen(false);
infoStream.message("IW", "waitForMerges");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "waitForMerges");
}
while(pendingMerges.size() > 0 || runningMerges.size() > 0) {
doWait();
}
@ -2120,7 +2152,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// sanity check
assert 0 == mergingSegments.size();
infoStream.message("IW", "waitForMerges done");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "waitForMerges done");
}
}
/**
@ -2247,7 +2281,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
FrozenBufferedDeletes packet, FrozenBufferedDeletes globalPacket) throws IOException {
// Lock order IW -> BDS
synchronized (bufferedDeletesStream) {
infoStream.message("IW", "publishFlushedSegment");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "publishFlushedSegment");
}
if (globalPacket != null && globalPacket.any()) {
bufferedDeletesStream.push(globalPacket);
@ -2341,7 +2377,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
noDupDirs(dirs);
try {
infoStream.message("IW", "flush at addIndexes(Directory...)");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "flush at addIndexes(Directory...)");
}
flush(false, true);
List<SegmentInfo> infos = new ArrayList<SegmentInfo>();
@ -2410,7 +2449,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
int numDocs = 0;
try {
infoStream.message("IW", "flush at addIndexes(IndexReader...)");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "flush at addIndexes(IndexReader...)");
}
flush(false, true);
String mergedName = newSegmentName();
@ -2638,7 +2679,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
success = true;
} finally {
if (!success) {
infoStream.message("IW", "hit exception during prepareCommit");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during prepareCommit");
}
}
// Done: finish the full flush!
docWriter.finishFullFlush(flushSuccess);
@ -2722,16 +2765,24 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
private final void commitInternal(Map<String,String> commitUserData) throws CorruptIndexException, IOException {
infoStream.message("IW", "commit: start");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: start");
}
synchronized(commitLock) {
infoStream.message("IW", "commit: enter lock");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: enter lock");
}
if (pendingCommit == null) {
infoStream.message("IW", "commit: now prepare");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: now prepare");
}
prepareCommit(commitUserData);
} else {
infoStream.message("IW", "commit: already prepared");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: already prepared");
}
}
finishCommit();
@ -2742,10 +2793,13 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
if (pendingCommit != null) {
try {
infoStream.message("IW", "commit: pendingCommit != null");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: pendingCommit != null");
}
pendingCommit.finishCommit(directory, codec);
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: wrote segments file \"" + pendingCommit.getCurrentSegmentFileName() + "\"");
}
lastCommitChangeCount = pendingCommitChangeCount;
segmentInfos.updateGeneration(pendingCommit);
segmentInfos.setUserData(pendingCommit.getUserData());
@ -2760,10 +2814,14 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
}
} else {
infoStream.message("IW", "commit: pendingCommit == null; skip");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: pendingCommit == null; skip");
}
}
infoStream.message("IW", "commit: done");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commit: done");
}
}
// Ensures only one flush() is actually flushing segments
@ -2833,14 +2891,19 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// never hit
return false;
} finally {
if (!success)
infoStream.message("IW", "hit exception during flush");
if (!success) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during flush");
}
}
}
}
final synchronized void maybeApplyDeletes(boolean applyAllDeletes) throws IOException {
if (applyAllDeletes) {
infoStream.message("IW", "apply all deletes during flush");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "apply all deletes during flush");
}
applyAllDeletes();
} else if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "don't apply deletes now delTermCount=" + bufferedDeletesStream.numTerms() + " bytesUsed=" + bufferedDeletesStream.bytesUsed());
@ -2920,8 +2983,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
final List<SegmentInfo> sourceSegments = merge.segments;
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commitMergeDeletes " + merge.segString(directory));
}
// Carefully merge deletes that occurred after we
// started merging:
@ -3018,8 +3082,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
throw new IllegalStateException("this writer hit an OutOfMemoryError; cannot complete merge");
}
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commitMerge: " + merge.segString(directory) + " index=" + segString());
}
assert merge.registerDone;
@ -3030,8 +3095,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
// file that current segments does not reference), we
// abort this merge
if (merge.isAborted()) {
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "commitMerge: skipping merge " + merge.segString(directory) + ": it was aborted");
}
return false;
}
@ -3046,8 +3112,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
final boolean allDeleted = mergedReader.numDocs() == 0;
if (allDeleted && infoStream.isEnabled("IW")) {
infoStream.message("IW", "merged segment " + merge.info + " is 100% deleted" + (keepFullyDeletedSegments ? "" : "; skipping insert"));
if (allDeleted) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "merged segment " + merge.info + " is 100% deleted" + (keepFullyDeletedSegments ? "" : "; skipping insert"));
}
}
final boolean dropSegment = allDeleted && !keepFullyDeletedSegments;
@ -3133,8 +3201,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
try {
mergeInit(merge);
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "now merge\n merge=" + merge.segString(directory) + "\n index=" + segString());
}
mergeMiddle(merge);
mergeSuccess(merge);
@ -3147,9 +3216,12 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
mergeFinish(merge);
if (!success) {
infoStream.message("IW", "hit exception during merge");
if (merge.info != null && !segmentInfos.contains(merge.info))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception during merge");
}
if (merge.info != null && !segmentInfos.contains(merge.info)) {
deleter.refresh(merge.info.name);
}
}
// This merge (and, generally, any change to the
@ -3163,8 +3235,10 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
} catch (OutOfMemoryError oom) {
handleOOM(oom, "merge");
}
if (merge.info != null && infoStream.isEnabled("IW")) {
infoStream.message("IW", "merge time " + (System.currentTimeMillis()-t0) + " msec for " + merge.info.docCount + " docs");
if (merge.info != null) {
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "merge time " + (System.currentTimeMillis()-t0) + " msec for " + merge.info.docCount + " docs");
}
}
//System.out.println(Thread.currentThread().getName() + ": merge end");
}
@ -3209,8 +3283,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
pendingMerges.add(merge);
if (infoStream.isEnabled("IW"))
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "add merge to pendingMerges: " + merge.segString(directory) + " [total " + pendingMerges.size() + " pending]");
}
merge.mergeGen = mergeGen;
merge.isExternal = isExternal;
@ -3227,7 +3302,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
builder.append("]");
// don't call mergingSegments.toString() could lead to ConcurrentModException
// since merge updates the segments FieldInfos
infoStream.message("IW", builder.toString());
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", builder.toString());
}
}
for(SegmentInfo info : merge.segments) {
if (infoStream.isEnabled("IW")) {
@ -3251,7 +3328,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
success = true;
} finally {
if (!success) {
infoStream.message("IW", "hit exception in mergeInit");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception in mergeInit");
}
mergeFinish(merge);
}
}
@ -3544,7 +3623,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
handleMergeException(t, merge);
} finally {
if (!success) {
infoStream.message("IW", "hit exception creating compound file during merge");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception creating compound file during merge");
}
synchronized(this) {
deleter.deleteFile(compoundFileName);
@ -3563,7 +3644,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
deleter.deleteNewFiles(merge.info.files());
if (merge.isAborted()) {
infoStream.message("IW", "abort merge after building CFS");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "abort merge after building CFS");
}
deleter.deleteFile(compoundFileName);
return 0;
}
@ -3746,14 +3829,18 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
try {
infoStream.message("IW", "startCommit(): start");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "startCommit(): start");
}
synchronized(this) {
assert lastCommitChangeCount <= changeCount;
if (pendingCommitChangeCount == lastCommitChangeCount) {
infoStream.message("IW", " skip startCommit(): no changes pending");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", " skip startCommit(): no changes pending");
}
deleter.decRef(filesToCommit);
filesToCommit = null;
return;
@ -3796,7 +3883,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
pendingCommit = toSync;
}
infoStream.message("IW", "done all syncs");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "done all syncs");
}
assert testPoint("midStartCommitSuccess");
@ -3809,7 +3898,9 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
segmentInfos.updateGeneration(toSync);
if (!pendingCommitSet) {
infoStream.message("IW", "hit exception committing segments file");
if (infoStream.isEnabled("IW")) {
infoStream.message("IW", "hit exception committing segments file");
}
// Hit exception
deleter.decRef(filesToCommit);

View File

@ -23,7 +23,6 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.lucene.util.InfoStream;
/** <p>This class implements a {@link MergePolicy} that tries
* to merge segments into levels of exponentially
@ -424,8 +423,9 @@ public abstract class LogMergePolicy extends MergePolicy {
final List<SegmentInfo> segments = segmentInfos.asList();
final int numSegments = segments.size();
if (verbose())
if (verbose()) {
message("findForcedDeleteMerges: " + numSegments + " segments");
}
MergeSpecification spec = new MergeSpecification();
int firstSegmentWithDeletions = -1;
@ -435,15 +435,17 @@ public abstract class LogMergePolicy extends MergePolicy {
final SegmentInfo info = segmentInfos.info(i);
int delCount = w.numDeletedDocs(info);
if (delCount > 0) {
if (verbose())
if (verbose()) {
message(" segment " + info.name + " has deletions");
}
if (firstSegmentWithDeletions == -1)
firstSegmentWithDeletions = i;
else if (i - firstSegmentWithDeletions == mergeFactor) {
// We've seen mergeFactor segments in a row with
// deletions, so force a merge now:
if (verbose())
if (verbose()) {
message(" add merge " + firstSegmentWithDeletions + " to " + (i-1) + " inclusive");
}
spec.add(new OneMerge(segments.subList(firstSegmentWithDeletions, i)));
firstSegmentWithDeletions = i;
}
@ -451,16 +453,18 @@ public abstract class LogMergePolicy extends MergePolicy {
// End of a sequence of segments with deletions, so,
// merge those past segments even if it's fewer than
// mergeFactor segments
if (verbose())
if (verbose()) {
message(" add merge " + firstSegmentWithDeletions + " to " + (i-1) + " inclusive");
}
spec.add(new OneMerge(segments.subList(firstSegmentWithDeletions, i)));
firstSegmentWithDeletions = -1;
}
}
if (firstSegmentWithDeletions != -1) {
if (verbose())
if (verbose()) {
message(" add merge " + firstSegmentWithDeletions + " to " + (numSegments-1) + " inclusive");
}
spec.add(new OneMerge(segments.subList(firstSegmentWithDeletions, numSegments)));
}
@ -500,8 +504,9 @@ public abstract class LogMergePolicy extends MergePolicy {
public MergeSpecification findMerges(SegmentInfos infos) throws IOException {
final int numSegments = infos.size();
if (verbose())
if (verbose()) {
message("findMerges: " + numSegments + " segments");
}
// Compute levels, which is just log (base mergeFactor)
// of the size of each segment
@ -582,8 +587,9 @@ public abstract class LogMergePolicy extends MergePolicy {
}
upto--;
}
if (verbose())
if (verbose()) {
message(" level " + levelBottom + " to " + maxLevel + ": " + (1+upto-start) + " segments");
}
// Finally, record all merges that are viable at this level:
int end = start + mergeFactor;

View File

@ -26,7 +26,6 @@ import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import org.apache.lucene.util.InfoStream;
/**
* Merges segments of approximately equal size, subject to
@ -346,7 +345,9 @@ public class TieredMergePolicy extends MergePolicy {
final boolean maxMergeIsRunning = mergingBytes >= maxMergedSegmentBytes;
message(" allowedSegmentCount=" + allowedSegCountInt + " vs count=" + infosSorted.size() + " (eligible count=" + eligible.size() + ") tooBigCount=" + tooBigCount);
if (verbose()) {
message(" allowedSegmentCount=" + allowedSegCountInt + " vs count=" + infosSorted.size() + " (eligible count=" + eligible.size() + ") tooBigCount=" + tooBigCount);
}
if (eligible.size() == 0) {
return spec;
@ -386,7 +387,9 @@ public class TieredMergePolicy extends MergePolicy {
}
final MergeScore score = score(candidate, hitTooLarge, mergingBytes);
message(" maybe=" + writer.get().segString(candidate) + " score=" + score.getScore() + " " + score.getExplanation() + " tooLarge=" + hitTooLarge + " size=" + String.format("%.3f MB", totAfterMergeBytes/1024./1024.));
if (verbose()) {
message(" maybe=" + writer.get().segString(candidate) + " score=" + score.getScore() + " " + score.getExplanation() + " tooLarge=" + hitTooLarge + " size=" + String.format("%.3f MB", totAfterMergeBytes/1024./1024.));
}
// If we are already running a max sized merge
// (maxMergeIsRunning), don't allow another max
@ -649,9 +652,7 @@ public class TieredMergePolicy extends MergePolicy {
}
private void message(String message) {
if (verbose()) {
writer.get().infoStream.message("TMP", message);
}
writer.get().infoStream.message("TMP", message);
}
@Override

View File

@ -18,7 +18,6 @@ package org.apache.lucene.index;
*/
import org.apache.lucene.util.Constants;
import org.apache.lucene.util.InfoStream;
import java.io.IOException;
import java.util.ArrayList;
@ -90,7 +89,9 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
}
}
if (verbose()) message("findForcedMerges: segmentsToUpgrade=" + oldSegments);
if (verbose()) {
message("findForcedMerges: segmentsToUpgrade=" + oldSegments);
}
if (oldSegments.isEmpty())
return null;
@ -107,9 +108,10 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
}
if (!oldSegments.isEmpty()) {
if (verbose())
if (verbose()) {
message("findForcedMerges: " + base.getClass().getSimpleName() +
" does not want to merge all old segments, merge remaining ones into new segment: " + oldSegments);
}
final List<SegmentInfo> newInfos = new ArrayList<SegmentInfo>();
for (final SegmentInfo si : segmentInfos) {
if (oldSegments.containsKey(si)) {
@ -152,9 +154,6 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
}
private void message(String message) {
if (verbose()) {
writer.get().infoStream.message("UPGMP", message);
}
writer.get().infoStream.message("UPGMP", message);
}
}

View File

@ -26,10 +26,14 @@ public abstract class InfoStream implements Closeable {
public static final InfoStream NO_OUTPUT = new NoOutput();
private static final class NoOutput extends InfoStream {
@Override
public void message(String component, String message) {}
public void message(String component, String message) {
assert false: "message() should not be called when isEnabled returns false";
}
@Override
public boolean isEnabled(String component) { return false; }
public boolean isEnabled(String component) {
return false;
}
@Override
public void close() {}

View File

@ -32,7 +32,6 @@ import java.util.Map.Entry;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Field;

View File

@ -25,6 +25,7 @@ import java.io.IOException;
* @lucene.experimental
*/
public class NullInfoStream extends InfoStream {
@Override
public void message(String component, String message) {
assert component != null;