未验证 提交 5a957eeb 编写于 作者: S Shengliang Guan 提交者: GitHub

Merge pull request #20416 from taosdata/enh/changeTagIndexCase

change tag index case
...@@ -11,27 +11,24 @@ ...@@ -11,27 +11,24 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos
import sys
import time
import os import os
import socket
import subprocess
import random import random
import socket
import string import string
import random import subprocess
import sys
import time
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
from util.log import * import taos
from util.sql import *
from util.cases import * from util.cases import *
from util.common import * from util.common import *
from util.dnodes import *
from util.dnodes import TDDnode, TDDnodes
from util.log import *
from util.sql import *
from util.sqlset import * from util.sqlset import *
from util.dnodes import *
from util.dnodes import TDDnodes
from util.dnodes import TDDnode
# #
# -------------- util -------------------------- # -------------- util --------------------------
...@@ -41,13 +38,13 @@ def pathSize(path): ...@@ -41,13 +38,13 @@ def pathSize(path):
total_size = 0 total_size = 0
for dirpath, dirnames, filenames in os.walk(path): for dirpath, dirnames, filenames in os.walk(path):
for i in filenames: for i in filenames:
#use join to concatenate all the components of path # use join to concatenate all the components of path
f = os.path.join(dirpath, i) f = os.path.join(dirpath, i)
#use getsize to generate size in bytes and add it to the total size # use getsize to generate size in bytes and add it to the total size
total_size += os.path.getsize(f) total_size += os.path.getsize(f)
#print(dirpath) # print(dirpath)
print(" %s %.02f MB"%(path, total_size/1024/1024)) print(" %s %.02f MB" % (path, total_size/1024/1024))
return total_size return total_size
''' '''
...@@ -67,24 +64,27 @@ def pathSize(path): ...@@ -67,24 +64,27 @@ def pathSize(path):
# --------------- cluster ------------------------ # --------------- cluster ------------------------
# #
class MyDnodes(TDDnodes): class MyDnodes(TDDnodes):
def __init__(self ,dnodes_lists): def __init__(self, dnodes_lists):
super(MyDnodes,self).__init__() super(MyDnodes, self).__init__()
self.dnodes = dnodes_lists # dnode must be TDDnode instance self.dnodes = dnodes_lists # dnode must be TDDnode instance
self.simDeployed = False self.simDeployed = False
class TagCluster: class TagCluster:
noConn = True noConn = True
def init(self, conn, logSql, replicaVar=1): def init(self, conn, logSql, replicaVar=1):
tdLog.debug(f"start to excute {__file__}") tdLog.debug(f"start to excute {__file__}")
self.TDDnodes = None self.TDDnodes = None
self.depoly_cluster(5) self.depoly_cluster(5)
self.master_dnode = self.TDDnodes.dnodes[0] self.master_dnode = self.TDDnodes.dnodes[0]
self.host=self.master_dnode.cfgDict["fqdn"] self.host = self.master_dnode.cfgDict["fqdn"]
conn1 = taos.connect(self.master_dnode.cfgDict["fqdn"] , config=self.master_dnode.cfgDir) conn1 = taos.connect(
self.master_dnode.cfgDict["fqdn"], config=self.master_dnode.cfgDir)
tdSql.init(conn1.cursor()) tdSql.init(conn1.cursor())
def getBuildPath(self): def getBuildPath(self):
selfPath = os.path.dirname(os.path.realpath(__file__)) selfPath = os.path.dirname(os.path.realpath(__file__))
...@@ -101,8 +101,7 @@ class TagCluster: ...@@ -101,8 +101,7 @@ class TagCluster:
break break
return buildPath return buildPath
def depoly_cluster(self, dnodes_nums):
def depoly_cluster(self ,dnodes_nums):
testCluster = False testCluster = False
valgrind = 0 valgrind = 0
...@@ -126,7 +125,7 @@ class TagCluster: ...@@ -126,7 +125,7 @@ class TagCluster:
self.TDDnodes.setAsan(tdDnodes.getAsan()) self.TDDnodes.setAsan(tdDnodes.getAsan())
self.TDDnodes.stopAll() self.TDDnodes.stopAll()
for dnode in self.TDDnodes.dnodes: for dnode in self.TDDnodes.dnodes:
self.TDDnodes.deploy(dnode.index,{}) self.TDDnodes.deploy(dnode.index, {})
for dnode in self.TDDnodes.dnodes: for dnode in self.TDDnodes.dnodes:
self.TDDnodes.starttaosd(dnode.index) self.TDDnodes.starttaosd(dnode.index)
...@@ -136,7 +135,8 @@ class TagCluster: ...@@ -136,7 +135,8 @@ class TagCluster:
sql = "" sql = ""
for dnode in self.TDDnodes.dnodes[1:]: for dnode in self.TDDnodes.dnodes[1:]:
# print(dnode.cfgDict) # print(dnode.cfgDict)
dnode_id = dnode.cfgDict["fqdn"] + ":" +dnode.cfgDict["serverPort"] dnode_id = dnode.cfgDict["fqdn"] + \
":" + dnode.cfgDict["serverPort"]
if dnode_first_host == "": if dnode_first_host == "":
dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0] dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0]
dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1] dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1]
...@@ -150,7 +150,6 @@ class TagCluster: ...@@ -150,7 +150,6 @@ class TagCluster:
time.sleep(2) time.sleep(2)
tdLog.info(" create cluster done! ") tdLog.info(" create cluster done! ")
def getConnection(self, dnode): def getConnection(self, dnode):
host = dnode.cfgDict["fqdn"] host = dnode.cfgDict["fqdn"]
port = dnode.cfgDict["serverPort"] port = dnode.cfgDict["serverPort"]
...@@ -168,7 +167,7 @@ class TagCluster: ...@@ -168,7 +167,7 @@ class TagCluster:
class PerfDB: class PerfDB:
def __init__(self): def __init__(self):
self.sqls = [] self.sqls = []
self.spends= [] self.spends = []
# execute # execute
def execute(self, sql): def execute(self, sql):
...@@ -254,12 +253,12 @@ class TDTestCase: ...@@ -254,12 +253,12 @@ class TDTestCase:
def query(self, sql): def query(self, sql):
return self.dbs[self.cur].query(sql) return self.dbs[self.cur].query(sql)
def set_stb_sql(self,stbname,column_dict,tag_dict): def set_stb_sql(self, stbname, column_dict, tag_dict):
column_sql = '' column_sql = ''
tag_sql = '' tag_sql = ''
for k,v in column_dict.items(): for k, v in column_dict.items():
column_sql += f"{k} {v}, " column_sql += f"{k} {v}, "
for k,v in tag_dict.items(): for k, v in tag_dict.items():
tag_sql += f"{k} {v}, " tag_sql += f"{k} {v}, "
create_stb_sql = f'create stable {stbname} ({column_sql[:-2]}) tags ({tag_sql[:-2]})' create_stb_sql = f'create stable {stbname} ({column_sql[:-2]}) tags ({tag_sql[:-2]})'
return create_stb_sql return create_stb_sql
...@@ -268,37 +267,41 @@ class TDTestCase: ...@@ -268,37 +267,41 @@ class TDTestCase:
def create_database(self, dbname, vgroups, replica): def create_database(self, dbname, vgroups, replica):
sql = f'create database {dbname} vgroups {vgroups} replica {replica}' sql = f'create database {dbname} vgroups {vgroups} replica {replica}'
tdSql.execute(sql) tdSql.execute(sql)
#tdSql.execute(sql) # tdSql.execute(sql)
tdSql.execute(f'use {dbname}') tdSql.execute(f'use {dbname}')
# create stable and child tables # create stable and child tables
def create_table(self, stbname, tbname, count): def create_table(self, stbname, tbname, count):
# create stable # create stable
create_table_sql = self.set_stb_sql(stbname, self.column_dict, self.tag_dict) create_table_sql = self.set_stb_sql(
stbname, self.column_dict, self.tag_dict)
tdSql.execute(create_table_sql) tdSql.execute(create_table_sql)
# create child table # create child table
tdLog.info(f" start create {count} child tables.") tdLog.info(f" start create {count} child tables.")
for i in range(count): batchSql = ""
ti = i % 128 batchSize = 5000
for i in range(int(count/batchSize)):
batchSql = "create table"
for j in range(batchSize):
ti = (i * batchSize + j) % 128
binTxt = self.random_string(self.lenBinary) binTxt = self.random_string(self.lenBinary)
tags = f'{ti},{ti},{i},{i},{ti},{ti},{i},{i},{i}.000{i},{i}.000{i},true,"{binTxt}","nch{i}",now' idx = i * batchSize + j
sql = f'create table {tbname}{i} using {stbname} tags({tags})' tags = f'{ti},{ti},{idx},{idx},{ti},{ti},{idx},{idx},{idx}.000{idx},{idx}.000{idx},true,"{binTxt}","nch{idx}",now'
tdSql.execute(sql) sql = f'{tbname}{idx} using {stbname} tags({tags})'
if i > 0 and i % 1000 == 0: batchSql = batchSql + " " + sql
tdLog.info(f" child table count = {i}") tdSql.execute(batchSql)
tdLog.info(f" child table count = {i * batchSize}")
tdLog.info(f" end create {count} child tables.")
# create stable and child tables # create stable and child tables
def create_tagidx(self, stbname): def create_tagidx(self, stbname):
cnt = -1 cnt = -1
for key in self.tag_dict.keys(): for key in self.tag_dict.keys():
# first tag have default index, so skip # first tag have default index, so skip
if cnt == -1: if cnt == -1:
cnt = 0 cnt = 0
continue; continue
sql = f'create index idx_{key} on {stbname} ({key})' sql = f'create index idx_{key} on {stbname} ({key})'
tdLog.info(f" sql={sql}") tdLog.info(f" sql={sql}")
tdSql.execute(sql) tdSql.execute(sql)
...@@ -376,8 +379,8 @@ class TDTestCase: ...@@ -376,8 +379,8 @@ class TDTestCase:
self.query(sql) self.query(sql)
tdSql.checkRows(4) tdSql.checkRows(4)
# drop child table # drop child table
def drop_tables(self, tbname, count): def drop_tables(self, tbname, count):
# table d1 and d20 have verify data , so can not drop # table d1 and d20 have verify data , so can not drop
start = random.randint(21, count/2) start = random.randint(21, count/2)
...@@ -396,7 +399,7 @@ class TDTestCase: ...@@ -396,7 +399,7 @@ class TDTestCase:
# first tag have default index, so skip # first tag have default index, so skip
if cnt == -1: if cnt == -1:
cnt = 0 cnt = 0
continue; continue
sql = f'drop index idx_{key}' sql = f'drop index idx_{key}'
tdSql.execute(sql) tdSql.execute(sql)
cnt += 1 cnt += 1
...@@ -408,17 +411,19 @@ class TDTestCase: ...@@ -408,17 +411,19 @@ class TDTestCase:
tdLog.info(f' drop {cnt} tag indexs ok.') tdLog.info(f' drop {cnt} tag indexs ok.')
# show performance # show performance
def show_performance(self, count) : def show_performance(self, count):
db = self.dbs[0] db = self.dbs[0]
db1 = self.dbs[1] db1 = self.dbs[1]
cnt = len(db.sqls) cnt = len(db.sqls)
cnt1 = len(db1.sqls) cnt1 = len(db1.sqls)
if cnt != len(db1.sqls): if cnt != len(db1.sqls):
tdLog.info(f" datebase sql count not equal. cnt={cnt} cnt1={cnt1}\n") tdLog.info(
f" datebase sql count not equal. cnt={cnt} cnt1={cnt1}\n")
return False return False
tdLog.info(f" database sql cnt ={cnt}") tdLog.info(f" database sql cnt ={cnt}")
print(f" ----------------- performance (child tables = {count})--------------------") print(
f" ----------------- performance (child tables = {count})--------------------")
print(" No time(index) time(no-index) diff(col3-col2) rate(col2/col3) sql") print(" No time(index) time(no-index) diff(col3-col2) rate(col2/col3) sql")
for i in range(cnt): for i in range(cnt):
key = db.sqls[i] key = db.sqls[i]
...@@ -427,12 +432,13 @@ class TDTestCase: ...@@ -427,12 +432,13 @@ class TDTestCase:
value1 = db1.spends[i] value1 = db1.spends[i]
diff = value1 - value diff = value1 - value
rate = value/value1*100 rate = value/value1*100
print(" %d %.3fs %.3fs %.3fs %d%% %s"%(i+1, value, value1, diff, rate, key)) print(" %d %.3fs %.3fs %.3fs %d%% %s" % (
i+1, value, value1, diff, rate, key))
print(" --------------------- end ------------------------") print(" --------------------- end ------------------------")
return True return True
def show_diskspace(self): def show_diskspace(self):
#calc # calc
selfPath = os.path.dirname(os.path.realpath(__file__)) selfPath = os.path.dirname(os.path.realpath(__file__))
projPath = "" projPath = ""
if ("community" in selfPath): if ("community" in selfPath):
...@@ -451,37 +457,35 @@ class TDTestCase: ...@@ -451,37 +457,35 @@ class TDTestCase:
idx_size = vnode2_size + vnode3_size idx_size = vnode2_size + vnode3_size
noidx_size = vnode4_size + vnode5_size noidx_size = vnode4_size + vnode5_size
print(" index = %.02f M"%(idx_size/1024/1024)) print(" index = %.02f M" % (idx_size/1024/1024))
print(" no-index = %.02f M"%(noidx_size/1024/1024)) print(" no-index = %.02f M" % (noidx_size/1024/1024))
print(" index/no-index = %.2f multiple"%(idx_size/noidx_size)) print(" index/no-index = %.2f multiple" % (idx_size/noidx_size))
print(" -------------------- end ------------------------") print(" -------------------- end ------------------------")
# main # main
def testdb(self, dbname, stable, tbname, count, createidx): def testdb(self, dbname, stable, tbname, count, createidx):
# cur # cur
if createidx: if createidx:
self.cur = 0 self.cur = 0
else : else:
self.cur = 1 self.cur = 1
# do # do
self.create_database(dbname, 2, 1) self.create_database(dbname, 2, 1)
self.create_table(stable, tbname, count) self.create_table(stable, tbname, count)
if(createidx): if (createidx):
self.create_tagidx(stable) self.create_tagidx(stable)
self.insert_data(tbname) self.insert_data(tbname)
if(createidx): if (createidx):
self.show_tagidx(dbname,stable) self.show_tagidx(dbname, stable)
self.query_tagidx(stable) self.query_tagidx(stable)
#self.drop_tables(tbname, count) # self.drop_tables(tbname, count)
#if(createidx): # if(createidx):
# self.drop_tagidx(dbname, stable) # self.drop_tagidx(dbname, stable)
# query after delete , expect no crash # query after delete , expect no crash
#self.query_tagidx(stable) # self.query_tagidx(stable)
tdSql.execute(f'flush database {dbname}') tdSql.execute(f'flush database {dbname}')
# run # run
...@@ -511,10 +515,10 @@ class TDTestCase: ...@@ -511,10 +515,10 @@ class TDTestCase:
self.show_diskspace() self.show_diskspace()
def stop(self): def stop(self):
self.tagCluster.stop() self.tagCluster.stop()
tdLog.success("%s successfully executed" % __file__) tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase()) tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase())
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册