dnodes.py 20.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
###################################################################
#           Copyright (c) 2016 by TAOS Technologies, Inc.
#                     All rights reserved.
#
#  This file is proprietary and confidential to TAOS Technologies.
#  No part of this file may be reproduced, stored, transmitted,
#  disclosed or used in any form or by any means other than as
#  expressly provided by the written permission from Jianhui Tao
#
###################################################################

# -*- coding: utf-8 -*-

import sys
import os
import os.path
17
import platform
L
liuyq-617 已提交
18 19
import pathlib
import shutil
20
import subprocess
21
from time import sleep
22 23 24 25
from util.log import *


class TDSimClient:
Z
zhaoyanggh 已提交
26
    def __init__(self, path):
27
        self.testCluster = False
Z
zhaoyanggh 已提交
28
        self.path = path
S
Shuduo Sang 已提交
29 30 31 32 33 34
        self.cfgDict = {
            "numOfLogLines": "100000000",
            "numOfThreadsPerCore": "2.0",
            "locale": "en_US.UTF-8",
            "charset": "UTF-8",
            "asyncLog": "0",
35 36 37
            "minTablesPerVnode": "4",
            "maxTablesPerVnode": "1000",
            "tableIncStepPerVnode": "10000",
38 39
            "maxVgroupsPerDb": "1000",
            "sdbDebugFlag": "143",
S
Shuduo Sang 已提交
40 41 42 43 44 45
            "rpcDebugFlag": "135",
            "tmrDebugFlag": "131",
            "cDebugFlag": "135",
            "udebugFlag": "135",
            "jnidebugFlag": "135",
            "qdebugFlag": "135",
46
            "telemetryReporting": "0",
Z
zhaoyanggh 已提交
47
        }
48

S
Shuduo Sang 已提交
49 50 51 52
    def getLogDir(self):
        self.logDir = "%s/sim/psim/log" % (self.path)
        return self.logDir

53
    def getCfgDir(self):
S
Shuduo Sang 已提交
54
        self.cfgDir = "%s/sim/psim/cfg" % (self.path)
55 56
        return self.cfgDir

57 58 59
    def setTestCluster(self, value):
        self.testCluster = value

S
Shuduo Sang 已提交
60 61 62
    def addExtraCfg(self, option, value):
        self.cfgDict.update({option: value})

63
    def cfg(self, option, value):
64
        cmd = "echo %s %s >> %s" % (option, value, self.cfgPath)
65 66
        if os.system(cmd) != 0:
            tdLog.exit(cmd)
L
liuyq-617 已提交
67 68 69
    def os_string(self,path):
        os_path = path.replace("/",os.sep)
        return os_path
70
    def deploy(self):
L
liuyq-617 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
        self.logDir = self.os_string("%s/sim/psim/log" % (self.path))
        self.cfgDir = self.os_string("%s/sim/psim/cfg" % (self.path))
        self.cfgPath = self.os_string("%s/sim/psim/cfg/taos.cfg" % (self.path))

        # cmd = "rm -rf " + self.logDir
        # if os.system(cmd) != 0:
        #     tdLog.exit(cmd)
        if os.path.exists(self.logDir): 
            try:
                shutil.rmtree(self.logDir)
            except:
                tdLog.exit("del %s failed"%self.logDir)
        # cmd = "mkdir -p " + self.logDir
        # if os.system(cmd) != 0:
        #     tdLog.exit(cmd)
        os.makedirs(self.logDir)
        # cmd = "rm -rf " + self.cfgDir
        # if os.system(cmd) != 0:
        #     tdLog.exit(cmd)
        if os.path.exists(self.cfgDir): 
            try:
                shutil.rmtree(self.cfgDir)
            except:
                tdLog.exit("del %s failed"%self.cfgDir)
        # cmd = "mkdir -p " + self.cfgDir
        # if os.system(cmd) != 0:
        #     tdLog.exit(cmd)
        os.makedirs(self.cfgDir)
        # cmd = "touch " + self.cfgPath
        # if os.system(cmd) != 0:
        #     tdLog.exit(cmd)
        try:
            pathlib.Path(self.cfgPath).touch()
        except:
             tdLog.exit("create %s failed"%self.cfgPath)
