5dnode1mnode.py 5.9 KB
Newer Older
haoranc's avatar
haoranc 已提交
1 2 3 4
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos
import sys
import time
G
Ganlin Zhao 已提交
5
import os
haoranc's avatar
haoranc 已提交
6 7 8 9

from util.log import *
from util.sql import *
from util.cases import *
10
from util.dnodes import *
haoranc's avatar
haoranc 已提交
11 12 13 14 15 16 17 18 19 20 21
from util.dnodes import TDDnodes
from util.dnodes import TDDnode
import time
import socket
import subprocess

class MyDnodes(TDDnodes):
    def __init__(self ,dnodes_lists):
        super(MyDnodes,self).__init__()
        self.dnodes = dnodes_lists  # dnode must be TDDnode instance
        self.simDeployed = False
G
Ganlin Zhao 已提交
22

haoranc's avatar
haoranc 已提交
23
class TDTestCase:
wafwerar's avatar
wafwerar 已提交
24
    noConn = True
25
    def init(self, conn, logSql, replicaVar=1):
haoranc's avatar
haoranc 已提交
26 27 28 29
        tdLog.debug(f"start to excute {__file__}")
        self.TDDnodes = None
        self.depoly_cluster(5)
        self.master_dnode = self.TDDnodes.dnodes[0]
haoranc's avatar
haoranc 已提交
30
        self.host=self.master_dnode.cfgDict["fqdn"]
haoranc's avatar
haoranc 已提交
31 32
        conn1 = taos.connect(self.master_dnode.cfgDict["fqdn"] , config=self.master_dnode.cfgDir)
        tdSql.init(conn1.cursor())
G
Ganlin Zhao 已提交
33

haoranc's avatar
haoranc 已提交
34 35 36 37 38 39 40 41 42 43

    def getBuildPath(self):
        selfPath = os.path.dirname(os.path.realpath(__file__))

        if ("community" in selfPath):
            projPath = selfPath[:selfPath.find("community")]
        else:
            projPath = selfPath[:selfPath.find("tests")]

        for root, dirs, files in os.walk(projPath):
wafwerar's avatar
wafwerar 已提交
44
            if ("taosd" in files or "taosd.exe" in files):
haoranc's avatar
haoranc 已提交
45 46 47 48 49 50
                rootRealPath = os.path.dirname(os.path.realpath(root))
                if ("packaging" not in rootRealPath):
                    buildPath = root[:len(root) - len("/build/bin")]
                    break
        return buildPath

G
Ganlin Zhao 已提交
51 52

    def depoly_cluster(self ,dnodes_nums):
haoranc's avatar
haoranc 已提交
53 54

        testCluster = False
G
Ganlin Zhao 已提交
55
        valgrind = 0
haoranc's avatar
haoranc 已提交
56 57 58 59 60 61 62 63 64 65 66
        hostname = socket.gethostname()
        dnodes = []
        start_port = 6030
        for num in range(1, dnodes_nums+1):
            dnode = TDDnode(num)
            dnode.addExtraCfg("firstEp", f"{hostname}:{start_port}")
            dnode.addExtraCfg("fqdn", f"{hostname}")
            dnode.addExtraCfg("serverPort", f"{start_port + (num-1)*100}")
            dnode.addExtraCfg("monitorFqdn", hostname)
            dnode.addExtraCfg("monitorPort", 7043)
            dnodes.append(dnode)
G
Ganlin Zhao 已提交
67

haoranc's avatar
haoranc 已提交
68 69 70 71
        self.TDDnodes = MyDnodes(dnodes)
        self.TDDnodes.init("")
        self.TDDnodes.setTestCluster(testCluster)
        self.TDDnodes.setValgrind(valgrind)
72 73

        self.TDDnodes.setAsan(tdDnodes.getAsan())
haoranc's avatar
haoranc 已提交
74 75 76
        self.TDDnodes.stopAll()
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.deploy(dnode.index,{})
G
Ganlin Zhao 已提交
77

haoranc's avatar
haoranc 已提交
78 79 80
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.starttaosd(dnode.index)

G
Ganlin Zhao 已提交
81
        # create cluster
haoranc's avatar
haoranc 已提交
82 83 84 85 86
        for dnode in self.TDDnodes.dnodes[1:]:
            # print(dnode.cfgDict)
            dnode_id = dnode.cfgDict["fqdn"] +  ":" +dnode.cfgDict["serverPort"]
            dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0]
            dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1]
wafwerar's avatar
wafwerar 已提交
87
            cmd = f"{self.getBuildPath()}/build/bin/taos -h {dnode_first_host} -P {dnode_first_port} -s \"create dnode \\\"{dnode_id}\\\"\""
