chore: another preparation commit to get rid of kv_args in transaction (#2996)

This changes Entry::Payload to struct instead of variant.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
Roman Gershman 2024-05-02 09:59:45 +03:00 committed by GitHub
parent 653086c910
commit 9bda5b1d4b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 136 additions and 113 deletions

View file

@ -35,30 +35,36 @@ void JournalWriter::Write(std::string_view sv) {
sink_->Write(io::Buffer(sv));
}
template <typename C> void JournalWriter::Write(std::pair<std::string_view, C> args) {
auto [cmd, tail_args] = args;
Write(1 + tail_args.size());
size_t cmd_size = cmd.size();
for (auto v : tail_args) {
cmd_size += v.size();
}
Write(cmd_size);
Write(cmd);
for (auto v : tail_args) {
if constexpr (is_same_v<C, CmdArgList>)
Write(facade::ToSV(v));
else
Write(v);
// element count, total size
template <typename C> pair<size_t, size_t> SliceSize(const C& list) {
size_t res = 0, count = 0;
for (auto a : list) {
res += a.size();
++count;
}
return {count, res};
}
template void JournalWriter::Write(pair<string_view, CmdArgList>);
template void JournalWriter::Write(pair<string_view, ArgSlice>);
void JournalWriter::Write(const journal::Entry::Payload& payload) {
if (payload.cmd.empty())
return;
void JournalWriter::Write(std::monostate) {
auto [num_elems, size] =
std::visit([](const auto& list) { return SliceSize(list); }, payload.args);
Write(1 + num_elems);
size_t cmd_size = payload.cmd.size() + size;
Write(cmd_size);
Write(payload.cmd);
std::visit(
[this](const auto& list) {
for (auto v : list) {
this->Write(v);
}
},
payload.args);
}
void JournalWriter::Write(const journal::Entry& entry) {
@ -86,7 +92,8 @@ void JournalWriter::Write(const journal::Entry& entry) {
case journal::Op::EXEC:
Write(entry.txid);
Write(entry.shard_cnt);
return std::visit([this](const auto& payload) { return Write(payload); }, entry.payload);
Write(entry.payload);
break;
default:
break;
};