@Override
  public CompletableFuture<Void> snapshot(SnapshotDescription snapshotDesc) {
    SnapshotProtos.SnapshotDescription snapshot =
      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);
    try {
      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);
    } catch (IllegalArgumentException e) {
      return failedFuture(e);
    }
    CompletableFuture<Void> future = new CompletableFuture<>();
    final SnapshotRequest request = SnapshotRequest.newBuilder().setSnapshot(snapshot)
      .setNonceGroup(ng.getNonceGroup()).setNonce(ng.newNonce()).build();
    addListener(this.<SnapshotResponse> newMasterCaller()
      .action((controller, stub) -> this.<SnapshotRequest, SnapshotResponse, SnapshotResponse> call(
        controller, stub, request, (s, c, req, done) -> s.snapshot(c, req, done), resp -> resp))
      .call(), (resp, err) -> {
        if (err != null) {
          future.completeExceptionally(err);
          return;
        }
        waitSnapshotFinish(snapshotDesc, future, resp);
      });
    return future;
  }
Compact the region at specific region server.
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java