[era] superblock packing
This commit is contained in:
parent
4df679174c
commit
2250abe605
@ -48,6 +48,7 @@ SOURCE=\
|
|||||||
caching/xml_format.cc \
|
caching/xml_format.cc \
|
||||||
\
|
\
|
||||||
era/era_detail.cc \
|
era/era_detail.cc \
|
||||||
|
era/superblock.cc \
|
||||||
\
|
\
|
||||||
persistent-data/checksum.cc \
|
persistent-data/checksum.cc \
|
||||||
persistent-data/error_set.cc \
|
persistent-data/error_set.cc \
|
||||||
|
@ -8,6 +8,7 @@ using namespace era;
|
|||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
#if 0
|
||||||
le32 pack_hash_detail(uint32_t hash1, uint32_t hash2, uint32_t nr_probes) {
|
le32 pack_hash_detail(uint32_t hash1, uint32_t hash2, uint32_t nr_probes) {
|
||||||
throw std::runtime_error("not implemented");
|
throw std::runtime_error("not implemented");
|
||||||
}
|
}
|
||||||
@ -15,22 +16,28 @@ namespace {
|
|||||||
void unpack_hash_detail(le32 packed, uint32_t &hash1, uint32_t &hash2, uint32_t &nr_probes) {
|
void unpack_hash_detail(le32 packed, uint32_t &hash1, uint32_t &hash2, uint32_t &nr_probes) {
|
||||||
throw std::runtime_error("not implemented");
|
throw std::runtime_error("not implemented");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
era_detail_traits::unpack(disk_type const &disk, value_type &value)
|
era_detail_traits::unpack(disk_type const &disk, value_type &value)
|
||||||
{
|
{
|
||||||
|
value.nr_blocks = to_cpu<uint32_t>(disk.nr_blocks);
|
||||||
value.nr_bits = to_cpu<uint32_t>(disk.nr_bits);
|
value.nr_bits = to_cpu<uint32_t>(disk.nr_bits);
|
||||||
unpack_hash_detail(disk.hash_fns_and_probes, value.hash1, value.hash2, value.nr_probes);
|
value.nr_set = to_cpu<uint32_t>(disk.nr_set);
|
||||||
value.bloom_root = to_cpu<uint64_t>(disk.bloom_root);
|
value.bloom_root = to_cpu<uint64_t>(disk.bloom_root);
|
||||||
|
|
||||||
|
//unpack_hash_detail(disk.hash_fns_and_probes, value.hash1, value.hash2, value.nr_probes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
era_detail_traits::pack(value_type const &value, disk_type &disk)
|
era_detail_traits::pack(value_type const &value, disk_type &disk)
|
||||||
{
|
{
|
||||||
|
disk.nr_blocks = to_disk<le32>(value.nr_blocks);
|
||||||
disk.nr_bits = to_disk<le32>(value.nr_bits);
|
disk.nr_bits = to_disk<le32>(value.nr_bits);
|
||||||
disk.hash_fns_and_probes = pack_hash_detail(value.hash1, value.hash2, value.nr_probes);
|
disk.nr_set = to_disk<le32>(value.nr_set);
|
||||||
disk.bloom_root = to_disk<le64>(value.bloom_root);
|
disk.bloom_root = to_disk<le64>(value.bloom_root);
|
||||||
|
// disk.hash_fns_and_probes = pack_hash_detail(value.hash1, value.hash2, value.nr_probes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
@ -7,13 +7,16 @@
|
|||||||
|
|
||||||
namespace era {
|
namespace era {
|
||||||
struct era_detail_disk {
|
struct era_detail_disk {
|
||||||
|
base::le32 nr_blocks;
|
||||||
base::le32 nr_bits;
|
base::le32 nr_bits;
|
||||||
base::le32 hash_fns_and_probes;
|
base::le32 nr_set;
|
||||||
base::le64 bloom_root;
|
base::le64 bloom_root;
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
struct era_detail {
|
struct era_detail {
|
||||||
|
uint32_t nr_blocks;
|
||||||
uint32_t nr_bits;
|
uint32_t nr_bits;
|
||||||
|
uint32_t nr_set;
|
||||||
|
|
||||||
uint32_t hash1;
|
uint32_t hash1;
|
||||||
uint32_t hash2;
|
uint32_t hash2;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "era/superblock.h"
|
#include "era/superblock.h"
|
||||||
|
|
||||||
#include "persistent-data/checksum.h"
|
#include "persistent-data/checksum.h"
|
||||||
|
#include "persistent-data/errors.h"
|
||||||
|
|
||||||
using namespace base;
|
using namespace base;
|
||||||
using namespace era;
|
using namespace era;
|
||||||
@ -11,15 +12,20 @@ using namespace persistent_data;
|
|||||||
namespace {
|
namespace {
|
||||||
using namespace base;
|
using namespace base;
|
||||||
|
|
||||||
|
size_t const SPACE_MAP_ROOT_SIZE = 128;
|
||||||
|
size_t const UUID_LEN = 16;
|
||||||
|
|
||||||
struct superblock_disk {
|
struct superblock_disk {
|
||||||
le32 csum;
|
le32 csum;
|
||||||
le32 flags;
|
le32 flags;
|
||||||
le64 blocknr;
|
le64 blocknr;
|
||||||
|
|
||||||
__u8 uuid[16];
|
__u8 uuid[UUID_LEN];
|
||||||
le64 magic;
|
le64 magic;
|
||||||
le32 version;
|
le32 version;
|
||||||
|
|
||||||
|
__u8 metadata_space_map_root[SPACE_MAP_ROOT_SIZE];
|
||||||
|
|
||||||
le32 data_block_size;
|
le32 data_block_size;
|
||||||
le32 metadata_block_size;
|
le32 metadata_block_size;
|
||||||
le32 nr_blocks;
|
le32 nr_blocks;
|
||||||
@ -27,8 +33,9 @@ namespace {
|
|||||||
le32 current_era;
|
le32 current_era;
|
||||||
era_detail_disk current_detail;
|
era_detail_disk current_detail;
|
||||||
|
|
||||||
le64 bloom_filters_root;
|
le64 bloom_tree_root;
|
||||||
le64 era_array_root;
|
le64 era_array_root;
|
||||||
|
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
struct superblock_traits {
|
struct superblock_traits {
|
||||||
@ -56,7 +63,7 @@ superblock::superblock()
|
|||||||
metadata_block_size(8),
|
metadata_block_size(8),
|
||||||
nr_blocks(0),
|
nr_blocks(0),
|
||||||
current_era(0),
|
current_era(0),
|
||||||
era_root(0),
|
bloom_tree_root(0),
|
||||||
era_array_root(0)
|
era_array_root(0)
|
||||||
{
|
{
|
||||||
memset(uuid, 0, sizeof(uuid));
|
memset(uuid, 0, sizeof(uuid));
|
||||||
@ -65,6 +72,48 @@ superblock::superblock()
|
|||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
|
void
|
||||||
|
superblock_traits::unpack(disk_type const &disk, value_type &value)
|
||||||
|
{
|
||||||
|
//value.flags = to_cpu<uint32_t>(disk.flags);
|
||||||
|
value.blocknr = to_cpu<uint64_t>(disk.blocknr);
|
||||||
|
value.magic = to_cpu<uint64_t>(disk.magic);
|
||||||
|
value.version = to_cpu<uint32_t>(disk.version);
|
||||||
|
|
||||||
|
memcpy(value.metadata_space_map_root, disk.metadata_space_map_root,
|
||||||
|
sizeof(value.metadata_space_map_root));
|
||||||
|
|
||||||
|
value.data_block_size = to_cpu<uint32_t>(disk.data_block_size);
|
||||||
|
value.metadata_block_size = to_cpu<uint32_t>(disk.metadata_block_size);
|
||||||
|
value.nr_blocks = to_cpu<uint32_t>(disk.nr_blocks);
|
||||||
|
value.current_era = to_cpu<uint32_t>(disk.current_era);
|
||||||
|
era_detail_traits::unpack(disk.current_detail, value.current_detail);
|
||||||
|
value.bloom_tree_root = to_cpu<uint64_t>(disk.bloom_tree_root);
|
||||||
|
value.era_array_root = to_cpu<uint64_t>(disk.era_array_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
superblock_traits::pack(value_type const &value, disk_type &disk)
|
||||||
|
{
|
||||||
|
//disk.flags = to_disk<uint32_t>(value.flags);
|
||||||
|
disk.blocknr = to_disk<le64>(value.blocknr);
|
||||||
|
disk.magic = to_disk<le64>(value.magic);
|
||||||
|
disk.version = to_disk<le32>(value.version);
|
||||||
|
|
||||||
|
memcpy(disk.metadata_space_map_root, value.metadata_space_map_root,
|
||||||
|
sizeof(disk.metadata_space_map_root));
|
||||||
|
|
||||||
|
disk.data_block_size = to_disk<le32>(value.data_block_size);
|
||||||
|
disk.metadata_block_size = to_disk<le32>(value.metadata_block_size);
|
||||||
|
disk.nr_blocks = to_disk<le32>(value.nr_blocks);
|
||||||
|
disk.current_era = to_disk<le32>(value.current_era);
|
||||||
|
era_detail_traits::pack(value.current_detail, disk.current_detail);
|
||||||
|
disk.bloom_tree_root = to_disk<le64>(value.bloom_tree_root);
|
||||||
|
disk.era_array_root = to_disk<le64>(value.era_array_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace validator {
|
namespace validator {
|
||||||
using namespace persistent_data;
|
using namespace persistent_data;
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ namespace era {
|
|||||||
era_detail current_detail;
|
era_detail current_detail;
|
||||||
|
|
||||||
// A btree of undigested era_details
|
// A btree of undigested era_details
|
||||||
uint64_t era_root;
|
uint64_t bloom_tree_root;
|
||||||
|
|
||||||
// Big array holding the digested era/block info.
|
// Big array holding the digested era/block info.
|
||||||
uint64_t era_array_root;
|
uint64_t era_array_root;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user