Search in sources :

Example 6 with BatchConsumer

use of io.crate.data.BatchConsumer in project crate by crate.

the class MultiConsumerTest method testFirstAcceptNullIteratorDoesNotCauseNPE.

@Test
public void testFirstAcceptNullIteratorDoesNotCauseNPE() throws Exception {
    TestingBatchConsumer batchConsumer = new TestingBatchConsumer();
    BatchConsumer consumer = new CompositeCollector.MultiConsumer(2, batchConsumer, CompositeBatchIterator::new);
    consumer.accept(null, new IllegalStateException("dummy"));
    consumer.accept(RowsBatchIterator.empty(), null);
    expectedException.expect(IllegalStateException.class);
    expectedException.expectMessage("dummy");
    batchConsumer.getResult();
}
Also used : CompositeBatchIterator(io.crate.data.CompositeBatchIterator) TestingBatchConsumer(io.crate.testing.TestingBatchConsumer) BatchConsumer(io.crate.data.BatchConsumer) TestingBatchConsumer(io.crate.testing.TestingBatchConsumer) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 7 with BatchConsumer

use of io.crate.data.BatchConsumer in project crate by crate.

the class ShardCollectorProvider method getCollectorBuilder.

/**
     * Create a CrateCollector.Builder to collect rows from a shard.
     * <p>
     * This also creates all shard-level projectors.
     * The RowReceiver that is used for {@link CrateCollector.Builder#build(BatchConsumer)}
     * should be the first node-level projector.
     */
public CrateCollector.Builder getCollectorBuilder(RoutedCollectPhase collectPhase, boolean requiresScroll, JobCollectContext jobCollectContext) throws Exception {
    assert collectPhase.orderBy() == null : "getDocCollector shouldn't be called if there is an orderBy on the collectPhase";
    RoutedCollectPhase normalizedCollectNode = collectPhase.normalize(shardNormalizer, null);
    final CrateCollector.Builder builder;
    if (normalizedCollectNode.whereClause().noMatch()) {
        builder = RowsCollector.emptyBuilder();
    } else {
        assert normalizedCollectNode.maxRowGranularity() == RowGranularity.DOC : "granularity must be DOC";
        builder = getBuilder(normalizedCollectNode, requiresScroll, jobCollectContext);
    }
    Collection<? extends Projection> shardProjections = Projections.shardProjections(collectPhase.projections());
    if (shardProjections.isEmpty()) {
        return builder;
    } else {
        return new CrateCollector.Builder() {

            @Override
            public CrateCollector build(BatchConsumer batchConsumer) {
                return builder.build(batchConsumer);
            }

            @Override
            public BatchConsumer applyProjections(BatchConsumer consumer) {
                return ProjectingBatchConsumer.create(consumer, shardProjections, normalizedCollectNode.jobId(), jobCollectContext.queryPhaseRamAccountingContext(), projectorFactory);
            }
        };
    }
}
Also used : RoutedCollectPhase(io.crate.planner.node.dql.RoutedCollectPhase) BatchConsumer(io.crate.data.BatchConsumer) ProjectingBatchConsumer(io.crate.operation.projectors.ProjectingBatchConsumer)

Example 8 with BatchConsumer

use of io.crate.data.BatchConsumer in project crate by crate.

the class DistributingDownstreamFactoryTest method testCreateDownstreamOneNode.

@Test
public void testCreateDownstreamOneNode() throws Exception {
    BatchConsumer downstream = createDownstream(ImmutableSet.of("downstream_node"));
    assertThat(downstream, instanceOf(DistributingConsumer.class));
    assertThat(((DistributingConsumer) downstream).multiBucketBuilder, instanceOf(BroadcastingBucketBuilder.class));
}
Also used : BatchConsumer(io.crate.data.BatchConsumer) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 9 with BatchConsumer

use of io.crate.data.BatchConsumer in project crate by crate.

the class ExecutionPhasesTask method execute.

@Override
public void execute(BatchConsumer consumer, Row parameters) {
    assert nodeOperationTrees.size() == 1 : "must only have 1 NodeOperationTree for non-bulk operations";
    NodeOperationTree nodeOperationTree = nodeOperationTrees.get(0);
    Map<String, Collection<NodeOperation>> operationByServer = NodeOperationGrouper.groupByServer(nodeOperationTree.nodeOperations());
    List<ExecutionPhase> handlerPhases = Collections.singletonList(nodeOperationTree.leaf());
    List<BatchConsumer> handlerConsumers = Collections.singletonList(consumer);
    try {
        setupContext(operationByServer, handlerPhases, handlerConsumers);
    } catch (Throwable throwable) {
        consumer.accept(null, throwable);
    }
}
Also used : NodeOperationTree(io.crate.operation.NodeOperationTree) ExecutionPhase(io.crate.planner.node.ExecutionPhase) BatchConsumer(io.crate.data.BatchConsumer) CollectingBatchConsumer(io.crate.data.CollectingBatchConsumer)

Example 10 with BatchConsumer

use of io.crate.data.BatchConsumer in project crate by crate.

