③ 最后,从 HasCycle 返回时,删除中止事务的边,然后调用 TransactionManager::Abort 函数中止事务。在消除所有环之后清空 waits_for_。
Task #3 - Concurrent Query Execution
① 非常非常无语!!!就是我在 Task#1 中提到的,高级锁可以包含低级锁的需求,不应该抛出异常,结果测试不给过,Task#3 又需要我兼容这种情况,那么只能在 Executor 代码中特判了。
② 根据提示,should not acquire S/X table lock, grab IS/IX instead,只为表加 IS/IX 锁。
③ 细节问题:行加锁之后再判断行是否删除,这个错误找很长时间才发现;死锁检测在调用 Abort 函数之前,先将事务状态设置为 ABORTED,否则当前事务可能会在之后的解锁过程中被唤醒,触发 LOCK_ON_SHRINKING 异常;实现 Abort 函数时,将恢复阶段放在解锁阶段之前,不然可能会有并发问题。
Leaderboard Task (Optional)
① 初次提交。
Rank
Submission Name
Update QPS
Count QPS
Weighted QPS
59
ALEX
14
14
14
测试结果
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/bin/bash make lock_manager_test -j$(nproc) make deadlock_detection_test -j`nproc` make txn_integration_test -j`nproc` make -j`nproc` terrier-bench ./test/lock_manager_test ./test/deadlock_detection_test ./test/txn_integration_test ./bin/bustub-terrier-bench --duration 30000 make format make check-lint make check-clang-tidy-p4 make submit-p4