diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc index cc418738db24fd309b50576c272650b80c01a941..2046b6d345c33399f2cd951b3b3359200e2129d1 100644 --- a/src/box/memtx_tree.cc +++ b/src/box/memtx_tree.cc @@ -52,7 +52,7 @@ tree_index_compare(const tuple *a, const tuple *b, struct key_def *key_def) return r; } int -tree_index_compare_key(const tuple *a, const key_data *key_data, +tree_index_compare_key(const tuple *a, const struct key_data *key_data, struct key_def *key_def) { return tuple_compare_with_key(a, key_data->key, key_data->part_count, @@ -238,9 +238,9 @@ MemtxTree::replace(struct tuple *old_tuple, struct tuple *new_tuple, struct tuple *dup_tuple = NULL; /* Try to optimistically replace the new_tuple. */ - bool tree_res = + int tree_res = bps_tree_index_insert(&tree, new_tuple, &dup_tuple); - if (!tree_res) { + if (tree_res) { tnt_raise(ClientError, ER_MEMORY_ISSUE, BPS_TREE_EXTENT_SIZE, "MemtxTree", "replace"); } diff --git a/src/lib/salad/bps_tree.h b/src/lib/salad/bps_tree.h index 18d127f032cc9d69421a679ea5ef28eca1e9d944..f065bbfd863681d512d2bcb4609d0ed5d28487df 100644 --- a/src/lib/salad/bps_tree.h +++ b/src/lib/salad/bps_tree.h @@ -135,10 +135,10 @@ * // base: * void bps_tree_create(tree, arg, extent_alloc_func, extent_free_func); * void bps_tree_destroy(tree); - * bool bps_tree_build(tree, sorted_array, array_size); + * int bps_tree_build(tree, sorted_array, array_size); * bps_tree_elem_t *bps_tree_find(tree, key); - * bool bps_tree_insert(tree, new_elem, replaced_elem); - * bool bps_tree_delete(tree, elem); + * int bps_tree_insert(tree, new_elem, replaced_elem); + * int bps_tree_delete(tree, elem); * size_t bps_tree_size(tree); * size_t bps_tree_mem_used(tree); * bps_tree_elem_t *bps_tree_random(tree, rnd); @@ -156,7 +156,7 @@ * bps_tree_elem_t *bps_tree_itr_get_elem(tree, itr); * bool bps_tree_itr_next(tree, itr); * bool bps_tree_itr_prev(tree, itr); - * bool bps_tree_itr_freeze(tree, itr); + * int bps_tree_itr_freeze(tree, itr); * void bps_tree_itr_destroy(tree, itr); */ /* }}} */ @@ -560,9 +560,9 @@ bps_tree_create(struct bps_tree *tree, bps_tree_arg_t arg, * @param tree - pointer to a tree * @param sorted_array - pointer to the sorted array * @param array_size - size of the array (count of elements) - * @return true on success, false on memory error + * @return 0 on success, -1 on memory error */ -bool +int bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, size_t array_size); @@ -592,19 +592,19 @@ bps_tree_find(const struct bps_tree *tree, bps_tree_key_t key); * @param tree - pointer to a tree * @param new_elem - inserting or replacing element * @replaced - optional pointer for a replaces element - * @return - true on success or false if memory allocation failed for insert + * @return - 0 on success or -1 if memory allocation failed for insert */ -bool +int bps_tree_insert(struct bps_tree *tree, bps_tree_elem_t new_elem, - bps_tree_elem_t *replaced); + bps_tree_elem_t *replaced); /** * @brief Delete an element from a tree. * @param tree - pointer to a tree * @param elem - the element tot delete - * @return - true on success or false if the element was not found in tree + * @return - 0 on success or -1 if the element was not found in tree */ -bool +int bps_tree_delete(struct bps_tree *tree, bps_tree_elem_t elem); /** @@ -747,9 +747,9 @@ bps_tree_itr_prev(const struct bps_tree *tree, struct bps_tree_iterator *itr); * with a bps_tree_itr_destroy call after usage. * @param tree - pointer to a tree * @param itr - pointer to tree iterator - * @return - true on success, false if no more version is available in matras + * @return - 0 on success, -1 if no more version is available in matras */ -bool +int bps_tree_itr_freeze(struct bps_tree *tree, struct bps_tree_iterator *itr); /** @@ -992,9 +992,9 @@ bps_tree_create(struct bps_tree *tree, bps_tree_arg_t arg, * @param tree - pointer to a tree * @param sorted_array - pointer to the sorted array * @param array_size - size of the array (count of elements) - * @return true on success, false on memory error + * @return 0 on success, -1 on memory error */ -inline bool +inline int bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, size_t array_size) { @@ -1003,7 +1003,7 @@ bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, assert(tree->garbage_head_id == (bps_tree_block_id_t)(-1)); assert(tree->matras.block_counts[0] == 0); if (array_size == 0) - return true; + return 0; bps_tree_block_id_t leaf_count = (array_size + BPS_TREE_MAX_COUNT_IN_LEAF - 1) / BPS_TREE_MAX_COUNT_IN_LEAF; @@ -1042,7 +1042,7 @@ bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, matras_alloc(&tree->matras, &id); if (!new_leaf) { matras_reset(&tree->matras); - return false; + return -1; } if (first_leaf_id == (bps_tree_block_id_t)-1) first_leaf_id = id; @@ -1066,7 +1066,7 @@ bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, matras_alloc(&tree->matras, &new_id); if (!parents[i]) { matras_reset(&tree->matras); - return false; + return -1; } parents[i]->header.type = BPS_TREE_BT_INNER; parents[i]->header.size = 0; @@ -1124,7 +1124,7 @@ bps_tree_build(struct bps_tree *tree, bps_tree_elem_t *sorted_array, } else { tree->root_id = root_if_inner_id; } - return true; + return 0; } /** @@ -1680,13 +1680,14 @@ bps_tree_itr_prev(const struct bps_tree *tree, struct bps_tree_iterator *itr) * with a bps_tree_itr_destroy call after usage. * @param tree - pointer to a tree * @param itr - pointer to tree iterator + * @return - 0 on success, -1 if no more version is available in matras */ -inline bool +inline int bps_tree_itr_freeze(struct bps_tree *tree, struct bps_tree_iterator *itr) { assert(itr->matras_version == 0); - itr->matras_version = matras_new_version(&tree->matras); - return itr->matras_version != 0; + itr->matras_version = matras_create_read_view(&tree->matras); + return itr->matras_version > 0 ? 0 : -1; } /** @@ -1699,7 +1700,7 @@ inline void bps_tree_itr_destroy(struct bps_tree *tree, struct bps_tree_iterator *itr) { if (itr->matras_version) { - matras_delete_version(&tree->matras, itr->matras_version); + matras_destroy_read_view(&tree->matras, itr->matras_version); itr->matras_version = 0; } } @@ -1754,7 +1755,7 @@ bps_tree_garbage_push(struct bps_tree *tree, struct bps_block *block, } /** - * @brief Reclaim a block fomr the garbage for reuse + * @brief Reclaim a block from the garbage for reuse */ static inline struct bps_block * bps_tree_garbage_pop(struct bps_tree *tree, bps_tree_block_id_t *id) @@ -1843,7 +1844,7 @@ bps_tree_reserve_blocks(struct bps_tree *tree, bps_tree_block_id_t count) /** * @brief Insert first element to and empty tree. */ -static inline bool +static inline int bps_tree_insert_first_elem(struct bps_tree *tree, bps_tree_elem_t new_elem) { assert(tree->depth == 0); @@ -1852,7 +1853,7 @@ bps_tree_insert_first_elem(struct bps_tree *tree, bps_tree_elem_t new_elem) tree->max_elem = new_elem; struct bps_leaf *leaf = bps_tree_create_leaf(tree, &tree->root_id); if (!leaf) - return false; + return -1; leaf->header.size = 1; leaf->elems[0] = new_elem; tree->first_id = tree->root_id; @@ -1861,7 +1862,7 @@ bps_tree_insert_first_elem(struct bps_tree *tree, bps_tree_elem_t new_elem) leaf->next_id = (bps_tree_block_id_t)(-1); tree->depth = 1; tree->size = 1; - return true; + return 0; } /** @@ -2900,7 +2901,7 @@ bps_tree_prepare_new_ext_inner(bps_inner_path_elem *path_elem, /** * bps_tree_process_insert_inner declaration. See definition for details. */ -static bool +static int bps_tree_process_insert_inner(struct bps_tree *tree, bps_inner_path_elem *inner_path_elem, bps_tree_block_id_t block_id, bps_tree_pos_t pos, @@ -2910,7 +2911,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, * Basic inserted into leaf, dealing with spliting, merging and moving data * to neighbour blocks if necessary */ -static inline bool +static inline int bps_tree_process_insert_leaf(struct bps_tree *tree, struct bps_leaf_path_elem *leaf_path_elem, bps_tree_elem_t new_elem) @@ -2918,7 +2919,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, if (bps_tree_leaf_free_size(leaf_path_elem->block)) { bps_tree_insert_into_leaf(tree, leaf_path_elem, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x0); - return true; + return 0; } struct bps_leaf_path_elem left_ext = {0, 0, 0, 0, 0, 0}, right_ext = {0, 0, 0, 0, 0, 0}, @@ -2941,7 +2942,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, &left_ext, leaf_path_elem, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x1); - return true; + return 0; } else if (bps_tree_leaf_free_size(right_ext.block) > 0) { bps_tree_pos_t move_count = 1 + bps_tree_leaf_free_size(right_ext.block) / 2; @@ -2949,7 +2950,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, leaf_path_elem, &right_ext, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x2); - return true; + return 0; } } else if (has_left_ext) { if (bps_tree_leaf_free_size(left_ext.block) > 0) { @@ -2959,7 +2960,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, &left_ext, leaf_path_elem, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x3); - return true; + return 0; } has_left_left_ext = bps_tree_collect_left_path_elem_leaf(tree, &left_ext, &left_left_ext); @@ -2975,7 +2976,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, &left_ext, leaf_path_elem, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x4); - return true; + return 0; } } else if (has_right_ext) { if (bps_tree_leaf_free_size(right_ext.block) > 0) { @@ -2985,7 +2986,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, leaf_path_elem, &right_ext, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x5); - return true; + return 0; } has_right_right_ext = bps_tree_collect_right_ext_leaf(tree, &right_ext, &right_right_ext); @@ -3001,12 +3002,12 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, leaf_path_elem, &right_ext, move_count, new_elem); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0x6); - return true; + return 0; } } if (!bps_tree_reserve_blocks(tree, tree->depth + 1)) { - return false; + return -1; } bps_tree_block_id_t new_block_id = (bps_tree_block_id_t)(-1); struct bps_leaf *new_leaf = bps_tree_create_leaf(tree, &new_block_id); @@ -3223,7 +3224,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, tree->depth++; BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0xC); - return true; + return 0; } assert(leaf_path_elem->parent); BPS_TREE_BRANCH_TRACE(tree, insert_leaf, 1 << 0xD); @@ -3236,7 +3237,7 @@ bps_tree_process_insert_leaf(struct bps_tree *tree, * Basic inserted into inner, dealing with spliting, merging and moving data * to neighbour blocks if necessary */ -static inline bool +static inline int bps_tree_process_insert_inner(struct bps_tree *tree, bps_inner_path_elem *inner_path_elem, bps_tree_block_id_t block_id, @@ -3246,7 +3247,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, bps_tree_insert_into_inner(tree, inner_path_elem, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x0); - return true; + return 0; } bps_inner_path_elem left_ext = {0, 0, 0, 0, 0, 0}, right_ext = {0, 0, 0, 0, 0, 0}, @@ -3269,7 +3270,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, &left_ext, inner_path_elem, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x1); - return true; + return 0; } else if (bps_tree_inner_free_size(right_ext.block) > 0) { bps_tree_pos_t move_count = 1 + bps_tree_inner_free_size(right_ext.block) / 2; @@ -3277,7 +3278,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, inner_path_elem, &right_ext, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x2); - return true; + return 0; } } else if (has_left_ext) { if (bps_tree_inner_free_size(left_ext.block) > 0) { @@ -3287,7 +3288,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, &left_ext, inner_path_elem, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x3); - return true; + return 0; } has_left_left_ext = bps_tree_collect_left_path_elem_inner(tree, &left_ext, &left_left_ext); @@ -3303,7 +3304,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, &left_ext, inner_path_elem, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x4); - return true; + return 0; } } else if (has_right_ext) { if (bps_tree_inner_free_size(right_ext.block) > 0) { @@ -3313,7 +3314,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, inner_path_elem, &right_ext, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x5); - return true; + return 0; } has_right_right_ext = bps_tree_collect_right_ext_inner(tree, &right_ext, &right_right_ext); @@ -3329,7 +3330,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, inner_path_elem, &right_ext, move_count, block_id, pos, max_elem); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0x6); - return true; + return 0; } } bps_tree_block_id_t new_block_id = (bps_tree_block_id_t)(-1); @@ -3538,7 +3539,7 @@ bps_tree_process_insert_inner(struct bps_tree *tree, tree->max_elem = new_max_elem; tree->depth++; BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0xC); - return true; + return 0; } assert(inner_path_elem->parent); BPS_TREE_BRANCH_TRACE(tree, insert_inner, 1 << 0xD); @@ -3928,9 +3929,9 @@ bps_tree_process_delete_inner(struct bps_tree *tree, * @param tree - pointer to a tree * @param new_elem - inserting or replacing element * @replaced - optional pointer for a replaces element - * @return - true on success or false if memory allocation failed for insert + * @return - 0 on success or -1 if memory allocation failed for insert */ -inline bool +inline int bps_tree_insert(struct bps_tree *tree, bps_tree_elem_t new_elem, bps_tree_elem_t *replaced) { @@ -3944,7 +3945,7 @@ bps_tree_insert(struct bps_tree *tree, bps_tree_elem_t new_elem, if (exact) { bps_tree_process_replace(tree, &leaf_path_elem, new_elem, replaced); - return true; + return 0; } else { return bps_tree_process_insert_leaf(tree, &leaf_path_elem, new_elem); @@ -3957,21 +3958,21 @@ bps_tree_insert(struct bps_tree *tree, bps_tree_elem_t new_elem, * @param elem - the element tot delete * @return - true on success or false if the element was not found in tree */ -inline bool +inline int bps_tree_delete(struct bps_tree *tree, bps_tree_elem_t elem) { if (tree->root_id == (bps_tree_block_id_t)(-1)) - return false; + return -1; bps_inner_path_elem path[BPS_TREE_MAX_DEPTH]; struct bps_leaf_path_elem leaf_path_elem; bool exact; bps_tree_collect_path(tree, elem, path, &leaf_path_elem, &exact); if (!exact) - return false; + return -1; bps_tree_process_delete_leaf(tree, &leaf_path_elem); - return true; + return 0; } /** diff --git a/src/lib/small/matras.c b/src/lib/small/matras.c index fbb3ee2a64911e68ce52d7f89d3b6884af426271..3bf2e21c2cf3d4cbe7b3438c0fae2237a1026914 100644 --- a/src/lib/small/matras.c +++ b/src/lib/small/matras.c @@ -79,7 +79,7 @@ matras_destroy(struct matras *m) { while(m->ver_occ_mask != 1) { matras_id_t ver = __builtin_ctzl(m->ver_occ_mask ^ 1); - matras_delete_version(m, ver); + matras_destroy_read_view(m, ver); } if (m->block_counts[0]) { struct matras_record *extent1 = m->roots[0].ptr; @@ -314,10 +314,10 @@ matras_extent_count(const struct matras *m) /* * Create new version of matras memory. - * Return 0 if all version IDs are occupied. + * Return -1 if all version IDs are occupied. */ matras_id_t -matras_new_version(struct matras *m) +matras_create_read_view(struct matras *m) { matras_id_t ver_id; #ifdef WIN32 @@ -331,7 +331,7 @@ matras_new_version(struct matras *m) #endif assert(ver_id > 0); if (ver_id >= MATRAS_VERSION_COUNT) - return 0; + return -1; m->ver_occ_mask |= ((matras_version_tag_t)1) << ver_id; m->roots[ver_id] = m->roots[0]; m->block_counts[ver_id] = m->block_counts[0]; @@ -342,7 +342,7 @@ matras_new_version(struct matras *m) * Delete memory version by specified ID. */ void -matras_delete_version(struct matras *m, matras_id_t ver_id) +matras_destroy_read_view(struct matras *m, matras_id_t ver_id) { matras_version_tag_t me = ((matras_version_tag_t)1) << ver_id; if (m->block_counts[ver_id]) { @@ -560,7 +560,7 @@ matras_touch(struct matras *m, matras_id_t id) /* * Debug check that ensures internal consistency. - * Must return 0. If i returns not 0, smth is terribly wrong. + * Must return 0. If it returns not 0, smth is terribly wrong. */ matras_version_tag_t matras_debug_selfcheck(const struct matras *m) diff --git a/src/lib/small/matras.h b/src/lib/small/matras.h index e36d517d24fbd3d7a98985340b4c7cd3f6712a8d..ae1aaf1c4c099307efe44e291f31f68824ee9b57 100644 --- a/src/lib/small/matras.h +++ b/src/lib/small/matras.h @@ -284,16 +284,16 @@ matras_extent_count(const struct matras *m); /* * Create new version of matras memory. - * Return 0 if all version IDs are occupied. + * Return -1 if all version IDs are occupied. */ matras_id_t -matras_new_version(struct matras *m); +matras_create_read_view(struct matras *m); /* * Delete memory version by specified ID. */ void -matras_delete_version(struct matras *m, matras_id_t ver_id); +matras_destroy_read_view(struct matras *m, matras_id_t ver_id); /* * Notify matras that memory at given ID will be changed. @@ -305,7 +305,7 @@ matras_touch(struct matras *m, matras_id_t id); /* * Debug check that ensures internal consistency. - * Must return 0. If i returns not 0, smth is terribly wrong. + * Must return 0. If it returns not 0, smth is terribly wrong. */ matras_version_tag_t matras_debug_selfcheck(const struct matras *m); diff --git a/test/unit/bps_tree.cc b/test/unit/bps_tree.cc index c73eca0ad381f208b6a51e9da4c208e82a390a3e..1a3e96dc38cac256aeab86b0ab37ebed07854b85 100644 --- a/test/unit/bps_tree.cc +++ b/test/unit/bps_tree.cc @@ -521,7 +521,7 @@ loading_test() for (type_t i = 0; i <= test_count; i++) { bps_tree_test_create(&tree, 0, extent_alloc, extent_free); - if (!bps_tree_test_build(&tree, arr, i)) + if (bps_tree_test_build(&tree, arr, i)) fail("building failed", "true"); if (bps_tree_test_debug_check(&tree)) diff --git a/test/unit/bps_tree_itr.cc b/test/unit/bps_tree_itr.cc index d696edd6cf63acd397a9db3ea9741da922b9a49e..3a464235bdd60baf517e0b37b1deea20cc7216f3 100644 --- a/test/unit/bps_tree_itr.cc +++ b/test/unit/bps_tree_itr.cc @@ -257,8 +257,8 @@ itr_invalidate_check() elem_t e; e.first = i * test_size * 2; e.second = i * test_size * 2; - bool res = bps_tree_test_delete(&tree, e); - assert(res); + int res = bps_tree_test_delete(&tree, e); + assert(res == 0); } for (long i = 0; i < test_size; i++) { do { @@ -301,8 +301,8 @@ itr_invalidate_check() elem_t e; e.first = ins_pos * test_size * 2 + i + 1; e.second = e.first; - bool res = bps_tree_test_insert(&tree, e, 0); - assert(res); + int res = bps_tree_test_insert(&tree, e, 0); + assert(res == 0); } for (long i = 0; i < test_size; i++) { do { @@ -356,15 +356,15 @@ itr_invalidate_check() elem_t e; e.first = i * test_size * 2; e.second = i * test_size * 2; - bool res = bps_tree_test_delete(&tree, e); - assert(res); + int res = bps_tree_test_delete(&tree, e); + assert(res == 0); } for (long i = 0; i < ins_cnt; i++) { elem_t e; e.first = ins_pos * test_size * 2 + i + 1; e.second = e.first; - bool res = bps_tree_test_insert(&tree, e, 0); - assert(res); + int res = bps_tree_test_insert(&tree, e, 0); + assert(res == 0); } for (long i = 0; i < test_size; i++) { do { diff --git a/test/unit/matras.cc b/test/unit/matras.cc index d7d6279adb06c6149b1bdfcbe560722639b4a6a4..6907ae7cbbc1652af5ae86605a0912e8d659d2d0 100644 --- a/test/unit/matras.cc +++ b/test/unit/matras.cc @@ -189,7 +189,8 @@ matras_vers_test() add_ver = rand() % 2 == 0; if (add_ver) { cur_num_or_ver++; - int new_ver = matras_new_version(&local); + int new_ver = matras_create_read_view(&local); + assert(new_ver > 0); use_mask |= (1 << new_ver); comps[new_ver] = comps[0]; } else { @@ -198,7 +199,7 @@ matras_vers_test() do { del_ver = 1 + rand() % (MATRAS_VERSION_COUNT - 1); } while ((use_mask & (1 << del_ver)) == 0); - matras_delete_version(&local, del_ver); + matras_destroy_read_view(&local, del_ver); comps[del_ver].clear(); use_mask &= ~(1 << del_ver); }