fix test cases

This commit is contained in:
Ganlin Zhao 2022-07-30 11:33:39 +08:00
parent 1fbbd30af3
commit 788473ff49
3 changed files with 95 additions and 95 deletions

View File

@ -3,7 +3,7 @@ from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos import taos
import sys import sys
import time import time
import os import os
from util.log import * from util.log import *
from util.sql import * from util.sql import *
@ -26,9 +26,9 @@ class TDTestCase:
self.dnode_list = {} self.dnode_list = {}
self.ts = 1483200000000 self.ts = 1483200000000
self.db_name ='testdb' self.db_name ='testdb'
self.replica = 3 self.replica = 3
self.vgroups = 2 self.vgroups = 2
self.tb_nums = 10 self.tb_nums = 10
self.row_nums = 100 self.row_nums = 100
def getBuildPath(self): def getBuildPath(self):
@ -101,7 +101,7 @@ class TDTestCase:
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
''' '''
) )
for i in range(5): for i in range(5):
tdSql.execute("create table sub_tb_{} using stb1 tags({})".format(i,i)) tdSql.execute("create table sub_tb_{} using stb1 tags({})".format(i,i))
tdSql.query("show stables") tdSql.query("show stables")
@ -145,7 +145,7 @@ class TDTestCase:
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp) (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp)
''' '''
) )
for i in range(tb_nums): for i in range(tb_nums):
sub_tbname = "sub_tb_{}".format(i) sub_tbname = "sub_tb_{}".format(i)
tdSql.execute("create table {} using stb1 tags({})".format(sub_tbname,i)) tdSql.execute("create table {} using stb1 tags({})".format(sub_tbname,i))
@ -164,7 +164,7 @@ class TDTestCase:
tdSql.query("select distinct tbname from {}.{}".format(dbname,'stb1')) tdSql.query("select distinct tbname from {}.{}".format(dbname,'stb1'))
tdSql.checkRows(tb_nums) tdSql.checkRows(tb_nums)
def run(self): def run(self):
self.check_setup_cluster_status() self.check_setup_cluster_status()
self.create_db_check_vgroups() self.create_db_check_vgroups()
self.create_db_replica_3_insertdatas(self.db_name , self.replica , self.vgroups , self.tb_nums , self.row_nums) self.create_db_replica_3_insertdatas(self.db_name , self.replica , self.vgroups , self.tb_nums , self.row_nums)
@ -176,4 +176,4 @@ class TDTestCase:
tdLog.success(f"{__file__} successfully executed") tdLog.success(f"{__file__} successfully executed")
tdCases.addLinux(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase()) tdCases.addWindows(__file__, TDTestCase())

View File

