public HashMap<ByteStringRange, Instant> readDetectNewPartitionMissingPartitions() {
    @Nonnull HashMap<ByteStringRange, Instant> missingPartitions = new HashMap<>();
    Filter missingPartitionsFilter =
        FILTERS
            .chain()
            .filter(FILTERS.family().exactMatch(MetadataTableAdminDao.CF_MISSING_PARTITIONS))
            .filter(FILTERS.qualifier().exactMatch(MetadataTableAdminDao.QUALIFIER_DEFAULT))
            .filter(FILTERS.limit().cellsPerColumn(1));
    Row row = dataClient.readRow(tableId, getFullDetectNewPartition(), missingPartitionsFilter);

    if (row == null
        || row.getCells(
                MetadataTableAdminDao.CF_MISSING_PARTITIONS,
                MetadataTableAdminDao.QUALIFIER_DEFAULT)
            .isEmpty()) {
      return missingPartitions;
    }
    ByteString serializedMissingPartition =
        row.getCells(
                MetadataTableAdminDao.CF_MISSING_PARTITIONS,
                MetadataTableAdminDao.QUALIFIER_DEFAULT)
            .get(0)
            .getValue();
    try {
      missingPartitions = SerializationUtils.deserialize(serializedMissingPartition.toByteArray());
    } catch (SerializationException | NullPointerException exception) {
      LOG.warn("Failed to deserialize missingPartitions: {}", exception.toString());
    }
    return missingPartitions;
  }
@Test
  public void readMissingPartitionsWithoutDNPRow() {
    HashMap<ByteStringRange, Instant> missingPartitionsDuration = new HashMap<>();
    HashMap<ByteStringRange, Instant> actualMissingPartitionsDuration =
        metadataTableDao.readDetectNewPartitionMissingPartitions();
    assertEquals(missingPartitionsDuration, actualMissingPartitionsDuration);
  }