private ServerErrorCode handleStartStoreRequest(PartitionId partitionId) {
    ServerErrorCode error = validateRequest(partitionId, RequestOrResponseType.AdminRequest, true);
    if (!error.equals(ServerErrorCode.NoError)) {
      logger.debug("Validate request fails for {} with error code {} when trying to start store", partitionId, error);
      return error;
    }
    // 1. temporarily disable metadata request to add replica to ReplicationManager after starting the store
    Collection<PartitionId> partitionIds = Collections.singletonList(partitionId);
    controlRequestForPartitions(EnumSet.of(RequestOrResponseType.ReplicaMetadataRequest), partitionIds, false);
    if (!storeManager.startBlobStore(partitionId)) {
      logger.error("Starting BlobStore fails on {}", partitionId);
      return ServerErrorCode.UnknownError;
    }
    // 2. add replica to replication manager if needed
    if (replicationEngine instanceof ReplicationManager) {
      // attempt to add replica to ReplicationManager in case the store was not started during server startup
      // we don't check the result of adding replica as it returns false when replica is already present, which is the
      // most common case
      ((ReplicationManager) replicationEngine).addReplica(storeManager.getReplica(partitionId.toPathString()));
    }
    // 3. enable requests on this store
    controlRequestForPartitions(
        EnumSet.of(RequestOrResponseType.GetRequest, RequestOrResponseType.ReplicaMetadataRequest,
            RequestOrResponseType.PutRequest, RequestOrResponseType.DeleteRequest,
            RequestOrResponseType.TtlUpdateRequest), partitionIds, true);
    if (!replicationEngine.controlReplicationForPartitions(partitionIds, Collections.emptyList(), true)) {
      logger.error("Could not enable replication on {}", partitionIds);
      return ServerErrorCode.UnknownError;
    }
    // 4. reset partition state if it's in error state (will trigger state transition)
    boolean isLocalStoreInErrorState =
        partitionId.getReplicaIdsByState(ReplicaState.ERROR, currentNode.getDatacenterName())
            .stream()
            .anyMatch(r -> r.getDataNodeId().getHostname().equals(currentNode.getHostname()));
    if (isLocalStoreInErrorState && clusterParticipant != null) {
      if (!clusterParticipant.resetPartitionState(partitionId.toPathString())) {
        logger.error("Failed to reset partition {}", partitionId);
        return ServerErrorCode.UnknownError;
      }
    }
    // 5. remove replica from stopped list (if Helix is adopted)
    List<PartitionId> failToUpdateList =
        storeManager.setBlobStoreStoppedState(Collections.singletonList(partitionId), false);
    if (!failToUpdateList.isEmpty() && clusterParticipant != null) {
      logger.error("Fail to remove BlobStore(s) {} from stopped list after start operation completed",
          failToUpdateList.toArray());
      return ServerErrorCode.UnknownError;
    }
    // 6. enable compaction on this store
    if (!storeManager.controlCompactionForBlobStore(partitionId, true)) {
      logger.error("Enable compaction fails on given BlobStore {}", partitionId);
      return ServerErrorCode.UnknownError;
    }
    logger.info("Store is successfully started and functional for partition: {}", partitionId);
    return ServerErrorCode.NoError;
  }
Handles admin request that starts BlobStore
@param partitionId the {@link PartitionId} associated with BlobStore
@return {@link ServerErrorCode} represents result of handling admin request.
ambry-server/src/main/java/com/github/ambry/server/AmbryServerRequests.java