mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-10 18:05:44 +02:00
fix(migration): Use transactions! (#3266)
Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
This commit is contained in:
parent
cdd8d50e70
commit
22756eeb81
10 changed files with 101 additions and 117 deletions
|
@ -127,6 +127,16 @@ cv_status Transaction::BatonBarrier::Wait(time_point tp) {
|
|||
return cv_status::no_timeout;
|
||||
}
|
||||
|
||||
Transaction::Guard::Guard(Transaction* tx) : tx(tx) {
|
||||
DCHECK(tx->cid_->opt_mask() & CO::GLOBAL_TRANS);
|
||||
tx->Execute([](auto*, auto*) { return OpStatus::OK; }, false);
|
||||
}
|
||||
|
||||
Transaction::Guard::~Guard() {
|
||||
tx->Conclude();
|
||||
tx->Refurbish();
|
||||
}
|
||||
|
||||
Transaction::Transaction(const CommandId* cid) : cid_{cid} {
|
||||
InitTxTime();
|
||||
string_view cmd_name(cid_->name());
|
||||
|
@ -620,7 +630,6 @@ void Transaction::RunCallback(EngineShard* shard) {
|
|||
|
||||
RunnableResult result;
|
||||
auto& db_slice = GetDbSlice(shard->shard_id());
|
||||
db_slice.LockChangeCb();
|
||||
try {
|
||||
result = (*cb_ptr_)(this, shard);
|
||||
|
||||
|
@ -658,10 +667,7 @@ void Transaction::RunCallback(EngineShard* shard) {
|
|||
// Log to journal only once the command finished running
|
||||
if ((coordinator_state_ & COORD_CONCLUDING) || (multi_ && multi_->concluding)) {
|
||||
LogAutoJournalOnShard(shard, result);
|
||||
db_slice.UnlockChangeCb();
|
||||
MaybeInvokeTrackingCb();
|
||||
} else {
|
||||
db_slice.UnlockChangeCb();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1223,11 +1229,11 @@ OpStatus Transaction::RunSquashedMultiCb(RunnableType cb) {
|
|||
|
||||
auto* shard = EngineShard::tlocal();
|
||||
auto& db_slice = GetDbSlice(shard->shard_id());
|
||||
db_slice.LockChangeCb();
|
||||
|
||||
auto result = cb(this, shard);
|
||||
db_slice.OnCbFinish();
|
||||
|
||||
LogAutoJournalOnShard(shard, result);
|
||||
db_slice.UnlockChangeCb();
|
||||
MaybeInvokeTrackingCb();
|
||||
|
||||
DCHECK_EQ(result.flags, 0); // if it's sophisticated, we shouldn't squash it
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue