You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/01/09 17:48:10 UTC
svn commit: r1650595 - in /lucene/dev/trunk/lucene/core/src:
java/org/apache/lucene/index/ test/org/apache/lucene/index/
Author: mikemccand
Date: Fri Jan 9 16:48:09 2015
New Revision: 1650595
URL: http://svn.apache.org/r1650595
Log:
LUCENE-6119: must check merge for abort even when we are not rate limiting; don't wrap rate limiter when doing addIndexes (it's not abortable); don't leak file handle when wrapping
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergeRateLimiter.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java?rev=1650595&r1=1650594&r2=1650595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java Fri Jan 9 16:48:09 2015
@@ -394,8 +394,10 @@ public class ConcurrentMergeScheduler ex
/**
* Returns the number of merge threads that are alive. Note that this number
* is ≤ {@link #mergeThreads} size.
+ *
+ * @lucene.internal
*/
- protected synchronized int mergeThreadCount() {
+ public synchronized int mergeThreadCount() {
int count = 0;
for (MergeThread mergeThread : mergeThreads) {
if (mergeThread.isAlive() && mergeThread.merge.rateLimiter.getAbort() == false) {
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1650595&r1=1650594&r2=1650595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Fri Jan 9 16:48:09 2015
@@ -2532,7 +2532,7 @@ public class IndexWriter implements Clos
// TODO: somehow we should fix this merge so it's
// abortable so that IW.close(false) is able to stop it
- TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(mergeDirectory);
+ TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(directory);
SegmentInfo info = new SegmentInfo(directory, Version.LATEST, mergedName, -1,
false, codec, null, StringHelper.randomId(), new HashMap<>());
@@ -4679,14 +4679,18 @@ public class IndexWriter implements Clos
public IndexOutput createOutput(String name, IOContext context) throws IOException {
ensureOpen();
+ // Paranoia defense: if this trips we have a bug somewhere...
+ IndexWriter.this.ensureOpen(false);
+
// This Directory is only supposed to be used during merging,
// so all writes should have MERGE context, else there is a bug
// somewhere that is failing to pass down the right IOContext:
assert context.context == IOContext.Context.MERGE: "got context=" + context.context;
- IndexOutput output = in.createOutput(name, context);
+
MergeRateLimiter rateLimiter = rateLimiters.get();
assert rateLimiter != null;
- return new RateLimitedIndexOutput(rateLimiter, output);
+
+ return new RateLimitedIndexOutput(rateLimiter, in.createOutput(name, context));
}
};
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergeRateLimiter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergeRateLimiter.java?rev=1650595&r1=1650594&r2=1650595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergeRateLimiter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/MergeRateLimiter.java Fri Jan 9 16:48:09 2015
@@ -125,6 +125,10 @@ public class MergeRateLimiter extends Ra
/** Returns NO if no pause happened, STOPPED if pause because rate was 0.0 (merge is stopped), PAUSED if paused with a normal rate limit. */
private synchronized PauseResult maybePause(long bytes, long curNS) throws MergePolicy.MergeAbortedException {
+
+ // Now is a good time to abort the merge:
+ checkAbort();
+
double secondsToPause = (bytes/1024./1024.) / mbPerSec;
// Time we should sleep until; this is purely instantaneous
@@ -150,9 +154,6 @@ public class MergeRateLimiter extends Ra
int sleepMS = (int) (curPauseNS / 1000000);
int sleepNS = (int) (curPauseNS % 1000000);
- // Now is a good time to abort the merge:
- checkAbort();
-
double rate = mbPerSec;
try {
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java?rev=1650595&r1=1650594&r2=1650595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java Fri Jan 9 16:48:09 2015
@@ -955,10 +955,16 @@ public class TestAddIndexes extends Luce
System.out.println("TEST: now force rollback");
}
c.didClose = true;
+ MergeScheduler ms = c.writer2.getConfig().getMergeScheduler();
+
c.writer2.rollback();
c.joinThreads();
+ if (ms instanceof ConcurrentMergeScheduler) {
+ assertEquals(0, ((ConcurrentMergeScheduler) ms).mergeThreadCount());
+ }
+
c.closeDir();
assertTrue(c.failures.size() == 0);