@Override
  public void start() {
    // Use a static clustermap file on the host to know partitions assigned to the host.
    // Assume that there is no helix/zookeeper available post disaster.
    // In this design, server does not talk to vcr but directly to Azure.
    this.clusterMap.getReplicaIds(this.dataNodeId).forEach(replica -> {
      try {
        addCloudReplica(String.valueOf(replica.getPartitionId().getId()));
      } catch (Throwable e) {
        logger.error("Failed to add cloud replica for partition-{}", replica.getPartitionId().getId());
      }
    });
    started = true;
    startupLatch.countDown();
    logger.info("RecoveryManager started.");
  }
Constructor for {@link RecoveryManager}
@param replicationConfig {@link ReplicationConfig} object.
@param clusterMapConfig {@link ClusterMapConfig} object.
@param storeConfig {@link StoreConfig} object.
@param storeManager {@link StoreManager} object to get stores for replicas.
@param storeKeyFactory {@link StoreKeyFactory} object.
@param clusterMap {@link ClusterMap} object to get the ambry datanode cluster map.
@param scheduler {@link ScheduledExecutorService} object for scheduling token persistence.
@param currentNode {@link DataNodeId} representing the current node.
@param metricRegistry {@link MetricRegistry} object.
@param requestNotification {@link NotificationSystem} object to notify on events.
@param storeKeyConverterFactory {@link StoreKeyConverterFactory} object.
@param transformerClassName name of the class to transform and validate replication messages.
@param vcrClusterSpectator {@link VcrClusterSpectator} object to get changes in vcr cluster map.
@param clusterParticipant {@link ClusterParticipant} object to get changes in partition state of partitions on datanodes.
@throws ReplicationException
ambry-cloud/src/main/java/com/github/ambry/cloud/RecoveryManager.java