Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9d46be2
Start implementing blocked leaf pages.
tonyastolfi May 31, 2026
d797ed7
upgraded requirements, wip packed_blocked_leaf_page
tonyastolfi Jun 5, 2026
5da7474
wip packed blocked leaf page
tonyastolfi Jun 5, 2026
4572d2a
pack_blocked_leaf_page nominally working
tonyastolfi Jun 6, 2026
203fb60
Add item seq to PackedBlockedLeafPage.
tonyastolfi Jun 7, 2026
511d2fe
Refactor.
tonyastolfi Jun 24, 2026
9f61dc6
Merge remote-tracking branch 'origin/main' into tastolfi/blocked-leaf…
tonyastolfi Jun 24, 2026
4cec219
Update requirements.
tonyastolfi Jun 24, 2026
5240d18
Refactor PiecewiseFilter test utils.
tonyastolfi Jun 28, 2026
aabd297
Temporary refactor in preparation to switch to artc::ART
tonyastolfi Jun 28, 2026
5a31253
wip - Remove turtle's ART; use artc's
tonyastolfi Jun 28, 2026
d75a712
Test tuning.
tonyastolfi Jun 28, 2026
1fe1427
Refactor with PackedPiecewiseFilter
vidyasilai Jul 7, 2026
93c7c46
merge set
tonyastolfi Jul 11, 2026
ac11b8f
Start adding blocked leaf scanner
vidyasilai Jul 14, 2026
b236c2f
merge_set wip
tonyastolfi Jul 14, 2026
1c80ddc
Merge branch 'tastolfi/blocked-leaf-pages' of https://github.com/math…
tonyastolfi Jul 14, 2026
37b3d4e
Add sketch of new scan_blocked_leaf design.
tonyastolfi Jul 14, 2026
0e54e30
Add BlockedLeafPageLoader, refactor scan_blocked_leaf and pack_blocke…
vidyasilai Jul 28, 2026
81da495
Review feedback on block loader, scan_blocked_leaf_page, and pack_blo…
vidyasilai Aug 12, 2026
6cb7e5f
Delete unused file
vidyasilai Aug 12, 2026
4262cf8
Fix scan_blocked_leaf return type.
vidyasilai Aug 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions conan.lock
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
{
"version": "0.5",
"requires": [
"abseil/20250127.0",
"batteries/0.71.1",
"abseil/20260107.1",
"artc/0.2.1",
"batteries/0.72.0",
"boost/1.88.0",
"bzip2/1.0.8",
"cli11/2.5.0",
"gflags/2.2.2",
"glog/0.7.1",
"gtest/1.17.0",
"keyvcr/0.2.2",
"libbacktrace/cci.20240730",
"libbacktrace/cci.20210118",
"libfuse/3.16.2",
"libpfm4/4.13.0",
"libunwind/1.8.1",
"liburing/2.11",
"llfs/0.47.1",
"llfs/0.47.2",
"openssl/3.6.0",
"pcg-cpp/cci.20220409",
"protobuf/3.21.12",
"vqf/0.2.5",
"vqf/0.2.6",
"xxhash/0.8.3",
"yaml-cpp/0.9.0",
"zlib/1.3.1"
Expand Down Expand Up @@ -49,10 +50,7 @@
],
"boost/[>=1.84.0 <2]": [
"boost/1.88.0"
],
"batteries/[>=0.60.2 <2]": [
"batteries/0.70.2"
]
},
"config_requires": []
}
}
17 changes: 9 additions & 8 deletions conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
class TurtleKvRecipe(ConanFile):
name = "turtle_kv"

python_requires = "cor_recipe_utils/0.19.1"
python_requires = "cor_recipe_utils/0.21.4.dev3+g0d8231b80"
python_requires_extend = "cor_recipe_utils.ConanFileBase"

settings = "os", "compiler", "build_type", "arch"
Expand Down Expand Up @@ -88,18 +88,19 @@ def requirements(self):
"force": True,
}