106 107 108
        if self.testCluster:
            self.cfg("masterIp", "192.168.0.1")
            self.cfg("secondIp", "192.168.0.2")
109
        self.cfg("logDir", self.logDir)
S
Shuduo Sang 已提交
110 111 112 113

        for key, value in self.cfgDict.items():
            self.cfg(key, value)

114 115 116 117 118 119 120 121
        tdLog.debug("psim is deployed and configured by %s" % (self.cfgPath))


class TDDnode:
    def __init__(self, index):
        self.index = index
        self.running = 0
        self.deployed = 0
122
        self.testCluster = False
123
        self.valgrind = 0
L
liuyq-617 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
        self.cfgDict = {
            "numOfLogLines":"100000000",
            "mnodeEqualVnodeNum":"0",
            "walLevel":"2",
            "fsync":"1000",
            "statusInterval":"1",
            "numOfMnodes":"3",
            "numOfThreadsPerCore":"2.0",
            "monitor":"0",
            "maxVnodeConnections":"30000",
            "maxMgmtConnections":"30000",
            "maxMeterConnections":"30000",
            "maxShellConns":"30000",
            "locale":"en_US.UTF-8",
            "charset":"UTF-8",
            "asyncLog":"0",
            "anyIp":"0",
P
Ping Xiao 已提交
141
            "telemetryReporting":"0",
L
liuyq-617 已提交
142
            "dDebugFlag":"135",
L
liuyq-617 已提交
143
            "tsdbDebugFlag":"135",
L
liuyq-617 已提交
144 145 146 147 148 149 150 151 152
            "mDebugFlag":"135",
            "sdbDebugFlag":"135",
            "rpcDebugFlag":"135",
            "tmrDebugFlag":"131",
            "cDebugFlag":"135",
            "httpDebugFlag":"135",
            "monitorDebugFlag":"135",
            "udebugFlag":"135",
            "jnidebugFlag":"135",
153 154
            "qdebugFlag":"135",
            "maxSQLLength":"1048576"
L
liuyq-617 已提交
155
        }
156 157 158 159

    def init(self, path):
        self.path = path

160 161 162
    def setTestCluster(self, value):
        self.testCluster = value

163 164 165
    def setValgrind(self, value):
        self.valgrind = value

166 167 168 169 170 171 172 173 174 175 176 177 178
    def getDataSize(self):
        totalSize = 0

        if (self.deployed == 1):
            for dirpath, dirnames, filenames in os.walk(self.dataDir):
                for f in filenames:
                    fp = os.path.join(dirpath, f)

                    if not os.path.islink(fp):
                        totalSize = totalSize + os.path.getsize(fp)

        return totalSize

L
liuyq-617 已提交
179 180 181 182
    def addExtraCfg(self, option, value):
        self.cfgDict.update({option: value})

    def deploy(self, *updatecfgDict):
183 184 185 186
        self.logDir = "%s/sim/dnode%d/log" % (self.path, self.index)
        self.dataDir = "%s/sim/dnode%d/data" % (self.path, self.index)
        self.cfgDir = "%s/sim/dnode%d/cfg" % (self.path, self.index)
        self.cfgPath = "%s/sim/dnode%d/cfg/taos.cfg" % (
S
Shuduo Sang 已提交
187
            self.path, self.index)
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216

        cmd = "rm -rf " + self.dataDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "rm -rf " + self.logDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "rm -rf " + self.cfgDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "mkdir -p " + self.dataDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "mkdir -p " + self.logDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "mkdir -p " + self.cfgDir
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

        cmd = "touch " + self.cfgPath
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

217 218 219
        if self.testCluster:
            self.startIP()

220 221 222 223 224 225
        if self.testCluster:
            self.cfg("masterIp", "192.168.0.1")
            self.cfg("secondIp", "192.168.0.2")
            self.cfg("publicIp", "192.168.0.%d" % (self.index))
            self.cfg("internalIp", "192.168.0.%d" % (self.index))
            self.cfg("privateIp", "192.168.0.%d" % (self.index))
