/* * Licensed to Crate under one or more contributor license agreements. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. Crate licenses this file * to you under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial * agreement. */ package io.crate.operation.collect; import com.google.common.collect.ImmutableList; import io.crate.action.job.SharedShardContext; import io.crate.blob.v2.BlobShard; import io.crate.data.Row; import io.crate.executor.transport.TransportActionProvider; import io.crate.metadata.Functions; import io.crate.metadata.shard.blob.BlobShardReferenceResolver; import io.crate.operation.InputFactory; import io.crate.operation.collect.collectors.BlobOrderedDocCollector; import io.crate.operation.collect.collectors.OrderedDocCollector; import io.crate.operation.reference.doc.blob.BlobReferenceResolver; import io.crate.planner.node.dql.RoutedCollectPhase; import org.elasticsearch.action.bulk.BulkRetryCoordinatorPool; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.threadpool.ThreadPool; import java.io.File; public class BlobShardCollectorProvider extends ShardCollectorProvider { private final BlobShard blobShard; private final InputFactory inputFactory; public BlobShardCollectorProvider(BlobShard blobShard, ClusterService clusterService, Functions functions, IndexNameExpressionResolver indexNameExpressionResolver, ThreadPool threadPool, Settings settings, TransportActionProvider transportActionProvider, BulkRetryCoordinatorPool bulkRetryCoordinatorPool) { super(clusterService, BlobShardReferenceResolver.create(blobShard), functions, indexNameExpressionResolver, threadPool, settings, transportActionProvider, bulkRetryCoordinatorPool, blobShard.indexShard()); inputFactory = new InputFactory(functions); this.blobShard = blobShard; } @Override protected CrateCollector.Builder getBuilder(RoutedCollectPhase collectPhase, boolean requiresScroll, JobCollectContext jobCollectContext) { return RowsCollector.builder(getBlobRows(collectPhase, requiresScroll), collectPhase.toCollect().size()); } private Iterable<Row> getBlobRows(RoutedCollectPhase collectPhase, boolean requiresRepeat) { Iterable<File> files = blobShard.blobContainer().getFiles(); Iterable<Row> rows = RowsTransformer.toRowsIterable(inputFactory, BlobReferenceResolver.INSTANCE, collectPhase, files); if (requiresRepeat) { return ImmutableList.copyOf(rows); } return rows; } public OrderedDocCollector getOrderedCollector(RoutedCollectPhase collectPhase, SharedShardContext sharedShardContext, JobCollectContext jobCollectContext, boolean requiresRepeat) { RoutedCollectPhase normalizedCollectPhase = collectPhase.normalize(shardNormalizer, null); return new BlobOrderedDocCollector(blobShard.indexShard().shardId(), getBlobRows(normalizedCollectPhase, requiresRepeat)); } }