Skip to content

Commit 9966db7

Browse files
authored
ensure rpoplpush can update cache (OpenAtomFoundation#2976)
1 parent 8ce0cb3 commit 9966db7

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

include/pika_list.h

+2
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,8 @@ class RPopLPushCmd : public BlockingBaseCmd {
364364
void ReadCache() override;
365365
void Split(const HintKeys& hint_keys) override{};
366366
void Merge() override{};
367+
void DoThroughDB() override;
368+
void DoUpdateCache() override;
367369
Cmd* Clone() override { return new RPopLPushCmd(*this); }
368370
void DoBinlog() override;
369371

src/pika_command.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ void InitCmdTable(CmdTable* cmd_table) {
501501
std::make_unique<RPopCmd>(kCmdNameRPop, -2, kCmdFlagsWrite | kCmdFlagsList | kCmdFlagsDoThroughDB | kCmdFlagsUpdateCache | kCmdFlagsFast);
502502
cmd_table->insert(std::pair<std::string, std::unique_ptr<Cmd>>(kCmdNameRPop, std::move(rpopptr)));
503503
std::unique_ptr<Cmd> rpoplpushptr = std::make_unique<RPopLPushCmd>(
504-
kCmdNameRPopLPush, 3, kCmdFlagsWrite | kCmdFlagsList | kCmdFlagsSlow);
504+
kCmdNameRPopLPush, 3, kCmdFlagsWrite | kCmdFlagsList | kCmdFlagsDoThroughDB | kCmdFlagsUpdateCache | kCmdFlagsSlow);
505505
cmd_table->insert(std::pair<std::string, std::unique_ptr<Cmd>>(kCmdNameRPopLPush, std::move(rpoplpushptr)));
506506
std::unique_ptr<Cmd> rpushptr =
507507
std::make_unique<RPushCmd>(kCmdNameRPush, -3, kCmdFlagsWrite | kCmdFlagsList | kCmdFlagsDoThroughDB | kCmdFlagsUpdateCache | kCmdFlagsFast);

src/pika_list.cc

+11
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,17 @@ void RPopLPushCmd::DoBinlog() {
847847
rpop_cmd_->DoBinlog();
848848
lpush_cmd_->DoBinlog();
849849
}
850+
void RPopLPushCmd::DoUpdateCache() {
851+
if (s_.ok()) {
852+
std::vector<std::string> value;
853+
value.resize(1);
854+
db_->cache()->RPop(source_, &value[0]);
855+
db_->cache()->LPushx(receiver_, value);
856+
}
857+
}
858+
void RPopLPushCmd::DoThroughDB() {
859+
Do();
860+
}
850861

851862
void RPushCmd::DoInitial() {
852863
if (!CheckArg(argv_.size())) {

0 commit comments

Comments
 (0)