L
liuyq-617 已提交
226 227 228 229
        self.cfgDict["dataDir"] = self.dataDir
        self.cfgDict["logDir"] = self.logDir
        # self.cfg("dataDir",self.dataDir)
        # self.cfg("logDir",self.logDir)
L
liuyq-617 已提交
230
        # print(updatecfgDict)
L
liuyq-617 已提交
231
        isFirstDir = 1
L
liuyq-617 已提交
232 233 234
        if updatecfgDict[0] and updatecfgDict[0][0]:
            print(updatecfgDict[0][0])
            for key,value in updatecfgDict[0][0].items():
L
liuyq-617 已提交
235 236 237 238 239 240 241 242 243
                if value == 'dataDir' :
                    if isFirstDir:
                        self.cfgDict.pop('dataDir')
                        self.cfg(value,key)
                        isFirstDir = 0
                    else:
                        self.cfg(value,key)
                else:
                    self.addExtraCfg(key,value)
L
liuyq-617 已提交
244 245 246
        for key, value in self.cfgDict.items():
            self.cfg(key, value)

247 248 249 250 251
        self.deployed = 1
        tdLog.debug(
            "dnode:%d is deployed and configured by %s" %
            (self.index, self.cfgPath))

252
    def getBuildPath(self):
253
        buildPath = ""
254 255
        selfPath = os.path.dirname(os.path.realpath(__file__))

256
        if ("community" in selfPath):
257
            projPath = selfPath[:selfPath.find("community")]
258
        else:
259 260 261
            projPath = selfPath[:selfPath.find("tests")]

        for root, dirs, files in os.walk(projPath):
262
            if (("taosd") in files):
263 264
                rootRealPath = os.path.dirname(os.path.realpath(root))
                if ("packaging" not in rootRealPath):
S
Shuduo Sang 已提交
265
                    buildPath = root[:len(root)-len("/build/bin")]
266 267 268 269 270 271 272
                    break
        return buildPath

    def start(self):
        buildPath = self.getBuildPath()

        if (buildPath == ""):
273
            tdLog.exit("taosd not found!")
274
        else:
275 276 277
            tdLog.info("taosd found in %s" % buildPath)

        binPath = buildPath + "/build/bin/taosd"
278
        blm3BinPath = buildPath + "/build/bin/blm3"
279 280 281

        if self.deployed == 0:
            tdLog.exit("dnode:%d is not deployed" % (self.index))
282 283

        if self.valgrind == 0:
284
            cmd = "nohup %s -c %s > /dev/null 2>&1 & " % (
285 286 287 288
                binPath, self.cfgDir)
        else:
            valgrindCmdline = "valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"

289
            cmd = "nohup %s %s -c %s 2>&1 & " % (
290 291 292 293
                valgrindCmdline, binPath, self.cfgDir)

            print(cmd)

294 295 296 297 298
        blm3Cmd = "nohup %s > /dev/null 2>&1 & " % (
                blm3BinPath)
        if os.system(blm3Cmd) != 0:
            tdLog.exit(blm3Cmd)

299 300
        if os.system(cmd) != 0:
            tdLog.exit(cmd)
301

302 303
        self.running = 1
        tdLog.debug("dnode:%d is running with %s " % (self.index, cmd))
L
liuyq-617 已提交
304 305 306 307 308
        if self.valgrind == 0:
            time.sleep(0.1)
            key = 'from offline to online'
            bkey = bytes(key,encoding="utf8")
            logFile = self.logDir + "/taosdlog.0"
L
liuyq-617 已提交
309 310 311 312 313 314
            i = 0
            while not os.path.exists(logFile):
                sleep(0.1)
                i += 1
                if i>50:
                    break
