class RestClusterClient implements ClusterClient<T> {

	@Override
	public CompletableFuture<Map<String, Object>> getAccumulators(JobID jobID, ClassLoader loader) {
		final JobAccumulatorsHeaders accumulatorsHeaders = JobAccumulatorsHeaders.getInstance();
		final JobAccumulatorsMessageParameters accMsgParams = accumulatorsHeaders.getUnresolvedMessageParameters();
		accMsgParams.jobPathParameter.resolve(jobID);
		accMsgParams.includeSerializedAccumulatorsParameter.resolve(Collections.singletonList(true));

		CompletableFuture<JobAccumulatorsInfo> responseFuture = sendRequest(
			accumulatorsHeaders,
			accMsgParams);

		return responseFuture
			.thenApply(JobAccumulatorsInfo::getSerializedUserAccumulators)
			.thenApply(accumulators -> {
				try {
					return AccumulatorHelper.deserializeAndUnwrapAccumulators(accumulators, loader);
				} catch (Exception e) {
					throw new CompletionException("Cannot deserialize and unwrap accumulators properly.", e);
				}
			});
	}

	public  RestClusterClient(Configuration config, T clusterId);
	public  RestClusterClient(
			Configuration config,
			T clusterId,
			ClientHighAvailabilityServices clientHAServices);
	@VisibleForTesting  RestClusterClient(
		Configuration configuration,
		@Nullable RestClient restClient,
		T clusterId,
		WaitStrategy waitStrategy);
	private  RestClusterClient(
		Configuration configuration,
		@Nullable RestClient restClient,
		T clusterId,
		WaitStrategy waitStrategy,
		ClientHighAvailabilityServices clientHAServices);

}