@ -3,7 +3,7 @@ from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos import taos
import sys import sys
import time import time
import os import os
from util.log import * from util.log import *
from util.sql import * from util.sql import *
@ -28,9 +28,9 @@ class TDTestCase:
self.ts = 1483200000000 self.ts = 1483200000000
self.ts_step =1000 self.ts_step =1000
self.db_name ='testdb' self.db_name ='testdb'
self.replica = 3 self.replica = 3
self.vgroups = 1 self.vgroups = 1
self.tb_nums = 10 self.tb_nums = 10
self.row_nums = 100 self.row_nums = 100
self.stop_dnode_id = None self.stop_dnode_id = None
self.loop_restart_times = 10 self.loop_restart_times = 10
@ -193,7 +193,7 @@ class TDTestCase:
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
''' '''
) )
for i in range(5): for i in range(5):
tdSql.execute("create table sub_tb_{} using stb1 tags({})".format(i,i)) tdSql.execute("create table sub_tb_{} using stb1 tags({})".format(i,i))
tdSql.query("show stables") tdSql.query("show stables")
@ -225,7 +225,7 @@ class TDTestCase:
tdSql.execute(drop_db_sql) tdSql.execute(drop_db_sql)
tdSql.execute(create_db_sql) tdSql.execute(create_db_sql)
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
def create_stable_insert_datas(self,dbname ,stablename , tb_nums , row_nums): def create_stable_insert_datas(self,dbname ,stablename , tb_nums , row_nums):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
tdSql.execute( tdSql.execute(
@ -234,8 +234,8 @@ class TDTestCase:
tags (t1 int) tags (t1 int)
'''.format(stablename) '''.format(stablename)
) )
for i in range(tb_nums): for i in range(tb_nums):
sub_tbname = "sub_{}_{}".format(stablename,i) sub_tbname = "sub_{}_{}".format(stablename,i)
tdSql.execute("create table {} using {} tags({})".format(sub_tbname, stablename ,i)) tdSql.execute("create table {} using {} tags({})".format(sub_tbname, stablename ,i))
# insert datas about new database # insert datas about new database
@ -245,11 +245,11 @@ class TDTestCase:
tdSql.execute(f"insert into {sub_tbname} values ({ts}, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") tdSql.execute(f"insert into {sub_tbname} values ({ts}, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
tdLog.notice(" ==== stable {} insert rows execute end =====".format(stablename)) tdLog.notice(" ==== stable {} insert rows execute end =====".format(stablename))
def append_rows_of_exists_tables(self,dbname ,stablename , tbname , append_nums ): def append_rows_of_exists_tables(self,dbname ,stablename , tbname , append_nums ):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
for row_num in range(append_nums): for row_num in range(append_nums):
tdSql.execute(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") tdSql.execute(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
# print(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") # print(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
@ -257,9 +257,9 @@ class TDTestCase:
os.system("taos -s 'select count(*) from {}.{}';".format(dbname,stablename)) os.system("taos -s 'select count(*) from {}.{}';".format(dbname,stablename))
def check_insert_rows(self, dbname, stablename , tb_nums , row_nums, append_rows): def check_insert_rows(self, dbname, stablename , tb_nums , row_nums, append_rows):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) tdSql.query("select count(*) from {}.{}".format(dbname,stablename))
while not tdSql.queryResult: while not tdSql.queryResult:
@ -267,8 +267,8 @@ class TDTestCase:
tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) tdSql.query("select count(*) from {}.{}".format(dbname,stablename))
status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows) status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows)
count = 0 count = 0
while not status_OK : while not status_OK :
if count > self.try_check_times: if count > self.try_check_times:
os.system("taos -s ' show {}.vgroups; '".format(dbname)) os.system("taos -s ' show {}.vgroups; '".format(dbname))
@ -282,14 +282,14 @@ class TDTestCase:
status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows) status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows)
tdLog.notice(" ==== check insert rows first failed , this is {}_th retry check rows of database {} ====".format(count , dbname)) tdLog.notice(" ==== check insert rows first failed , this is {}_th retry check rows of database {} ====".format(count , dbname))
count += 1 count += 1
tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename))
while not tdSql.queryResult: while not tdSql.queryResult:
time.sleep(0.1) time.sleep(0.1)
tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename))
status_OK = self.mycheckRows("select distinct tbname from {}.{}".format(dbname,stablename) ,tb_nums) status_OK = self.mycheckRows("select distinct tbname from {}.{}".format(dbname,stablename) ,tb_nums)
count = 0 count = 0
while not status_OK : while not status_OK :
if count > self.try_check_times: if count > self.try_check_times:
os.system("taos -s ' show {}.vgroups;'".format(dbname)) os.system("taos -s ' show {}.vgroups;'".format(dbname))
@ -309,7 +309,7 @@ class TDTestCase:
newTdSql.query("show {}.vgroups".format(dbname)) newTdSql.query("show {}.vgroups".format(dbname))
vgroup_infos = newTdSql.queryResult vgroup_infos = newTdSql.queryResult
for vgroup_info in vgroup_infos: for vgroup_info in vgroup_infos:
leader_infos = vgroup_info[3:-4] leader_infos = vgroup_info[3:-4]
# print(vgroup_info) # print(vgroup_info)
for ind ,role in enumerate(leader_infos): for ind ,role in enumerate(leader_infos):
if role =='leader': if role =='leader':
@ -321,7 +321,7 @@ class TDTestCase:
return self.stop_dnode_id return self.stop_dnode_id
def wait_stop_dnode_OK(self): def wait_stop_dnode_OK(self):
def _get_status(): def _get_status():
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
@ -334,7 +334,7 @@ class TDTestCase:
if id == self.stop_dnode_id: if id == self.stop_dnode_id:
status = dnode_status status = dnode_status
break break
return status return status
status = _get_status() status = _get_status()
while status !="offline": while status !="offline":
@ -344,7 +344,7 @@ class TDTestCase:
tdLog.notice("==== stop_dnode has stopped , id is {}".format(self.stop_dnode_id)) tdLog.notice("==== stop_dnode has stopped , id is {}".format(self.stop_dnode_id))
def wait_start_dnode_OK(self): def wait_start_dnode_OK(self):
def _get_status(): def _get_status():
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
status = "" status = ""
@ -356,7 +356,7 @@ class TDTestCase:
if id == self.stop_dnode_id: if id == self.stop_dnode_id:
status = dnode_status status = dnode_status
break break
return status return status
status = _get_status() status = _get_status()
while status !="ready": while status !="ready":
@ -366,7 +366,7 @@ class TDTestCase:
tdLog.notice("==== stop_dnode has restart , id is {}".format(self.stop_dnode_id)) tdLog.notice("==== stop_dnode has restart , id is {}".format(self.stop_dnode_id))
def get_leader_infos(self ,dbname): def get_leader_infos(self ,dbname):
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
newTdSql.query("show {}.vgroups".format(dbname)) newTdSql.query("show {}.vgroups".format(dbname))
vgroup_infos = newTdSql.queryResult vgroup_infos = newTdSql.queryResult
@ -386,7 +386,7 @@ class TDTestCase:
tdLog.exit(" ===maybe revote not occured , there is no dnode offline ====") tdLog.exit(" ===maybe revote not occured , there is no dnode offline ====")
else: else:
for vgroup_info in vote_act: for vgroup_info in vote_act:
for ind , role in enumerate(vgroup_info): for ind , role in enumerate(vgroup_info):
if role==self.stop_dnode_id: if role==self.stop_dnode_id:
if vgroup_info[ind+1] =="offline" and "leader" in vgroup_info: if vgroup_info[ind+1] =="offline" and "leader" in vgroup_info:
@ -400,12 +400,12 @@ class TDTestCase:
return check_status return check_status
def force_stop_dnode(self, dnode_id ): def force_stop_dnode(self, dnode_id ):
tdSql.query("show dnodes") tdSql.query("show dnodes")
port = None port = None
for dnode_info in tdSql.queryResult: for dnode_info in tdSql.queryResult:
if dnode_id == dnode_info[0]: if dnode_id == dnode_info[0]:
port = dnode_info[1].split(":")[-1] port = dnode_info[1].split(":")[-1]
break break
else: else:
continue continue
@ -427,25 +427,25 @@ class TDTestCase:
self.create_database(dbname = db_name ,replica_num= self.replica , vgroup_nums= 1) self.create_database(dbname = db_name ,replica_num= self.replica , vgroup_nums= 1)
self.create_stable_insert_datas(dbname = db_name , stablename = stablename , tb_nums= 10 ,row_nums= 10 ) self.create_stable_insert_datas(dbname = db_name , stablename = stablename , tb_nums= 10 ,row_nums= 10 )
self.stop_dnode_id = self._get_stop_dnode_id(db_name) self.stop_dnode_id = self._get_stop_dnode_id(db_name)
# check rows of datas # check rows of datas
self.check_insert_rows(db_name ,stablename ,tb_nums=10 , row_nums= 10 ,append_rows=0) self.check_insert_rows(db_name ,stablename ,tb_nums=10 , row_nums= 10 ,append_rows=0)
# get leader info before stop # get leader info before stop
before_leader_infos = self.get_leader_infos(db_name) before_leader_infos = self.get_leader_infos(db_name)
# begin stop dnode # begin stop dnode
# force stop taosd by kill -9 # force stop taosd by kill -9
self.force_stop_dnode(self.stop_dnode_id) self.force_stop_dnode(self.stop_dnode_id)
self.wait_stop_dnode_OK() self.wait_stop_dnode_OK()
# vote leaders check # vote leaders check
# get leader info after stop # get leader info after stop
after_leader_infos = self.get_leader_infos(db_name) after_leader_infos = self.get_leader_infos(db_name)
revote_status = self.check_revote_leader_success(db_name ,before_leader_infos , after_leader_infos) revote_status = self.check_revote_leader_success(db_name ,before_leader_infos , after_leader_infos)
# append rows of stablename when dnode stop make sure revote leaders # append rows of stablename when dnode stop make sure revote leaders
@ -470,7 +470,7 @@ class TDTestCase:
else: else:
tdLog.notice("===== leader of database {} is not ok , append rows fail =====".format(db_name)) tdLog.notice("===== leader of database {} is not ok , append rows fail =====".format(db_name))
# begin start dnode # begin start dnode
start = time.time() start = time.time()
tdDnodes[self.stop_dnode_id-1].starttaosd() tdDnodes[self.stop_dnode_id-1].starttaosd()
self.wait_start_dnode_OK() self.wait_start_dnode_OK()
@ -478,29 +478,29 @@ class TDTestCase:
time_cost = int(end -start) time_cost = int(end -start)
if time_cost > self.max_restart_time: if time_cost > self.max_restart_time:
tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id))
# create new stables again # create new stables again
tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id))
self.create_stable_insert_datas(dbname = db_name , stablename = 'new_stb2' , tb_nums= 10 ,row_nums= 10 ) self.create_stable_insert_datas(dbname = db_name , stablename = 'new_stb2' , tb_nums= 10 ,row_nums= 10 )
tdLog.notice(" ==== check new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) tdLog.notice(" ==== check new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id))
self.check_insert_rows(db_name ,'new_stb2' ,tb_nums=10 , row_nums= 10 ,append_rows=0) self.check_insert_rows(db_name ,'new_stb2' ,tb_nums=10 , row_nums= 10 ,append_rows=0)
def unsync_run_case(self): def unsync_run_case(self):
def _restart_dnode_of_db_unsync(dbname): def _restart_dnode_of_db_unsync(dbname):
tdDnodes=cluster.dnodes tdDnodes=cluster.dnodes
self.stop_dnode_id = self._get_stop_dnode_id(dbname) self.stop_dnode_id = self._get_stop_dnode_id(dbname)
# begin restart dnode # begin restart dnode
# force stop taosd by kill -9 # force stop taosd by kill -9
# get leader info before stop # get leader info before stop
before_leader_infos = self.get_leader_infos(db_name) before_leader_infos = self.get_leader_infos(db_name)
self.force_stop_dnode(self.stop_dnode_id) self.force_stop_dnode(self.stop_dnode_id)
self.wait_stop_dnode_OK() self.wait_stop_dnode_OK()
# check revote leader when restart servers # check revote leader when restart servers
# get leader info after stop # get leader info after stop
after_leader_infos = self.get_leader_infos(db_name) after_leader_infos = self.get_leader_infos(db_name)
revote_status = self.check_revote_leader_success(db_name ,before_leader_infos , after_leader_infos) revote_status = self.check_revote_leader_success(db_name ,before_leader_infos , after_leader_infos)
# append rows of stablename when dnode stop make sure revote leaders # append rows of stablename when dnode stop make sure revote leaders
@ -520,30 +520,30 @@ class TDTestCase:
tdLog.notice(" ==== check new stable {} when dnode {} offline ====".format('new_stb1' , self.stop_dnode_id)) tdLog.notice(" ==== check new stable {} when dnode {} offline ====".format('new_stb1' , self.stop_dnode_id))
self.check_insert_rows(db_name ,'new_stb1' ,tb_nums=10 , row_nums= 10 ,append_rows=0) self.check_insert_rows(db_name ,'new_stb1' ,tb_nums=10 , row_nums= 10 ,append_rows=0)
# create new stables again # create new stables again
tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id))
self.create_stable_insert_datas(dbname = db_name , stablename = 'new_stb2' , tb_nums= 10 ,row_nums= 10 ) self.create_stable_insert_datas(dbname = db_name , stablename = 'new_stb2' , tb_nums= 10 ,row_nums= 10 )
tdLog.notice(" ==== check new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) tdLog.notice(" ==== check new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id))
self.check_insert_rows(db_name ,'new_stb2' ,tb_nums=10 , row_nums= 10 ,append_rows=0) self.check_insert_rows(db_name ,'new_stb2' ,tb_nums=10 , row_nums= 10 ,append_rows=0)
tdDnodes[self.stop_dnode_id-1].starttaosd() tdDnodes[self.stop_dnode_id-1].starttaosd()
start = time.time() start = time.time()
self.wait_start_dnode_OK() self.wait_start_dnode_OK()
end = time.time() end = time.time()
time_cost = int(end-start) time_cost = int(end-start)
if time_cost > self.max_restart_time: if time_cost > self.max_restart_time:
tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id))
def _create_threading(dbname): def _create_threading(dbname):
self.current_thread = threading.Thread(target=_restart_dnode_of_db_unsync, args=(dbname,)) self.current_thread = threading.Thread(target=_restart_dnode_of_db_unsync, args=(dbname,))
return self.current_thread return self.current_thread
''' '''
in this mode , it will be extra threading control start or stop dnode , insert will always going with not care follower online or alive in this mode , it will be extra threading control start or stop dnode , insert will always going with not care follower online or alive
''' '''
for loop in range(self.loop_restart_times): for loop in range(self.loop_restart_times):
db_name = "unsync_db_{}".format(loop) db_name = "unsync_db_{}".format(loop)
@ -553,7 +553,7 @@ class TDTestCase:
tdLog.notice(" ===== restart dnode of database {} in an unsync threading ===== ".format(db_name)) tdLog.notice(" ===== restart dnode of database {} in an unsync threading ===== ".format(db_name))
# create sync threading and start it # create sync threading and start it
self.current_thread = _create_threading(db_name) self.current_thread = _create_threading(db_name)
self.current_thread.start() self.current_thread.start()
@ -564,7 +564,7 @@ class TDTestCase:
self.current_thread.join() self.current_thread.join()
def run(self): def run(self):
# basic insert and check of cluster # basic insert and check of cluster
self.check_setup_cluster_status() self.check_setup_cluster_status()
@ -577,4 +577,4 @@ class TDTestCase:
tdLog.success(f"{__file__} successfully executed") tdLog.success(f"{__file__} successfully executed")
tdCases.addLinux(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase()) tdCases.addWindows(__file__, TDTestCase())

