protected ByteBuf decompressContent(ByteBuf sourceBuffer) {
      if (!isChunkCompressed) {
        // Blob is not compressed.  Return source buffer and increase the counter.
        return sourceBuffer;
      }

      try {
        return decompressionService.decompress(sourceBuffer.duplicate(), routerConfig.routerMaxPutChunkSizeBytes, true);
      } catch (Exception ex) {
        // Note: No need to emit metrics here because decompress() already emits failure metrics.
        logger.error("Failed to decompress chunk data for chunkBlobId " + chunkBlobId + " due to exception.", ex);
        setOperationException(buildChunkException("Exception thrown on decompressing the data chunk", ex,
            RouterErrorCode.UnexpectedInternalError));
        setOperationCompleted();
        return null;
      } finally {
        // If the decompressed content is valid, don't use sourceBuffer anymore, so we release it.
        // If the decompressed content is null, which means the operation failed, just release the sourceBuffer.
        sourceBuffer.release();
      }
    }
Decompress the compressed buffer specified.
If the buffer is not compressed, based on blobCompressed property, then return the input buffer.

@param sourceBuffer The source buffer to decompress.
@return A new buffer if decompressed successfully and the source buffer is released.
        The source buffer if it is not compressed.
        NULL if decompression failed and the source buffer is released.
ambry-router/src/main/java/com/github/ambry/router/GetBlobOperation.java