From 8e45332228761e16007049ccf14c40329be83468 Mon Sep 17 00:00:00 2001 From: dmchen Date: Tue, 12 Nov 2024 11:26:30 +0800 Subject: [PATCH] fix/TS-5251-ad-conflict-check-fix-case --- tests/army/cluster/compactDBConflict.json | 62 ----------- .../6-cluster}/compactDBConflict.py | 100 ++++++++++-------- 2 files changed, 53 insertions(+), 109 deletions(-) delete mode 100644 tests/army/cluster/compactDBConflict.json rename tests/{army/cluster => system-test/6-cluster}/compactDBConflict.py (71%) diff --git a/tests/army/cluster/compactDBConflict.json b/tests/army/cluster/compactDBConflict.json deleted file mode 100644 index ab9b72d260..0000000000 --- a/tests/army/cluster/compactDBConflict.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "filetype": "insert", - "cfgdir": "/etc/taos", - "host": "127.0.0.1", - "port": 6030, - "user": "root", - "password": "taosdata", - "connection_pool_size": 8, - "num_of_records_per_req": 3000, - "prepared_rand": 3000, - "thread_count": 2, - "create_table_thread_count": 1, - "confirm_parameter_prompt": "no", - "continue_if_fail": "yes", - "databases": [ - { - "dbinfo": { - "name": "db", - "drop": "yes", - "vgroups": 2, - "replica": 3, - "duration":"1d", - "wal_retention_period": 1, - "wal_retention_size": 1, - "keep": "3d,6d,30d" - }, - "super_tables": [ - { - "name": "stb", - "child_table_exists": "no", - "childtable_count": 10, - "insert_rows": 100000000, - "childtable_prefix": "d", - "insert_mode": "taosc", - "timestamp_step": 10000, - "start_timestamp":"now-12d", - "columns": [ - { "type": "bool", "name": "bc"}, - { "type": "float", "name": "fc" }, - { "type": "double", "name": "dc"}, - { "type": "tinyint", "name": "ti"}, - { "type": "smallint", "name": "si" }, - { "type": "int", "name": "ic" }, - { "type": "bigint", "name": "bi" }, - { "type": "utinyint", "name": "uti"}, - { "type": "usmallint", "name": "usi"}, - { "type": "uint", "name": "ui" }, - { "type": "ubigint", "name": "ubi"}, - { "type": "binary", "name": "bin", "len": 16}, - { "type": "nchar", "name": "nch", "len": 32} - ], - "tags": [ - {"type": "tinyint", "name": "groupid","max": 10,"min": 1}, - {"name": "location","type": "binary", "len": 16, "values": - ["San Francisco", "Los Angles", "San Diego", "San Jose", "Palo Alto", "Campbell", "Mountain View","Sunnyvale", "Santa Clara", "Cupertino"] - } - ] - } - ] - } - ] -} diff --git a/tests/army/cluster/compactDBConflict.py b/tests/system-test/6-cluster/compactDBConflict.py similarity index 71% rename from tests/army/cluster/compactDBConflict.py rename to tests/system-test/6-cluster/compactDBConflict.py index 0645fcd8e1..118557d563 100644 --- a/tests/army/cluster/compactDBConflict.py +++ b/tests/system-test/6-cluster/compactDBConflict.py @@ -10,116 +10,97 @@ ################################################################### # -*- coding: utf-8 -*- -import frame.etool -from frame.caseBase import * -from frame.cases import * -from frame import * -import json +from util.log import * +from util.cases import * +from util.dnodes import * +from util.sql import * import threading -class TDTestCase(TBase): +class TDTestCase: def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to init {__file__}") self.replicaVar = int(replicaVar) tdSql.init(conn.cursor(), logSql) # output sql.txt file - self.configJsonFile('compactDBConflict.json', 'db', 4, 1, 'compactDBConflict.json', 100000) - - def configJsonFile(self, fileName, dbName, vgroups, replica, newFileName='', insert_rows=100000, - timestamp_step=10000): - tdLog.debug(f"configJsonFile {fileName}") - filePath = etool.curFile(__file__, fileName) - with open(filePath, 'r') as f: - data = json.load(f) - - if len(newFileName) == 0: - newFileName = fileName - - data['databases'][0]['dbinfo']['name'] = dbName - data['databases'][0]['dbinfo']['vgroups'] = vgroups - data['databases'][0]['dbinfo']['replica'] = replica - data['databases'][0]['super_tables'][0]['insert_rows'] = insert_rows - data['databases'][0]['super_tables'][0]['timestamp_step'] = timestamp_step - json_data = json.dumps(data) - filePath = etool.curFile(__file__, newFileName) - with open(filePath, "w") as file: - file.write(json_data) - - tdLog.debug(f"configJsonFile {json_data}") - - def insertData(self, configFile): - tdLog.info(f"insert data.") - # taosBenchmark run - jfile = etool.curFile(__file__, configFile) - etool.benchMark(json=jfile) def run(self): tdLog.debug(f"start to excute {__file__}") - self.insertData('compactDBConflict.json') + tdSql.execute('CREATE DATABASE db vgroups 4 replica 1;') - tdSql.execute('use db') + tdSql.execute('use db;') + tdLog.debug("start test1") event = threading.Event() t0 = threading.Thread(target=self.compactDBThread, args=('', event)) t0.start() - tdLog.debug("t0 threading started!!!!!") + tdLog.info("t0 threading started,wait compact db tran finish") event.wait() tdSql.error('ALTER DATABASE db REPLICA 3;', expectErrInfo="Transaction not completed due to conflict with compact") + tdLog.info("wait compact db finish") t0.join() + tdLog.debug("start test2") event1 = threading.Event() t1 = threading.Thread(target=self.compactDBThread, args=('', event1)) t1.start() - tdLog.debug("t1 threading started!!!!!") + tdLog.info("t1 threading started,wait compact db tran finish") event1.wait() tdSql.error('REDISTRIBUTE VGROUP 5 DNODE 1;', expectErrInfo="Transaction not completed due to conflict with compact") + tdLog.info("wait compact db finish") t1.join() + tdLog.debug("start test3") event2 = threading.Event() t2 = threading.Thread(target=self.compactDBThread, args=('', event2)) t2.start() - tdLog.debug("t2 threading started!!!!!") + tdLog.info("t2 threading started,wait compact db tran finish") event2.wait() rowLen = tdSql.query('show vgroups') if rowLen > 0: vgroupId = tdSql.getData(0, 0) - tdLog.debug(f"splitVgroupThread vgroupId:{vgroupId}") + tdLog.info(f"splitVgroupThread vgroupId:{vgroupId}") tdSql.error('REDISTRIBUTE VGROUP 5 DNODE 1;', expectErrInfo="Transaction not completed due to conflict with compact") + tdLog.info("wait compact db finish") t2.join() + tdLog.debug("start test4") event3 = threading.Event() t3 = threading.Thread(target=self.compactDBThread, args=('', event3)) t3.start() - tdLog.debug("t3 threading started!!!!!") + tdLog.info("t3 threading started!!!!!") event3.wait() tdSql.error('BALANCE VGROUP;', expectErrInfo="Transaction not completed due to conflict with compact") t3.join() + tdLog.debug("start test5") t4 = threading.Thread(target=self.splitVgroupThread) t4.start() - tdLog.debug("t4 threading started!!!!!") + tdLog.info("t4 threading started!!!!!") time.sleep(1) tdSql.error('compact database db;', expectErrInfo="Conflict transaction not completed") t4.join() + tdLog.debug("start test6") t5 = threading.Thread(target=self.RedistributeVGroups) t5.start() - tdLog.debug("t5 threading started!!!!!") + tdLog.info("t5 threading started!!!!!") time.sleep(1) tdSql.error('compact database db;', expectErrInfo="Conflict transaction not completed") t5.join() + tdLog.debug("start test7") t6 = threading.Thread(target=self.balanceVGROUPThread) t6.start() - tdLog.debug("t6 threading started!!!!!") + tdLog.info("t6 threading started!!!!!") time.sleep(1) tdSql.error('compact database db;', expectErrInfo="Conflict transaction not completed") t6.join() + tdLog.debug("start test8") t7 = threading.Thread(target=self.alterDBThread) t7.start() - tdLog.debug("t7 threading started!!!!!") + tdLog.info("t7 threading started!!!!!") time.sleep(1) tdSql.error('compact database db;', expectErrInfo="Conflict transaction not completed") t7.join() @@ -175,7 +156,32 @@ class TDTestCase(TBase): tdLog.exit("get vgroupId fail!") if self.waitTransactionZero() is False: tdLog.info(f"transaction not finished") - + + def waitTransactionZero(self, seconds = 300, interval = 1): + # wait end + for i in range(seconds): + sql ="show transactions;" + rows = tdSql.query(sql) + if rows == 0: + tdLog.info("transaction count became zero.") + return True + #tdLog.info(f"i={i} wait ...") + time.sleep(interval) + + return False + def waitCompactsZero(self, seconds = 300, interval = 1): + # wait end + for i in range(seconds): + sql ="show compacts;" + rows = tdSql.query(sql) + if rows == 0: + tdLog.info("compacts count became zero.") + return True + #tdLog.info(f"i={i} wait ...") + time.sleep(interval) + + return False + def stop(self): tdSql.close() tdLog.success(f"{__file__} successfully executed")