private ServerErrorCode controlBlobStore(DataNodeId dataNodeId, PartitionId partitionId,
      short numReplicasCaughtUpPerPartition, BlobStoreControlAction storeControlRequestType)
      throws IOException, TimeoutException {
    AdminRequest adminRequest =
        new AdminRequest(AdminRequestOrResponseType.BlobStoreControl, partitionId, correlationId.incrementAndGet(),
            CLIENT_ID);
    BlobStoreControlAdminRequest controlRequest =
        new BlobStoreControlAdminRequest(numReplicasCaughtUpPerPartition, storeControlRequestType, adminRequest);
    ResponseInfo response = sendRequestGetResponse(dataNodeId, partitionId, controlRequest);
    AdminResponse adminResponse = AdminResponse.readFrom(new NettyByteBufDataInputStream(response.content()));
    response.release();
    return adminResponse.getError();
  }
Sends a {@link BlobStoreControlAdminRequest} to start or stop a store associated with {@code partitionId}
on {@code dataNodeId}.
@param dataNodeId the {@link DataNodeId} to contact.
@param partitionId the {@link PartitionId} to start or stop.
@param numReplicasCaughtUpPerPartition the minimum number of peers should catch up with partition if the store is
                                       being stopped
@param storeControlRequestType the type of control operation that will performed on certain store.
@return the {@link ServerErrorCode} that is returned.
@throws IOException
@throws TimeoutException
ambry-tools/src/main/java/com/github/ambry/tools/admin/ServerAdminTool.java