private IndexValue getPutValueFromSrc(StoreKey key, IndexValue updateValue, IndexSegment indexSegmentOfUpdateValue)
      throws StoreException {
    IndexValue putValue = srcIndex.findKey(key, new FileSpan(srcIndex.getStartOffset(), updateValue.getOffset()),
        EnumSet.of(PersistentIndex.IndexEntryType.PUT));
    // in a non multi valued segment, if putValue is not found directly from the index, check if the PUT and DELETE
    // are the same segment so that the PUT entry can be constructed from the DELETE entry
    if (putValue == null && updateValue.isDelete()) {
      putValue = getPutValueFromDeleteEntry(key, updateValue, indexSegmentOfUpdateValue);
    }
    return putValue;
  }
Gets the {@link IndexValue} for the PUT from the {@link #srcIndex} (if it exists)
@param key the {@link StoreKey} whose PUT is required
@param updateValue the update (TTL update/delete) {@link IndexValue} associated with the same {@code key}
@param indexSegmentOfUpdateValue the {@link IndexSegment} that {@code updateValue} belongs to
@return the {@link IndexValue} for the PUT in the {@link #srcIndex} (if it exists)
@throws StoreException if there are problems with the index
ambry-store/src/main/java/com/github/ambry/store/BlobStoreCompactor.java