You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2007/10/22 16:04:32 UTC
svn commit: r587101 - in /lucene/java/trunk/src/java/org/apache/lucene/index:
ConcurrentMergeScheduler.java IndexWriter.java LogMergePolicy.java
Author: mikemccand
Date: Mon Oct 22 07:04:31 2007
New Revision: 587101
URL: http://svn.apache.org/viewvc?rev=587101&view=rev
Log:
LUCENE-1022: share writer's infoStream with LogMergePolicy & ConcurrentMergeScheduler
Modified:
lucene/java/trunk/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
lucene/java/trunk/src/java/org/apache/lucene/index/LogMergePolicy.java
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java?rev=587101&r1=587100&r2=587101&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java Mon Oct 22 07:04:31 2007
@@ -33,8 +33,6 @@
public class ConcurrentMergeScheduler implements MergeScheduler {
- public static boolean VERBOSE = false;
-
private int mergeThreadPriority = -1;
private List mergeThreads = new ArrayList();
@@ -44,6 +42,7 @@
private Directory dir;
private boolean closed;
+ private IndexWriter writer;
public ConcurrentMergeScheduler() {
if (allInstances != null) {
@@ -94,7 +93,8 @@
}
private void message(String message) {
- System.out.println("CMS [" + Thread.currentThread().getName() + "]: " + message);
+ if (writer != null)
+ writer.message("CMS: " + message);
}
private synchronized void initMergeThreadPriority() {
@@ -110,11 +110,10 @@
public synchronized void sync() {
while(mergeThreadCount() > 0) {
- if (VERBOSE) {
- message("now wait for threads; currently " + mergeThreads.size() + " still running");
- for(int i=0;i<mergeThreads.size();i++)
- message(" " + i + ": " + ((MergeThread) mergeThreads.get(i)));
- }
+ message("now wait for threads; currently " + mergeThreads.size() + " still running");
+ final int count = mergeThreads.size();
+ for(int i=0;i<count;i++)
+ message(" " + i + ": " + ((MergeThread) mergeThreads.get(i)));
try {
wait();
@@ -129,6 +128,8 @@
public void merge(IndexWriter writer)
throws CorruptIndexException, IOException {
+ this.writer = writer;
+
initMergeThreadPriority();
dir = writer.getDirectory();
@@ -140,10 +141,8 @@
// these newly proposed merges will likely already be
// registered.
- if (VERBOSE) {
- message("now merge");
- message(" index: " + writer.segString());
- }
+ message("now merge");
+ message(" index: " + writer.segString());
// Iterate, pulling from the IndexWriter's queue of
// pending merges, until its empty:
@@ -155,8 +154,7 @@
MergePolicy.OneMerge merge = writer.getNextMerge();
if (merge == null) {
- if (VERBOSE)
- message(" no more merges pending; now return");
+ message(" no more merges pending; now return");
return;
}
@@ -164,12 +162,10 @@
// deterministic assignment of segment names
writer.mergeInit(merge);
- if (VERBOSE)
- message(" consider merge " + merge.segString(dir));
+ message(" consider merge " + merge.segString(dir));
if (merge.isExternal) {
- if (VERBOSE)
- message(" merge involves segments from an external directory; now run in foreground");
+ message(" merge involves segments from an external directory; now run in foreground");
} else {
synchronized(this) {
if (mergeThreadCount() < maxThreadCount) {
@@ -177,8 +173,7 @@
// merge:
MergeThread merger = new MergeThread(writer, merge);
mergeThreads.add(merger);
- if (VERBOSE)
- message(" launch new thread [" + merger.getName() + "]");
+ message(" launch new thread [" + merger.getName() + "]");
try {
merger.setPriority(mergeThreadPriority);
} catch (NullPointerException npe) {
@@ -187,7 +182,7 @@
}
merger.start();
continue;
- } else if (VERBOSE)
+ } else
message(" too many merge threads running; run merge in foreground");
}
}
@@ -225,8 +220,7 @@
try {
- if (VERBOSE)
- message(" merge thread: start");
+ message(" merge thread: start");
while(true) {
setRunningMerge(merge);
@@ -237,14 +231,12 @@
merge = writer.getNextMerge();
if (merge != null) {
writer.mergeInit(merge);
- if (VERBOSE)
- message(" merge thread: do another merge " + merge.segString(dir));
+ message(" merge thread: do another merge " + merge.segString(dir));
} else
break;
}
- if (VERBOSE)
- message(" merge thread: done");
+ message(" merge thread: done");
} catch (Throwable exc) {
// When a merge was aborted & IndexWriter closed,
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java?rev=587101&r1=587100&r2=587101&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java Mon Oct 22 07:04:31 2007
@@ -304,8 +304,14 @@
}
}
- private void message(String message) {
- infoStream.println("IW " + messageID + " [" + Thread.currentThread().getName() + "]: " + message);
+ /**
+ * Prints a message to the infoStream (if non-null),
+ * prefixed with the identifying information for this
+ * writer and the thread that's calling it.
+ */
+ public void message(String message) {
+ if (infoStream != null)
+ infoStream.println("IW " + messageID + " [" + Thread.currentThread().getName() + "]: " + message);
}
private synchronized void setMessageID() {
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/LogMergePolicy.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/LogMergePolicy.java?rev=587101&r1=587100&r2=587101&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/LogMergePolicy.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/LogMergePolicy.java Mon Oct 22 07:04:31 2007
@@ -61,6 +61,12 @@
private boolean useCompoundFile = true;
private boolean useCompoundDocStore = true;
+ private IndexWriter writer;
+
+ private void message(String message) {
+ if (writer != null)
+ writer.message("LMP: " + message);
+ }
/** <p>Returns the number of segments that are merged at
* once and also controls the total number of segments
@@ -211,6 +217,8 @@
public MergeSpecification findMerges(SegmentInfos infos, IndexWriter writer) throws IOException {
final int numSegments = infos.size();
+ this.writer = writer;
+ message("findMerges: " + numSegments + " segments");
// Compute levels, which is just log (base mergeFactor)
// of the size of each segment
@@ -284,6 +292,7 @@
}
upto--;
}
+ message(" level " + levelBottom + " to " + maxLevel + ": " + (1+upto-start) + " segments");
// Finally, record all merges that are viable at this level:
int end = start + mergeFactor;
@@ -297,8 +306,11 @@
if (!anyTooLarge) {
if (spec == null)
spec = new MergeSpecification();
+ message(" " + start + " to " + end + ": add this merge");
spec.add(new OneMerge(infos.range(start, end), useCompoundFile));
- }
+ } else
+ message(" " + start + " to " + end + ": contains segment over maxMergeSize or maxMergeDocs; skipping");
+
start = end;
end = start + mergeFactor;
}