LExtent
Extent是对象内的基本数据管理单元,数据压缩、数据校验、数据共享等功能都是基于Extent粒度实现的。这里的Extent是对象内的,并不是磁盘内的,所以我们称为lextent,和磁盘内的pextent以示区分。
struct Extent { // 对象内逻辑偏移,不需要块对齐。 uint32_t logical_offset = 0; // 逻辑段长度,不需要块对齐。 uint32_t length = 0; // 当logical_offset是块对齐时,blob_offset始终为0; // 不是块对齐时,将逻辑段内的数据通过Blob映射到磁盘物理段会产生物理段内的偏移称为blob_offset。 uint32_t blob_offset = 0; }
logical_offset、length、blob_offset关系如下图: