Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
a6e2ef7b
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a6e2ef7b
编写于
5月 31, 2020
作者:
S
Steven Li
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Changed TICKS generation, added debugging code to improve coverage
上级
2e2053f3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
21 deletion
+63
-21
tests/pytest/crash_gen.py
tests/pytest/crash_gen.py
+63
-21
未找到文件。
tests/pytest/crash_gen.py
浏览文件 @
a6e2ef7b
...
@@ -691,9 +691,9 @@ class StateHasData(AnyState):
...
@@ -691,9 +691,9 @@ class StateHasData(AnyState):
# State of the database as we believe it to be
# State of the database as we believe it to be
class
DbState
():
class
DbState
():
def
__init__
(
self
):
def
__init__
(
self
,
resetDb
=
True
):
self
.
tableNumQueue
=
LinearQueue
()
self
.
tableNumQueue
=
LinearQueue
()
self
.
_lastTick
=
datetime
.
datetime
(
2019
,
1
,
1
)
# initial date time tick
self
.
_lastTick
=
self
.
setupLastTick
()
#
datetime.datetime(2019, 1, 1) # initial date time tick
self
.
_lastInt
=
0
# next one is initial integer
self
.
_lastInt
=
0
# next one is initial integer
self
.
_lock
=
threading
.
RLock
()
self
.
_lock
=
threading
.
RLock
()
...
@@ -714,12 +714,32 @@ class DbState():
...
@@ -714,12 +714,32 @@ class DbState():
except
:
except
:
print
(
"[=] Unexpected exception"
)
print
(
"[=] Unexpected exception"
)
raise
raise
self
.
_dbConn
.
resetDb
()
# drop and recreate DB
self
.
_state
=
StateEmpty
()
# initial state, the result of above
if
resetDb
:
self
.
_dbConn
.
resetDb
()
# drop and recreate DB
self
.
_state
=
self
.
_findCurrentState
()
def
getDbConn
(
self
):
def
getDbConn
(
self
):
return
self
.
_dbConn
return
self
.
_dbConn
def
getState
(
self
):
return
self
.
_state
# We aim to create a starting time tick, such that, whenever we run our test here once
# We should be able to safely create 100,000 records, which will not have any repeated time stamp
# when we re-run the test in 3 minutes (180 seconds), basically we should expand time duration
# by a factor of 500.
# TODO: what if it goes beyond 10 years into the future
def
setupLastTick
(
self
):
t1
=
datetime
.
datetime
(
2020
,
5
,
30
)
t2
=
datetime
.
datetime
.
now
()
elSec
=
t2
.
timestamp
()
-
t1
.
timestamp
()
# print("elSec = {}".format(elSec))
t3
=
datetime
.
datetime
(
2012
,
1
,
1
)
# default "keep" is 10 years
t4
=
datetime
.
datetime
.
fromtimestamp
(
t3
.
timestamp
()
+
elSec
*
500
)
# see explanation above
logger
.
info
(
"Setting up TICKS to start from: {}"
.
format
(
t4
))
return
t4
def
pickAndAllocateTable
(
self
):
# pick any table, and "use" it
def
pickAndAllocateTable
(
self
):
# pick any table, and "use" it
return
self
.
tableNumQueue
.
pickAndAllocate
()
return
self
.
tableNumQueue
.
pickAndAllocate
()
...
@@ -1150,7 +1170,7 @@ class AddFixedDataTask(StateTransitionTask):
...
@@ -1150,7 +1170,7 @@ class AddFixedDataTask(StateTransitionTask):
ds
=
self
.
_dbState
ds
=
self
.
_dbState
wt
.
execSql
(
"use db"
)
# TODO: seems to be an INSERT bug to require this
wt
.
execSql
(
"use db"
)
# TODO: seems to be an INSERT bug to require this
for
i
in
range
(
10
):
# 0 to 9
for
i
in
range
(
10
):
# 0 to 9
for
j
in
range
(
20
0
)
:
for
j
in
range
(
1
0
)
:
sql
=
"insert into db.reg_table_{} using {} tags ('{}', {}) values ('{}', {});"
.
format
(
sql
=
"insert into db.reg_table_{} using {} tags ('{}', {}) values ('{}', {});"
.
format
(
i
,
i
,
ds
.
getFixedSuperTableName
(),
ds
.
getFixedSuperTableName
(),
...
@@ -1304,7 +1324,9 @@ def main():
...
@@ -1304,7 +1324,9 @@ def main():
ch
=
logging
.
StreamHandler
()
ch
=
logging
.
StreamHandler
()
logger
.
addHandler
(
ch
)
logger
.
addHandler
(
ch
)
dbState
=
DbState
()
# resetDb = False # DEBUG only
# dbState = DbState(resetDb) # DBEUG only!
dbState
=
DbState
()
# Regular function
Dice
.
seed
(
0
)
# initial seeding of dice
Dice
.
seed
(
0
)
# initial seeding of dice
tc
=
ThreadCoordinator
(
tc
=
ThreadCoordinator
(
ThreadPool
(
dbState
,
gConfig
.
num_threads
,
gConfig
.
max_steps
,
0
),
ThreadPool
(
dbState
,
gConfig
.
num_threads
,
gConfig
.
max_steps
,
0
),
...
@@ -1312,21 +1334,41 @@ def main():
...
@@ -1312,21 +1334,41 @@ def main():
dbState
dbState
)
)
# Hack to exercise reading from disk, imcreasing coverage. TODO: fix
# # Hack to exercise reading from disk, imcreasing coverage. TODO: fix
dbc
=
dbState
.
getDbConn
()
# dbc = dbState.getDbConn()
sTbName
=
dbState
.
getFixedSuperTableName
()
# sTbName = dbState.getFixedSuperTableName()
dbc
.
execute
(
"create database if not exists db"
)
# dbc.execute("create database if not exists db")
dbc
.
execute
(
"use db"
)
# if not dbState.getState().equals(StateEmpty()):
dbState
.
_state
=
StateDbOnly
()
# We altered the state
# dbc.execute("use db")
try
:
# the super table may not exist
dbc
.
query
(
"select TBNAME from db.{}"
.
format
(
sTbName
))
# TODO: analyze result set later
# rTables = None
rTables
=
dbc
.
getQueryResult
()
# try: # the super table may not exist
# print("rTables[0] = {}, type = {}".format(rTables[0], type(rTables[0])))
# sql = "select TBNAME from db.{}".format(sTbName)
for
rTbName
in
rTables
:
# regular tables
# logger.info("Finding out tables in super table: {}".format(sql))
dbc
.
query
(
"select * from db.{}"
.
format
(
rTbName
[
0
]))
# TODO: check success failure
# dbc.query(sql) # TODO: analyze result set later
logger
.
debug
(
"Initial READING operation is successful"
)
# logger.info("Fetching result")
except
taos
.
error
.
ProgrammingError
as
err
:
# rTables = dbc.getQueryResult()
pass
# logger.info("Result: {}".format(rTables))
# except taos.error.ProgrammingError as err:
# logger.info("Initial Super table OPS error: {}".format(err))
# # sys.exit()
# if ( not rTables == None):
# # print("rTables[0] = {}, type = {}".format(rTables[0], type(rTables[0])))
# try:
# for rTbName in rTables : # regular tables
# ds = dbState
# logger.info("Inserting into table: {}".format(rTbName[0]))
# sql = "insert into db.{} values ('{}', {});".format(
# rTbName[0],
# ds.getNextTick(), ds.getNextInt())
# dbc.execute(sql)
# for rTbName in rTables : # regular tables
# dbc.query("select * from db.{}".format(rTbName[0])) # TODO: check success failure
# logger.info("Initial READING operation is successful")
# except taos.error.ProgrammingError as err:
# logger.info("Initial WRITE/READ error: {}".format(err))
# Sandbox testing code
# Sandbox testing code
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录