Search in sources :

Example 1 with PrestoThriftSplitBatch

use of com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch in project presto by prestodb.

the class ThriftTpchService method getSplitsSync.

private static PrestoThriftSplitBatch getSplitsSync(PrestoThriftSchemaTableName schemaTableName, int maxSplitCount, PrestoThriftNullableToken nextToken) {
    int totalParts = DEFAULT_NUMBER_OF_SPLITS;
    // last sent part
    int partNumber = nextToken.getToken() == null ? 0 : Ints.fromByteArray(nextToken.getToken().getId());
    int numberOfSplits = min(maxSplitCount, totalParts - partNumber);
    List<PrestoThriftSplit> splits = new ArrayList<>(numberOfSplits);
    for (int i = 0; i < numberOfSplits; i++) {
        SplitInfo splitInfo = normalSplit(schemaTableName.getSchemaName(), schemaTableName.getTableName(), partNumber + 1, totalParts);
        splits.add(new PrestoThriftSplit(new PrestoThriftId(SPLIT_INFO_CODEC.toJsonBytes(splitInfo)), ImmutableList.of()));
        partNumber++;
    }
    PrestoThriftId newNextToken = partNumber < totalParts ? new PrestoThriftId(Ints.toByteArray(partNumber)) : null;
    return new PrestoThriftSplitBatch(splits, newNextToken);
}
Also used : PrestoThriftSplitBatch(com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch) PrestoThriftId(com.facebook.presto.thrift.api.connector.PrestoThriftId) ArrayList(java.util.ArrayList) PrestoThriftSplit(com.facebook.presto.thrift.api.connector.PrestoThriftSplit)

Example 2 with PrestoThriftSplitBatch

use of com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch in project presto by prestodb.

the class ThriftIndexedTpchService method getIndexSplitsSync.

@Override
protected PrestoThriftSplitBatch getIndexSplitsSync(PrestoThriftSchemaTableName schemaTableName, List<String> indexColumnNames, PrestoThriftPageResult keys, int maxSplitCount, PrestoThriftNullableToken nextToken) throws PrestoThriftServiceException {
    checkArgument(NUMBER_OF_INDEX_SPLITS <= maxSplitCount, "maxSplitCount for lookup splits is too low");
    checkArgument(nextToken.getToken() == null, "no continuation is supported for lookup splits");
    int totalKeys = keys.getRowCount();
    int partSize = totalKeys / NUMBER_OF_INDEX_SPLITS;
    List<PrestoThriftSplit> splits = new ArrayList<>(NUMBER_OF_INDEX_SPLITS);
    for (int splitIndex = 0; splitIndex < NUMBER_OF_INDEX_SPLITS; splitIndex++) {
        int begin = partSize * splitIndex;
        int end = partSize * (splitIndex + 1);
        if (splitIndex + 1 == NUMBER_OF_INDEX_SPLITS) {
            // add remainder to the last split
            end = totalKeys;
        }
        if (begin == end) {
            // split is empty, skip it
            continue;
        }
        SplitInfo splitInfo = indexSplit(schemaTableName.getSchemaName(), schemaTableName.getTableName(), indexColumnNames, thriftPageToList(keys, begin, end));
        splits.add(new PrestoThriftSplit(new PrestoThriftId(SPLIT_INFO_CODEC.toJsonBytes(splitInfo)), ImmutableList.of()));
    }
    return new PrestoThriftSplitBatch(splits, null);
}
Also used : PrestoThriftSplitBatch(com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch) PrestoThriftId(com.facebook.presto.thrift.api.connector.PrestoThriftId) ArrayList(java.util.ArrayList) PrestoThriftSplit(com.facebook.presto.thrift.api.connector.PrestoThriftSplit)

Example 3 with PrestoThriftSplitBatch

use of com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch in project presto by prestodb.

the class ThriftIndexPageSource method loadAllSplits.

private boolean loadAllSplits() {
    if (haveSplits) {
        return true;
    }
    // check if request for splits was sent
    if (splitFuture == null) {
        // didn't start fetching splits, send the first request now
        splitFuture = sendSplitRequest(null);
        statusFuture = toCompletableFuture(nonCancellationPropagating(splitFuture));
    }
    if (!splitFuture.isDone()) {
        // split request is in progress
        return false;
    }
    // split request is ready
    PrestoThriftSplitBatch batch = getFutureValue(splitFuture);
    splits.addAll(batch.getSplits());
    // check if it's possible to request more splits
    if (batch.getNextToken() != null) {
        // can get more splits, send request
        splitFuture = sendSplitRequest(batch.getNextToken());
        statusFuture = toCompletableFuture(nonCancellationPropagating(splitFuture));
        return false;
    } else {
        // no more splits
        splitFuture = null;
        statusFuture = null;
        haveSplits = true;
        return true;
    }
}
Also used : PrestoThriftSplitBatch(com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch)

Example 4 with PrestoThriftSplitBatch

use of com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch in project presto by prestodb.

the class ThriftIndexPageSource method sendSplitRequest.

private ListenableFuture<PrestoThriftSplitBatch> sendSplitRequest(@Nullable PrestoThriftId nextToken) {
    long start = System.nanoTime();
    ListenableFuture<PrestoThriftSplitBatch> future = client.get(thriftHeaders).getIndexSplits(schemaTableName, lookupColumnNames, outputColumnNames, keys, outputConstraint, MAX_SPLIT_COUNT, new PrestoThriftNullableToken(nextToken));
    future = catchingThriftException(future);
    future.addListener(() -> readTimeNanos.addAndGet(System.nanoTime() - start), directExecutor());
    return future;
}
Also used : PrestoThriftSplitBatch(com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch) PrestoThriftNullableToken(com.facebook.presto.thrift.api.connector.PrestoThriftNullableToken)

Aggregations

PrestoThriftSplitBatch (com.facebook.presto.thrift.api.connector.PrestoThriftSplitBatch)4 PrestoThriftId (com.facebook.presto.thrift.api.connector.PrestoThriftId)2 PrestoThriftSplit (com.facebook.presto.thrift.api.connector.PrestoThriftSplit)2 ArrayList (java.util.ArrayList)2 PrestoThriftNullableToken (com.facebook.presto.thrift.api.connector.PrestoThriftNullableToken)1