SOLR-11440: Potential fix for better handling of exceptions thrown during closing.

This commit is contained in:
Andrzej Bialecki 2017-10-05 10:45:28 +02:00
parent 6b327fa404
commit 77fc1885c7
1 changed files with 9 additions and 6 deletions

View File

@ -37,7 +37,6 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -147,18 +146,22 @@ public class ScheduledTriggers implements Closeable {
if (isClosed) { if (isClosed) {
throw new AlreadyClosedException("ScheduledTriggers has been closed and cannot be used anymore"); throw new AlreadyClosedException("ScheduledTriggers has been closed and cannot be used anymore");
} }
ScheduledTrigger st = null; ScheduledTrigger st;
try { try {
st = new ScheduledTrigger(newTrigger, zkClient, queueStats); st = new ScheduledTrigger(newTrigger, zkClient, queueStats);
} catch (Exception e) { } catch (Exception e) {
//TODO to decide what to do if (isClosed) {
log.error("Failed to add trigger", e); throw new AlreadyClosedException("ScheduledTriggers has been closed and cannot be used anymore");
}
if (!zkClient.isConnected() || zkClient.isClosed()) {
log.error("Failed to add trigger " + newTrigger.getName() + " - closing or disconnected from ZK", e);
} else {
log.error("Failed to add trigger " + newTrigger.getName(), e);
}
return; return;
} }
ScheduledTrigger scheduledTrigger = st; ScheduledTrigger scheduledTrigger = st;
ScheduledTrigger old = scheduledTriggers.putIfAbsent(newTrigger.getName(), scheduledTrigger); ScheduledTrigger old = scheduledTriggers.putIfAbsent(newTrigger.getName(), scheduledTrigger);
if (old != null) { if (old != null) {
if (old.trigger.equals(newTrigger)) { if (old.trigger.equals(newTrigger)) {