mirror of https://github.com/apache/lucene.git
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:
parent
118005d308
commit
9a8bde3c8b
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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() {}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue