@Override
  public boolean equals(Object o) {
    if (!(o instanceof CloudBlobMetadata)) {
      return false;
    }
    if (o == this) {
      return true;
    }
    CloudBlobMetadata om = (CloudBlobMetadata) o;
    return (Objects.equals(id, om.id) && Objects.equals(partitionId, om.partitionId) && accountId == om.accountId
        && containerId == om.containerId && size == om.size && creationTime == om.creationTime
        && uploadTime == om.uploadTime && expirationTime == om.expirationTime && deletionTime == om.deletionTime
        && nameSchemeVersion == om.nameSchemeVersion && encryptionOrigin == om.encryptionOrigin && Objects.equals(
        vcrKmsContext, om.vcrKmsContext) && Objects.equals(cryptoAgentFactory, om.cryptoAgentFactory)
        && encryptedSize == om.encryptedSize && lifeVersion == om.lifeVersion);
  }
@param retentionPeriod period for which blobs marked a deleted aren't compacted away.
@return true if deletion time is outside retention window or blob is expired. false otherwise.
ambry-cloud/src/main/java/com/github/ambry/cloud/CloudBlobMetadata.java