Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 53 additions & 53 deletions src/dbtest/do_test_list.txt
Original file line number Diff line number Diff line change
@@ -1,57 +1,57 @@
#### RAT
rat_sda_dirty_read
#rat_sda_non_repeatable_read
#rat_sda_intermediate_read
#rat_sda_intermediate_read_committed
#rat_sda_non_repeatable_read_predicate_based-phantom_delete
#rat_sda_non_repeatable_read_predicate_based-phantom_insert
#rat_sda_lost_self_update
#rat_dda_write_read_skew
#rat_dda_write_read_skew_committed
#rat_dda_double_write_skew1
#rat_dda_double_write_skew1_committed
#rat_dda_double_write_skew2
#rat_dda_read_skew
#rat_dda_read_skew_predicate_based_delete
#rat_dda_read_skew_predicate_based_insert
#rat_dda_read_skew2
#rat_dda_read_skew2_committed
#rat_mda_step_rat
#rat_mda_step_rat_long_fork
#rat_mda_step_rat_predicate_based_delete
#rat_mda_step_rat_predicate_based_insert
rat_sda_non_repeatable_read
rat_sda_intermediate_read
rat_sda_intermediate_read_committed
rat_sda_non_repeatable_read_predicate_based-phantom_delete
rat_sda_non_repeatable_read_predicate_based-phantom_insert
rat_sda_lost_self_update
rat_dda_write_read_skew
rat_dda_write_read_skew_committed
rat_dda_double_write_skew1
rat_dda_double_write_skew1_committed
rat_dda_double_write_skew2
rat_dda_read_skew
rat_dda_read_skew_predicate_based_delete
rat_dda_read_skew_predicate_based_insert
rat_dda_read_skew2
rat_dda_read_skew2_committed
rat_mda_step_rat
rat_mda_step_rat_long_fork
rat_mda_step_rat_predicate_based_delete
rat_mda_step_rat_predicate_based_insert
#### WAT
#wat_sda_dirty_write_1abort
#wat_sda_dirty_write_2commit
#wat_sda_full_write
#wat_sda_full_write_committed
#wat_sda_lost_update_c1
#wat_sda_lost_update_c2
#wat_sda_lost_self_update_committed
#wat_dda_double_write_skew2_committed
#wat_dda_full_write_skew_c1
#wat_dda_full_write_skew_c2
#wat_dda_full_write_skew_committed
#wat_dda_read_write_skew1_c1
#wat_dda_read_write_skew1_c2
#wat_dda_read_write_skew2_c1
#wat_dda_read_write_skew2_c2
#wat_dda_read_write_skew2_committed
#wat_mda_step_wat_c1
#wat_mda_step_wat_c2
wat_sda_dirty_write_1abort
wat_sda_dirty_write_2commit
wat_sda_full_write
wat_sda_full_write_committed
wat_sda_lost_update_c1
wat_sda_lost_update_c2
wat_sda_lost_self_update_committed
wat_dda_double_write_skew2_committed
wat_dda_full_write_skew_c1
wat_dda_full_write_skew_c2
wat_dda_full_write_skew_committed
wat_dda_read_write_skew1_c1
wat_dda_read_write_skew1_c2
wat_dda_read_write_skew2_c1
wat_dda_read_write_skew2_c2
wat_dda_read_write_skew2_committed
wat_mda_step_wat_c1
wat_mda_step_wat_c2
#### IAT
#iat_sda_non_repeatable_read_committed
#iat_sda_lost_update_committed
#iat_dda_read_skew_committed
#iat_dda_read_write_skew1_committed
#iat_dda_write_skew
#iat_dda_write_skew_predicate_based-intersecting_data
#iat_dda_write_skew_predicate_based-overdraft_protection
#iat_dda_write_skew_committed
#iat_mda_step_iat
#iat_mda_step_iat_predicate_based_delete
#iat_mda_step_iat_predicate_based_insert
#iat_mda_step_iat_uname_anomaly
#iat_mda_step_iat_cross_phenomenon
#iat_mda_step_iat_causality_violation_anomaly
#iat_mda_step_iat_read_only_transaction_anomaly
iat_sda_non_repeatable_read_committed
iat_sda_lost_update_committed
iat_dda_read_skew_committed
iat_dda_read_write_skew1_committed
iat_dda_write_skew
iat_dda_write_skew_predicate_based-intersecting_data
iat_dda_write_skew_predicate_based-overdraft_protection
iat_dda_write_skew_committed
iat_mda_step_iat
iat_mda_step_iat_predicate_based_delete
iat_mda_step_iat_predicate_based_insert
iat_mda_step_iat_uname_anomaly
iat_mda_step_iat_cross_phenomenon
iat_mda_step_iat_causality_violation_anomaly
iat_mda_step_iat_read_only_transaction_anomaly
38 changes: 37 additions & 1 deletion src/dbtest/src/mda_generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,27 @@
import os
import sys

# 异常类型允许情况
allowed_anomalies = {
"read-uncommitted": {"dirty_read", "non_repeatable_read", "phantom"},
"read-committed": {"non_repeatable_read", "phantom"},
"repeatable-read": {"phantom"},
"serializable": set()
}

# 根据测试用例名称判断它属于哪种异常
def classify_anomaly(case_name: str) -> str:
name = case_name.lower()
if "dirty_write" in name:
return "dirty_write"
elif "dirty_read" in name:
return "dirty_read"
elif "non_repeatable_read" in name:
return "non_repeatable_read"
elif "phantom" in name or "predicate" in name:
return "phantom"
else:
return "other"

class OptionException(Exception):
pass
Expand Down Expand Up @@ -812,15 +833,30 @@ def write_description(file_name, txn_num, op_num, data_num):
db_type = sys.argv[1]
# [tdsql] => for pg/sql standard queries
test_type = sys.argv[2]
if len(sys.argv) >= 4:
isolation_level = sys.argv[3].lower()
else:
isolation_level = "serializable" # 默认最严格
max_time = 99999999999999999999
with open(do_test_list, "r") as f:
lines = f.readlines()
selected_lines = []
allowed_set = allowed_anomalies.get(isolation_level, set())

for popg in lines:
popg = popg.strip()
if not popg or popg.startswith("#"):
continue
anomaly_type = classify_anomaly(popg)
if anomaly_type in allowed_set:
continue # 当前隔离级别允许这个异常,跳过生成
selected_lines.append(popg)
if not os.path.exists(case_folder):
os.mkdir(case_folder)


# for each popg, generate popg test case and write into file.
for popg in lines:
for popg in selected_lines:
popg = popg.replace("\n", "")
popg = popg.replace(" ", "")
if popg == "":
Expand Down