L
liuyq-617 已提交
315 316
            popen = subprocess.Popen('tail -f ' + logFile, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
            pid = popen.pid
L
liuyq-617 已提交
317 318
            # print('Popen.pid:' + str(pid))
            timeout = time.time() + 60*2
L
liuyq-617 已提交
319 320 321 322 323
            while True:
                line = popen.stdout.readline().strip()
                if bkey in line:
                    popen.kill()
                    break
L
liuyq-617 已提交
324 325
                if time.time() > timeout:
                    tdLog.exit('wait too long for taosd start')
L
liuyq-617 已提交
326 327
            tdLog.debug("the dnode:%d has been started." % (self.index))
        else:
L
liuyq-617 已提交
328 329
            tdLog.debug("wait 10 seconds for the dnode:%d to start." % (self.index))
            time.sleep(10)
L
liuyq-617 已提交
330

L
liuyq-617 已提交
331 332
        
        # time.sleep(5)
333 334 335 336 337 338 339 340 341 342
    
    def startWithoutSleep(self):
        buildPath = self.getBuildPath()

        if (buildPath == ""):
            tdLog.exit("taosd not found!")
        else:
            tdLog.info("taosd found in %s" % buildPath)

        binPath = buildPath + "/build/bin/taosd"
343
        blm3BinPath = buildPath + "/build/bin/blm3"
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358

        if self.deployed == 0:
            tdLog.exit("dnode:%d is not deployed" % (self.index))

        if self.valgrind == 0:
            cmd = "nohup %s -c %s > /dev/null 2>&1 & " % (
                binPath, self.cfgDir)
        else:
            valgrindCmdline = "valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"

            cmd = "nohup %s %s -c %s 2>&1 & " % (
                valgrindCmdline, binPath, self.cfgDir)

            print(cmd)

359 360 361 362
        blm3Cmd = "%s > /dev/null 2>&1 & " % (blm3BinPath)
        if os.system(blm3Cmd) != 0:
            tdLog.exit(blm3Cmd)

363 364 365 366
        if os.system(cmd) != 0:
            tdLog.exit(cmd)
        self.running = 1
        tdLog.debug("dnode:%d is running with %s " % (self.index, cmd))
367 368

    def stop(self):
369 370 371 372 373 374 375 376 377 378 379 380 381
        blm3ToBeKilled = "blm3"

        blm3PsCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % blm3ToBeKilled
        blm3ProcessID = subprocess.check_output(
                    blm3PsCmd, shell=True).decode("utf-8")

        while(blm3ProcessID):
            blm3KillCmd = "kill -INT %s > /dev/null 2>&1" % blm3ProcessID
            os.system(blm3KillCmd)
            time.sleep(1)
            blm3ProcessID = subprocess.check_output(
                    blm3PsCmd, shell=True).decode("utf-8")

382 383 384 385 386
        if self.valgrind == 0:
            toBeKilled = "taosd"
        else:
            toBeKilled = "valgrind.bin"

387
        if self.running != 0:
388
            psCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % toBeKilled
S
Shuduo Sang 已提交
389 390
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
391 392

            while(processID):
393
                killCmd = "kill -INT %s > /dev/null 2>&1" % processID
394 395
                os.system(killCmd)
                time.sleep(1)
S
Shuduo Sang 已提交
396 397
                processID = subprocess.check_output(
                    psCmd, shell=True).decode("utf-8")
398 399 400 401 402
            for port in range(6030, 6041):
                fuserCmd = "fuser -k -n tcp %d" % port
                os.system(fuserCmd)
            if self.valgrind:
                time.sleep(2)
403

S
Shuduo Sang 已提交
404
            self.running = 0
405
            tdLog.debug("dnode:%d is stopped by kill -INT" % (self.index))
406 407

    def forcestop(self):
408 409 410 411 412
        if self.valgrind == 0:
            toBeKilled = "taosd"
        else:
            toBeKilled = "valgrind.bin"

413
        if self.running != 0:
414
            psCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % toBeKilled
S
Shuduo Sang 已提交
415 416
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
417 418

            while(processID):
419
                killCmd = "kill -KILL %s > /dev/null 2>&1" % processID
420 421
                os.system(killCmd)
                time.sleep(1)
S
Shuduo Sang 已提交
422 423
                processID = subprocess.check_output(
                    psCmd, shell=True).decode("utf-8")
424 425 426 427 428
            for port in range(6030, 6041):
                fuserCmd = "fuser -k -n tcp %d" % port
                os.system(fuserCmd)
            if self.valgrind:
                time.sleep(2)
429

S
Shuduo Sang 已提交
430
            self.running = 0
431
            tdLog.debug("dnode:%d is stopped by kill -KILL" % (self.index))
432 433 434 435 436 437 438 439 440 441 442 443 444

    def startIP(self):
        cmd = "sudo ifconfig lo:%d 192.168.0.%d up" % (self.index, self.index)
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

    def stopIP(self):
        cmd = "sudo ifconfig lo:%d 192.168.0.%d down" % (
            self.index, self.index)
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

    def cfg(self, option, value):
445
        cmd = "echo %s %s >> %s" % (option, value, self.cfgPath)
446 447 448 449
        if os.system(cmd) != 0:
            tdLog.exit(cmd)

    def getDnodeRootDir(self, index):
450
        dnodeRootDir = "%s/sim/psim/dnode%d" % (self.path, index)
451 452 453
        return dnodeRootDir

    def getDnodesRootDir(self):
454
        dnodesRootDir = "%s/sim/psim" % (self.path)
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470
        return dnodesRootDir


class TDDnodes:
    def __init__(self):
        self.dnodes = []
        self.dnodes.append(TDDnode(1))
        self.dnodes.append(TDDnode(2))
        self.dnodes.append(TDDnode(3))
        self.dnodes.append(TDDnode(4))
        self.dnodes.append(TDDnode(5))
        self.dnodes.append(TDDnode(6))
        self.dnodes.append(TDDnode(7))
        self.dnodes.append(TDDnode(8))
        self.dnodes.append(TDDnode(9))
        self.dnodes.append(TDDnode(10))
471
        self.simDeployed = False
472 473

    def init(self, path):
T
tickduan 已提交
474
        psCmd = "ps -ef|grep -w taosd| grep -v grep| grep -v defunct | awk '{print $2}'"
S
Shuduo Sang 已提交
475
        processID = subprocess.check_output(psCmd, shell=True).decode("utf-8")
476
        while(processID):
L
test  
liuyq-617 已提交
477
            killCmd = "kill -9 %s > /dev/null 2>&1" % processID
478 479
            os.system(killCmd)
            time.sleep(1)
S
Shuduo Sang 已提交
480 481
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
482 483

        psCmd = "ps -ef|grep -w valgrind.bin| grep -v grep | awk '{print $2}'"
S
Shuduo Sang 已提交
484
        processID = subprocess.check_output(psCmd, shell=True).decode("utf-8")
485
        while(processID):
L
test  
liuyq-617 已提交
486
            killCmd = "kill -9 %s > /dev/null 2>&1" % processID
487 488
            os.system(killCmd)
            time.sleep(1)
S
Shuduo Sang 已提交
489 490
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520

        binPath = os.path.dirname(os.path.realpath(__file__))
        binPath = binPath + "/../../../debug/"
        tdLog.debug("binPath %s" % (binPath))
        binPath = os.path.realpath(binPath)
        tdLog.debug("binPath real path %s" % (binPath))

        # cmd = "sudo cp %s/build/lib/libtaos.so /usr/local/lib/taos/" % (binPath)
        # tdLog.debug(cmd)
        # os.system(cmd)

        # cmd = "sudo cp %s/build/bin/taos /usr/local/bin/taos/" % (binPath)
        # if os.system(cmd) != 0 :
        #  tdLog.exit(cmd)
        # tdLog.debug("execute %s" % (cmd))

        # cmd = "sudo cp %s/build/bin/taosd /usr/local/bin/taos/" % (binPath)
        # if os.system(cmd) != 0 :
        # tdLog.exit(cmd)
        # tdLog.debug("execute %s" % (cmd))

        if path == "":
            # self.path = os.path.expanduser('~')
            self.path = os.path.abspath(binPath + "../../")
        else:
            self.path = os.path.realpath(path)

        for i in range(len(self.dnodes)):
            self.dnodes[i].init(self.path)

Z
zhaoyanggh 已提交
521
        self.sim = TDSimClient(self.path)
S
Shuduo Sang 已提交
522

523 524 525
    def setTestCluster(self, value):
        self.testCluster = value

526 527 528
    def setValgrind(self, value):
        self.valgrind = value

L
liuyq-617 已提交
529
    def deploy(self, index, *updatecfgDict):
530
        self.sim.setTestCluster(self.testCluster)
531 532 533 534

        if (self.simDeployed == False):
            self.sim.deploy()
            self.simDeployed = True
535

536
        self.check(index)
537
        self.dnodes[index - 1].setTestCluster(self.testCluster)
538
        self.dnodes[index - 1].setValgrind(self.valgrind)
L
liuyq-617 已提交
539
        self.dnodes[index - 1].deploy(updatecfgDict)
540 541 542 543 544 545 546 547

    def cfg(self, index, option, value):
        self.check(index)
        self.dnodes[index - 1].cfg(option, value)

    def start(self, index):
        self.check(index)
        self.dnodes[index - 1].start()
548 549 550 551
    
    def startWithoutSleep(self, index):
        self.check(index)
        self.dnodes[index - 1].startWithoutSleep()
552 553 554 555 556

    def stop(self, index):
        self.check(index)
        self.dnodes[index - 1].stop()

557 558 559 560
    def getDataSize(self, index):
        self.check(index)
        return self.dnodes[index - 1].getDataSize()

561 562 563 564 565 566
    def forcestop(self, index):
        self.check(index)
        self.dnodes[index - 1].forcestop()

    def startIP(self, index):
        self.check(index)
567 568 569

        if self.testCluster:
            self.dnodes[index - 1].startIP()
570 571 572

    def stopIP(self, index):
        self.check(index)
573 574 575

        if self.dnodes[index - 1].testCluster:
            self.dnodes[index - 1].stopIP()
576 577 578 579 580 581

    def check(self, index):
        if index < 1 or index > 10:
            tdLog.exit("index:%d should on a scale of [1, 10]" % (index))

    def stopAll(self):
S
Shuduo Sang 已提交
582
        tdLog.info("stop all dnodes")
583 584 585
        for i in range(len(self.dnodes)):
            self.dnodes[i].stop()

T
tickduan 已提交
586
        psCmd = "ps -ef | grep -w taosd | grep 'root' | grep -v grep| grep -v defunct | awk '{print $2}'"
S
Shuduo Sang 已提交
587
        processID = subprocess.check_output(psCmd, shell=True).decode("utf-8")
588 589 590
        if processID:
            cmd = "sudo systemctl stop taosd"
            os.system(cmd)
591 592
        # if os.system(cmd) != 0 :
        # tdLog.exit(cmd)
T
tickduan 已提交
593
        psCmd = "ps -ef|grep -w taosd| grep -v grep| grep -v defunct | awk '{print $2}'"
S
Shuduo Sang 已提交
594
        processID = subprocess.check_output(psCmd, shell=True).decode("utf-8")
595
        while(processID):
L
liuyq-617 已提交
596
            killCmd = "kill -9 %s > /dev/null 2>&1" % processID
597 598
            os.system(killCmd)
            time.sleep(1)
S
Shuduo Sang 已提交
599 600
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
601 602

        psCmd = "ps -ef|grep -w valgrind.bin| grep -v grep | awk '{print $2}'"
S
Shuduo Sang 已提交
603
        processID = subprocess.check_output(psCmd, shell=True).decode("utf-8")
604
        while(processID):
605
            killCmd = "kill -TERM %s > /dev/null 2>&1" % processID
606 607
            os.system(killCmd)
            time.sleep(1)
S
Shuduo Sang 已提交
608 609
            processID = subprocess.check_output(
                psCmd, shell=True).decode("utf-8")
610

611 612 613 614
        # if os.system(cmd) != 0 :
        # tdLog.exit(cmd)

    def getDnodesRootDir(self):
615
        dnodesRootDir = "%s/sim" % (self.path)
616 617 618 619 620
        return dnodesRootDir

    def getSimCfgPath(self):
        return self.sim.getCfgDir()

S
Shuduo Sang 已提交
621 622 623 624 625 626
    def getSimLogPath(self):
        return self.sim.getLogDir()

    def addSimExtraCfg(self, option, value):
        self.sim.addExtraCfg(option, value)

627 628

tdDnodes = TDDnodes()