diff --git a/src/dbtest/do_test_list.txt b/src/dbtest/do_test_list.txt index 1e171596..23b613b7 100644 --- a/src/dbtest/do_test_list.txt +++ b/src/dbtest/do_test_list.txt @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/src/dbtest/src/mda_generate.py b/src/dbtest/src/mda_generate.py index c10768a7..39e3ace6 100644 --- a/src/dbtest/src/mda_generate.py +++ b/src/dbtest/src/mda_generate.py @@ -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 @@ -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 == "":