use of io.crate.executor.transport.kill.KillableCallable in project crate by crate.
the class SQLTransportIntegrationTest method assertNoJobExecutionContextAreLeftOpen.
@After
public void assertNoJobExecutionContextAreLeftOpen() throws Exception {
final Field activeContexts = JobContextService.class.getDeclaredField("activeContexts");
final Field activeOperationsSb = TransportShardAction.class.getDeclaredField("activeOperations");
activeContexts.setAccessible(true);
activeOperationsSb.setAccessible(true);
try {
assertBusy(new Runnable() {
@Override
public void run() {
for (JobContextService jobContextService : internalCluster().getInstances(JobContextService.class)) {
try {
//noinspection unchecked
Map<UUID, JobExecutionContext> contexts = (Map<UUID, JobExecutionContext>) activeContexts.get(jobContextService);
assertThat(contexts.size(), is(0));
} catch (IllegalAccessException e) {
throw Throwables.propagate(e);
}
}
for (TransportShardUpsertAction action : internalCluster().getInstances(TransportShardUpsertAction.class)) {
try {
Multimap<UUID, KillableCallable> operations = (Multimap<UUID, KillableCallable>) activeOperationsSb.get(action);
assertThat(operations.size(), is(0));
} catch (IllegalAccessException e) {
throw Throwables.propagate(e);
}
}
for (TransportShardDeleteAction action : internalCluster().getInstances(TransportShardDeleteAction.class)) {
try {
Multimap<UUID, KillableCallable> operations = (Multimap<UUID, KillableCallable>) activeOperationsSb.get(action);
assertThat(operations.size(), is(0));
} catch (IllegalAccessException e) {
throw Throwables.propagate(e);
}
}
}
}, 10L, TimeUnit.SECONDS);
} catch (AssertionError e) {
StringBuilder errorMessageBuilder = new StringBuilder();
String[] nodeNames = internalCluster().getNodeNames();
for (String nodeName : nodeNames) {
JobContextService jobContextService = internalCluster().getInstance(JobContextService.class, nodeName);
try {
//noinspection unchecked
Map<UUID, JobExecutionContext> contexts = (Map<UUID, JobExecutionContext>) activeContexts.get(jobContextService);
String contextsString = contexts.toString();
if (!"{}".equals(contextsString)) {
errorMessageBuilder.append("## node: ");
errorMessageBuilder.append(nodeName);
errorMessageBuilder.append("\n");
errorMessageBuilder.append(contextsString);
errorMessageBuilder.append("\n");
}
contexts.clear();
} catch (IllegalAccessException ex) {
throw Throwables.propagate(e);
}
}
throw new AssertionError(errorMessageBuilder.toString(), e);
}
}
use of io.crate.executor.transport.kill.KillableCallable in project crate by crate.
the class TransportShardAction method killJob.
@Override
public void killJob(UUID jobId) {
synchronized (activeOperations) {
Collection<KillableCallable> operations = activeOperations.get(jobId);
for (KillableCallable callable : operations) {
callable.kill(new InterruptedException(JobKilledException.MESSAGE));
}
activeOperations.removeAll(jobId);
}
}
Aggregations