@@ -152,9 +152,9 @@ void OutputScoredArrayResult(const OpResult<ScoredArray>& result, SinkReplyBuild
152
152
rb->SendScoredArray (result.value (), true /* with scores */ );
153
153
}
154
154
155
- OpResult<DbSlice::ItAndUpdater> FindZEntry (const ZSetFamily::ZParams& zparams,
156
- const OpArgs& op_args, string_view key,
157
- size_t member_len) {
155
+ OpResult<DbSlice::ItAndUpdater> PrepareZEntry (const ZSetFamily::ZParams& zparams,
156
+ const OpArgs& op_args, string_view key,
157
+ size_t member_len) {
158
158
auto & db_slice = op_args.GetDbSlice ();
159
159
if (zparams.flags & ZADD_IN_XX) {
160
160
return db_slice.FindMutable (op_args.db_cntx , key, OBJ_ZSET);
@@ -1551,7 +1551,8 @@ void ZBooleanOperation(CmdArgList args, string_view cmd, bool is_union, bool sto
1551
1551
auto store_cb = [&, dest_shard = Shard (dest_key, maps.size ())](Transaction* t,
1552
1552
EngineShard* shard) {
1553
1553
if (shard->shard_id () == dest_shard)
1554
- ZSetFamily::OpAdd (t->GetOpArgs (shard), ZSetFamily::ZParams{.override = true }, dest_key,
1554
+ ZSetFamily::OpAdd (t->GetOpArgs (shard),
1555
+ ZSetFamily::ZParams{.override = true , .journal_update = true }, dest_key,
1555
1556
smvec);
1556
1557
return OpStatus::OK;
1557
1558
};
@@ -1696,7 +1697,8 @@ void ZRangeInternal(CmdArgList args, ZSetFamily::RangeParams range_params, Trans
1696
1697
mvec[i++] = {score, str};
1697
1698
}
1698
1699
1699
- add_result = ZSetFamily::OpAdd (t->GetOpArgs (shard), ZSetFamily::ZParams{.override = true },
1700
+ add_result = ZSetFamily::OpAdd (t->GetOpArgs (shard),
1701
+ ZSetFamily::ZParams{.override = true , .journal_update = true },
1700
1702
*range_params.store_key , mvec);
1701
1703
1702
1704
return OpStatus::OK;
@@ -1967,6 +1969,9 @@ OpResult<ZSetFamily::AddResult> ZSetFamily::OpAdd(const OpArgs& op_args,
1967
1969
if (res_it && IsValid (res_it->it )) {
1968
1970
res_it->post_updater .Run ();
1969
1971
db_slice.Del (op_args.db_cntx , res_it->it );
1972
+ if (zparams.journal_update && op_args.shard ->journal ()) {
1973
+ RecordJournal (op_args, " DEL" sv, ArgSlice{key});
1974
+ }
1970
1975
}
1971
1976
return OpStatus::OK;
1972
1977
}
@@ -1976,7 +1981,7 @@ OpResult<ZSetFamily::AddResult> ZSetFamily::OpAdd(const OpArgs& op_args,
1976
1981
size_t field_len = members.size () > server.zset_max_listpack_entries
1977
1982
? UINT32_MAX
1978
1983
: members.front ().second .size ();
1979
- auto res_it = FindZEntry (zparams, op_args, key, field_len);
1984
+ auto res_it = PrepareZEntry (zparams, op_args, key, field_len);
1980
1985
1981
1986
if (!res_it)
1982
1987
return res_it.status ();
@@ -2039,6 +2044,26 @@ OpResult<ZSetFamily::AddResult> ZSetFamily::OpAdd(const OpArgs& op_args,
2039
2044
2040
2045
if (op_status != OpStatus::OK)
2041
2046
return op_status;
2047
+
2048
+ // TODO: consider optimization to record real command if the replica is in stable_sync state
2049
+ // and there is no slot migration process going on.
2050
+ if (zparams.journal_update && op_args.shard ->journal ()) {
2051
+ if (zparams.override ) {
2052
+ RecordJournal (op_args, " DEL" sv, ArgSlice{key});
2053
+ }
2054
+
2055
+ vector<string> scores;
2056
+ vector<string_view> mapped;
2057
+ scores.reserve (members.size ());
2058
+ mapped.reserve (members.size () * 2 + 1 );
2059
+ mapped.push_back (key);
2060
+ for (const auto & [score, member] : members) {
2061
+ scores.push_back (absl::StrCat (score));
2062
+ mapped.push_back (scores.back ());
2063
+ mapped.push_back (member);
2064
+ }
2065
+ RecordJournal (op_args, " ZADD" sv, mapped);
2066
+ }
2042
2067
return aresult;
2043
2068
}
2044
2069
@@ -2336,7 +2361,8 @@ void ZSetFamily::ZDiffStore(CmdArgList args, const CommandContext& cmd_cntx) {
2336
2361
2337
2362
auto store_cb = [&](Transaction* t, EngineShard* shard) {
2338
2363
if (shard->shard_id () == dest_shard)
2339
- ZSetFamily::OpAdd (t->GetOpArgs (shard), ZSetFamily::ZParams{.override = true }, dest_key,
2364
+ ZSetFamily::OpAdd (t->GetOpArgs (shard),
2365
+ ZSetFamily::ZParams{.override = true , .journal_update = true }, dest_key,
2340
2366
smvec);
2341
2367
return OpStatus::OK;
2342
2368
};
@@ -2836,7 +2862,7 @@ constexpr uint32_t kZUnionStore = WRITE | SORTEDSET | SLOW;
2836
2862
} // namespace acl
2837
2863
2838
2864
void ZSetFamily::Register (CommandRegistry* registry) {
2839
- constexpr uint32_t kStoreMask = CO::WRITE | CO::VARIADIC_KEYS | CO::DENYOOM;
2865
+ constexpr uint32_t kStoreMask = CO::WRITE | CO::VARIADIC_KEYS | CO::DENYOOM | CO::NO_AUTOJOURNAL ;
2840
2866
registry->StartFamily ();
2841
2867
// TODO: to add support for SCRIPT for BZPOPMIN, BZPOPMAX similarly to BLPOP.
2842
2868
*registry
0 commit comments