private Map<StoreKey, ReplicationStatus> getBlobStatusByReplica(File[] replicas,
      Map<File, DumpIndexTool.IndexProcessingResults> results) throws Exception {
    Map<StoreKey, ReplicationStatus> keyReplicationStatusMap = new HashMap<>();
    Map<StoreKey, StoreKey> convertMap = dumpIndexTool.createConversionKeyMap(replicas, results);
    for (File replica : replicas) {
      DumpIndexTool.IndexProcessingResults result = results.get(replica);
      for (Map.Entry<StoreKey, DumpIndexTool.Info> entry : result.getKeyToState().entrySet()) {
        StoreKey key = entry.getKey();
        StoreKey newKey = convertMap.get(key);
        boolean isDeprecated = false;
        if (newKey == null) {
          newKey = key;
          isDeprecated = true;
        }
        ReplicationStatus status =
            keyReplicationStatusMap.computeIfAbsent(newKey, k -> new ReplicationStatus(replicas));
        DumpIndexTool.Info info = entry.getValue();
        status.setBelongsToRecentIndexSegment(info.isInRecentIndexSegment());
        if (!isDeprecated && info.getStates().contains(DumpIndexTool.BlobState.Valid)) {
          status.addAvailable(replica);
        } else {
          status.setIsDeprecated(isDeprecated);
          status.addDeletedOrExpiredOrDeprecated(replica);
        }
        if (info.isPermanent()) {
          status.addAsPermanent(replica);
        }
      }
    }
    return keyReplicationStatusMap;
  }
Walks through all replicas and collects blob status in each of them.
@param replicas An Array of replica directories from which blob status' need to be collected
@param results the results of processing the indexes of the given {@code replicas}.
@return a {@link Map} of BlobId to {@link ReplicationStatus}.  If key has a conversion
equivalent, the map key will be of that converted equivalent.
If storeKeyConverter returns null, count the key as deleted / expired
@throws Exception
ambry-tools/src/main/java/com/github/ambry/store/ConsistencyCheckerTool.java