TDengine/test/cases/13-StreamProcessing/01-Snode/snode_privileges.py
Pan Wei bcc25e56bc
feat: new stream (#31678)
* fix: windows compile issue

* test: add vtable cases (#31829)

* fix: windows compile issues

* test:add test cases

* fix: windows compile issue

* case: em-4 stream case submit

* test: stream4_sub1 found bug2

* test: submit test_scene_meters_bug2.py

* add stream parameters example

* feat: [TS-6100] Do not translate const value as column.

* Feat/ts 6100 3.0 zlv (#31747)

* modify asan exampel

* modify asan exampel

* add example

* add example

* modify case example

---------

Co-authored-by: zelv01 <1101510017@qq.com>

* feat(stream): fix memory leak

* modify sliding example

* test: update test case.

* feat(stream): fix conflicts

* fix: add offset case 10a 10s 10m 10h 10d

* feat(stream): fix conflicts

* chore(stream): rename case name #TS-6100

* add case

* modify example

* fix: windows compile issues

* fix: data null check

* feat: [TS-6100] Forbid where when using %%trows (#31827)

* feat: [TS-6100] Forbid where when using %%trows

* test: update cases

* feat: [TS-6100] Fix leaks.

---------

Co-authored-by: Simon Guan <guanshengliang@qq.com>

* test: reproduce bugs

* test: update test case.

* test: update test case.

* feat: [TS-6100] Fix leaks.

* test: add cases

* Feat/ts 6100 3.0.pw10 (#31841)

* enh: add operator reset func

* fix: merge join reset issue

* fix: memory issues

* fix: add debug assert

* fix: memory issues

* fix: memory leak

* fix: memory issues

* fix taos log miss

* fix: case issue

* fix: case issue

* fix: case issues

* fix: drop dnode issue

* fix: memory issues

* fix: memory issues

* fix: memory leak issues

* fix: recalculate time range issue

* fix: add debug log

* fix: memory issues

* fix: enable case asan

* Update streamlist_for_ci.task

* fix: case asan issue

* fix: stream name issue

* fix: external window compile issues

* fix: deploy memory issue

* fix: ahandle issue

* fix: ahandle issue

* fix: ahandle issue

* fix: virtual table reader list issue

* fix: log info

* fix: msg error

* fix: virtual table addr list issue

* fix: memory issues

* fix: memory leak issue

* fix: memory issues

* fix: memory free issues

* fix: memory issues

* fix: snode deploy issue

* fix: mnode reader issue

* fix: memory issues

* fix: add debug test

* enh: add ignore nodata trigger

* fix: memory leaks

* fix: configuration issue

* fix: memory issue

* fix: external window issue

* fix: external window issues

* fix: external window placeholder issue

* fix: placeholder function init issues

* fix: memory leak issue

* fix: add debug log

* fix: compile issues

* fix: double free issue

* fix: runner addr update issue

* fix: msg rsp issue

* fix: external window reset issue

* fix: configuration issue

* fix: deploy msg issue

* fix: compile issue

---------

Co-authored-by: huohong <sallyhuo@taosdata.com>

* test: reproduce bugs

* fix: add sliding interval combine case

* test: add cases

* test: add recalc test.

* test: reproduce bugs

* case : add vt ts is null check

* modify case

* bug: submit test_idmp_meters_bug3.py

* test: add test for recalc.

* test: add cases

* fix: error code check

* test: add cases

* fix(stream): scan wal with schema in that version

* add case

* test: add cases

* test: update test case.

* fix: windows compile issues

* add case

* test: add cases (#31845)

* modify case

* fix: reset interpPrev

* test: add test_idmp_meters bug4 and bug3

* add case

* fix(stream): opti wal interface

* fix: remove test_idmp_meters_bug5.py

* test: add cases

* fix(stream): fix ts data fetch for virtual tables

* cancel asan case

* test: update test case.

* test: update test case.

* add case

* test: add cases

* test: add cases

* test: add case test_idmp_meters_bug5.py

* test: update test case.

* fix(stream): tmq error

* test: add cases

* feat: [TS-6100] Restore deleted code in mndSma.c since they are still in use.

* fix(stream): optimize val scan logic

* test: add test_recalc_expired_time.py  to ci.

* test: update test case.

* test: update test case.

* feat: [TS-6100] Fix fill range check

* fix(stream): optimize val scan logic

* add case

* test: modify for partition by %%1

* test: add fun case stream4_sub7

* fix(stream): optimize val scan logic

* add case

* feat: [TS-6100] Rename OPTIONS to STREAM_OPTIONS.

* test: add test for recalc.

* test: use stream_options.

* fix: some cases error.

* test: remove recalc from ci.

* fix: ci case issues (#31880)

* enh: add operator reset func

* fix: merge join reset issue

* fix: memory issues

* fix: add debug assert

* fix: memory issues

* fix: memory leak

* fix: memory issues

* fix taos log miss

* fix: case issue

* fix: case issue

* fix: case issues

* fix: drop dnode issue

* fix: memory issues

* fix: memory issues

* fix: memory leak issues

* fix: recalculate time range issue

* fix: add debug log

* fix: memory issues

* fix: enable case asan

* Update streamlist_for_ci.task

* fix: case asan issue

* fix: stream name issue

* fix: external window compile issues

* fix: deploy memory issue

* fix: ahandle issue

* fix: ahandle issue

* fix: ahandle issue

* fix: virtual table reader list issue

* fix: log info

* fix: msg error

* fix: virtual table addr list issue

* fix: memory issues

* fix: memory leak issue

* fix: memory issues

* fix: memory free issues

* fix: memory issues

* fix: snode deploy issue

* fix: mnode reader issue

* fix: memory issues

* fix: add debug test

* enh: add ignore nodata trigger

* fix: memory leaks

* fix: configuration issue

* fix: memory issue

* fix: external window issue

* fix: external window issues

* fix: external window placeholder issue

* fix: placeholder function init issues

* fix: memory leak issue

* fix: add debug log

* fix: compile issues

* fix: double free issue

* fix: runner addr update issue

* fix: msg rsp issue

* fix: external window reset issue

* fix: configuration issue

* fix: deploy msg issue

* fix: compile issue

* fix: external window idx issue

* fix: ci issues

---------

Co-authored-by: huohong <sallyhuo@taosdata.com>

* fix(stream): fix compilation error

* fix(stream): optimize val scan logic

* test:add test cases

* test: modify case

* fix: external agg error

* test(stream): tobacco scene testing #TD-36514

* test: add stream cases (#31885)

* fix: windows compile issue

* fix: calc timerange

* fix: windows compile issue

* modify case

* fix(stream): compile error

* test: remove one debug test case file

* test: modify

* test: add test cases

* test: reproduce bugs

* test: reproduce bugs

* feat: [TS-6100] Placeholder function should only appera in SELECT and… (#31868)

* feat: [TS-6100] Placeholder function should only appera in SELECT and WHERE and FROM.

* test: update case

---------

Co-authored-by: Simon Guan <guanshengliang@qq.com>

* add example

* add example

* modify case example

* modify case

* test:alter sql

* test: add stream5 case

* fix(stream): get schema error with version

* test: add delete recalc test py.

* test: remove bug cases

* test: stream5 case test passed

* test: add state cases (#31893)

* fix(stream): compile error

* test: modify case

* test: add cases

* test: add test.

* test: update test case.

* chore(test): fix case err

* test: update test case.

* fix: align data get

* fix(stream): fix row index of datablock written into data cache

* fix: put align data

* test: update test case.

* test: add test cases for virtual table

* chore(test): fix case err #TD-36514

* add case

* test: add test for water mark.

* test: add meters bug6 for stream5

* test: add cases (#31903)

* test: add test for recalc.

* feat: [TS-6100] %%trows can only be used when event type is window close.

* test: add precision of database for ms/us/ns

* modify case

* add case

* add case

* test: add test to ci.

* modify case

* fix: ci case issues (#31904)

* enh: add operator reset func

* fix: merge join reset issue

* fix: memory issues

* fix: add debug assert

* fix: memory issues

* fix: memory leak

* fix: memory issues

* fix taos log miss

* fix: case issue

* fix: case issue

* fix: case issues

* fix: drop dnode issue

* fix: memory issues

* fix: memory issues

* fix: memory leak issues

* fix: recalculate time range issue

* fix: add debug log

* fix: memory issues

* fix: enable case asan

* Update streamlist_for_ci.task

* fix: case asan issue

* fix: stream name issue

* fix: external window compile issues

* fix: deploy memory issue

* fix: ahandle issue

* fix: ahandle issue

* fix: ahandle issue

* fix: virtual table reader list issue

* fix: log info

* fix: msg error

* fix: virtual table addr list issue

* fix: memory issues

* fix: memory leak issue

* fix: memory issues

* fix: memory free issues

* fix: memory issues

* fix: snode deploy issue

* fix: mnode reader issue

* fix: memory issues

* fix: add debug test

* enh: add ignore nodata trigger

* fix: memory leaks

* fix: configuration issue

* fix: memory issue

* fix: external window issue

* fix: external window issues

* fix: external window placeholder issue

* fix: placeholder function init issues

* fix: memory leak issue

* fix: add debug log

* fix: compile issues

* fix: double free issue

* fix: runner addr update issue

* fix: msg rsp issue

* fix: external window reset issue

* fix: configuration issue

* fix: deploy msg issue

* fix: compile issue

* fix: external window idx issue

* fix: ci issues

* fix: ci case issues

* fix: drop dnode issue

---------

Co-authored-by: huohong <sallyhuo@taosdata.com>

* fix(stream): ci error

* test: update test case.

* feat: [TS-6100] Disable some failed UT.

* feat: [TS-6100] Fix virtual table

* test: add bug 5.

* test: add test delete recalc to ci.

* test: add bug 6.

* test(stream): tobacco scene #TD-36514

* fix: reqCids,reqCols memory leak in SSTriggerRealtimeContext

Co-authored-by: Tony Zhang <tonyzhang@taosdata.com>

* test: add case stream6

* fix(stream): implement some pending features in trigger task

* modify case

* modify case

* fix: case issues

* modify case

* test: add recalc for warter mark.

* fix(stream): fix count window trigger of virtual tables

* fix(stream): memory leak

* test: fix run err.

* test: add stream6 bug7

* fix: adjust format

* test(stream): tobacco scene testing #TD-36514

* test: change bug7 with update window1 and 2

* test: add test bug 7.

* case: restore write 3 window

* fix: windows compile issue

* fix: notify

* test: add cases

* modify case

* test: update test case.

* test(stream): toobacco scene testing #TD-36514

---------

Co-authored-by: Simon Guan <slguan@taosdata.com>
Co-authored-by: plum-lihui <huili@taosdata.com>
Co-authored-by: Alex Duan <417921451@qq.com>
Co-authored-by: zelv01 <1101510017@qq.com>
Co-authored-by: Jing Sima <simondominic9997@outlook.com>
Co-authored-by: xiangyang guo <66111494+happyguoxy@users.noreply.github.com>
Co-authored-by: wangmm0220 <wangmm0220@gmail.com>
Co-authored-by: Haojun Liao <hjliao@taosdata.com>
Co-authored-by: zyyang90 <zyyang@taosdata.com>
Co-authored-by: Alex Duan <51781608+DuanKuanJun@users.noreply.github.com>
Co-authored-by: facetosea <285808407@qq.com>
Co-authored-by: Simon Guan <guanshengliang@qq.com>
Co-authored-by: huohong <sallyhuo@taosdata.com>
Co-authored-by: Li Hui <52318143+plum-lihui@users.noreply.github.com>
Co-authored-by: Jinqing Kuang <kuangjinqingcn@gmail.com>
Co-authored-by: xiao-77 <berylbao@taosdata.com>
Co-authored-by: Zhixiao Bao <62235797+xiao-77@users.noreply.github.com>
Co-authored-by: happyguoxy <happy_guoxy@163.com>
Co-authored-by: Tony Zhang <34825804+Tony2h@users.noreply.github.com>
Co-authored-by: Tony Zhang <tonyzhang@taosdata.com>
2025-07-16 14:42:16 +08:00

417 lines
16 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
import math
import random
from new_test_framework.utils import tdLog, tdSql, tdStream, streamUtil,StreamTableType, StreamTable, cluster
from random import randint
import os
import subprocess
class TestStreamPrivileges:
currentDir = os.path.dirname(os.path.abspath(__file__))
dbname = "test1"
dbname2 = "test2"
username1 = "lvze1"
username2 = "lvze2"
subTblNum = 3
tblRowNum = 10
tableList = []
def setup_class(cls):
tdLog.debug(f"start to execute {__file__}")
def test_snode_mgmt(self):
"""Stream privileges test
1. normal user create snode
2. normal user show snode
3. normal user select ins_snodes
4. normal user drop snode
5. normal user create stream
6. normal user drop stream
Catalog:
- Streams:privileges
Since: v3.3.3.7
Labels: common,ci
Jira: None
History:
- 2025-7-8 lvze Created
"""
tdStream.dropAllStreamsAndDbs()
self.prepareData()
self.createUser()
#check normal user create snode
tdSql.connect(f"{self.username1}")
self.createSnodeTest()
tdSql.query("show snodes;")
numOfStreams = tdSql.getRows()
if numOfStreams > 0:
raise Exception(f"Error: normal user {self.username1} can not create snode, but found {numOfStreams} snodes!")
#check normal user no sysinfo\createdb to create stream
self.noSysInfo()
self.noCreateDB()
self.createSnodeTest()
self.SysInfo()
self.CreateDB()
#check no read\write normal user create stream
self.userCreateStream()
self.grantRead()
#check no write normal user create stream
self.userCreateStream()
#check have read\write normal user create stream
self.grantWrite()
self.userCreateStream()
self.checkStreamRunning()
#check normal user can not stop/start stream
self.revokeRead()
self.revokeWrite()
self.userStopStream()
self.userStartStream()
self.grantRead()
self.grantWrite()
#check normal user can stop/start stream
self.userStopStream()
self.userStartStream()
#check normal user no write privileges to drop stream
self.revokeWrite()
tdSql.connect(f"{self.username1}")
self.dropOneStream()
#check normal user drop snode
tdSql.connect(f"{self.username1}")
self.dropOneSnodeTest()
def createUser(self):
tdLog.info(f"create user")
tdSql.execute(f'create user {self.username1} pass "taosdata"')
tdSql.execute(f'create user {self.username2} pass "taosdata"')
self.checkResultRows(2)
def noSysInfo(self):
tdLog.info(f"revoke sysinfo privilege from user")
tdSql.connect("root")
tdSql.execute(f"alter user {self.username1} sysinfo 0")
tdSql.execute(f"alter user {self.username2} sysinfo 0")
def SysInfo(self):
tdLog.info(f"grant sysinfo privilege from user")
tdSql.connect("root")
tdSql.execute(f"alter user {self.username1} sysinfo 1")
tdSql.execute(f"alter user {self.username2} sysinfo 1")
def noCreateDB(self):
tdLog.info(f"revoke createdb privilege from user")
tdSql.connect("root")
tdSql.execute(f"alter user {self.username1} createdb 0")
tdSql.execute(f"alter user {self.username2} createdb 0")
def CreateDB(self):
tdLog.info(f"grant sysinfo privilege from user")
tdSql.connect("root")
tdSql.execute(f"alter user {self.username1} createdb 1")
tdSql.execute(f"alter user {self.username2} createdb 1")
def grantRead(self):
tdLog.info(f"grant read privilege to user")
tdSql.connect("root")
tdSql.execute(f'grant read on {self.dbname} to {self.username1}')
tdSql.execute(f'grant read on {self.dbname} to {self.username2}')
tdSql.query(
f"select * from information_schema.ins_user_privileges where user_name !='root' and privilege ='read';")
if tdSql.getRows() != 2:
raise Exception("grant read privileges user failed")
def grantWrite(self):
tdLog.info(f"grant write privilege to user")
tdSql.connect("root")
tdSql.execute(f'grant write on {self.dbname} to {self.username1}')
tdSql.execute(f'grant write on {self.dbname} to {self.username2}')
tdSql.query(
f"select * from information_schema.ins_user_privileges where user_name !='root' and privilege ='write';")
if tdSql.getRows() != 2:
raise Exception("grant write privileges user failed")
def revokeRead(self):
tdLog.info(f"revoke read privilege from user")
tdSql.connect("root")
tdSql.execute(f'revoke read on {self.dbname} from {self.username1}')
tdSql.execute(f'revoke read on {self.dbname} from {self.username2}')
tdSql.query(
f"select * from information_schema.ins_user_privileges where user_name !='root' and privilege ='read';")
if tdSql.getRows() != 0:
raise Exception("revoke read privileges user failed")
def revokeWrite(self):
tdLog.info(f"revoke write privilege from user")
tdSql.connect("root")
tdSql.execute(f'revoke write on {self.dbname} from {self.username1}')
tdSql.execute(f'revoke write on {self.dbname} from {self.username2}')
tdSql.query(
f"select * from information_schema.ins_user_privileges where user_name !='root' and privilege ='write';")
if tdSql.getRows() != 0:
raise Exception("revoke write privileges user failed")
def userCreateStream(self):
tdLog.info(f"connect with normal user {self.username2}")
tdSql.connect("lvze2")
sql = (
"create stream test1.`s100` sliding(1s) from test1.st1 partition by tbname "
"stream_options(fill_history('2025-01-01 00:00:00')) "
"into test1.`s100out` as "
"select cts, cint, %%tbname from test1.st1 "
"where cint > 5 and tint > 0 and %%tbname like '%%2' "
"order by cts;"
)
try:
tdSql.execute(sql)
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege, ignore SQL{sql}")
else:
raise Exception(f"create stream failed with error: {e}")
# tdSql.execute(f"select current_user();")
# username=tdSql.getData(0, 0)
# print(f"username: {username}")
def userStopStream(self):
tdLog.info(f"connect with normal user {self.username2} to stop stream")
tdSql.connect("lvze2")
tdSql.query(f"show {self.dbname}.streams;")
numOfStreams = tdSql.getRows()
if numOfStreams > 0:
try:
tdSql.execute(f"stop stream test1.`s100`")
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege to stop stream")
else:
raise Exception(f"stop stream failed with error: {e}")
tdSql.query(f"show {self.dbname}.streams;")
stateStream = tdSql.getData(0,1)
tdSql.query(f"select * from information_schema.ins_user_privileges where user_name='lvze2' and privilege ='write'")
writeUser = tdSql.getRows()
if stateStream != 'Stopped' and writeUser == 0:
tdLog.info(f"normal user(no write privilege) can not stop stream")
else:
tdLog.info(f"stop stream test1.`s100` success")
def userStartStream(self):
tdLog.info(f"connect with normal user {self.username2} to start stream")
tdSql.connect("lvze2")
tdSql.query(f"show {self.dbname}.streams;")
numOfStreams = tdSql.getRows()
if numOfStreams > 0:
try:
tdSql.execute(f"start stream test1.`s100`")
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege to start stream")
else:
raise Exception(f"start stream failed with error: {e}")
self.checkStreamRunning()
tdSql.query(f"show {self.dbname}.streams;")
stateStream = tdSql.getData(0,1)
if stateStream != 'Running':
raise Exception(f"normal user can not start stream, found state: {stateStream}")
else:
tdLog.info(f"start stream test1.`s100` success")
def prepareData(self):
tdLog.info(f"prepare data")
tdStream.dropAllStreamsAndDbs()
#wait all dnode ready
time.sleep(5)
tdStream.init_database(self.dbname)
st1 = StreamTable(self.dbname, "st1", StreamTableType.TYPE_SUP_TABLE)
st1.createTable(3)
st1.append_data(0, self.tblRowNum)
self.tableList.append("st1")
for i in range(0, self.subTblNum + 1):
self.tableList.append(f"st1_{i}")
ntb = StreamTable(self.dbname, "ntb1", StreamTableType.TYPE_NORMAL_TABLE)
ntb.createTable()
ntb.append_data(0, self.tblRowNum)
self.tableList.append(f"ntb1")
tdSql.execute(f"create database {self.dbname2}")
def checkResultRows(self, expectedRows):
tdSql.checkResultsByFunc(
f"select * from information_schema.ins_users where name !='root';",
lambda: tdSql.getRows() == expectedRows,
delay=0.5, retry=2
)
if tdSql.getRows() != expectedRows:
raise Exception("Error: checkResultRows failed, expected rows not match!")
def createSnodeTest(self):
tdLog.info(f"create snode test")
tdSql.query("select * from information_schema.ins_dnodes order by id;")
numOfNodes=tdSql.getRows()
tdLog.info(f"numOfNodes: {numOfNodes}")
for i in range(1, numOfNodes + 1):
try:
tdSql.execute(f"create snode on dnode {i}")
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege to create snode")
else:
raise Exception(f"create stream failed with error: {e}")
tdLog.info(f"create snode on dnode {i} success")
def dropAllSnodeTest(self):
tdLog.info(f"drop all snode test")
tdSql.query("select * from information_schema.ins_snodes order by id;")
numOfSnodes = tdSql.getRows()
tdLog.info(f"numOfSnodes: {numOfSnodes}")
for i in range(1, numOfSnodes ):
tdSql.execute(f"drop snode on dnode {i}")
tdLog.info(f"drop snode {i} success")
self.checkResultRows(1)
tdSql.checkResultsByFunc(
f"show snodes;",
lambda: tdSql.getRows() == 1,
delay=0.5, retry=2
)
numOfRows=tdSql.execute(f"drop snode on dnode {numOfSnodes}")
if numOfRows != 0:
raise Exception(f" drop all snodes failed! ")
tdSql.query("select * from information_schema.ins_snodes order by id;")
numOfSnodes = tdSql.getRows()
tdLog.info(f"After drop all snodes numOfSnodes: {numOfSnodes}")
def dropOneSnodeTest(self):
# tdSql.query("select * from information_schema.ins_snodes order by id;")
# numOfSnodes=tdSql.getRows()
# #只有一个 snode 的时候不再执行删除
# if numOfSnodes >1:
tdLog.info(f"drop one snode test")
tdSql.query("select * from information_schema.ins_snodes order by id;")
snodeid = tdSql.getData(0,0)
try:
tdSql.execute(f"drop snode on dnode {snodeid}")
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege to drop snode")
else:
raise Exception(f"drop snode failed with error: {e}")
tdSql.query("show snodes;")
numOfStreams = tdSql.getRows()
if numOfStreams < 1:
raise Exception(f"Error: normal user {self.username1} can not create snode, but found {numOfStreams} snodes!")
# tdLog.info(f"drop snode {snodeid} success")
#drop snode后流状态有延迟需要等待才能看到 failed 状态出现
# time.sleep(15)
def createStream(self):
tdLog.info(f"create stream ")
tdSql.query("select * from information_schema.ins_dnodes order by id;")
numOfNodes=tdSql.getRows()
for i in range(1,numOfNodes+1):
tdSql.execute(f"create stream `s{i}` sliding(1s) from st1 stream_options(fill_history('2025-01-01 00:00:00')) into `s{i}out` as select cts, cint from st1 where _tcurrent_ts % 2 = 0 order by cts;")
tdLog.info(f"create stream s{i} success!")
# tdSql.execute("create stream `s2` sliding(1s) from st1 partition by tint, tbname stream_options(fill_history('2025-01-01 00:00:00')) into `s2out` as select cts, cint from st1 order by cts limit 3;")
# tdSql.execute("create stream `s3` sliding(1s) from st1 partition by tbname stream_options(pre_filter(cint>2)|fill_history('2025-01-01 00:00:00')) into `s3out` as select cts, cint, %%tbname from %%trows where cint >15 and tint >0 and %%tbname like '%2' order by cts;")
# tdSql.execute("create stream `s4` sliding(1s) from st1 stream_options(fill_history('2025-01-01 00:00:00')) into `s4out` as select _tcurrent_ts, cint from st1 order by cts limit 4;")
def createOneStream(self):
sql = (
"create stream `s99` sliding(1s) from st1 partition by tbname "
"stream_options(fill_history('2025-01-01 00:00:00')) "
"into `s99out` as "
"select cts, cint, %%tbname from st1 "
"where cint > 5 and tint > 0 and %%tbname like '%%2' "
"order by cts;"
)
tdSql.execute(sql)
tdLog.info(f"create stream s99 success!")
def dropOneStream(self):
tdLog.info(f"drop one stream: ")
tdSql.query("select * from information_schema.ins_streams order by stream_name;")
numOfStreams = tdSql.getRows()
tdLog.info(f"Total streams:{numOfStreams}")
streamid = tdSql.getData(0,0)
try:
tdSql.execute(f"drop stream {self.dbname}.{streamid}")
except Exception as e:
if "Insufficient privilege" in str(e):
tdLog.info(f"Insufficient privilege to drop stream")
else:
raise Exception(f"drop stream failed with error: {e}")
tdSql.query(f"show {self.dbname}.streams;")
numOfStreams = tdSql.getRows()
if numOfStreams < 1:
raise Exception(f"Error: normal user {self.username1} can not create stream, but found {numOfStreams} streams!")
tdLog.info(f"drop stream {self.dbname}.{streamid} success")
tdSql.query("select * from information_schema.ins_streams order by stream_name;")
numOfStreams = tdSql.getRows()
tdLog.info(f"Total streams:{numOfStreams}")
def checkStreamRunning(self):
tdLog.info(f"check stream running status:")
timeout = 60
start_time = time.time()
while True:
if time.time() - start_time > timeout:
tdLog.error("Timeout waiting for all streams to be running.")
tdLog.error(f"Final stream running status: {streamRunning}")
raise TimeoutError(f"Stream status did not reach 'Running' within {timeout}s timeout.")
tdSql.query(f"select status from information_schema.ins_streams order by stream_name;")
streamRunning=tdSql.getColData(0)
if all(status == "Running" for status in streamRunning):
tdLog.info("All Stream running!")
tdLog.info(f"stream running status: {streamRunning}")
return
else:
tdLog.info("Stream not running! Wait stream running ...")
tdLog.info(f"stream running status: {streamRunning}")
time.sleep(1)