feat(server): rdb loader big string loading in chunks (#4623)

1. rdb loader big string loading in chunks 
2. snapshot compression logic is disabled in case of big buffer

Signed-off-by: adi_holden <adi@dragonflydb.io>
This commit is contained in:
adiholden 2025-02-20 16:56:15 +02:00 committed by GitHub
parent a22daaf49d
commit 6016ae1ec8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 119 additions and 50 deletions

View file

@ -556,6 +556,20 @@ void RobjWrapper::SetString(string_view s, MemoryResource* mr) {
}
}
void RobjWrapper::ReserveString(size_t size, MemoryResource* mr) {
CHECK_EQ(inner_obj_, nullptr);
type_ = OBJ_STRING;
encoding_ = OBJ_ENCODING_RAW;
MakeInnerRoom(0, size, mr);
}
void RobjWrapper::AppendString(string_view s, MemoryResource* mr) {
size_t cur_cap = InnerObjMallocUsed();
CHECK(cur_cap >= sz_ + s.size()) << cur_cap << " " << sz_ << " " << s.size();
memcpy(reinterpret_cast<uint8_t*>(inner_obj_) + sz_, s.data(), s.size());
sz_ += s.size();
}
void RobjWrapper::SetSize(uint64_t size) {
sz_ = size;
}
@ -976,6 +990,16 @@ void CompactObj::SetString(std::string_view str) {
EncodeString(str);
}
void CompactObj::ReserveString(size_t size) {
uint8_t mask = mask_ & ~kEncMask;
SetMeta(ROBJ_TAG, mask);
u_.r_obj.ReserveString(size, tl.local_mr);
}
void CompactObj::AppendString(std::string_view str) {
u_.r_obj.AppendString(str, tl.local_mr);
}
string_view CompactObj::GetSlice(string* scratch) const {
CHECK(!IsExternal());
uint8_t is_encoded = mask_ & kEncMask;