@Override
  public void onPartitionBecomeDroppedFromOffline(String partitionName) {
    participantMetrics.incStateTransitionMetric(partitionName, ReplicaState.OFFLINE, ReplicaState.DROPPED);
    // remove old replica from StorageManager and delete store directory (this also includes recover from decommission
    // failure and remove old replica from replication/stats manager)
    PartitionStateChangeListener storageManagerListener =
        partitionStateChangeListeners.get(StateModelListenerType.StorageManagerListener);
    try {
      if (storageManagerListener != null) {
        storageManagerListener.onPartitionBecomeDroppedFromOffline(partitionName);
      }
    } catch (Exception e) {
      localPartitionAndState.put(partitionName, ReplicaState.ERROR);
      throw e;
    }
    logger.info("Purging disabled state of dropped replica {} from both InstanceConfig and DataNodeConfig",
        partitionName);
    setPartitionDisabledState(partitionName, false);
    localPartitionAndState.remove(partitionName);
    participantMetrics.partitionDroppedCount.inc();
    participantMetrics.decStateTransitionMetric(partitionName, ReplicaState.OFFLINE, ReplicaState.DROPPED);
    participantMetrics.clearStateTransitionMetric(partitionName);
  }
If FileCopyProtocol is enabled, we will invoke the FileCopyStateChangeListener
ambry-clustermap/src/main/java/com/github/ambry/clustermap/HelixParticipant.java