|
21 | 21 | import org.apache.lucene.store.RateLimitedIndexOutput; |
22 | 22 | import org.elasticsearch.common.logging.Loggers; |
23 | 23 | import org.elasticsearch.common.settings.Setting; |
24 | | -import org.elasticsearch.common.util.concurrent.AbstractRunnable; |
25 | 24 | import org.elasticsearch.core.TimeValue; |
26 | 25 | import org.elasticsearch.index.IndexSettings; |
27 | 26 | import org.elasticsearch.index.MergeSchedulerConfig; |
@@ -228,7 +227,7 @@ public IndexOutput createOutput(String name, IOContext context) throws IOExcepti |
228 | 227 | }; |
229 | 228 | } |
230 | 229 |
|
231 | | - final class MergeTask extends AbstractRunnable implements Comparable<MergeTask> { |
| 230 | + final class MergeTask implements Runnable, Comparable<MergeTask> { |
232 | 231 | private final String name; |
233 | 232 | private final AtomicLong mergeStartTimeNS; |
234 | 233 | private final MergeSource mergeSource; |
@@ -271,7 +270,7 @@ public boolean isRunning() { |
271 | 270 | } |
272 | 271 |
|
273 | 272 | @Override |
274 | | - public void doRun() throws Exception { |
| 273 | + public void run() { |
275 | 274 | if (mergeStartTimeNS.compareAndSet(0L, System.nanoTime()) == false) { |
276 | 275 | throw new IllegalStateException("Cannot run the same merge task multiple times"); |
277 | 276 | } |
@@ -306,57 +305,41 @@ public void doRun() throws Exception { |
306 | 305 | abortOnGoingMerge(); |
307 | 306 | handleMergeException(t); |
308 | 307 | } |
309 | | - } |
310 | | - } |
311 | | - |
312 | | - @Override |
313 | | - public void onAfter() { |
314 | | - if (isRunning() == false) { |
315 | | - throw new IllegalStateException("onAfter must only be invoked after doRun"); |
316 | | - } |
317 | | - try { |
318 | | - if (verbose()) { |
319 | | - message(String.format(Locale.ROOT, "merge task %s end", this)); |
320 | | - } |
321 | | - afterMerge(onGoingMerge); |
322 | 308 | } finally { |
323 | | - long tookMS = TimeValue.nsecToMSec(System.nanoTime() - mergeStartTimeNS.get()); |
324 | 309 | try { |
325 | | - mergeTracking.mergeFinished(onGoingMerge.getMerge(), onGoingMerge, tookMS); |
| 310 | + if (verbose()) { |
| 311 | + message(String.format(Locale.ROOT, "merge task %s end", this)); |
| 312 | + } |
| 313 | + afterMerge(onGoingMerge); |
326 | 314 | } finally { |
327 | | - mergeDone(this); |
328 | | - // kick-off next merge, if any |
329 | | - MergePolicy.OneMerge nextMerge = null; |
| 315 | + long tookMS = TimeValue.nsecToMSec(System.nanoTime() - mergeStartTimeNS.get()); |
330 | 316 | try { |
331 | | - nextMerge = mergeSource.getNextMerge(); |
332 | | - } catch (IllegalStateException e) { |
333 | | - if (verbose()) { |
334 | | - message("merge task poll failed, likely that index writer is failed"); |
| 317 | + mergeTracking.mergeFinished(onGoingMerge.getMerge(), onGoingMerge, tookMS); |
| 318 | + } finally { |
| 319 | + mergeDone(this); |
| 320 | + // kick-off next merge, if any |
| 321 | + MergePolicy.OneMerge nextMerge = null; |
| 322 | + try { |
| 323 | + nextMerge = mergeSource.getNextMerge(); |
| 324 | + } catch (IllegalStateException e) { |
| 325 | + if (verbose()) { |
| 326 | + message("merge task poll failed, likely that index writer is failed"); |
| 327 | + } |
| 328 | + // ignore exception, we expect the IW failure to be logged elsewhere |
| 329 | + } |
| 330 | + if (nextMerge != null) { |
| 331 | + submitNewMergeTask(mergeSource, nextMerge, MergeTrigger.MERGE_FINISHED); |
335 | 332 | } |
336 | | - // ignore exception, we expect the IW failure to be logged elsewhere |
337 | | - } |
338 | | - if (nextMerge != null) { |
339 | | - submitNewMergeTask(mergeSource, nextMerge, MergeTrigger.MERGE_FINISHED); |
340 | 333 | } |
341 | 334 | } |
342 | 335 | } |
343 | 336 | } |
344 | 337 |
|
345 | | - @Override |
346 | | - public void onFailure(Exception e) { |
347 | | - // no-op, should not be called |
348 | | - } |
349 | | - |
350 | | - @Override |
351 | 338 | public void onRejection(Exception e) { |
352 | | - if (isRunning()) { |
353 | | - throw new IllegalStateException("A running merge cannot be rejected for running"); |
354 | | - } |
355 | 339 | if (verbose()) { |
356 | 340 | message(String.format(Locale.ROOT, "merge task [%s] rejected by thread pool, aborting", onGoingMerge.getId())); |
357 | 341 | } |
358 | 342 | abortOnGoingMerge(); |
359 | | - mergeDone(this); |
360 | 343 | } |
361 | 344 |
|
362 | 345 | private void abortOnGoingMerge() { |
|
0 commit comments