private void processDeleteUpdateLogSegmentHelper(ScanResults results, StoreKey key, IndexValue deleteValue,
      IndexValue originalPutValue, int operator) {
    long operationTimeInMs = deleteValue.getOperationTimeInMs();
    if (operationTimeInMs == Utils.Infinite_Time) {
      operationTimeInMs =
          index.getIndexSegments().floorEntry(deleteValue.getOffset()).getValue().getLastModifiedTimeMs();
    }
    results.updateLogSegmentBaseBucket(deleteValue.getOffset().getName(), operator * deleteValue.getSize());
    if (!isExpired(originalPutValue.getExpiresAtMs(), operationTimeInMs)) {
      handleLogSegmentDeletedBucketUpdate(results, originalPutValue, operationTimeInMs, operator * SUBTRACT);
      if (originalPutValue.getExpiresAtMs() != Utils.Infinite_Time) {
        // make appropriate updates to avoid double counting
        handleLogSegmentExpiredBucketUpdate(results, originalPutValue, originalPutValue.getExpiresAtMs(),
            operator * ADD);
      } else if (deleteValue.isTtlUpdate()) {
        // This blob has a PUT and TTL_UPDATE, because of DELETE, now TTL_UPDATE is not valid any more.
        try {
          IndexValue ttlUpdateValue =
              index.findKey(key, new FileSpan(originalPutValue.getOffset(), deleteValue.getOffset()),
                  EnumSet.of(PersistentIndex.IndexEntryType.TTL_UPDATE));
          if (ttlUpdateValue != null) {
            handleLogSegmentDeletedBucketUpdate(results, ttlUpdateValue, operationTimeInMs, operator * SUBTRACT);
          }
        } catch (StoreException e) {
          logger.error(
              "Failed to find TTL_UPDATE IndexValue for " + key + " when processing new DELETE: " + deleteValue, e);
        }
      }
    }
  }
Update deleted bucket based on given DELETE IndexValue. For DELETE IndexValue, we should
1. Add it's size to the base bucket in the {@link ScanResults}.$
2. Subtract original PUT's size from DELETE's operationTimeInMs bucket.
3. If TTL_UPDATE IndexValue exist, subtract TTL_UPDATE's size from DELETE's operationTimeInMs bucket as well.
@param results the {@link ScanResults} to update the log segment deleted bucket.
@param key the {@link StoreKey} of IndexValue to process.
@param deleteValue the DELETE {@link IndexValue} to process.
@param originalPutValue the original PUT {@link IndexValue} of the same key.
@param operator if the operator is {@link #SUBTRACT}, then adding would become subtracting, and subtracting would
                become adding. Set operator to {@link #SUBTRACT} if you want to revert the operation for the given
                DELETE {@link IndexValue}.
ambry-store/src/main/java/com/github/ambry/store/BlobStoreStats.java