*/
template <typename SlotType>
struct _node_fields_013_t {
- // TODO: decide by NODE_BLOCK_SIZE, sizeof(SlotType), sizeof(laddr_t)
- // and the minimal size of variable_key.
- using num_keys_t = uint8_t;
+ // should be enough to index all keys under 64 KiB node
+ using num_keys_t = uint16_t;
using key_t = typename SlotType::key_t;
using key_get_type = const key_t&;
using me_t = _node_fields_013_t<SlotType>;
* +-----------------------------------------------+
*/
struct node_fields_2_t {
- // TODO: decide by NODE_BLOCK_SIZE, sizeof(node_off_t), sizeof(laddr_t)
- // and the minimal size of variable_key.
- using num_keys_t = uint8_t;
+ // should be enough to index all keys under 64 KiB node
+ using num_keys_t = uint16_t;
using key_t = ns_oid_view_t;
using key_get_type = key_t;
static constexpr field_type_t FIELD_TYPE = field_type_t::N2;
struct _internal_fields_3_t {
using key_get_type = const snap_gen_t&;
using me_t = _internal_fields_3_t<MAX_NUM_KEYS>;
- // TODO: decide by NODE_BLOCK_SIZE, sizeof(snap_gen_t), sizeof(laddr_t)
- using num_keys_t = uint8_t;
+ // should be enough to index all keys under 64 KiB node
+ using num_keys_t = uint16_t;
static constexpr field_type_t FIELD_TYPE = field_type_t::N3;
static constexpr node_offset_t SIZE = sizeof(me_t);
static constexpr node_offset_t HEADER_SIZE =
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 2, 2));
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 3, 3));
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 4, 4));
- auto padding_e = std::string(248, '_');
+ auto padding_e = std::string(247, '_');
keys.insert(make_ghobj(5, 5, 5, "ns4", "oid4" + padding_e, 2, 2));
keys.insert(make_ghobj(5, 5, 5, "ns4", "oid4" + padding_e, 3, 3));
keys.insert(make_ghobj(5, 5, 5, "ns4", "oid4" + padding_e, 4, 4));
{
logger().info("\n---------------------------------------------"
"\nbefore internal node insert (3):\n");
- auto padding = std::string(420, '_');
+ auto padding = std::string(419, '_');
auto keys = build_key_set({2, 5}, {2, 5}, {2, 5}, padding, true);
keys.erase(make_ghobj(4, 4, 4, "ns4", "oid4" + padding, 2, 2));
keys.erase(make_ghobj(4, 4, 4, "ns4", "oid4" + padding, 3, 3));
keys.erase(make_ghobj(2, 2, 2, "ns2", "oid2" + padding, 2, 2));
keys.erase(make_ghobj(2, 2, 2, "ns2", "oid2" + padding, 3, 3));
keys.erase(make_ghobj(2, 2, 2, "ns2", "oid2" + padding, 4, 4));
- auto padding_s = std::string(387, '_');
+ auto padding_s = std::string(386, '_');
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 2, 2));
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 3, 3));
keys.insert(make_ghobj(2, 2, 2, "ns2", "oid2" + padding_s, 4, 4));
"\nbefore internal node insert (6):\n");
auto padding = std::string(328, '_');
auto keys = build_key_set({2, 5}, {2, 5}, {2, 5}, padding);
- keys.insert(make_ghobj(5, 5, 5, "ns3", "oid3" + std::string(271, '_'), 3, 3));
+ keys.insert(make_ghobj(5, 5, 5, "ns3", "oid3" + std::string(270, '_'), 3, 3));
keys.insert(make_ghobj(9, 9, 9, "ns~last", "oid~last", 9, 9));
pool.build_tree(keys).unsafe_get0();