All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.ydb.scheme.impl.GrpcSchemeRpc Maven / Gradle / Ivy

package tech.ydb.scheme.impl;

import java.util.concurrent.CompletableFuture;

import javax.annotation.ParametersAreNonnullByDefault;
import javax.annotation.WillClose;
import javax.annotation.WillNotClose;

import tech.ydb.core.Result;
import tech.ydb.core.Status;
import tech.ydb.core.grpc.GrpcRequestSettings;
import tech.ydb.core.grpc.GrpcTransport;
import tech.ydb.core.operation.OperationBinder;
import tech.ydb.proto.scheme.SchemeOperationProtos.DescribePathRequest;
import tech.ydb.proto.scheme.SchemeOperationProtos.DescribePathResponse;
import tech.ydb.proto.scheme.SchemeOperationProtos.DescribePathResult;
import tech.ydb.proto.scheme.SchemeOperationProtos.ListDirectoryRequest;
import tech.ydb.proto.scheme.SchemeOperationProtos.ListDirectoryResponse;
import tech.ydb.proto.scheme.SchemeOperationProtos.ListDirectoryResult;
import tech.ydb.proto.scheme.SchemeOperationProtos.MakeDirectoryRequest;
import tech.ydb.proto.scheme.SchemeOperationProtos.MakeDirectoryResponse;
import tech.ydb.proto.scheme.SchemeOperationProtos.RemoveDirectoryRequest;
import tech.ydb.proto.scheme.SchemeOperationProtos.RemoveDirectoryResponse;
import tech.ydb.proto.scheme.v1.SchemeServiceGrpc;


/**
 * @author Sergey Polovko
 */
@ParametersAreNonnullByDefault
public final class GrpcSchemeRpc implements SchemeRpc {

    private final GrpcTransport transport;
    private final boolean transportOwned;

    private GrpcSchemeRpc(GrpcTransport transport, boolean transportOwned) {
        this.transport = transport;
        this.transportOwned = transportOwned;
    }

    public static GrpcSchemeRpc useTransport(@WillNotClose GrpcTransport transport) {
        return new GrpcSchemeRpc(transport, false);
    }

    public static GrpcSchemeRpc ownTransport(@WillClose GrpcTransport transport) {
        return new GrpcSchemeRpc(transport, true);
    }

    @Override
    public CompletableFuture makeDirectory(MakeDirectoryRequest request, GrpcRequestSettings settings) {
        return transport
                .unaryCall(SchemeServiceGrpc.getMakeDirectoryMethod(), settings, request)
                .thenApply(OperationBinder.bindSync(MakeDirectoryResponse::getOperation));

    }

    @Override
    public CompletableFuture removeDirectory(RemoveDirectoryRequest request, GrpcRequestSettings settings) {
        return transport
                .unaryCall(SchemeServiceGrpc.getRemoveDirectoryMethod(), settings, request)
                .thenApply(OperationBinder.bindSync(RemoveDirectoryResponse::getOperation));
    }

    @Override
    public CompletableFuture> describeDirectory(ListDirectoryRequest request,
                                                                              GrpcRequestSettings settings) {
        return transport
                .unaryCall(SchemeServiceGrpc.getListDirectoryMethod(), settings, request)
                .thenApply(OperationBinder.bindSync(ListDirectoryResponse::getOperation, ListDirectoryResult.class));
    }

    @Override
    public CompletableFuture> describePath(DescribePathRequest request,
                                                                        GrpcRequestSettings settings) {
        return transport
                .unaryCall(SchemeServiceGrpc.getDescribePathMethod(), settings, request)
                .thenApply(OperationBinder.bindSync(DescribePathResponse::getOperation, DescribePathResult.class));
    }

    @Override
    public String getDatabase() {
        return transport.getDatabase();
    }

    @Override
    public void close() {
        if (transportOwned) {
            transport.close();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy