Skip to content

Commit c5be3e1

Browse files
committed
add nokey mode
1 parent 505dc8a commit c5be3e1

File tree

5 files changed

+65
-32
lines changed

5 files changed

+65
-32
lines changed

include/interface_destroy.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ namespace yakushima {
1818

1919
[[maybe_unused]] static status destroy() {
2020
if (storage::get_storages()->empty()) { return status::OK_ROOT_IS_NULL; }
21-
std::vector<std::tuple<std::string, tree_instance*>>
22-
tuple_list;
23-
scan<tree_instance, false>(storage::get_storages(), "", scan_endpoint::INF, "",
21+
std::vector<tree_instance*> tuple_list;
22+
scan_root<tree_instance, false, false>(storage::get_storages(), "", scan_endpoint::INF, "",
2423
scan_endpoint::INF, tuple_list, nullptr, 0);
2524
for (auto&& elem : tuple_list) {
26-
base_node* root = std::get<1>(elem)->load_root_ptr();
25+
base_node* root = elem->load_root_ptr();
2726
if (root == nullptr) { continue; }
2827
root->destroy();
2928
delete root; // NOLINT
30-
std::get<1>(elem)->store_root_ptr(nullptr);
29+
elem->store_root_ptr(nullptr);
3130
}
3231

3332
base_node* tables_root = storage::get_storages()->load_root_ptr();

include/interface_scan.h

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
namespace yakushima {
1616

17-
template<class ValueType, bool NeedSize = true>
17+
template<class ValueType, bool NeedSize, bool NeedKey>
1818
[[maybe_unused]] static status
19-
scan(tree_instance* ti, std::string_view l_key, scan_endpoint l_end,
19+
scan_root(tree_instance* ti, std::string_view l_key, scan_endpoint l_end,
2020
std::string_view r_key, scan_endpoint r_end,
21-
scan_result_t<ValueType, NeedSize>& tuple_list,
21+
scan_result_t<ValueType, NeedSize, NeedKey>& tuple_list,
2222
std::vector<std::pair<node_version64_body, node_version64*>>*
2323
node_version_vec,
2424
std::size_t max_size) {
@@ -105,7 +105,7 @@ scan(tree_instance* ti, std::string_view l_key, scan_endpoint l_end,
105105
}
106106

107107
// scan
108-
check_status = scan_border<ValueType, NeedSize>(
108+
check_status = scan_border<ValueType, NeedSize, NeedKey>(
109109
&target_border, traverse_key_view, l_end, r_key, r_end,
110110
tuple_list, std::get<tuple_v_index>(node_and_v),
111111
node_version_vec, key_prefix, max_size);
@@ -126,11 +126,11 @@ scan(tree_instance* ti, std::string_view l_key, scan_endpoint l_end,
126126
}
127127
}
128128

129-
template<class ValueType, bool NeedSize = true>
129+
template<class ValueType, bool NeedSize, bool NeedKey>
130130
[[maybe_unused]] static status
131131
scan2(std::string_view storage_name, std::string_view l_key, // NOLINT
132132
scan_endpoint l_end, std::string_view r_key, scan_endpoint r_end,
133-
scan_result_t<ValueType, NeedSize>& tuple_list,
133+
scan_result_t<ValueType, NeedSize, NeedKey>& tuple_list,
134134
std::vector<std::pair<node_version64_body, node_version64*>>*
135135
node_version_vec = nullptr,
136136
std::size_t max_size = 0) {
@@ -139,7 +139,7 @@ scan2(std::string_view storage_name, std::string_view l_key, // NOLINT
139139
if (storage::find_storage(storage_name, &ti) != status::OK) {
140140
return status::WARN_STORAGE_NOT_EXIST;
141141
}
142-
return scan<ValueType, NeedSize>(ti, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
142+
return scan_root<ValueType, NeedSize, NeedKey>(ti, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
143143
}
144144

145145
template<class ValueType>
@@ -150,7 +150,7 @@ scan(std::string_view storage_name, std::string_view l_key, // NOLINT
150150
std::vector<std::pair<node_version64_body, node_version64*>>*
151151
node_version_vec = nullptr,
152152
std::size_t max_size = 0) {
153-
return scan2<ValueType, true>(storage_name, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
153+
return scan2<ValueType, true, true>(storage_name, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
154154
}
155155

156156
template<class ValueType>
@@ -161,7 +161,18 @@ scan(std::string_view storage_name, std::string_view l_key, // NOLINT
161161
std::vector<std::pair<node_version64_body, node_version64*>>*
162162
node_version_vec = nullptr,
163163
std::size_t max_size = 0) {
164-
return scan2<ValueType, false>(storage_name, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
164+
return scan2<ValueType, false, true>(storage_name, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
165+
}
166+
167+
template<class ValueType>
168+
[[maybe_unused]] static status
169+
scan(std::string_view storage_name, std::string_view l_key, // NOLINT
170+
scan_endpoint l_end, std::string_view r_key, scan_endpoint r_end,
171+
std::vector<ValueType*>& tuple_list,
172+
std::vector<std::pair<node_version64_body, node_version64*>>*
173+
node_version_vec = nullptr,
174+
std::size_t max_size = 0) {
175+
return scan2<ValueType, false, false>(storage_name, l_key, l_end, r_key, r_end, tuple_list, node_version_vec, max_size);
165176
}
166177

167178
} // namespace yakushima

include/kvs.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,4 +325,13 @@ scan(std::string_view storage_name, std::string_view l_key,
325325
node_version_vec,
326326
std::size_t max_size);
327327

328+
template<class ValueType>
329+
[[maybe_unused]] static status
330+
scan(std::string_view storage_name, std::string_view l_key,
331+
scan_endpoint l_end, std::string_view r_key, scan_endpoint r_end,
332+
std::vector<ValueType*>& tuple_list,
333+
std::vector<std::pair<node_version64_body, node_version64*>>*
334+
node_version_vec,
335+
std::size_t max_size);
336+
328337
} // namespace yakushima

include/scan_helper.h

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,28 @@
1212

1313
namespace yakushima {
1414

15-
template<class ValueType, bool NeedSize>
15+
template<class ValueType, bool NeedSize, bool NeedKey>
1616
using scan_result_elem = typename std::conditional_t<
17-
NeedSize,
18-
std::tuple<std::string, ValueType*, std::size_t>,
19-
std::tuple<std::string, ValueType*>>;
17+
NeedKey,
18+
std::conditional_t<
19+
NeedSize,
20+
std::tuple<std::string, ValueType*, std::size_t>,
21+
std::tuple<std::string, ValueType*>>,
22+
std::conditional_t<
23+
NeedSize,
24+
std::tuple<ValueType*, std::size_t>,
25+
ValueType*>
26+
>;
2027

21-
template<class ValueType, bool NeedSize>
22-
using scan_result_t = std::vector<scan_result_elem<ValueType, NeedSize>>;
28+
template<class ValueType, bool NeedSize, bool NeedKey>
29+
using scan_result_t = std::vector<scan_result_elem<ValueType, NeedSize, NeedKey>>;
2330

2431
// forward declaration
25-
template<class ValueType, bool NeedSize>
32+
template<class ValueType, bool NeedSize, bool NeedKey>
2633
static status
2734
scan_border(border_node** target, std::string_view l_key, scan_endpoint l_end,
2835
std::string_view r_key, scan_endpoint r_end,
29-
scan_result_t<ValueType, NeedSize>& tuple_list,
36+
scan_result_t<ValueType, NeedSize, NeedKey>& tuple_list,
3037
node_version64_body& v_at_fb,
3138
std::vector<std::tuple<std::string, node_version64_body,
3239
node_version64*>>* node_version_vec,
@@ -56,12 +63,12 @@ inline status scan_check_retry(border_node* const bn,
5663
/**
5764
* scan for some try nodes which is not root.
5865
*/
59-
template<class ValueType, bool NeedSize = true>
66+
template<class ValueType, bool NeedSize = true, bool NeedKey>
6067
static status
61-
scan(base_node* const root, const std::string_view l_key,
68+
scan_node(base_node* const root, const std::string_view l_key,
6269
const scan_endpoint l_end, const std::string_view r_key,
6370
const scan_endpoint r_end,
64-
scan_result_t<ValueType, NeedSize>& tuple_list,
71+
scan_result_t<ValueType, NeedSize, NeedKey>& tuple_list,
6572
std::vector<std::pair<node_version64_body, node_version64*>>* const
6673
node_version_vec,
6774
const std::string& key_prefix, const std::size_t max_size) {
@@ -130,7 +137,7 @@ scan(base_node* const root, const std::string_view l_key,
130137
}
131138

132139
// scan the border node
133-
check_status = scan_border<ValueType, NeedSize>(
140+
check_status = scan_border<ValueType, NeedSize, NeedKey>(
134141
&bn, l_key, l_end, r_key, r_end, tuple_list, check_v,
135142
node_version_vec, key_prefix, max_size);
136143

@@ -168,12 +175,12 @@ scan(base_node* const root, const std::string_view l_key,
168175
/**
169176
* scan for some leafnode of b+tree.
170177
*/
171-
template<class ValueType, bool NeedSize = true>
178+
template<class ValueType, bool NeedSize, bool NeedKey>
172179
static status
173180
scan_border(border_node** const target, const std::string_view l_key,
174181
const scan_endpoint l_end, const std::string_view r_key,
175182
const scan_endpoint r_end,
176-
scan_result_t<ValueType, NeedSize>& tuple_list,
183+
scan_result_t<ValueType, NeedSize, NeedKey>& tuple_list,
177184
node_version64_body& v_at_fb,
178185
std::vector<std::pair<node_version64_body, node_version64*>>* const
179186
node_version_vec,
@@ -319,7 +326,7 @@ scan_border(border_node** const target, const std::string_view l_key,
319326
arg_r_end = scan_endpoint::INF;
320327
}
321328
}
322-
check_status = scan<ValueType, NeedSize>(
329+
check_status = scan_node<ValueType, NeedSize, NeedKey>(
323330
next_layer, arg_l_key, arg_l_end, arg_r_key, arg_r_end,
324331
tuple_list, node_version_vec, full_key, max_size);
325332
if (check_status != status::OK) {
@@ -331,13 +338,20 @@ scan_border(border_node** const target, const std::string_view l_key,
331338
auto in_range = [&full_key, &tuple_list, &vp, &node_version_vec,
332339
&v_at_fb, &node_version_ptr, &tuple_pushed_num,
333340
max_size]() {
334-
if constexpr (NeedSize) {
341+
if constexpr (NeedSize && NeedKey) {
335342
tuple_list.emplace_back(std::make_tuple(
336343
full_key, static_cast<ValueType*>(value::get_body(vp)),
337344
value::get_len(vp)));
338-
} else {
345+
} else if constexpr (NeedKey) {
339346
tuple_list.emplace_back(std::make_tuple(
340347
full_key, static_cast<ValueType*>(value::get_body(vp))));
348+
} else if constexpr (NeedSize) {
349+
tuple_list.emplace_back(std::make_tuple(
350+
static_cast<ValueType*>(value::get_body(vp)),
351+
value::get_len(vp)));
352+
} else {
353+
tuple_list.emplace_back(
354+
static_cast<ValueType*>(value::get_body(vp)));
341355
}
342356
if (node_version_vec != nullptr) {
343357
/**

include/storage_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ status storage::list_storages(
8888
out.clear();
8989
std::vector<std::tuple<std::string, tree_instance*>>
9090
tuple_list;
91-
scan<tree_instance, false>(get_storages(), "", scan_endpoint::INF, "", scan_endpoint::INF,
91+
scan_root<tree_instance, false, true>(get_storages(), "", scan_endpoint::INF, "", scan_endpoint::INF,
9292
tuple_list, nullptr, 0);
9393
if (tuple_list.empty()) { return status::WARN_NOT_EXIST; }
9494
out.reserve(tuple_list.size());

0 commit comments

Comments
 (0)