Read Shard format#
The Read Shard has the following structure:
bytes [0,
SHARD_OFFSET_MAGIC
[: The shard magicbytes [
SHARD_OFFSET_MAGIC
,objects_position
[: The header (shard_header_t
)bytes [
objects_position
,index_position
[:objects_count
times the size of the object (u_int64_t
) followed by the content of the objectbytes [
index_position
,hash_position
[: An array of index entries. The size of the array is provided bycmph_size
after building the hash function. An index entry is made of the key (ofSHARD_KEY_LEN
bytes) and the object position (u_int64_t
) in the range [objects_position
,index_position
[. If the object position isUINT64_MAX
, this means the object has been deleted.bytes [
hash_position
, …[: The hash function, as written bycmph_dump
In more details:
Section |
pos |
description (length) |
---|---|---|
SHARD_MAGIC |
0 |
SHARD_OFFSET_MAGIC (32) |
header |
32 |
Header (56) |
|
uint64_t (8) |
|
|
uint64_t (8) |
|
|
uint64_t (8) |
|
|
uint64_t (8) |
|
|
uint64_t (8) |
|
|
uint64_t (8) |
|
|
uint64_t (8) |
|
Objects |
<op> |
|
|
uint64_t (8) |
|
|
bytes (<object0 size>) |
|
|
uint64_t (8) |
|
|
bytes (<object1 size> |
|
… |
||
Index |
<ip> |
|
|
SHARD_KEY_LEN (32) |
|
|
uint64_t (8) |
|
… |
||
Hash map |
<hp> |
|
|
<as written by cmph_dump> |
SHARD_MAGIC
is the constant SWHShard
(with \x00
padding to 32
characters).
Index entries for deleted content are using the special value
{key=\x00...\x00, offset=2**64-1}
.