mirror of
https://github.com/apache/lucene.git
synced 2025-02-24 11:16:35 +00:00
SOLR-13352: Remove risk of deadlock/threadleak when shutting down an Overseer(TriggerThread)
This commit is contained in:
parent
e04a28e140
commit
1071d09336
@ -148,6 +148,8 @@ Bug Fixes
|
||||
|
||||
* SOLR-13349: High CPU usage in Solr due to Java 8 bug (Erick Erickson)
|
||||
|
||||
* SOLR-13352: Remove risk of deadlock/threadleak when shutting down an Overseer(TriggerThread). (hossman)
|
||||
|
||||
Improvements
|
||||
----------------------
|
||||
|
||||
|
@ -184,48 +184,43 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
|
||||
while (true) {
|
||||
Map<String, AutoScaling.Trigger> copy = null;
|
||||
try {
|
||||
// this can throw InterruptedException and we don't want to unlock if it did, so we keep this outside
|
||||
// of the try/finally block
|
||||
|
||||
updateLock.lockInterruptibly();
|
||||
|
||||
// must check for close here before we await on the condition otherwise we can only be woken up on interruption
|
||||
if (isClosed) {
|
||||
log.info("OverseerTriggerThread has been closed, exiting.");
|
||||
break;
|
||||
}
|
||||
|
||||
log.debug("Current znodeVersion {}, lastZnodeVersion {}", znodeVersion, lastZnodeVersion);
|
||||
|
||||
try {
|
||||
// must check for close here before we await on the condition otherwise we can
|
||||
// only be woken up on interruption
|
||||
if (isClosed) {
|
||||
log.info("OverseerTriggerThread has been closed, exiting.");
|
||||
break;
|
||||
}
|
||||
|
||||
log.debug("Current znodeVersion {}, lastZnodeVersion {}", znodeVersion, lastZnodeVersion);
|
||||
|
||||
if (znodeVersion == lastZnodeVersion) {
|
||||
updated.await();
|
||||
|
||||
|
||||
// are we closed?
|
||||
if (isClosed) {
|
||||
log.info("OverseerTriggerThread woken up but we are closed, exiting.");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// spurious wakeup?
|
||||
if (znodeVersion == lastZnodeVersion) continue;
|
||||
}
|
||||
copy = new HashMap<>(activeTriggers);
|
||||
lastZnodeVersion = znodeVersion;
|
||||
log.debug("Processed trigger updates upto znodeVersion {}", znodeVersion);
|
||||
} catch (InterruptedException e) {
|
||||
// Restore the interrupted status
|
||||
Thread.currentThread().interrupt();
|
||||
log.warn("Interrupted", e);
|
||||
break;
|
||||
} finally {
|
||||
updateLock.unlock();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
// Restore the interrupted status
|
||||
Thread.currentThread().interrupt();
|
||||
log.warn("Interrupted", e);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// update the current config
|
||||
scheduledTriggers.setAutoScalingConfig(autoScalingConfig);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user