View File

@ -3,7 +3,7 @@ from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos import taos
import sys import sys
import time import time
import os import os
from util.log import * from util.log import *
from util.sql import * from util.sql import *
@ -30,9 +30,9 @@ class TDTestCase:
self.ts = 1483200000000 self.ts = 1483200000000
self.ts_step =1000 self.ts_step =1000
self.db_name ='testdb' self.db_name ='testdb'
self.replica = 3 self.replica = 3
self.vgroups = 1 self.vgroups = 1
self.tb_nums = 10 self.tb_nums = 10
self.row_nums = 100 self.row_nums = 100
self.stop_dnode_id = None self.stop_dnode_id = None
self.loop_restart_times = 5 self.loop_restart_times = 5
@ -40,7 +40,7 @@ class TDTestCase:
self.max_restart_time = 10 self.max_restart_time = 10
self.try_check_times = 10 self.try_check_times = 10
self.query_times = 100 self.query_times = 100
def getBuildPath(self): def getBuildPath(self):
selfPath = os.path.dirname(os.path.realpath(__file__)) selfPath = os.path.dirname(os.path.realpath(__file__))
@ -103,7 +103,7 @@ class TDTestCase:
tdSql.execute(drop_db_sql) tdSql.execute(drop_db_sql)
tdSql.execute(create_db_sql) tdSql.execute(create_db_sql)
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
def create_stable_insert_datas(self,dbname ,stablename , tb_nums , row_nums): def create_stable_insert_datas(self,dbname ,stablename , tb_nums , row_nums):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
tdSql.execute( tdSql.execute(
@ -112,7 +112,7 @@ class TDTestCase:
tags (t1 int) tags (t1 int)
'''.format(stablename) '''.format(stablename)
) )
for i in range(tb_nums): for i in range(tb_nums):
sub_tbname = "sub_{}_{}".format(stablename,i) sub_tbname = "sub_{}_{}".format(stablename,i)
tdSql.execute("create table {} using {} tags({})".format(sub_tbname, stablename ,i)) tdSql.execute("create table {} using {} tags({})".format(sub_tbname, stablename ,i))
@ -123,11 +123,11 @@ class TDTestCase:
tdSql.execute(f"insert into {sub_tbname} values ({ts}, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") tdSql.execute(f"insert into {sub_tbname} values ({ts}, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
tdLog.notice(" ==== stable {} insert rows execute end =====".format(stablename)) tdLog.notice(" ==== stable {} insert rows execute end =====".format(stablename))
def append_rows_of_exists_tables(self,dbname ,stablename , tbname , append_nums ): def append_rows_of_exists_tables(self,dbname ,stablename , tbname , append_nums ):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
for row_num in range(append_nums): for row_num in range(append_nums):
tdSql.execute(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") tdSql.execute(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
# print(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ") # print(f"insert into {tbname} values (now, {row_num} ,{row_num}, 10 ,1 ,{row_num} ,{row_num},true,'bin_{row_num}','nchar_{row_num}',now) ")
@ -137,7 +137,7 @@ class TDTestCase:
def check_insert_rows(self, dbname, stablename , tb_nums , row_nums, append_rows): def check_insert_rows(self, dbname, stablename , tb_nums , row_nums, append_rows):
tdSql.execute("use {}".format(dbname)) tdSql.execute("use {}".format(dbname))
tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) tdSql.query("select count(*) from {}.{}".format(dbname,stablename))
while not tdSql.queryResult: while not tdSql.queryResult:
@ -145,8 +145,8 @@ class TDTestCase:
tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) tdSql.query("select count(*) from {}.{}".format(dbname,stablename))
status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows) status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows)
count = 0 count = 0
while not status_OK : while not status_OK :
if count > self.try_check_times: if count > self.try_check_times:
os.system("taos -s ' show {}.vgroups; '".format(dbname)) os.system("taos -s ' show {}.vgroups; '".format(dbname))
@ -160,14 +160,14 @@ class TDTestCase:
status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows) status_OK = self.mycheckData("select count(*) from {}.{}".format(dbname,stablename) ,0 , 0 , tb_nums*row_nums+append_rows)
tdLog.notice(" ==== check insert rows first failed , this is {}_th retry check rows of database {}".format(count , dbname)) tdLog.notice(" ==== check insert rows first failed , this is {}_th retry check rows of database {}".format(count , dbname))
count += 1 count += 1
tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename))
while not tdSql.queryResult: while not tdSql.queryResult:
time.sleep(0.1) time.sleep(0.1)
tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename))
status_OK = self.mycheckRows("select distinct tbname from {}.{}".format(dbname,stablename) ,tb_nums) status_OK = self.mycheckRows("select distinct tbname from {}.{}".format(dbname,stablename) ,tb_nums)
count = 0 count = 0
while not status_OK : while not status_OK :
if count > self.try_check_times: if count > self.try_check_times:
os.system("taos -s ' show {}.vgroups;'".format(dbname)) os.system("taos -s ' show {}.vgroups;'".format(dbname))
@ -186,7 +186,7 @@ class TDTestCase:
tdSql.query("show {}.vgroups".format(dbname)) tdSql.query("show {}.vgroups".format(dbname))
vgroup_infos = tdSql.queryResult vgroup_infos = tdSql.queryResult
for vgroup_info in vgroup_infos: for vgroup_info in vgroup_infos:
leader_infos = vgroup_info[3:-4] leader_infos = vgroup_info[3:-4]
# print(vgroup_info) # print(vgroup_info)
for ind ,role in enumerate(leader_infos): for ind ,role in enumerate(leader_infos):
if role =='leader': if role =='leader':
@ -198,7 +198,7 @@ class TDTestCase:
return self.stop_dnode_id return self.stop_dnode_id
def wait_stop_dnode_OK(self): def wait_stop_dnode_OK(self):
def _get_status(): def _get_status():
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
@ -211,7 +211,7 @@ class TDTestCase:
if id == self.stop_dnode_id: if id == self.stop_dnode_id:
status = dnode_status status = dnode_status
break break
return status return status
status = _get_status() status = _get_status()
while status !="offline": while status !="offline":
@ -229,7 +229,7 @@ class TDTestCase:
tdLog.info(" ===maybe revote not occured , there is no dnode offline ====") tdLog.info(" ===maybe revote not occured , there is no dnode offline ====")
else: else:
for vgroup_info in vote_act: for vgroup_info in vote_act:
for ind , role in enumerate(vgroup_info): for ind , role in enumerate(vgroup_info):
if role==self.stop_dnode_id: if role==self.stop_dnode_id:
if vgroup_info[ind+1] =="offline" and "leader" in vgroup_info: if vgroup_info[ind+1] =="offline" and "leader" in vgroup_info:
@ -243,7 +243,7 @@ class TDTestCase:
return check_status return check_status
def wait_start_dnode_OK(self): def wait_start_dnode_OK(self):
def _get_status(): def _get_status():
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
status = "" status = ""
@ -255,7 +255,7 @@ class TDTestCase:
if id == self.stop_dnode_id: if id == self.stop_dnode_id:
status = dnode_status status = dnode_status
break break
return status return status
status = _get_status() status = _get_status()
while status !="ready": while status !="ready":
@ -349,10 +349,10 @@ class TDTestCase:
tdLog.info("%s(%d) failed: sql:%s, queryRows:%d != expect:%d" % args) tdLog.info("%s(%d) failed: sql:%s, queryRows:%d != expect:%d" % args)
check_status = False check_status = False
return check_status return check_status
def get_leader_infos(self ,dbname): def get_leader_infos(self ,dbname):
newTdSql=tdCom.newTdSql() newTdSql=tdCom.newTdSql()
newTdSql.query("show {}.vgroups".format(dbname)) newTdSql.query("show {}.vgroups".format(dbname))
vgroup_infos = newTdSql.queryResult vgroup_infos = newTdSql.queryResult
@ -369,7 +369,7 @@ class TDTestCase:
port = None port = None
for dnode_info in tdSql.queryResult: for dnode_info in tdSql.queryResult:
if dnode_id == dnode_info[0]: if dnode_id == dnode_info[0]:
port = dnode_info[1].split(":")[-1] port = dnode_info[1].split(":")[-1]
break break
else: else:
continue continue
@ -383,9 +383,9 @@ class TDTestCase:
os.system(ps_kill_taosd) os.system(ps_kill_taosd)
def basic_query_task(self,dbname ,stablename): def basic_query_task(self,dbname ,stablename):
sql = "select * from {}.{} ;".format(dbname , stablename) sql = "select * from {}.{} ;".format(dbname , stablename)
count = 0 count = 0
while count < self.query_times: while count < self.query_times:
os.system(''' taos -s '{}' >>/dev/null '''.format(sql)) os.system(''' taos -s '{}' >>/dev/null '''.format(sql))
@ -398,35 +398,35 @@ class TDTestCase:
self.thread_list.append(task) self.thread_list.append(task)
for thread in self.thread_list: for thread in self.thread_list:
thread.start() thread.start()
return self.thread_list return self.thread_list
def stop_follower_when_query_going(self): def stop_follower_when_query_going(self):
tdDnodes = cluster.dnodes tdDnodes = cluster.dnodes
self.create_database(dbname = self.db_name ,replica_num= self.replica , vgroup_nums= 1) self.create_database(dbname = self.db_name ,replica_num= self.replica , vgroup_nums= 1)
self.create_stable_insert_datas(dbname = self.db_name , stablename = "stb1" , tb_nums= self.tb_nums ,row_nums= self.row_nums) self.create_stable_insert_datas(dbname = self.db_name , stablename = "stb1" , tb_nums= self.tb_nums ,row_nums= self.row_nums)
# let query task start # let query task start
self.thread_list = self.multi_thread_query_task(10 ,self.db_name ,'stb1' ) self.thread_list = self.multi_thread_query_task(10 ,self.db_name ,'stb1' )
# force stop follower # force stop follower
for loop in range(self.loop_restart_times): for loop in range(self.loop_restart_times):
tdLog.debug(" ==== this is {}_th restart follower of database {} ==== ".format(loop ,self.db_name)) tdLog.debug(" ==== this is {}_th restart follower of database {} ==== ".format(loop ,self.db_name))
# get leader info before stop # get leader info before stop
before_leader_infos = self.get_leader_infos(self.db_name) before_leader_infos = self.get_leader_infos(self.db_name)
self.stop_dnode_id = self._get_stop_dnode_id(self.db_name) self.stop_dnode_id = self._get_stop_dnode_id(self.db_name)
self.force_stop_dnode(self.stop_dnode_id) self.force_stop_dnode(self.stop_dnode_id)
start = time.time() start = time.time()
# get leader info after stop # get leader info after stop
after_leader_infos = self.get_leader_infos(self.db_name) after_leader_infos = self.get_leader_infos(self.db_name)
revote_status = self.check_revote_leader_success(self.db_name ,before_leader_infos , after_leader_infos) revote_status = self.check_revote_leader_success(self.db_name ,before_leader_infos , after_leader_infos)
while not revote_status: while not revote_status:
@ -434,7 +434,7 @@ class TDTestCase:
revote_status = self.check_revote_leader_success(self.db_name ,before_leader_infos , after_leader_infos) revote_status = self.check_revote_leader_success(self.db_name ,before_leader_infos , after_leader_infos)
end = time.time() end = time.time()
time_cost = end - start time_cost = end - start
tdLog.debug(" ==== revote leader of database {} cost time {} ====".format(self.db_name , time_cost)) tdLog.debug(" ==== revote leader of database {} cost time {} ====".format(self.db_name , time_cost))
self.wait_stop_dnode_OK() self.wait_stop_dnode_OK()
@ -444,22 +444,22 @@ class TDTestCase:
self.wait_start_dnode_OK() self.wait_start_dnode_OK()
end = time.time() end = time.time()
time_cost = int(end-start) time_cost = int(end-start)
if time_cost > self.max_restart_time: if time_cost > self.max_restart_time:
tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id))
for thread in self.thread_list: for thread in self.thread_list:
thread.join() thread.join()
def run(self): def run(self):
# basic check of cluster # basic check of cluster
self.check_setup_cluster_status() self.check_setup_cluster_status()
self.stop_follower_when_query_going() self.stop_follower_when_query_going()
def stop(self): def stop(self):
@ -467,4 +467,4 @@ class TDTestCase:
tdLog.success(f"{__file__} successfully executed") tdLog.success(f"{__file__} successfully executed")
tdCases.addLinux(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase()) tdCases.addWindows(__file__, TDTestCase())