public Set<BlobMatchStatus> isEqual(Object o) {
    if (o == null) {
      return Collections.singleton(BlobMatchStatus.BLOB_ABSENT);
    }
    if (getClass() != o.getClass()) {
      return Collections.singleton(BlobMatchStatus.BLOB_STATE_CLASS_MISMATCH);
    }
    Set<BlobMatchStatus> status = new HashSet<>();
    MessageInfo that = (MessageInfo) o;
    if (!Objects.equals(key, that.key)) {
      status.add(BlobMatchStatus.BLOB_STATE_KEY_MISMATCH);
    }
    if (size != that.size) {
      status.add(BlobMatchStatus.BLOB_STATE_SIZE_MISMATCH);
    }
    if (expirationTimeInMs != that.expirationTimeInMs) {
      status.add(BlobMatchStatus.BLOB_STATE_EXPIRY_MISMATCH);
    }
    if (isDeleted != that.isDeleted) {
      status.add(BlobMatchStatus.BLOB_STATE_OBSOLETE_MISMATCH);
    }
    if (!Objects.equals(crc, that.crc)) {
      status.add(BlobMatchStatus.BLOB_STATE_CRC_MISMATCH);
    }
    if (lifeVersion != that.lifeVersion) {
      status.add(BlobMatchStatus.BLOB_STATE_VERSION_MISMATCH);
    }
    if (status.isEmpty()) {
      return Collections.singleton(BlobMatchStatus.BLOB_STATE_MATCH);
    }
    return status;
  }
Compares blob state from server-blob and cloud blob
@param o
@return
ambry-api/src/main/java/com/github/ambry/store/MessageInfo.java