String getBlobIdString() {
    // we call getBlobIdString to set the return result of FutureResult<String>
    // when skipCompositeChunk is true, we don't generate composite blob, we return {@link PutBlobMetaInfo}
    if (options.skipCompositeChunk()) {
      return putBlobMetaInfo;
    } else {
      return blobId == null ? null : blobId.getID();
    }
  }
Return the blobId string associated with this operation if it was successful, or null if it failed. This should
(obviously) only be called once the operation is complete.
@return the blobId if the operation is successful; null otherwise.
ambry-router/src/main/java/com/github/ambry/router/PutOperation.java