self.requires("abseil/20250127.0", **VISIBLE, **OVERRIDE)
self.requires("batteries/[>=0.71.1 <1]", **VISIBLE, **OVERRIDE)
self.requires("boost/1.88.0", **VISIBLE, **OVERRIDE)
self.requires("glog/0.7.1", **VISIBLE)
self.requires("llfs/[>=0.47.0 <1]", **VISIBLE)
self.requires("pcg-cpp/cci.20220409", **VISIBLE)
self.requires("abseil/[>=20260107.1]", **VISIBLE, **OVERRIDE)
self.requires("artc/[>=0.2.1 <1]")
self.requires("batteries/[>=0.72.0 <1]", **VISIBLE, **OVERRIDE)
self.requires("boost/[>=1.88.0 <2]", **VISIBLE, **OVERRIDE)
self.requires("glog/[>=0.7.1 <1]", **VISIBLE)
self.requires("llfs/[>=0.47.2 <1]", **VISIBLE)
self.requires("pcg-cpp/[>=cci.20220409]", **VISIBLE)
self.requires("yaml-cpp/[>=0.9.0 <1]")
self.requires("zlib/1.3.1", **OVERRIDE)

# boost/1.88.0 and ninja/1.13.2 depend (exactly) on libbacktrace/cci.20210118
#
self.requires("libbacktrace/[>=cci.20240730]", **OVERRIDE)
self.requires("libbacktrace/[>=cci.20210118]")

if platform.system() == "Linux":
if self.options.with_keyvcr:
Expand Down
2 changes: 1 addition & 1 deletion cor.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
cor:
cli:
version: 0.19.1
version: 0.21.4.dev3+g0d8231b80
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ endif ()
target_link_libraries(
turtle_kv
PUBLIC
artc::artc
abseil::abseil
batteries::batteries
boost::boost
Expand Down
8 changes: 8 additions & 0 deletions src/turtle_kv/core/edit_view.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
//=##=##=#==#=#==#===#+==#+==========+==+=+=+=+=+=++=+++=+++++=-++++=-+++++++++++
//
// Part of the TurtleKV Project, under Apache License v2.0.
// See https://www.apache.org/licenses/LICENSE-2.0 for license information.
// SPDX short identifier: Apache-2.0
//
//+++++++++++-+-+--+----- --- -- - - - -

#pragma once

#include <turtle_kv/core/item_view.hpp>
Expand Down
45 changes: 26 additions & 19 deletions src/turtle_kv/core/key_range.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,30 +34,17 @@ inline CInterval<KeyView> get_key_range(const Chunk<const T*>& chunk)
};
}

inline CInterval<KeyView> get_key_range(const EditView& edit)
template <HasKeyView T>
inline CInterval<KeyView> get_key_range(const T& has_key_view)
{
return CInterval<KeyView>{
.lower_bound = get_key(edit),
.upper_bound = get_key(edit),
};
}

inline CInterval<KeyView> get_key_range(const ItemView& item)
{
return CInterval<KeyView>{
.lower_bound = get_key(item),
.upper_bound = get_key(item),
};
}

inline CInterval<KeyView> get_key_range(const KeyView& key)
{
return CInterval<KeyView>{
.lower_bound = key,
.upper_bound = key,
.lower_bound = get_key(has_key_view),
.upper_bound = get_key(has_key_view),
};
}

//=#=#==#==#===============+=+=+=+=++=++++++++++++++-++-+--+-+----+---------------
//
struct ExtendedKeyRangeOrder : llfs::KeyRangeOrder {
//+++++++++++-+-+--+----- --- -- - - - -

Expand Down Expand Up @@ -89,4 +76,24 @@ struct ExtendedKeyRangeOrder : llfs::KeyRangeOrder {
}
};

//=#=#==#==#===============+=+=+=+=++=++++++++++++++-++-+--+-+----+---------------
//
struct KeyLowerBoundOrder : KeyOrder {
template <typename L, typename R>
bool operator()(const L& l, const R& r) const
{
return KeyOrder::operator()(get_key_range(l).lower_bound, get_key_range(r).lower_bound);
}
};

//=#=#==#==#===============+=+=+=+=++=++++++++++++++-++-+--+-+----+---------------
//
struct KeyUpperBoundOrder : KeyOrder {
template <typename L, typename R>
bool operator()(const L& l, const R& r) const
{
return KeyOrder::operator()(get_key_range(l).upper_bound, get_key_range(r).upper_bound);
}
};

} // namespace turtle_kv
9 changes: 9 additions & 0 deletions src/turtle_kv/core/key_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,13 @@ inline usize packed_key_data_size(const KeyView& key)
return key.size();
}

template <typename T>
concept HasKeyView = requires(const T& obj) {
{ get_key(obj) } -> std::convertible_to<const KeyView&>;
};

static_assert(HasKeyView<KeyView>);
static_assert(HasKeyView<const char*>);
static_assert(HasKeyView<std::string>);

} // namespace turtle_kv
Loading
Loading