115 lines
4.3 KiB
Python
115 lines
4.3 KiB
Python
import taos
|
|
import sys
|
|
import time
|
|
import socket
|
|
import os
|
|
import threading
|
|
import datetime
|
|
|
|
from util.log import *
|
|
from util.sql import *
|
|
from util.cases import *
|
|
from util.dnodes import *
|
|
|
|
|
|
class TDTestCase:
|
|
def init(self, conn, logSql, replicaVar=1):
|
|
self.replicaVar = int(replicaVar)
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdSql.init(conn.cursor(), logSql)
|
|
|
|
def checkVgroups(self, dbName, vgNum):
|
|
sleepNum = vgNum * 60
|
|
flag = 0
|
|
while (sleepNum > 0):
|
|
sql = f'show {dbName}.vgroups'
|
|
tdSql.query(sql)
|
|
flag = 0
|
|
for vgid in range (vgNum) :
|
|
v1_status = tdSql.queryResult[vgid][4]
|
|
v2_status = tdSql.queryResult[vgid][6]
|
|
v3_status = tdSql.queryResult[vgid][8]
|
|
if ((v1_status == 'leader') and (v2_status == 'follower') and (v3_status == 'follower')) \
|
|
or ((v2_status == 'leader') and (v1_status == 'follower') and (v3_status == 'follower')) \
|
|
or ((v3_status == 'leader') and (v2_status == 'follower') and (v1_status == 'follower')):
|
|
continue
|
|
else:
|
|
sleepNum = sleepNum - 1
|
|
time.sleep(1)
|
|
flag = 1
|
|
break
|
|
if (0 == flag):
|
|
return 0
|
|
tdLog.debug("vgroup[%d] status: %s, %s, %s" %(vgid,v1_status,v2_status,v3_status))
|
|
return -1
|
|
|
|
def alter_replica(self):
|
|
# create db and alter replica
|
|
tdLog.debug("====alter db repica 1====")
|
|
vgNum = 3
|
|
dbName = 'db1'
|
|
sql = f'create database {dbName} vgroups {vgNum}'
|
|
tdSql.execute(sql)
|
|
sql = f'alter database {dbName} replica 3'
|
|
tdSql.execute(sql)
|
|
tdLog.debug("start check time: %s"%(str(datetime.datetime.now())))
|
|
res = self.checkVgroups(dbName, vgNum)
|
|
tdLog.debug("end check time: %s"%(str(datetime.datetime.now())))
|
|
if (0 != res):
|
|
tdLog.exit(f'fail: alter database {dbName} replica 3')
|
|
|
|
# create db, stable, child tables, and insert data, then alter replica
|
|
tdLog.debug("====alter db repica 2====")
|
|
dbName = 'db2'
|
|
sql = f'create database {dbName} vgroups {vgNum}'
|
|
tdSql.execute(sql)
|
|
sql = f'use {dbName}'
|
|
tdSql.execute(sql)
|
|
sql = f'create stable stb (ts timestamp, c int) tags (t int)'
|
|
tdSql.execute(sql)
|
|
sql = f'create table ctb using stb tags (1)'
|
|
tdSql.execute(sql)
|
|
sql = f'insert into ctb values (now, 1) (now+1s, 2) (now+2s, 3)'
|
|
tdSql.execute(sql)
|
|
sql = f'alter database {dbName} replica 3'
|
|
tdSql.execute(sql)
|
|
tdLog.debug("start check time: %s"%(str(datetime.datetime.now())))
|
|
res = self.checkVgroups(dbName, vgNum)
|
|
tdLog.debug("end check time: %s"%(str(datetime.datetime.now())))
|
|
if (0 != res):
|
|
tdLog.exit(f'fail: alter database {dbName} replica 3')
|
|
|
|
# firstly create db, stable, child tables, and insert data, then drop stable, and then alter replica
|
|
tdLog.debug("====alter db repica 3====")
|
|
dbName = 'db3'
|
|
sql = f'create database {dbName} vgroups {vgNum}'
|
|
tdSql.execute(sql)
|
|
sql = f'use {dbName}'
|
|
tdSql.execute(sql)
|
|
sql = f'create stable stb (ts timestamp, c int) tags (t int)'
|
|
tdSql.execute(sql)
|
|
sql = f'create table ctb using stb tags (1)'
|
|
tdSql.execute(sql)
|
|
sql = f'insert into ctb values (now, 1) (now+1s, 2) (now+2s, 3)'
|
|
tdSql.execute(sql)
|
|
sql = f'drop table stb'
|
|
tdSql.execute(sql)
|
|
sql = f'alter database {dbName} replica 3'
|
|
tdSql.execute(sql)
|
|
tdLog.debug("start check time: %s"%(str(datetime.datetime.now())))
|
|
res = self.checkVgroups(dbName, vgNum)
|
|
tdLog.debug("end check time: %s"%(str(datetime.datetime.now())))
|
|
if (0 != res):
|
|
tdLog.exit(f'fail: alter database {dbName} replica 3')
|
|
|
|
def run(self):
|
|
self.alter_replica()
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success(f"{__file__} successfully executed")
|
|
|
|
|
|
tdCases.addLinux(__file__, TDTestCase())
|
|
tdCases.addWindows(__file__, TDTestCase())
|