class GrpcStoreStateClient extends AbstractGrpcClient {

    private final PDConfig pdConfig;
    private final PDClient pdClient;

    public GrpcStoreStateClient(PDConfig pdConfig) {
        this.pdConfig = pdConfig;
        pdClient = PDClient.create(this.pdConfig);
    }

    public Set<ScanState> getScanState() throws Exception {<FILL_FUNCTION_BODY>}

    @Override
    public AbstractBlockingStub getBlockingStub(ManagedChannel channel) {
        HgStoreStateBlockingStub stub;
        stub = HgStoreStateGrpc.newBlockingStub(channel);
        return stub;
    }
}

        try {
            List<Metapb.Store> activeStores = pdClient.getActiveStores();
            Set<ScanState> states = activeStores.parallelStream().map(node -> {
                String address = node.getAddress();
                HgStoreStateBlockingStub stub = (HgStoreStateBlockingStub) getBlockingStub(address);
                SubStateReq req = SubStateReq.newBuilder().build();
                return stub.getScanState(req);
            }).collect(Collectors.toSet());
            return states;
        } catch (Exception e) {
            throw e;
        }

    
<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