Description
HDFS-7339 adds support in NameNode for persisting block groups. For memory efficiency, erasure coded blocks under the striping layout are not stored in BlockManager#blocksMap. Instead, entire block groups are stored in BlockGroupManager#blockGroups. When a block report arrives from the DataNode, it should be processed under the block group that it belongs to. The following naming protocol is used to calculate the group of a given block:
* HDFS-EC introduces a hierarchical protocol to name blocks and groups:
* Contiguous: {reserved block IDs | flag | block ID}
* Striped: {reserved block IDs | flag | block group ID | index in group}
*
* Following n bits of reserved block IDs, The (n+1)th bit in an ID
* distinguishes contiguous (0) and striped (1) blocks. For a striped block,
* bits (n+2) to (64-m) represent the ID of its block group, while the last m
* bits represent its index of the group. The value m is determined by the
* maximum number of blocks in a group (MAX_BLOCKS_IN_GROUP).