fix(migration): Use transactions! (#3266)

Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
This commit is contained in:
Vladislav 2024-07-16 13:06:34 +02:00 committed by GitHub
parent cdd8d50e70
commit 22756eeb81
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 101 additions and 117 deletions

View file

@ -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