haoranc's avatar
haoranc 已提交
88 89
            print(cmd)
            os.system(cmd)
G
Ganlin Zhao 已提交
90

haoranc's avatar
haoranc 已提交
91 92 93 94
        time.sleep(2)
        tdLog.info(" create cluster done! ")

    def five_dnode_one_mnode(self):
X
Xiaoyu Wang 已提交
95
        tdSql.query("select * from information_schema.ins_dnodes;")
haoranc's avatar
haoranc 已提交
96 97
        tdSql.checkData(0,1,'%s:6030'%self.host)
        tdSql.checkData(4,1,'%s:6430'%self.host)
haoranc's avatar
haoranc 已提交
98 99
        tdSql.checkData(0,4,'ready')
        tdSql.checkData(4,4,'ready')
X
Xiaoyu Wang 已提交
100
        tdSql.query("select * from information_schema.ins_mnodes;")
haoranc's avatar
haoranc 已提交
101
        tdSql.checkData(0,1,'%s:6030'%self.host)
haoranc's avatar
haoranc 已提交
102 103 104 105 106 107 108 109
        tdSql.checkData(0,2,'leader')
        tdSql.checkData(0,3,'ready')


        tdSql.error("create mnode on dnode 1;")
        tdSql.error("drop mnode on dnode 1;")

        tdSql.execute("drop database if exists db")
110
        tdSql.execute("create database if not exists db replica 1 duration 300")
haoranc's avatar
haoranc 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
        tdSql.execute("use db")
        tdSql.execute(
        '''create table stb1
        (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
        tags (t1 int)
        '''
        )
        tdSql.execute(
            '''
            create table t1
            (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(4):
            tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
G
Ganlin Zhao 已提交
126

X
Xiaoyu Wang 已提交
127
        tdSql.query('select * from information_schema.ins_databases;')
128
        tdSql.checkData(2,5,'on')
129
        tdSql.error("alter database db strict 'off'")
130
        # tdSql.execute('alter database db strict 'on'')
X
Xiaoyu Wang 已提交
131
        # tdSql.query('select * from information_schema.ins_databases;')
haoranc's avatar
haoranc 已提交
132
        # tdSql.checkData(2,5,'on')
haoranc's avatar
haoranc 已提交
133 134 135 136 137 138 139

    def getConnection(self, dnode):
        host = dnode.cfgDict["fqdn"]
        port = dnode.cfgDict["serverPort"]
        config_dir = dnode.cfgDir
        return taos.connect(host=host, port=int(port), config=config_dir)

A
Alex Duan 已提交
140 141 142
    def check_alive(self):
        # check cluster alive
        tdLog.printNoPrefix("======== test cluster alive: ")
143
        tdSql.checkDataLoop(0, 0, 1, "show cluster alive;", 20, 0.5)
A
Alex Duan 已提交
144 145

        tdSql.query("show db.alive;")
A
Alex Duan 已提交
146
        tdSql.checkData(0, 0, 1)
A
Alex Duan 已提交
147

sangshuduo's avatar
sangshuduo 已提交
148 149
        # stop 3 dnode
        self.TDDnodes.stoptaosd(3)
150
        tdSql.checkDataLoop(0, 0, 2, "show cluster alive;", 20, 0.5)
151
        
A
Alex Duan 已提交
152
        tdSql.query("show db.alive;")
A
Alex Duan 已提交
153
        tdSql.checkData(0, 0, 2)
A
Alex Duan 已提交
154 155

        # stop 2 dnode
156
        self.TDDnodes.stoptaosd(2)
157
        tdSql.checkDataLoop(0, 0, 0, "show cluster alive;", 20, 0.5)
A
Alex Duan 已提交
158 159

        tdSql.query("show db.alive;")
A
Alex Duan 已提交
160
        tdSql.checkData(0, 0, 0)
A
Alex Duan 已提交
161
        
haoranc's avatar
haoranc 已提交
162

G
Ganlin Zhao 已提交
163
    def run(self):
haoranc's avatar
haoranc 已提交
164 165
        # print(self.master_dnode.cfgDict)
        self.five_dnode_one_mnode()
A
Alex Duan 已提交
166
        # check cluster and db alive
A
Alex Duan 已提交
167
        self.check_alive()
haoranc's avatar
haoranc 已提交
168 169 170 171 172 173

    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

tdCases.addLinux(__file__, TDTestCase())
G
Ganlin Zhao 已提交
174
tdCases.addWindows(__file__, TDTestCase())