private void processEntryForContainerBucket(ScanResults results, IndexEntry indexEntry, boolean isValid,
      Map<StoreKey, IndexFinalState> keyFinalStates) {
    IndexValue indexValue = indexEntry.getValue();
    results.updateContainerPhysicalStorageUsageAndStoreKey(indexValue.getAccountId(), indexValue.getContainerId(),
        indexValue.getSize(), indexValue.isPut() ? 1 : 0);
    if (isValid && indexValue.isPut()) {
      // delete and TTL update records does not count towards valid data size for usage (containers)
      results.updateContainerBaseBucket(indexValue.getAccountId(), indexValue.getContainerId(), indexValue.getSize());
      long expOrDelTimeInMs = indexValue.getExpiresAtMs();
      IndexFinalState finalState = keyFinalStates.get(indexEntry.getKey());
      if (finalState != null && finalState.isDelete()) {
        long deleteTimeInMs = finalState.getOperationTime();
        expOrDelTimeInMs =
            expOrDelTimeInMs != Utils.Infinite_Time && expOrDelTimeInMs < deleteTimeInMs ? expOrDelTimeInMs
                : deleteTimeInMs;
      }
      if (expOrDelTimeInMs != Utils.Infinite_Time) {
        handleContainerBucketUpdate(results, indexValue, expOrDelTimeInMs, SUBTRACT);
      }
    }
  }
Process a {@link List} of valid {@link IndexEntry} based on forecast boundaries and populate corresponding
container buckets in the given {@link ScanResults}.
@param results the {@link ScanResults} to be populated
@param indexEntry a valid {@link IndexEntry} to be processed
@param isValid true if this index entry is valid
@param keyFinalStates a {@link Map} of key to {@link IndexFinalState}.
ambry-store/src/main/java/com/github/ambry/store/BlobStoreStats.java