class BlockManagerImpl implements BlockManager {

  @Override
  public List<BlockData> listBlock(Container container, long startLocalID, int
      count) throws IOException {
    Preconditions.checkNotNull(container, "container cannot be null");
    Preconditions.checkState(startLocalID >= 0, "startLocal ID cannot be " +
        "negative");
    Preconditions.checkArgument(count > 0,
        "Count must be a positive number.");
    container.readLock();
    try {
      List<BlockData> result = null;
      KeyValueContainerData cData =
          (KeyValueContainerData) container.getContainerData();
      try (ReferenceCountedDB db = BlockUtils.getDB(cData, config)) {
        result = new ArrayList<>();
        List<? extends Table.KeyValue<String, BlockData>> range =
            db.getStore().getBlockDataTable()
            .getSequentialRangeKVs(Long.toString(startLocalID), count,
                MetadataKeyFilters.getUnprefixedKeyFilter());
        for (Table.KeyValue<String, BlockData> entry: range) {
          BlockData data = new BlockData(entry.getValue().getBlockID());
          result.add(data);
        }
        return result;
      }
    } finally {
      container.readUnlock();
    }
  }

  public  BlockManagerImpl(ConfigurationSource conf);

}