class GrpcStoreSessionClient extends AbstractGrpcClient {

    @Override
    public HgStoreSessionBlockingStub getBlockingStub(ManagedChannel channel) {
        HgStoreSessionBlockingStub stub;
        stub = HgStoreSessionGrpc.newBlockingStub(channel);
        return stub;
    }

    private HgStoreSessionBlockingStub getBlockingStub(HgStoreNodeSession nodeSession) {
        HgStoreSessionBlockingStub stub =
                (HgStoreSessionBlockingStub) getBlockingStub(
                        nodeSession.getStoreNode().getAddress());
        return stub;
    }

    FeedbackRes doGet(HgStoreNodeSession nodeSession, String table, HgOwnerKey ownerKey) {<FILL_FUNCTION_BODY>}

    FeedbackRes doClean(HgStoreNodeSession nodeSession, int partId) {
        return this.getBlockingStub(nodeSession)
                   .clean(CleanReq.newBuilder()
                                  .setHeader(GrpcUtil.getHeader(nodeSession))
                                  .setPartition(partId)
                                  .build()
                   );
    }

    FeedbackRes doBatchGet(HgStoreNodeSession nodeSession, String table, List<HgOwnerKey> keyList) {
        BatchGetReq.Builder builder = BatchGetReq.newBuilder();
        builder.setHeader(GrpcUtil.getHeader(nodeSession)).setTable(table);

        for (HgOwnerKey key : keyList) {
            builder.addKey(GrpcUtil.toKey(key));
        }

        if (log.isDebugEnabled()) {
            log.debug("batchGet2: {}-{}-{}-{}", nodeSession, table, keyList, builder.build());
        }
        return this.getBlockingStub(nodeSession).batchGet2(builder.build());

    }

    FeedbackRes doBatch(HgStoreNodeSession nodeSession, String batchId, List<BatchEntry> entries) {
        BatchWriteReq.Builder writeReq = BatchWriteReq.newBuilder();
        writeReq.addAllEntry(entries);
        return this.getBlockingStub(nodeSession)
                   .batch(BatchReq.newBuilder()
                                  .setHeader(GrpcUtil.getHeader(nodeSession))
                                  .setWriteReq(writeReq)
                                  .setBatchId(batchId)
                                  .build()
                   );
    }

    FeedbackRes doTable(HgStoreNodeSession nodeSession, String table, TableMethod method) {
        return this.getBlockingStub(nodeSession)
                   .table(TableReq.newBuilder()
                                  .setHeader(GrpcUtil.getHeader(nodeSession))
                                  .setTableName(table)
                                  .setMethod(method)
                                  .build()
                   );
    }

    FeedbackRes doGraph(HgStoreNodeSession nodeSession, String graph, GraphMethod method) {
        return this.getBlockingStub(nodeSession)
                   .graph(GraphReq.newBuilder()
                                  .setHeader(GrpcUtil.getHeader(nodeSession))
                                  .setGraphName(graph)
                                  .setMethod(method)
                                  .build()
                   );
    }

    public long count(HgStoreNodeSession nodeSession, String table) {
        Agg agg = this.getBlockingStub(nodeSession).withDeadline(Deadline.after(24, TimeUnit.HOURS))
                      .count(ScanStreamReq.newBuilder()
                                          .setHeader(getHeader(nodeSession))
                                          .setTable(table)
                                          .setMethod(ScanMethod.ALL)
                                          .build()
                      );
        return agg.getCount();
    }
}

        if (log.isDebugEnabled()) {
            log.debug("doGet: {}-{}-{}-{}", nodeSession, table, ownerKey, GetReq.newBuilder()
                                                                                .setHeader(
                                                                                        GrpcUtil.getHeader(
                                                                                                nodeSession))
                                                                                .setTk(GrpcUtil.toTk(
                                                                                        table,
                                                                                        ownerKey))
                                                                                .build());
        }
        return this.getBlockingStub(nodeSession)
                   .get2(GetReq.newBuilder()
                               .setHeader(GrpcUtil.getHeader(nodeSession))
                               .setTk(GrpcUtil.toTk(table, ownerKey))
                               .build()
                   );
    
<methods>public void <init>() ,public AbstractAsyncStub getAsyncStub(ManagedChannel) ,public AbstractAsyncStub getAsyncStub(java.lang.String) ,public abstract AbstractBlockingStub getBlockingStub(ManagedChannel) ,public AbstractBlockingStub getBlockingStub(java.lang.String) ,public ManagedChannel[] getChannels(java.lang.String) <variables>private Map<java.lang.String,HgPair<ManagedChannel,AbstractAsyncStub>[]> asyncStubs,private Map<java.lang.String,HgPair<ManagedChannel,AbstractBlockingStub>[]> blockingStubs,private static Map<java.lang.String,ManagedChannel[]> channels,private static int concurrency,private static org.apache.hugegraph.store.client.util.HgStoreClientConfig config,private static java.util.concurrent.atomic.AtomicLong counter,private java.util.concurrent.ThreadPoolExecutor executor,private static long limit,private static int n