Search in sources :

Example 6 with JobExecutionContext

use of io.crate.jobs.JobExecutionContext in project crate by crate.

the class ESGetTask method execute.

@Override
public void execute(BatchConsumer consumer, Row parameters) {
    JobContext jobContext;
    if (esGet.docKeys().size() == 1) {
        jobContext = new SingleGetJobContext(this, transportActionProvider.transportGetAction(), consumer);
    } else {
        jobContext = new MultiGetJobContext(this, transportActionProvider.transportMultiGetAction(), consumer);
    }
    JobExecutionContext.Builder builder = jobContextService.newBuilder(jobId());
    builder.addSubContext(jobContext);
    try {
        JobExecutionContext ctx = jobContextService.createContext(builder);
        ctx.start();
    } catch (Throwable throwable) {
        consumer.accept(null, throwable);
    }
}
Also used : JobExecutionContext(io.crate.jobs.JobExecutionContext)

Example 7 with JobExecutionContext

use of io.crate.jobs.JobExecutionContext in project crate by crate.

the class NodeDisconnectJobMonitorServiceTest method testOnNodeDisconnectedKillsJobOriginatingFromThatNode.

@Test
public void testOnNodeDisconnectedKillsJobOriginatingFromThatNode() throws Exception {
    JobContextService jobContextService = jobContextService();
    JobExecutionContext.Builder builder = jobContextService.newBuilder(UUID.randomUUID());
    builder.addSubContext(new DummySubContext());
    JobExecutionContext context = jobContextService.createContext(builder);
    ThreadPool threadPool = mock(ThreadPool.class);
    when(threadPool.schedule(any(TimeValue.class), anyString(), any(Runnable.class))).thenAnswer((Answer<Object>) invocation -> {
        ((Runnable) invocation.getArguments()[2]).run();
        return null;
    });
    NodeDisconnectJobMonitorService monitorService = new NodeDisconnectJobMonitorService(Settings.EMPTY, threadPool, jobContextService, mock(TransportService.class), mock(TransportKillJobsNodeAction.class));
    monitorService.onNodeDisconnected(new DiscoveryNode("noop_id", DummyTransportAddress.INSTANCE, Version.CURRENT));
    expectedException.expect(ContextMissingException.class);
    jobContextService.getContext(context.jobId());
}
Also used : Arrays(java.util.Arrays) DummySubContext(io.crate.jobs.DummySubContext) Matchers.anyString(org.mockito.Matchers.anyString) TransportKillJobsNodeAction(io.crate.executor.transport.kill.TransportKillJobsNodeAction) NoopClusterService(org.elasticsearch.test.cluster.NoopClusterService) Answer(org.mockito.stubbing.Answer) DiscoveryNode(org.elasticsearch.cluster.node.DiscoveryNode) Settings(org.elasticsearch.common.settings.Settings) TimeValue(org.elasticsearch.common.unit.TimeValue) KillJobsRequest(io.crate.executor.transport.kill.KillJobsRequest) DummyTransportAddress(org.elasticsearch.common.transport.DummyTransportAddress) ThreadPool(org.elasticsearch.threadpool.ThreadPool) TransportService(org.elasticsearch.transport.TransportService) DiscoveryNodes(org.elasticsearch.cluster.node.DiscoveryNodes) ContextMissingException(io.crate.exceptions.ContextMissingException) Test(org.junit.Test) UUID(java.util.UUID) JobsLogs(io.crate.operation.collect.stats.JobsLogs) CrateUnitTest(io.crate.test.integration.CrateUnitTest) JobExecutionContext(io.crate.jobs.JobExecutionContext) Matchers.any(org.mockito.Matchers.any) Mockito(org.mockito.Mockito) Version(org.elasticsearch.Version) JobContextService(io.crate.jobs.JobContextService) ActionListener(org.elasticsearch.action.ActionListener) TransportKillJobsNodeAction(io.crate.executor.transport.kill.TransportKillJobsNodeAction) DiscoveryNode(org.elasticsearch.cluster.node.DiscoveryNode) ThreadPool(org.elasticsearch.threadpool.ThreadPool) DummySubContext(io.crate.jobs.DummySubContext) TransportService(org.elasticsearch.transport.TransportService) JobExecutionContext(io.crate.jobs.JobExecutionContext) TimeValue(org.elasticsearch.common.unit.TimeValue) JobContextService(io.crate.jobs.JobContextService) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 8 with JobExecutionContext

use of io.crate.jobs.JobExecutionContext 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);
    }
}
Also used : TransportShardUpsertAction(io.crate.executor.transport.TransportShardUpsertAction) TransportShardDeleteAction(io.crate.executor.transport.TransportShardDeleteAction) KillableCallable(io.crate.executor.transport.kill.KillableCallable) Field(java.lang.reflect.Field) Multimap(com.google.common.collect.Multimap) JobExecutionContext(io.crate.jobs.JobExecutionContext) JobContextService(io.crate.jobs.JobContextService) After(org.junit.After)

Aggregations

JobExecutionContext (io.crate.jobs.JobExecutionContext)8 JobContextService (io.crate.jobs.JobContextService)3 CompletableFuture (java.util.concurrent.CompletableFuture)2 IntObjectMap (com.carrotsearch.hppc.IntObjectMap)1 Multimap (com.google.common.collect.Multimap)1 ContextPreparer (io.crate.action.job.ContextPreparer)1 SharedShardContexts (io.crate.action.job.SharedShardContexts)1 ContextMissingException (io.crate.exceptions.ContextMissingException)1 TransportShardDeleteAction (io.crate.executor.transport.TransportShardDeleteAction)1 TransportShardUpsertAction (io.crate.executor.transport.TransportShardUpsertAction)1 KillJobsRequest (io.crate.executor.transport.kill.KillJobsRequest)1 KillableCallable (io.crate.executor.transport.kill.KillableCallable)1 TransportKillJobsNodeAction (io.crate.executor.transport.kill.TransportKillJobsNodeAction)1 DownstreamExecutionSubContext (io.crate.jobs.DownstreamExecutionSubContext)1 DummySubContext (io.crate.jobs.DummySubContext)1 PageBucketReceiver (io.crate.jobs.PageBucketReceiver)1 NodeOperation (io.crate.operation.NodeOperation)1 JobsLogs (io.crate.operation.collect.stats.JobsLogs)1 ExecutionPhase (io.crate.planner.node.ExecutionPhase)1 CrateUnitTest (io.crate.test.integration.CrateUnitTest)1