Skip to content

Commit 69d9d64

Browse files
committed
Update:打开回滚率优化
1 parent 98103cc commit 69d9d64

4 files changed

Lines changed: 44 additions & 44 deletions

File tree

src/execution/executor_mvcc_delete.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ class MvccDeleteExecutor : public AbstractExecutor {
4747
auto &rid = prev_->rid();
4848
auto link = txn_manager.GetUndoLink(fh_->GetFd(), rid);
4949

50-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid, fh_->GetFd())) {
51-
// txn_manager.abort(context_);
52-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid));
53-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
54-
// }
50+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid, fh_->GetFd())) {
51+
txn_manager.abort(context_);
52+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid));
53+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
54+
}
5555

5656
if (IsWriteWriteConflict(context_->txn_, link)) {
5757
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);

src/execution/executor_mvcc_insert.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,22 +100,22 @@ class MvccInsertExecutor : public AbstractExecutor {
100100
if (!rids.empty()) {
101101
//! 这里使用back在唯一索引下才是对的
102102
rid_ = rids.back();
103-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
104-
// txn_manager.abort(context_);
105-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
106-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
107-
// }
103+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
104+
txn_manager.abort(context_);
105+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
106+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
107+
}
108108
if (!txn_manager.UpdateTupleAndUndoLink(tab_.name, fh_, rid_, old_meta, nullptr, new_meta, rec,
109109
context_->txn_)) {
110110
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
111111
}
112112
} else {
113113
rid_ = fh_->GetNewRid();
114-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
115-
// txn_manager.abort(context_);
116-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
117-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
118-
// }
114+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
115+
txn_manager.abort(context_);
116+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
117+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
118+
}
119119
if (!txn_manager.UpdateTupleAndUndoLink(tab_.name, fh_, rid_, old_meta, nullptr, new_meta, rec,
120120
context_->txn_)) {
121121
fh_->delete_record(rid_);

src/execution/executor_mvcc_update.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ class MvccUpdateExecutor : public AbstractExecutor {
5555
auto &rid_ = prev_->rid();
5656
auto link = txn_manager.GetUndoLink(fh_->GetFd(), rid_);
5757

58-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
59-
// txn_manager.abort(context_);
60-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
61-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
62-
// }
58+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, rid_, fh_->GetFd())) {
59+
txn_manager.abort(context_);
60+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), rid_));
61+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
62+
}
6363

6464
if (IsWriteWriteConflict(context_->txn_, link)) {
6565
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
@@ -138,11 +138,11 @@ class MvccUpdateExecutor : public AbstractExecutor {
138138
//! 这里使用back在唯一索引下才是对的
139139
insert_rid = rids.back();
140140

141-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, insert_rid, fh_->GetFd())) {
142-
// txn_manager.abort(context_);
143-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), insert_rid));
144-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
145-
// }
141+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, insert_rid, fh_->GetFd())) {
142+
txn_manager.abort(context_);
143+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), insert_rid));
144+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
145+
}
146146

147147
if (!txn_manager.AtomicUpdate(tab_.name, fh_, rid_, delete_meta, old_rec, insert_rid, insert_old_meta, nullptr,
148148
insert_new_meta, new_rec, context_->txn_)) {
@@ -151,11 +151,11 @@ class MvccUpdateExecutor : public AbstractExecutor {
151151
}
152152
} else {
153153
insert_rid = fh_->GetNewRid();
154-
// if (!lock_manager.lock_exclusive_on_record(context_->txn_, insert_rid, fh_->GetFd())) {
155-
// txn_manager.abort(context_);
156-
// lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), insert_rid));
157-
// throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
158-
// }
154+
if (!lock_manager.lock_exclusive_on_record(context_->txn_, insert_rid, fh_->GetFd())) {
155+
txn_manager.abort(context_);
156+
lock_manager.wait_for_lock_release(LockDataId(fh_->GetFd(), insert_rid));
157+
throw TransactionAbortException(context_->txn_->get_transaction_id(), AbortReason::UPGRADE_CONFLICT);
158+
}
159159
if (!txn_manager.AtomicUpdate(tab_.name, fh_, rid_, delete_meta, old_rec, insert_rid, insert_old_meta,
160160
nullptr, insert_new_meta, new_rec, context_->txn_)) {
161161
fh_->delete_record(insert_rid);

src/transaction/transaction_manager.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,13 @@ void TransactionManager::commit(Transaction* txn) {
9494
txn->CommitUndoLogs(); // 提交事务的撤销日志
9595
last_commit_ts_.store(std::max(last_commit_ts_.load(), txn->get_commit_ts())); // 更新最后提交时间戳
9696

97-
// auto& lock_set = txn->get_lock_set();
98-
// while (!lock_set.empty()) {
99-
// // 释放事务持有的所有锁
100-
// LockDataId lock = lock_set.back();
101-
// lock_set.pop_back();
102-
// lock_manager.unlock(txn, lock);
103-
// }
97+
auto& lock_set = txn->get_lock_set();
98+
while (!lock_set.empty()) {
99+
// 释放事务持有的所有锁
100+
LockDataId lock = lock_set.back();
101+
lock_set.pop_back();
102+
lock_manager.unlock(txn, lock);
103+
}
104104

105105
// 清空事务相关的集合
106106
txn->clear_lock_set();
@@ -161,13 +161,13 @@ void TransactionManager::abort(Context* context) {
161161
}
162162
txn->get_write_set().clear(); // 清空写集合
163163

164-
// auto& lock_set = txn->get_lock_set();
165-
// while (!lock_set.empty()) {
166-
// // 释放事务持有的所有锁
167-
// LockDataId lock = lock_set.back();
168-
// lock_set.pop_back();
169-
// lock_manager.unlock(txn, lock);
170-
// }
164+
auto& lock_set = txn->get_lock_set();
165+
while (!lock_set.empty()) {
166+
// 释放事务持有的所有锁
167+
LockDataId lock = lock_set.back();
168+
lock_set.pop_back();
169+
lock_manager.unlock(txn, lock);
170+
}
171171

172172
txn->clear_lock_set();
173173
txn->set_state(TransactionState::ABORTED);

0 commit comments

Comments
 (0)