the class ExecutionPhasesTask method executeBulk.

@Override
public List<CompletableFuture<Long>> executeBulk() {
    FluentIterable<NodeOperation> nodeOperations = FluentIterable.from(nodeOperationTrees).transformAndConcat(new Function<NodeOperationTree, Iterable<? extends NodeOperation>>() {

        @Nullable
        @Override
        public Iterable<? extends NodeOperation> apply(NodeOperationTree input) {
            return input.nodeOperations();
        }
    });
    Map<String, Collection<NodeOperation>> operationByServer = NodeOperationGrouper.groupByServer(nodeOperations);
    List<ExecutionPhase> handlerPhases = new ArrayList<>(nodeOperationTrees.size());
    List<BatchConsumer> handlerConsumers = new ArrayList<>(nodeOperationTrees.size());
    List<CompletableFuture<Long>> results = new ArrayList<>(nodeOperationTrees.size());
    for (NodeOperationTree nodeOperationTree : nodeOperationTrees) {
        CollectingBatchConsumer<?, Long> consumer = new CollectingBatchConsumer<>(Collectors.collectingAndThen(Collectors.summingLong(r -> ((long) r.get(0))), sum -> sum));
        handlerConsumers.add(consumer);
        results.add(consumer.resultFuture());
        handlerPhases.add(nodeOperationTree.leaf());
    }
    try {
        setupContext(operationByServer, handlerPhases, handlerConsumers);
    } catch (Throwable throwable) {
        return Collections.singletonList(CompletableFutures.failedFuture(throwable));
    }
    return results;
}
Also used : java.util(java.util) SharedShardContexts(io.crate.action.job.SharedShardContexts) ExecutionPhase(io.crate.planner.node.ExecutionPhase) CompletableFuture(java.util.concurrent.CompletableFuture) TransportKillJobsNodeAction(io.crate.executor.transport.kill.TransportKillJobsNodeAction) ContextPreparer(io.crate.action.job.ContextPreparer) FluentIterable(com.google.common.collect.FluentIterable) BatchConsumer(io.crate.data.BatchConsumer) ClusterService(org.elasticsearch.cluster.ClusterService) IndicesService(org.elasticsearch.indices.IndicesService) io.crate.jobs(io.crate.jobs) ESLogger(org.elasticsearch.common.logging.ESLogger) Nullable(javax.annotation.Nullable) NodeOperation(io.crate.operation.NodeOperation) Loggers(org.elasticsearch.common.logging.Loggers) TransportJobAction(io.crate.action.job.TransportJobAction) Bucket(io.crate.data.Bucket) Function(com.google.common.base.Function) CompletableFutures(io.crate.concurrent.CompletableFutures) Collectors(java.util.stream.Collectors) JobRequest(io.crate.action.job.JobRequest) NodeOperationGrouper(io.crate.planner.node.NodeOperationGrouper) Row(io.crate.data.Row) CollectingBatchConsumer(io.crate.data.CollectingBatchConsumer) ExecutionPhases(io.crate.planner.node.ExecutionPhases) NodeOperationTree(io.crate.operation.NodeOperationTree) Tuple(org.elasticsearch.common.collect.Tuple) JobTask(io.crate.executor.JobTask) FluentIterable(com.google.common.collect.FluentIterable) NodeOperation(io.crate.operation.NodeOperation) ExecutionPhase(io.crate.planner.node.ExecutionPhase) NodeOperationTree(io.crate.operation.NodeOperationTree) CompletableFuture(java.util.concurrent.CompletableFuture) Nullable(javax.annotation.Nullable) BatchConsumer(io.crate.data.BatchConsumer) CollectingBatchConsumer(io.crate.data.CollectingBatchConsumer) CollectingBatchConsumer(io.crate.data.CollectingBatchConsumer)

Aggregations

BatchConsumer (io.crate.data.BatchConsumer)11 ExecutionPhase (io.crate.planner.node.ExecutionPhase)4 CrateUnitTest (io.crate.test.integration.CrateUnitTest)4 Test (org.junit.Test)4 CollectingBatchConsumer (io.crate.data.CollectingBatchConsumer)3 CompositeBatchIterator (io.crate.data.CompositeBatchIterator)2 Row (io.crate.data.Row)2 NodeOperationTree (io.crate.operation.NodeOperationTree)2 ProjectingBatchConsumer (io.crate.operation.projectors.ProjectingBatchConsumer)2 IntCursor (com.carrotsearch.hppc.cursors.IntCursor)1 Function (com.google.common.base.Function)1 FluentIterable (com.google.common.collect.FluentIterable)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Iterables (com.google.common.collect.Iterables)1 ContextPreparer (io.crate.action.job.ContextPreparer)1 JobRequest (io.crate.action.job.JobRequest)1 SharedShardContexts (io.crate.action.job.SharedShardContexts)1 TransportJobAction (io.crate.action.job.TransportJobAction)1 BatchConsumerToResultReceiver (io.crate.action.sql.BatchConsumerToResultReceiver)1