Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
188127bd
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看板
提交
188127bd
编写于
4月 28, 2021
作者:
haoranc
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into test/chr
上级
53eafcc1
1857ccc0
变更
32
隐藏空白更改
内联
并排
Showing
32 changed file
with
1061 addition
and
370 deletion
+1061
-370
packaging/cfg/taos.cfg
packaging/cfg/taos.cfg
+1
-1
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+4
-4
src/client/src/tscLocal.c
src/client/src/tscLocal.c
+1
-1
src/client/src/tscLocalMerge.c
src/client/src/tscLocalMerge.c
+8
-8
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+39
-3
src/client/src/tscProfile.c
src/client/src/tscProfile.c
+1
-1
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+1
-1
src/client/src/tscServer.c
src/client/src/tscServer.c
+39
-39
src/client/src/tscSql.c
src/client/src/tscSql.c
+6
-7
src/client/src/tscStream.c
src/client/src/tscStream.c
+25
-18
src/client/src/tscSub.c
src/client/src/tscSub.c
+2
-2
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+41
-41
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+7
-7
src/common/src/tglobal.c
src/common/src/tglobal.c
+1
-1
src/common/src/tvariant.c
src/common/src/tvariant.c
+7
-0
src/connector/go
src/connector/go
+1
-1
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+247
-202
src/mnode/inc/mnodeDb.h
src/mnode/inc/mnodeDb.h
+1
-0
src/mnode/src/mnodeDb.c
src/mnode/src/mnodeDb.c
+18
-0
src/mnode/src/mnodeDnode.c
src/mnode/src/mnodeDnode.c
+9
-0
src/vnode/src/vnodeWrite.c
src/vnode/src/vnodeWrite.c
+4
-2
tests/perftest-scripts/perftest-taosdemo-compare.sh
tests/perftest-scripts/perftest-taosdemo-compare.sh
+147
-0
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+3
-0
tests/pytest/functions/function_operations.py
tests/pytest/functions/function_operations.py
+2
-2
tests/pytest/query/queryFilterTswithDateUnit.py
tests/pytest/query/queryFilterTswithDateUnit.py
+25
-22
tests/pytest/query/queryTscomputWithNow.py
tests/pytest/query/queryTscomputWithNow.py
+177
-0
tests/pytest/stream/cqSupportBefore1970.py
tests/pytest/stream/cqSupportBefore1970.py
+93
-0
tests/pytest/stream/showStreamExecTimeisNull.py
tests/pytest/stream/showStreamExecTimeisNull.py
+97
-0
tests/script/general/parser/function.sim
tests/script/general/parser/function.sim
+13
-0
tests/script/unique/cluster/balance2.sim
tests/script/unique/cluster/balance2.sim
+19
-4
tests/script/unique/dnode/remove1.sim
tests/script/unique/dnode/remove1.sim
+2
-2
tests/script/unique/dnode/remove2.sim
tests/script/unique/dnode/remove2.sim
+20
-1
未找到文件。
packaging/cfg/taos.cfg
浏览文件 @
188127bd
...
...
@@ -64,7 +64,7 @@
# monitorInterval 30
# number of seconds allowed for a dnode to be offline, for cluster only
# offlineThreshold 864000
0
# offlineThreshold 864000
# RPC re-try timer, millisecond
# rpcTimer 300
...
...
src/client/src/tscAsync.c
浏览文件 @
188127bd
...
...
@@ -49,7 +49,7 @@ void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, __async_cb_func_t fp, void* para
pSql
->
sqlstr
=
calloc
(
1
,
sqlLen
+
1
);
if
(
pSql
->
sqlstr
==
NULL
)
{
tscError
(
"
%p failed to malloc sql string buffer"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc sql string buffer"
,
pSql
->
self
);
pSql
->
res
.
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tscAsyncResultOnError
(
pSql
);
return
;
...
...
@@ -80,7 +80,7 @@ void taos_query_a(TAOS *taos, const char *sqlstr, __async_cb_func_t fp, void *pa
TAOS_RES
*
taos_query_ra
(
TAOS
*
taos
,
const
char
*
sqlstr
,
__async_cb_func_t
fp
,
void
*
param
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
tscError
(
"
bug!!! pObj:%p
"
,
pObj
);
tscError
(
"
pObj:%p is NULL or freed
"
,
pObj
);
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
tscQueueAsyncError
(
fp
,
param
,
TSDB_CODE_TSC_DISCONNECTED
);
return
NULL
;
...
...
@@ -288,7 +288,7 @@ static void tscAsyncResultCallback(SSchedMsg *pMsg) {
}
assert
(
pSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
);
tscError
(
"
%p invoke user specified function due to error occurred, code:%s"
,
pSql
,
tstrerror
(
pSql
->
res
.
code
));
tscError
(
"
0x%"
PRIx64
" async result callback, code:%s"
,
pSql
->
self
,
tstrerror
(
pSql
->
res
.
code
));
SSqlRes
*
pRes
=
&
pSql
->
res
;
if
(
pSql
->
fp
==
NULL
||
pSql
->
fetchFp
==
NULL
){
...
...
@@ -368,7 +368,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
SSqlObj
*
sub
=
(
SSqlObj
*
)
res
;
const
char
*
msg
=
(
sub
->
cmd
.
command
==
TSDB_SQL_STABLEVGROUP
)
?
"vgroup-list"
:
"table-meta"
;
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p get %s failed, code:%s"
,
pSql
,
msg
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" get %s failed, code:%s"
,
pSql
->
self
,
msg
,
tstrerror
(
code
));
goto
_error
;
}
...
...
src/client/src/tscLocal.c
浏览文件 @
188127bd
...
...
@@ -926,7 +926,7 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
pRes
->
code
=
tscProcessServStatus
(
pSql
);
}
else
{
pRes
->
code
=
TSDB_CODE_TSC_INVALID_SQL
;
tscError
(
"
%p not support command:%d"
,
pSql
,
pCmd
->
command
);
tscError
(
"
0x%"
PRIx64
" not support command:%d"
,
pSql
->
self
,
pCmd
->
command
);
}
// keep the code in local variable in order to avoid invalid read in case of async query
...
...
src/client/src/tscLocalMerge.c
浏览文件 @
188127bd
...
...
@@ -177,14 +177,14 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
if
(
pMemBuffer
==
NULL
)
{
tscLocalReducerEnvDestroy
(
pMemBuffer
,
pDesc
,
finalmodel
,
pFFModel
,
numOfBuffer
);
tscError
(
"
%p pMemBuffer
is NULL"
,
pMemBuffer
);
tscError
(
"
pMemBuffer:%p
is NULL"
,
pMemBuffer
);
pRes
->
code
=
TSDB_CODE_TSC_APP_ERROR
;
return
;
}
if
(
pDesc
->
pColumnModel
==
NULL
)
{
tscLocalReducerEnvDestroy
(
pMemBuffer
,
pDesc
,
finalmodel
,
pFFModel
,
numOfBuffer
);
tscError
(
"
%p no local buffer or intermediate result format model"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" no local buffer or intermediate result format model"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_APP_ERROR
;
return
;
}
...
...
@@ -208,7 +208,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
}
if
(
pDesc
->
pColumnModel
->
capacity
>=
pMemBuffer
[
0
]
->
pageSize
)
{
tscError
(
"
%p Invalid value of buffer capacity %d and page size %d "
,
pSql
,
pDesc
->
pColumnModel
->
capacity
,
tscError
(
"
0x%"
PRIx64
" Invalid value of buffer capacity %d and page size %d "
,
pSql
->
self
,
pDesc
->
pColumnModel
->
capacity
,
pMemBuffer
[
0
]
->
pageSize
);
tscLocalReducerEnvDestroy
(
pMemBuffer
,
pDesc
,
finalmodel
,
pFFModel
,
numOfBuffer
);
...
...
@@ -220,7 +220,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
SLocalMerger
*
pReducer
=
(
SLocalMerger
*
)
calloc
(
1
,
size
);
if
(
pReducer
==
NULL
)
{
tscError
(
"
%p failed to create local merge structure, out of memory"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to create local merge structure, out of memory"
,
pSql
->
self
);
tscLocalReducerEnvDestroy
(
pMemBuffer
,
pDesc
,
finalmodel
,
pFFModel
,
numOfBuffer
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
...
...
@@ -244,7 +244,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
for
(
int32_t
j
=
0
;
j
<
numOfFlushoutInFile
;
++
j
)
{
SLocalDataSource
*
ds
=
(
SLocalDataSource
*
)
malloc
(
sizeof
(
SLocalDataSource
)
+
pMemBuffer
[
0
]
->
pageSize
);
if
(
ds
==
NULL
)
{
tscError
(
"
%p failed to create merge structure"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to create merge structure"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tfree
(
pReducer
);
return
;
...
...
@@ -674,7 +674,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
(
*
pMemBuffer
)
=
(
tExtMemBuffer
**
)
malloc
(
POINTER_BYTES
*
pSql
->
subState
.
numOfSub
);
if
(
*
pMemBuffer
==
NULL
)
{
tscError
(
"
%p failed to allocate memory"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to allocate memory"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
pRes
->
code
;
}
...
...
@@ -683,7 +683,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
pSchema
=
(
SSchema
*
)
calloc
(
1
,
sizeof
(
SSchema
)
*
size
);
if
(
pSchema
==
NULL
)
{
tscError
(
"
%p failed to allocate memory"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to allocate memory"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
pRes
->
code
;
}
...
...
@@ -1529,7 +1529,7 @@ int32_t tscDoLocalMerge(SSqlObj *pSql) {
return
pRes
->
code
;
}
tscError
(
"
%p local merge abort due to error occurs, code:%s"
,
pSql
,
tstrerror
(
pRes
->
code
));
tscError
(
"
0x%"
PRIx64
" local merge abort due to error occurs, code:%s"
,
pSql
->
self
,
tstrerror
(
pRes
->
code
));
return
pRes
->
code
;
}
...
...
src/client/src/tscParseInsert.c
浏览文件 @
188127bd
...
...
@@ -928,6 +928,42 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql, char** boundC
return
tscSQLSyntaxErrMsg
(
pCmd
->
payload
,
") expected"
,
sToken
.
z
);
}
/* parse columns after super table tags values.
* insert into table_name using super_table(tag_name1, tag_name2) tags(tag_val1, tag_val2)
* (normal_col1, normal_col2) values(normal_col1_val, normal_col2_val);
* */
index
=
0
;
sToken
=
tStrGetToken
(
sql
,
&
index
,
false
);
sql
+=
index
;
int
numOfColsAfterTags
=
0
;
if
(
sToken
.
type
==
TK_LP
)
{
if
(
*
boundColumn
!=
NULL
)
{
return
tscSQLSyntaxErrMsg
(
pCmd
->
payload
,
"bind columns again"
,
sToken
.
z
);
}
else
{
*
boundColumn
=
&
sToken
.
z
[
0
];
}
while
(
1
)
{
index
=
0
;
sToken
=
tStrGetToken
(
sql
,
&
index
,
false
);
if
(
sToken
.
type
==
TK_RP
)
{
break
;
}
sql
+=
index
;
++
numOfColsAfterTags
;
}
if
(
numOfColsAfterTags
==
0
&&
(
*
boundColumn
)
!=
NULL
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
}
sToken
=
tStrGetToken
(
sql
,
&
index
,
false
);
}
sql
=
sToken
.
z
;
if
(
tscValidateName
(
&
tableToken
)
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
pCmd
->
payload
,
"invalid table name"
,
*
sqlstr
);
}
...
...
@@ -1141,7 +1177,7 @@ int tsParseInsertSql(SSqlObj *pSql) {
return
code
;
}
tscError
(
"
%p async insert parse error, code:%s"
,
pSql
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" async insert parse error, code:%s"
,
pSql
->
self
,
tstrerror
(
code
));
pCmd
->
curSql
=
NULL
;
goto
_clean
;
}
...
...
@@ -1409,7 +1445,7 @@ static void parseFileSendDataBlock(void *param, TAOS_RES *tres, int32_t numOfRow
assert
(
pSql
->
res
.
numOfRows
==
0
);
int32_t
ret
=
fseek
(
fp
,
0
,
SEEK_SET
);
if
(
ret
<
0
)
{
tscError
(
"
%p failed to seek SEEK_SET since:%s"
,
pSql
,
tstrerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to seek SEEK_SET since:%s"
,
pSql
->
self
,
tstrerror
(
errno
));
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_error
;
}
...
...
@@ -1529,7 +1565,7 @@ void tscImportDataFromFile(SSqlObj *pSql) {
FILE
*
fp
=
fopen
(
pCmd
->
payload
,
"rb"
);
if
(
fp
==
NULL
)
{
pSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
tscError
(
"
%p failed to open file %s to load data from file, code:%s"
,
pSql
,
pCmd
->
payload
,
tstrerror
(
pSql
->
res
.
code
));
tscError
(
"
0x%"
PRIx64
" failed to open file %s to load data from file, code:%s"
,
pSql
->
self
,
pCmd
->
payload
,
tstrerror
(
pSql
->
res
.
code
));
tfree
(
pSupporter
);
taos_free_result
(
pNew
);
...
...
src/client/src/tscProfile.c
浏览文件 @
188127bd
...
...
@@ -104,7 +104,7 @@ void tscSaveSlowQuery(SSqlObj *pSql) {
char
*
sql
=
malloc
(
sqlSize
);
if
(
sql
==
NULL
)
{
tscError
(
"
%p failed to allocate memory to sent slow query to dnode"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to allocate memory to sent slow query to dnode"
,
pSql
->
self
);
return
;
}
...
...
src/client/src/tscSQLParser.c
浏览文件 @
188127bd
...
...
@@ -5187,7 +5187,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
int32_t
size
=
sizeof
(
SUpdateTableTagValMsg
)
+
pTagsSchema
->
bytes
+
schemaLen
+
TSDB_EXTRA_PAYLOAD_SIZE
;
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
tscError
(
"
%p failed to malloc for alter table msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for alter table msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
src/client/src/tscServer.c
浏览文件 @
188127bd
...
...
@@ -221,7 +221,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
assert
(
online
<=
total
);
if
(
online
<
total
)
{
tscError
(
"
HB:%p, total dnode:%d, online dnode:%d"
,
pSql
,
total
,
online
);
tscError
(
"
0x%"
PRIx64
", HB, total dnode:%d, online dnode:%d"
,
pSql
->
self
,
total
,
online
);
pSql
->
res
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
;
}
...
...
@@ -273,7 +273,7 @@ void tscProcessActivityTimer(void *handle, void *tmrId) {
taosReleaseRef
(
tscObjRef
,
pObj
->
hbrid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p failed to sent HB to server, reason:%s"
,
pHB
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" failed to sent HB to server, reason:%s"
,
pHB
->
self
,
tstrerror
(
code
));
}
taosReleaseRef
(
tscRefId
,
rid
);
...
...
@@ -285,7 +285,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
char
*
pMsg
=
rpcMallocCont
(
pCmd
->
payloadLen
);
if
(
NULL
==
pMsg
)
{
tscError
(
"
%p msg:%s malloc failed"
,
pSql
,
taosMsg
[
pSql
->
cmd
.
msgType
]);
tscError
(
"
0x%"
PRIx64
" msg:%s malloc failed"
,
pSql
->
self
,
taosMsg
[
pSql
->
cmd
.
msgType
]);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -369,11 +369,11 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
rpcMsg
->
code
==
TSDB_CODE_APP_NOT_READY
))
{
pSql
->
retry
++
;
tscWarn
(
"
%p it shall renew table meta, code:%s, retry:%d"
,
pSql
,
tstrerror
(
rpcMsg
->
code
),
pSql
->
retry
);
tscWarn
(
"
0x%"
PRIx64
" it shall renew table meta, code:%s, retry:%d"
,
pSql
->
self
,
tstrerror
(
rpcMsg
->
code
),
pSql
->
retry
);
pSql
->
res
.
code
=
rpcMsg
->
code
;
// keep the previous error code
if
(
pSql
->
retry
>
pSql
->
maxRetry
)
{
tscError
(
"
%p max retry %d reached, give up"
,
pSql
,
pSql
->
maxRetry
);
tscError
(
"
0x%"
PRIx64
" max retry %d reached, give up"
,
pSql
->
self
,
pSql
->
maxRetry
);
}
else
{
// wait for a little bit moment and then retry
// todo do not sleep in rpc callback thread, add this process into queueu to process
...
...
@@ -664,7 +664,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
assert
(
index
<
pTableMetaInfo
->
vgroupList
->
numOfVgroups
);
pVgroupInfo
=
&
pTableMetaInfo
->
vgroupList
->
vgroups
[
index
];
}
else
{
tscError
(
"
%p No vgroup info found"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" No vgroup info found"
,
pSql
->
self
);
*
succeed
=
0
;
return
pMsg
;
...
...
@@ -733,7 +733,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
int32_t
size
=
tscEstimateQueryMsgSize
(
pSql
,
pCmd
->
clauseIndex
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_SQL
;
// todo add test for this
}
...
...
@@ -743,19 +743,19 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
size_t
numOfSrcCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
if
(
numOfSrcCols
<=
0
&&
!
tscQueryTags
(
pQueryInfo
)
&&
!
tscQueryBlockInfo
(
pQueryInfo
))
{
tscError
(
"
%p illegal value of numOfCols in query msg: %"
PRIu64
", table cols:%d"
,
pSql
,
(
uint64_t
)
numOfSrcCols
,
tscError
(
"
0x%"
PRIx64
" illegal value of numOfCols in query msg: %"
PRIu64
", table cols:%d"
,
pSql
->
self
,
(
uint64_t
)
numOfSrcCols
,
tscGetNumOfColumns
(
pTableMeta
));
return
TSDB_CODE_TSC_INVALID_SQL
;
}
if
(
pQueryInfo
->
interval
.
interval
<
0
)
{
tscError
(
"
%p illegal value of aggregation time interval in query msg: %"
PRId64
,
pSql
,
(
int64_t
)
pQueryInfo
->
interval
.
interval
);
tscError
(
"
0x%"
PRIx64
" illegal value of aggregation time interval in query msg: %"
PRId64
,
pSql
->
self
,
(
int64_t
)
pQueryInfo
->
interval
.
interval
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
if
(
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
<
0
)
{
tscError
(
"
%p illegal value of numOfGroupCols in query msg: %d"
,
pSql
,
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
);
tscError
(
"
0x%"
PRIx64
" illegal value of numOfGroupCols in query msg: %d"
,
pSql
->
self
,
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
@@ -813,8 +813,8 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
n
);
tscError
(
"
%p
tid:%d uid:%"
PRIu64
" id:%s, column index out of range, numOfColumns:%d, index:%d, column name:%s"
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
n
,
tscGetNumOfColumns
(
pTableMeta
),
pCol
->
colIndex
.
columnIndex
,
tscError
(
"
0x%"
PRIx64
"
tid:%d uid:%"
PRIu64
" id:%s, column index out of range, numOfColumns:%d, index:%d, column name:%s"
,
pSql
->
self
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
n
,
tscGetNumOfColumns
(
pTableMeta
),
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
@@ -859,12 +859,12 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// the queried table has been removed and a new table with the same name has already been created already
// return error msg
if
(
pExpr
->
uid
!=
pTableMeta
->
id
.
uid
)
{
tscError
(
"
%p table has already been destroyed"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" table has already been destroyed"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_TABLE_NAME
;
}
if
(
!
tscValidateColumnId
(
pTableMetaInfo
,
pExpr
->
colInfo
.
colId
,
pExpr
->
numOfParams
))
{
tscError
(
"
%p table schema is not matched with parsed sql"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" table schema is not matched with parsed sql"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
@@ -965,12 +965,12 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// the queried table has been removed and a new table with the same name has already been created already
// return error msg
if
(
pExpr
->
uid
!=
pTableMeta
->
id
.
uid
)
{
tscError
(
"
%p table has already been destroyed"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" table has already been destroyed"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_TABLE_NAME
;
}
if
(
!
tscValidateColumnId
(
pTableMetaInfo
,
pExpr
->
colInfo
.
colId
,
pExpr
->
numOfParams
))
{
tscError
(
"
%p table schema is not matched with parsed sql"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" table schema is not matched with parsed sql"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
@@ -1076,8 +1076,8 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
char
n
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
n
);
tscError
(
"
%p
tid:%d uid:%"
PRIu64
" id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s"
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
n
,
total
,
numOfTagColumns
,
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
tscError
(
"
0x%"
PRIx64
"
tid:%d uid:%"
PRIu64
" id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s"
,
pSql
->
self
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
n
,
total
,
numOfTagColumns
,
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
@@ -1170,7 +1170,7 @@ int32_t tscBuildCreateDnodeMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
pCmd
->
payloadLen
=
sizeof
(
SCreateDnodeMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1188,7 +1188,7 @@ int32_t tscBuildAcctMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
pCmd
->
payloadLen
=
sizeof
(
SCreateAcctMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1234,7 +1234,7 @@ int32_t tscBuildUserMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SCreateUserMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1273,7 +1273,7 @@ int32_t tscBuildDropDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SDropDbMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1295,7 +1295,7 @@ int32_t tscBuildDropTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SCMDropTableMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1316,7 +1316,7 @@ int32_t tscBuildDropDnodeMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SDropDnodeMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1337,7 +1337,7 @@ int32_t tscBuildDropUserAcctMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
msgType
=
(
pInfo
->
type
==
TSDB_SQL_DROP_USER
)
?
TSDB_MSG_TYPE_CM_DROP_USER
:
TSDB_MSG_TYPE_CM_DROP_ACCT
;
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1352,7 +1352,7 @@ int32_t tscBuildUseDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SUseDbMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1369,7 +1369,7 @@ int32_t tscBuildSyncDbReplicaMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SSyncDbMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1388,7 +1388,7 @@ int32_t tscBuildShowMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SShowMsg
)
+
100
;
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1474,7 +1474,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// Reallocate the payload size
size
=
tscEstimateCreateTableMsgLength
(
pSql
,
pInfo
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
tscError
(
"
%p failed to malloc for create table msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for create table msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1573,7 +1573,7 @@ int tscBuildAlterTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SAlterTableInfo
*
pAlterInfo
=
pInfo
->
pAlterInfo
;
int
size
=
tscEstimateAlterTableMsgLength
(
pCmd
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
tscError
(
"
%p failed to malloc for alter table msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for alter table msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1647,7 +1647,7 @@ int tscBuildRetrieveFromMgmtMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SRetrieveTableMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1753,7 +1753,7 @@ int tscBuildConnectMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pCmd
->
payloadLen
=
sizeof
(
SConnectMsg
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
pCmd
->
payloadLen
))
{
tscError
(
"
%p failed to malloc for query msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc for query msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1893,7 +1893,7 @@ int tscBuildHeartBeatMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
int
size
=
numOfQueries
*
sizeof
(
SQueryDesc
)
+
numOfStreams
*
sizeof
(
SStreamDesc
)
+
sizeof
(
SHeartBeatMsg
)
+
100
;
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
pthread_mutex_unlock
(
&
pObj
->
mutex
);
tscError
(
"
%p failed to create heartbeat msg"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to create heartbeat msg"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -1969,7 +1969,7 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
STableMeta
*
pTableMeta
=
tscCreateTableMetaFromMsg
(
pMetaMsg
);
if
(
!
tIsValidSchema
(
pTableMeta
->
schema
,
pTableMeta
->
tableInfo
.
numOfColumns
,
pTableMeta
->
tableInfo
.
numOfTags
))
{
tscError
(
"
%p invalid table meta from mnode, name:%s"
,
pSql
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
));
tscError
(
"
0x%"
PRIx64
" invalid table meta from mnode, name:%s"
,
pSql
->
self
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
));
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
...
...
@@ -2163,7 +2163,7 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
pInfo
->
vgroupList
->
numOfVgroups
=
pVgroupMsg
->
numOfVgroups
;
if
(
pInfo
->
vgroupList
->
numOfVgroups
<=
0
)
{
//tfree(pInfo->vgroupList);
tscError
(
"
%p empty vgroup info"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" empty vgroup info"
,
pSql
->
self
);
}
else
{
for
(
int32_t
j
=
0
;
j
<
pInfo
->
vgroupList
->
numOfVgroups
;
++
j
)
{
// just init, no need to lock
...
...
@@ -2475,7 +2475,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code);
static
int32_t
getTableMetaFromMnode
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
)
{
SSqlObj
*
pNew
=
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
NULL
==
pNew
)
{
tscError
(
"
%p malloc failed for new sqlobj to get table meta"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" malloc failed for new sqlobj to get table meta"
,
pSql
->
self
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -2489,7 +2489,7 @@ static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaIn
pNew
->
cmd
.
autoCreated
=
pSql
->
cmd
.
autoCreated
;
// create table if not exists
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
&
pNew
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
+
pSql
->
cmd
.
payloadLen
))
{
tscError
(
"
%p malloc failed for payload to get table meta"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" malloc failed for payload to get table meta"
,
pSql
->
self
);
tscFreeSqlObj
(
pNew
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -2502,7 +2502,7 @@ static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaIn
if
(
pSql
->
cmd
.
autoCreated
)
{
int32_t
code
=
copyTagData
(
&
pNew
->
cmd
.
tagData
,
&
pSql
->
cmd
.
tagData
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p malloc failed for new tag data to get table meta"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" malloc failed for new tag data to get table meta"
,
pSql
->
self
);
tscFreeSqlObj
(
pNew
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -2580,7 +2580,7 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
int32_t
code
=
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
name
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p failed to generate the table full name"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to generate the table full name"
,
pSql
->
self
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
...
...
src/client/src/tscSql.c
浏览文件 @
188127bd
...
...
@@ -588,7 +588,7 @@ static bool tscKillQueryInDnode(SSqlObj* pSql) {
void
taos_free_result
(
TAOS_RES
*
res
)
{
SSqlObj
*
pSql
=
(
SSqlObj
*
)
res
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
tscError
(
"
%p already released sqlObj"
,
res
);
tscError
(
"
0x%"
PRIx64
" already released sqlObj"
,
pSql
?
pSql
->
self
:
-
1
);
return
;
}
...
...
@@ -881,15 +881,14 @@ int taos_validate_sql(TAOS *taos, const char *sql) {
int32_t
sqlLen
=
(
int32_t
)
strlen
(
sql
);
if
(
sqlLen
>
tsMaxSQLStringLen
)
{
tscError
(
"
%p sql too long"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" sql too long"
,
pSql
->
self
);
tfree
(
pSql
);
return
TSDB_CODE_TSC_EXCEED_SQL_LIMIT
;
}
pSql
->
sqlstr
=
realloc
(
pSql
->
sqlstr
,
sqlLen
+
1
);
if
(
pSql
->
sqlstr
==
NULL
)
{
tscError
(
"%p failed to malloc sql string buffer"
,
pSql
);
tscDebug
(
"0x%"
PRIx64
" Valid SQL result:%d, %s pObj:%p"
,
pSql
->
self
,
pRes
->
code
,
taos_errstr
(
pSql
),
pObj
);
tscError
(
"0x%"
PRIx64
" failed to malloc sql string buffer"
,
pSql
->
self
);
tfree
(
pSql
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -914,7 +913,7 @@ int taos_validate_sql(TAOS *taos, const char *sql) {
}
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tsc
Debug
(
"0x%"
PRIx64
" V
alid SQL result:%d, %s pObj:%p"
,
pSql
->
self
,
code
,
taos_errstr
(
pSql
),
pObj
);
tsc
Error
(
"0x%"
PRIx64
" inv
alid SQL result:%d, %s pObj:%p"
,
pSql
->
self
,
code
,
taos_errstr
(
pSql
),
pObj
);
}
taos_free_result
(
pSql
);
...
...
@@ -1031,14 +1030,14 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
int32_t
tblListLen
=
(
int32_t
)
strlen
(
tableNameList
);
if
(
tblListLen
>
MAX_TABLE_NAME_LENGTH
)
{
tscError
(
"
%p tableNameList too long, length:%d, maximum allowed:%d"
,
pSql
,
tblListLen
,
MAX_TABLE_NAME_LENGTH
);
tscError
(
"
0x%"
PRIx64
" tableNameList too long, length:%d, maximum allowed:%d"
,
pSql
->
self
,
tblListLen
,
MAX_TABLE_NAME_LENGTH
);
tscFreeSqlObj
(
pSql
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
char
*
str
=
calloc
(
1
,
tblListLen
+
1
);
if
(
str
==
NULL
)
{
tscError
(
"
%p failed to malloc sql string buffer"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc sql string buffer"
,
pSql
->
self
);
tscFreeSqlObj
(
pSql
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
src/client/src/tscStream.c
浏览文件 @
188127bd
...
...
@@ -194,7 +194,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
SSqlStream
*
pStream
=
(
SSqlStream
*
)
param
;
if
(
tres
==
NULL
||
numOfRows
<
0
)
{
int64_t
retryDelay
=
tscGetRetryDelayTime
(
pStream
,
pStream
->
interval
.
sliding
,
pStream
->
precision
);
tscError
(
"
%p stream:%p, query data failed, code:0x%08x, retry in %"
PRId64
"ms"
,
pStream
->
pSql
,
pStream
,
numOfRows
,
tscError
(
"
0x%"
PRIx64
" stream:%p, query data failed, code:0x%08x, retry in %"
PRId64
"ms"
,
pStream
->
pSql
->
self
,
pStream
,
numOfRows
,
retryDelay
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pStream
->
pSql
->
cmd
,
0
,
0
);
...
...
@@ -203,6 +203,14 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
name
);
taosHashRemove
(
tscTableMetaInfo
,
name
,
strnlen
(
name
,
TSDB_TABLE_FNAME_LEN
));
tfree
(
pTableMetaInfo
->
pTableMeta
);
tscFreeSqlResult
(
pStream
->
pSql
);
tscFreeSubobj
(
pStream
->
pSql
);
tfree
(
pStream
->
pSql
->
pSubs
);
pStream
->
pSql
->
subState
.
numOfSub
=
0
;
pTableMetaInfo
->
vgroupList
=
tscVgroupInfoClear
(
pTableMetaInfo
->
vgroupList
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retryDelay
);
...
...
@@ -259,7 +267,7 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
if
(
pSql
==
NULL
||
numOfRows
<
0
)
{
int64_t
retryDelayTime
=
tscGetRetryDelayTime
(
pStream
,
pStream
->
interval
.
sliding
,
pStream
->
precision
);
tscError
(
"
%p stream:%p, retrieve data failed, code:0x%08x, retry in %"
PRId64
"ms"
,
pSql
,
pStream
,
numOfRows
,
retryDelayTime
);
tscError
(
"
0x%"
PRIx64
" stream:%p, retrieve data failed, code:0x%08x, retry in %"
PRId64
"ms"
,
pSql
->
self
,
pStream
,
numOfRows
,
retryDelayTime
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retryDelayTime
);
return
;
...
...
@@ -292,7 +300,7 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
/* no resuls in the query range, retry */
// todo set retry dynamic time
int32_t
retry
=
tsProjectExecInterval
;
tscError
(
"
%p stream:%p, retrieve no data, code:0x%08x, retry in %"
PRId32
"ms"
,
pSql
,
pStream
,
numOfRows
,
retry
);
tscError
(
"
0x%"
PRIx64
" stream:%p, retrieve no data, code:0x%08x, retry in %"
PRId32
"ms"
,
pSql
->
self
,
pStream
,
numOfRows
,
retry
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retry
);
return
;
...
...
@@ -440,7 +448,7 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
}
if
(
pQueryInfo
->
interval
.
intervalUnit
!=
'n'
&&
pQueryInfo
->
interval
.
intervalUnit
!=
'y'
&&
pQueryInfo
->
interval
.
interval
<
minIntervalTime
)
{
tscWarn
(
"
%p stream:%p, original sample interval:%"
PRId64
" too small, reset to:%"
PRId64
,
pSql
,
pStream
,
tscWarn
(
"
0x%"
PRIx64
" stream:%p, original sample interval:%"
PRId64
" too small, reset to:%"
PRId64
,
pSql
->
self
,
pStream
,
(
int64_t
)
pQueryInfo
->
interval
.
interval
,
minIntervalTime
);
pQueryInfo
->
interval
.
interval
=
minIntervalTime
;
}
...
...
@@ -457,14 +465,14 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
(
pStream
->
precision
==
TSDB_TIME_PRECISION_MICRO
)
?
tsMinSlidingTime
*
1000L
:
tsMinSlidingTime
;
if
(
pQueryInfo
->
interval
.
intervalUnit
!=
'n'
&&
pQueryInfo
->
interval
.
intervalUnit
!=
'y'
&&
pQueryInfo
->
interval
.
sliding
<
minSlidingTime
)
{
tscWarn
(
"
%p stream:%p, original sliding value:%"
PRId64
" too small, reset to:%"
PRId64
,
pSql
,
pStream
,
tscWarn
(
"
0x%"
PRIx64
" stream:%p, original sliding value:%"
PRId64
" too small, reset to:%"
PRId64
,
pSql
->
self
,
pStream
,
pQueryInfo
->
interval
.
sliding
,
minSlidingTime
);
pQueryInfo
->
interval
.
sliding
=
minSlidingTime
;
}
if
(
pQueryInfo
->
interval
.
sliding
>
pQueryInfo
->
interval
.
interval
)
{
tscWarn
(
"
%p stream:%p, sliding value:%"
PRId64
" can not be larger than interval range, reset to:%"
PRId64
,
pSql
,
pStream
,
tscWarn
(
"
0x%"
PRIx64
" stream:%p, sliding value:%"
PRId64
" can not be larger than interval range, reset to:%"
PRId64
,
pSql
->
self
,
pStream
,
pQueryInfo
->
interval
.
sliding
,
pQueryInfo
->
interval
.
interval
);
pQueryInfo
->
interval
.
sliding
=
pQueryInfo
->
interval
.
interval
;
...
...
@@ -483,32 +491,31 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
static
int64_t
tscGetStreamStartTimestamp
(
SSqlObj
*
pSql
,
SSqlStream
*
pStream
,
int64_t
stime
)
{
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
if
(
stime
==
INT64_MIN
)
{
return
stime
;
}
if
(
pStream
->
isProject
)
{
// no data in table, flush all data till now to destination meter, 10sec delay
pStream
->
interval
.
interval
=
tsProjectExecInterval
;
pStream
->
interval
.
sliding
=
tsProjectExecInterval
;
if
(
stime
!=
0
)
{
// first projection start from the latest event timestamp
if
(
stime
!=
INT64_MIN
)
{
// first projection start from the latest event timestamp
assert
(
stime
>=
pQueryInfo
->
window
.
skey
);
stime
+=
1
;
// exclude the last records from table
}
else
{
stime
=
pQueryInfo
->
window
.
skey
;
}
}
else
{
// timewindow based aggregation stream
if
(
stime
==
0
)
{
// no data in meter till now
if
(
stime
==
INT64_MIN
)
{
// no data in meter till now
if
(
pQueryInfo
->
window
.
skey
!=
INT64_MIN
)
{
stime
=
pQueryInfo
->
window
.
skey
;
}
else
{
return
stime
;
}
stime
=
taosTimeTruncate
(
stime
,
&
pStream
->
interval
,
pStream
->
precision
);
}
else
{
int64_t
newStime
=
taosTimeTruncate
(
stime
,
&
pStream
->
interval
,
pStream
->
precision
);
if
(
newStime
!=
stime
)
{
tscWarn
(
"
%p stream:%p, last timestamp:%"
PRId64
", reset to:%"
PRId64
,
pSql
,
pStream
,
stime
,
newStime
);
tscWarn
(
"
0x%"
PRIx64
" stream:%p, last timestamp:%"
PRId64
", reset to:%"
PRId64
,
pSql
->
self
,
pStream
,
stime
,
newStime
);
stime
=
newStime
;
}
}
...
...
@@ -539,7 +546,7 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
pSql
->
res
.
code
=
code
;
tscError
(
"
%p open stream failed, sql:%s, reason:%s, code:%s"
,
pSql
,
pSql
->
sqlstr
,
pCmd
->
payload
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" open stream failed, sql:%s, reason:%s, code:%s"
,
pSql
->
self
,
pSql
->
sqlstr
,
pCmd
->
payload
,
tstrerror
(
code
));
pStream
->
fp
(
pStream
->
param
,
NULL
,
NULL
);
return
;
...
...
@@ -558,7 +565,7 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
if
(
tscSetSlidingWindowInfo
(
pSql
,
pStream
)
!=
TSDB_CODE_SUCCESS
)
{
pSql
->
res
.
code
=
code
;
tscError
(
"
%p stream %p open failed, since the interval value is incorrect"
,
pSql
,
pStream
);
tscError
(
"
0x%"
PRIx64
" stream %p open failed, since the interval value is incorrect"
,
pSql
->
self
,
pStream
);
pStream
->
fp
(
pStream
->
param
,
NULL
,
NULL
);
return
;
}
...
...
@@ -598,7 +605,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
SSqlStream
*
pStream
=
(
SSqlStream
*
)
calloc
(
1
,
sizeof
(
SSqlStream
));
if
(
pStream
==
NULL
)
{
tscError
(
"
%p open stream failed, sql:%s, reason:%s, code:0x%08x"
,
pSql
,
sqlstr
,
pCmd
->
payload
,
pRes
->
code
);
tscError
(
"
0x%"
PRIx64
" open stream failed, sql:%s, reason:%s, code:0x%08x"
,
pSql
->
self
,
sqlstr
,
pCmd
->
payload
,
pRes
->
code
);
tscFreeSqlObj
(
pSql
);
return
NULL
;
}
...
...
@@ -614,7 +621,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
pSql
->
sqlstr
=
calloc
(
1
,
strlen
(
sqlstr
)
+
1
);
if
(
pSql
->
sqlstr
==
NULL
)
{
tscError
(
"
%p failed to malloc sql string buffer"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc sql string buffer"
,
pSql
->
self
);
tscFreeSqlObj
(
pSql
);
return
NULL
;
}
...
...
@@ -633,7 +640,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
if
(
code
==
TSDB_CODE_SUCCESS
)
{
tscCreateStream
(
pStream
,
pSql
,
code
);
}
else
if
(
code
!=
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
tscError
(
"
%p open stream failed, sql:%s, code:%s"
,
pSql
,
sqlstr
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" open stream failed, sql:%s, code:%s"
,
pSql
->
self
,
sqlstr
,
tstrerror
(
code
));
taosReleaseRef
(
tscObjRef
,
pSql
->
self
);
free
(
pStream
);
return
NULL
;
...
...
src/client/src/tscSub.c
浏览文件 @
188127bd
...
...
@@ -224,11 +224,11 @@ static SArray* getTableList( SSqlObj* pSql ) {
SSqlObj
*
pNew
=
taos_query
(
pSql
->
pTscObj
,
sql
);
if
(
pNew
==
NULL
)
{
tscError
(
"
failed to retrieve table id: cannot create new sql object."
);
tscError
(
"
0x%"
PRIx64
"failed to retrieve table id: cannot create new sql object."
,
pSql
->
self
);
return
NULL
;
}
else
if
(
taos_errno
(
pNew
)
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
failed to retrieve table id: %s"
,
tstrerror
(
taos_errno
(
pNew
)));
tscError
(
"
0x%"
PRIx64
"failed to retrieve table id,error: %s"
,
pSql
->
self
,
tstrerror
(
taos_errno
(
pNew
)));
return
NULL
;
}
...
...
src/client/src/tscSubquery.c
浏览文件 @
188127bd
...
...
@@ -673,7 +673,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
//prepare the subqueries object failed, abort
if
(
!
success
)
{
pSql
->
res
.
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tscError
(
"
%p failed to prepare subqueries objs for secondary phase query, numOfSub:%d, code:%d"
,
pSql
,
tscError
(
"
0x%"
PRIx64
" failed to prepare subqueries objs for secondary phase query, numOfSub:%d, code:%d"
,
pSql
->
self
,
pSql
->
subState
.
numOfSub
,
pSql
->
res
.
code
);
freeJoinSubqueryObj
(
pSql
);
...
...
@@ -717,7 +717,7 @@ void freeJoinSubqueryObj(SSqlObj* pSql) {
static
int32_t
quitAllSubquery
(
SSqlObj
*
pSqlSub
,
SSqlObj
*
pSqlObj
,
SJoinSupporter
*
pSupporter
)
{
if
(
subAndCheckDone
(
pSqlSub
,
pSqlObj
,
pSupporter
->
subqueryIndex
))
{
tscError
(
"
%p all subquery return and query failed, global code:%s"
,
pSqlObj
,
tstrerror
(
pSqlObj
->
res
.
code
));
tscError
(
"
0x%"
PRIx64
" all subquery return and query failed, global code:%s"
,
pSqlObj
->
self
,
tstrerror
(
pSqlObj
->
res
.
code
));
freeJoinSubqueryObj
(
pSqlObj
);
return
0
;
}
...
...
@@ -801,7 +801,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr
STableIdInfo
item
=
{.
uid
=
tt
->
uid
,
.
tid
=
tt
->
tid
,
.
key
=
INT64_MIN
};
taosArrayPush
(
vgTables
,
&
item
);
tscTrace
(
"
%p tid:%d, uid:%"
PRIu64
",vgId:%d added"
,
pSql
,
tt
->
tid
,
tt
->
uid
,
tt
->
vgId
);
tscTrace
(
"
0x%"
PRIx64
" tid:%d, uid:%"
PRIu64
",vgId:%d added"
,
pSql
->
self
,
tt
->
tid
,
tt
->
uid
,
tt
->
vgId
);
prev
=
tt
;
}
...
...
@@ -880,7 +880,7 @@ static bool checkForDuplicateTagVal(SSchema* pColSchema, SJoinSupporter* p1, SSq
assert
(
prev
->
vgId
>=
1
&&
p
->
vgId
>=
1
);
if
(
doCompare
(
prev
->
tag
,
p
->
tag
,
pColSchema
->
type
,
pColSchema
->
bytes
)
==
0
)
{
tscError
(
"
%p join tags have same value for different table, free all sub SqlObj and quit"
,
pPSqlObj
);
tscError
(
"
0x%"
PRIx64
" join tags have same value for different table, free all sub SqlObj and quit"
,
pPSqlObj
->
self
);
pPSqlObj
->
res
.
code
=
TSDB_CODE_QRY_DUP_JOIN_KEY
;
return
false
;
}
...
...
@@ -1116,7 +1116,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
assert
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_TAG_FILTER_QUERY
));
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"
0x%"
PRIx64
" abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
->
self
,
numOfRows
,
pParentSql
->
res
.
code
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
...
...
@@ -1131,7 +1131,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
// todo retry if other subqueries are not failed
assert
(
numOfRows
<
0
&&
numOfRows
==
taos_errno
(
pSql
));
tscError
(
"
%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
tscError
(
"
0x%"
PRIx64
" sub query failed, code:%s, index:%d"
,
pSql
->
self
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
pParentSql
->
res
.
code
=
numOfRows
;
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
...
...
@@ -1150,7 +1150,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
// todo handle memory error
char
*
tmp
=
realloc
(
pSupporter
->
pIdTagList
,
length
);
if
(
tmp
==
NULL
)
{
tscError
(
"
%p failed to malloc memory"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to malloc memory"
,
pSql
->
self
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
...
...
@@ -1270,7 +1270,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
assert
(
!
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_SEC_STAGE
));
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"
0x%"
PRIx64
" abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
->
self
,
numOfRows
,
pParentSql
->
res
.
code
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
return
;
}
...
...
@@ -1284,7 +1284,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
if
(
taos_errno
(
pSql
)
!=
TSDB_CODE_SUCCESS
)
{
// todo retry if other subqueries are not failed yet
assert
(
numOfRows
<
0
&&
numOfRows
==
taos_errno
(
pSql
));
tscError
(
"
%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
tscError
(
"
0x%"
PRIx64
" sub query failed, code:%s, index:%d"
,
pSql
->
self
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
pParentSql
->
res
.
code
=
numOfRows
;
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
...
...
@@ -1300,7 +1300,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
pSupporter
->
f
=
fopen
(
pSupporter
->
path
,
"wb"
);
if
(
pSupporter
->
f
==
NULL
)
{
tscError
(
"
%p failed to create tmp file:%s, reason:%s"
,
pSql
,
pSupporter
->
path
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to create tmp file:%s, reason:%s"
,
pSql
->
self
,
pSupporter
->
path
,
strerror
(
errno
));
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
@@ -1320,7 +1320,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
STSBuf
*
pBuf
=
tsBufCreateFromFile
(
pSupporter
->
path
,
true
);
if
(
pBuf
==
NULL
)
{
// in error process, close the fd
tscError
(
"
%p invalid ts comp file from vnode, abort subquery, file size:%d"
,
pSql
,
numOfRows
);
tscError
(
"
0x%"
PRIx64
" invalid ts comp file from vnode, abort subquery, file size:%d"
,
pSql
->
self
,
numOfRows
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
...
...
@@ -1417,7 +1417,7 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"
0x%"
PRIx64
" abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
->
self
,
numOfRows
,
pParentSql
->
res
.
code
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
...
...
@@ -1432,7 +1432,7 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
assert
(
numOfRows
==
taos_errno
(
pSql
));
pParentSql
->
res
.
code
=
numOfRows
;
tscError
(
"
%p retrieve failed, index:%d, code:%s"
,
pSql
,
pSupporter
->
subqueryIndex
,
tstrerror
(
numOfRows
));
tscError
(
"
0x%"
PRIx64
" retrieve failed, index:%d, code:%s"
,
pSql
->
self
,
pSupporter
->
subqueryIndex
,
tstrerror
(
numOfRows
));
tscAsyncResultOnError
(
pParentSql
);
return
;
...
...
@@ -1762,7 +1762,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
// retrieve actual query results from vnode during the second stage join subquery
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
code
,
pParentSql
->
res
.
code
);
tscError
(
"
0x%"
PRIx64
" abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
->
self
,
code
,
pParentSql
->
res
.
code
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
...
...
@@ -1776,7 +1776,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
if
(
taos_errno
(
pSql
)
!=
TSDB_CODE_SUCCESS
)
{
assert
(
taos_errno
(
pSql
)
==
code
);
tscError
(
"
%p abort query, code:%s, global code:%s"
,
pSql
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
tscError
(
"
0x%"
PRIx64
" abort query, code:%s, global code:%s"
,
pSql
->
self
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
pParentSql
->
res
.
code
=
code
;
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
...
...
@@ -2011,7 +2011,7 @@ void tscHandleMasterJoinQuery(SSqlObj* pSql) {
SJoinSupporter
*
pSupporter
=
tscCreateJoinSupporter
(
pSql
,
i
);
if
(
pSupporter
==
NULL
)
{
// failed to create support struct, abort current query
tscError
(
"
%p tableIndex:%d, failed to allocate join support object, abort further query"
,
pSql
,
i
);
tscError
(
"
0x%"
PRIx64
" tableIndex:%d, failed to allocate join support object, abort further query"
,
pSql
->
self
,
i
);
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
goto
_error
;
}
...
...
@@ -2498,7 +2498,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
for
(;
i
<
pState
->
numOfSub
;
++
i
)
{
SRetrieveSupport
*
trs
=
(
SRetrieveSupport
*
)
calloc
(
1
,
sizeof
(
SRetrieveSupport
));
if
(
trs
==
NULL
)
{
tscError
(
"
%p failed to malloc buffer for SRetrieveSupport, orderOfSub:%d, reason:%s"
,
pSql
,
i
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to malloc buffer for SRetrieveSupport, orderOfSub:%d, reason:%s"
,
pSql
->
self
,
i
,
strerror
(
errno
));
break
;
}
...
...
@@ -2507,7 +2507,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
trs
->
localBuffer
=
(
tFilePage
*
)
calloc
(
1
,
nBufferSize
+
sizeof
(
tFilePage
));
if
(
trs
->
localBuffer
==
NULL
)
{
tscError
(
"
%p failed to malloc buffer for local buffer, orderOfSub:%d, reason:%s"
,
pSql
,
i
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to malloc buffer for local buffer, orderOfSub:%d, reason:%s"
,
pSql
->
self
,
i
,
strerror
(
errno
));
tfree
(
trs
);
break
;
}
...
...
@@ -2519,7 +2519,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
SSqlObj
*
pNew
=
tscCreateSTableSubquery
(
pSql
,
trs
,
NULL
);
if
(
pNew
==
NULL
)
{
tscError
(
"
%p failed to malloc buffer for subObj, orderOfSub:%d, reason:%s"
,
pSql
,
i
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to malloc buffer for subObj, orderOfSub:%d, reason:%s"
,
pSql
->
self
,
i
,
strerror
(
errno
));
tfree
(
trs
->
localBuffer
);
tfree
(
trs
);
break
;
...
...
@@ -2536,7 +2536,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
}
if
(
i
<
pState
->
numOfSub
)
{
tscError
(
"
%p failed to prepare subquery structure and launch subqueries"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to prepare subquery structure and launch subqueries"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tscLocalReducerEnvDestroy
(
pMemoryBuf
,
pDesc
,
pModel
,
pFinalModel
,
pState
->
numOfSub
);
...
...
@@ -2580,7 +2580,7 @@ static void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, i
static
void
tscAbortFurtherRetryRetrieval
(
SRetrieveSupport
*
trsupport
,
TAOS_RES
*
tres
,
int32_t
code
)
{
// set no disk space error info
tscError
(
"sub:
%p failed to flush data to disk, reason:%s"
,
tres
,
tstrerror
(
code
));
tscError
(
"sub:
0x%"
PRIx64
" failed to flush data to disk, reason:%s"
,
((
SSqlObj
*
)
tres
)
->
self
,
tstrerror
(
code
));
SSqlObj
*
pParentSql
=
trsupport
->
pParentSql
;
pParentSql
->
res
.
code
=
code
;
...
...
@@ -2605,7 +2605,7 @@ static int32_t tscReissueSubquery(SRetrieveSupport *oriTrs, SSqlObj *pSql, int32
const
uint32_t
nBufferSize
=
(
1u
<<
16u
);
// 64KB
trsupport
->
localBuffer
=
(
tFilePage
*
)
calloc
(
1
,
nBufferSize
+
sizeof
(
tFilePage
));
if
(
trsupport
->
localBuffer
==
NULL
)
{
tscError
(
"
%p failed to malloc buffer for local buffer, reason:%s"
,
pSql
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to malloc buffer for local buffer, reason:%s"
,
pSql
->
self
,
strerror
(
errno
));
tfree
(
trsupport
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -2620,13 +2620,13 @@ static int32_t tscReissueSubquery(SRetrieveSupport *oriTrs, SSqlObj *pSql, int32
// clear local saved number of results
trsupport
->
localBuffer
->
num
=
0
;
tscError
(
"
%p sub:%p retrieve/query failed, code:%s, orderOfSub:%d, retry:%d"
,
trsupport
->
pParentSql
,
pSql
,
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" retrieve/query failed, code:%s, orderOfSub:%d, retry:%d"
,
trsupport
->
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
code
),
subqueryIndex
,
trsupport
->
numOfRetry
);
SSqlObj
*
pNew
=
tscCreateSTableSubquery
(
trsupport
->
pParentSql
,
trsupport
,
pSql
);
if
(
pNew
==
NULL
)
{
tscError
(
"
%p sub:%p
failed to create new subquery due to error:%s, abort retry, vgId:%d, orderOfSub:%d"
,
oriTrs
->
pParentSql
,
pSql
,
tstrerror
(
terrno
),
pVgroup
->
vgId
,
oriTrs
->
subqueryIndex
);
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
"
failed to create new subquery due to error:%s, abort retry, vgId:%d, orderOfSub:%d"
,
oriTrs
->
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
terrno
),
pVgroup
->
vgId
,
oriTrs
->
subqueryIndex
);
pParentSql
->
res
.
code
=
terrno
;
oriTrs
->
numOfRetry
=
MAX_NUM_OF_SUBQUERY_RETRY
;
...
...
@@ -2680,7 +2680,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
if
(
numOfRows
>=
0
)
{
// current query is successful, but other sub query failed, still abort current query.
tscDebug
(
"0x%"
PRIx64
" sub:0x%"
PRIx64
" retrieve numOfRows:%d,orderOfSub:%d"
,
pParentSql
->
self
,
pSql
->
self
,
numOfRows
,
subqueryIndex
);
tscError
(
"
%p sub:%p abort further retrieval due to other queries failure,orderOfSub:%d,code:%s"
,
pParentSql
,
pSql
,
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" abort further retrieval due to other queries failure,orderOfSub:%d,code:%s"
,
pParentSql
->
self
,
pSql
->
self
,
subqueryIndex
,
tstrerror
(
pParentSql
->
res
.
code
));
}
else
{
if
(
trsupport
->
numOfRetry
++
<
MAX_NUM_OF_SUBQUERY_RETRY
&&
pParentSql
->
res
.
code
==
TSDB_CODE_SUCCESS
)
{
...
...
@@ -2692,7 +2692,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
}
}
else
{
// reach the maximum retry count, abort
atomic_val_compare_exchange_32
(
&
pParentSql
->
res
.
code
,
TSDB_CODE_SUCCESS
,
numOfRows
);
tscError
(
"
%p sub:%p retrieve failed,code:%s,orderOfSub:%d failed.no more retry,set global code:%s"
,
pParentSql
,
pSql
,
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" retrieve failed,code:%s,orderOfSub:%d failed.no more retry,set global code:%s"
,
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
numOfRows
),
subqueryIndex
,
tstrerror
(
pParentSql
->
res
.
code
));
}
}
...
...
@@ -2705,7 +2705,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
}
// all subqueries are failed
tscError
(
"
%p retrieve from %d vnode(s) completed,code:%s.FAILED."
,
pParentSql
,
pState
->
numOfSub
,
tscError
(
"
0x%"
PRIx64
" retrieve from %d vnode(s) completed,code:%s.FAILED."
,
pParentSql
->
self
,
pState
->
numOfSub
,
tstrerror
(
pParentSql
->
res
.
code
));
// release allocated resource
...
...
@@ -2753,7 +2753,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
#endif
if
(
tsTotalTmpDirGB
!=
0
&&
tsAvailTmpDirectorySpace
<
tsReservedTmpDirectorySpace
)
{
tscError
(
"
%p sub:%p client disk space remain %.3f GB, need at least %.3f GB, stop query"
,
pParentSql
,
pSql
,
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" client disk space remain %.3f GB, need at least %.3f GB, stop query"
,
pParentSql
->
self
,
pSql
->
self
,
tsAvailTmpDirectorySpace
,
tsReservedTmpDirectorySpace
);
tscAbortFurtherRetryRetrieval
(
trsupport
,
pSql
,
TSDB_CODE_TSC_NO_DISKSPACE
);
return
;
...
...
@@ -2838,7 +2838,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
}
if
(
trsupport
->
numOfRetry
++
<
MAX_NUM_OF_SUBQUERY_RETRY
)
{
tscError
(
"
%p sub:%p failed code:%s, retry:%d"
,
pParentSql
,
pSql
,
tstrerror
(
numOfRows
),
trsupport
->
numOfRetry
);
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" failed code:%s, retry:%d"
,
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
numOfRows
),
trsupport
->
numOfRetry
);
int32_t
sent
=
0
;
...
...
@@ -2866,8 +2866,8 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
pParentSql
->
self
,
pSql
,
pRes
->
numOfRows
,
pState
->
numOfRetrievedRows
,
pSql
->
epSet
.
fqdn
[
pSql
->
epSet
.
inUse
],
idx
);
if
(
num
>
tsMaxNumOfOrderedResults
&&
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
tscError
(
"
%p sub:%p
num of OrderedRes is too many, max allowed:%"
PRId32
" , current:%"
PRId64
,
pParentSql
,
pSql
,
tsMaxNumOfOrderedResults
,
num
);
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
"
num of OrderedRes is too many, max allowed:%"
PRId32
" , current:%"
PRId64
,
pParentSql
->
self
,
pSql
->
self
,
tsMaxNumOfOrderedResults
,
num
);
tscAbortFurtherRetryRetrieval
(
trsupport
,
tres
,
TSDB_CODE_TSC_SORTED_RES_TOO_MANY
);
return
;
}
...
...
@@ -2882,7 +2882,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
// no disk space for tmp directory
if
(
tsTotalTmpDirGB
!=
0
&&
tsAvailTmpDirectorySpace
<
tsReservedTmpDirectorySpace
)
{
tscError
(
"
%p sub:%p client disk space remain %.3f GB, need at least %.3f GB, stop query"
,
pParentSql
,
pSql
,
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" client disk space remain %.3f GB, need at least %.3f GB, stop query"
,
pParentSql
->
self
,
pSql
->
self
,
tsAvailTmpDirectorySpace
,
tsReservedTmpDirectorySpace
);
tscAbortFurtherRetryRetrieval
(
trsupport
,
tres
,
TSDB_CODE_TSC_NO_DISKSPACE
);
return
;
...
...
@@ -2951,8 +2951,8 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
// stable query killed or other subquery failed, all query stopped
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
trsupport
->
numOfRetry
=
MAX_NUM_OF_SUBQUERY_RETRY
;
tscError
(
"
%p query cancelled or failed, sub:%p
, vgId:%d, orderOfSub:%d, code:%s, global code:%s"
,
pParentSql
,
pSql
,
pVgroup
->
vgId
,
trsupport
->
subqueryIndex
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
tscError
(
"
0x%"
PRIx64
" query cancelled or failed, sub:0x%"
PRIx64
"
, vgId:%d, orderOfSub:%d, code:%s, global code:%s"
,
pParentSql
->
self
,
pSql
->
self
,
pVgroup
->
vgId
,
trsupport
->
subqueryIndex
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
tscHandleSubqueryError
(
param
,
tres
,
code
);
return
;
...
...
@@ -2969,7 +2969,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
assert
(
code
==
taos_errno
(
pSql
));
if
(
trsupport
->
numOfRetry
++
<
MAX_NUM_OF_SUBQUERY_RETRY
)
{
tscError
(
"
%p sub:%p failed code:%s, retry:%d"
,
pParentSql
,
pSql
,
tstrerror
(
code
),
trsupport
->
numOfRetry
);
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" failed code:%s, retry:%d"
,
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
code
),
trsupport
->
numOfRetry
);
int32_t
sent
=
0
;
...
...
@@ -2978,7 +2978,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
return
;
}
}
else
{
tscError
(
"
%p sub:%p reach the max retry times, set global code:%s"
,
pParentSql
,
pSql
,
tstrerror
(
code
));
tscError
(
"
0x%"
PRIx64
" sub:0x%"
PRIx64
" reach the max retry times, set global code:%s"
,
pParentSql
->
self
,
pSql
->
self
,
tstrerror
(
code
));
atomic_val_compare_exchange_32
(
&
pParentSql
->
res
.
code
,
TSDB_CODE_SUCCESS
,
code
);
// set global code and abort
}
...
...
@@ -2998,7 +2998,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
static
bool
needRetryInsert
(
SSqlObj
*
pParentObj
,
int32_t
numOfSub
)
{
if
(
pParentObj
->
retry
>
pParentObj
->
maxRetry
)
{
tscError
(
"
%p max retry reached, abort the retry effort"
,
pParentObj
);
tscError
(
"
0x%"
PRIx64
" max retry reached, abort the retry effort"
,
pParentObj
->
self
);
return
false
;
}
...
...
@@ -3090,7 +3090,7 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
}
}
tscError
(
"
%p Async insertion completed, total inserted:%d rows, numOfFailed:%d, numOfTotal:%d"
,
pParentObj
,
tscError
(
"
0x%"
PRIx64
" Async insertion completed, total inserted:%d rows, numOfFailed:%d, numOfTotal:%d"
,
pParentObj
->
self
,
pParentObj
->
res
.
numOfRows
,
numOfFailed
,
numOfSub
);
tscDebug
(
"0x%"
PRIx64
" cleanup %d tableMeta in hashTable"
,
pParentObj
->
self
,
pParentObj
->
cmd
.
numOfTables
);
...
...
@@ -3207,7 +3207,7 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
SSqlObj
*
pNew
=
createSimpleSubObj
(
pSql
,
multiVnodeInsertFinalize
,
pSupporter
,
TSDB_SQL_INSERT
);
if
(
pNew
==
NULL
)
{
tscError
(
"
%p failed to malloc buffer for subObj, orderOfSub:%d, reason:%s"
,
pSql
,
numOfSub
,
strerror
(
errno
));
tscError
(
"
0x%"
PRIx64
" failed to malloc buffer for subObj, orderOfSub:%d, reason:%s"
,
pSql
->
self
,
numOfSub
,
strerror
(
errno
));
goto
_error
;
}
...
...
@@ -3231,7 +3231,7 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
}
if
(
numOfSub
<
pSql
->
subState
.
numOfSub
)
{
tscError
(
"
%p failed to prepare subObj structure and launch sub-insertion"
,
pSql
);
tscError
(
"
0x%"
PRIx64
" failed to prepare subObj structure and launch sub-insertion"
,
pSql
->
self
);
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
goto
_error
;
}
...
...
src/client/src/tscUtil.c
浏览文件 @
188127bd
...
...
@@ -913,7 +913,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, bool freeBlockMap) {
int32_t
ret
=
tscGetDataBlockFromList
(
pVnodeDataBlockHashList
,
pOneTableBlock
->
vgId
,
TSDB_PAYLOAD_SIZE
,
INSERT_HEAD_SIZE
,
0
,
&
pOneTableBlock
->
tableName
,
pOneTableBlock
->
pTableMeta
,
&
dataBuf
,
pVnodeDataBlockList
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p failed to prepare the data block buffer for merging table data, code:%d"
,
pSql
,
ret
);
tscError
(
"
0x%"
PRIx64
" failed to prepare the data block buffer for merging table data, code:%d"
,
pSql
->
self
,
ret
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
return
ret
;
...
...
@@ -932,7 +932,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, bool freeBlockMap) {
dataBuf
->
pData
=
tmp
;
memset
(
dataBuf
->
pData
+
dataBuf
->
size
,
0
,
dataBuf
->
nAllocSize
-
dataBuf
->
size
);
}
else
{
// failed to allocate memory, free already allocated memory and return error code
tscError
(
"
%p failed to allocate memory for merging submit block, size:%d"
,
pSql
,
dataBuf
->
nAllocSize
);
tscError
(
"
0x%"
PRIx64
" failed to allocate memory for merging submit block, size:%d"
,
pSql
->
self
,
dataBuf
->
nAllocSize
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
...
...
@@ -2115,7 +2115,7 @@ void registerSqlObj(SSqlObj* pSql) {
SSqlObj
*
createSimpleSubObj
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
,
void
*
param
,
int32_t
cmd
)
{
SSqlObj
*
pNew
=
(
SSqlObj
*
)
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
pNew
==
NULL
)
{
tscError
(
"
%p new subquery failed, tableIndex:%d"
,
pSql
,
0
);
tscError
(
"
0x%"
PRIx64
" new subquery failed, tableIndex:%d"
,
pSql
->
self
,
0
);
return
NULL
;
}
...
...
@@ -2129,7 +2129,7 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
int32_t
code
=
copyTagData
(
&
pNew
->
cmd
.
tagData
,
&
pSql
->
cmd
.
tagData
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p new subquery failed, unable to malloc tag data, tableIndex:%d"
,
pSql
,
0
);
tscError
(
"
0x%"
PRIx64
" new subquery failed, unable to malloc tag data, tableIndex:%d"
,
pSql
->
self
,
0
);
free
(
pNew
);
return
NULL
;
}
...
...
@@ -2206,7 +2206,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
SSqlObj
*
pNew
=
(
SSqlObj
*
)
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
pNew
==
NULL
)
{
tscError
(
"
%p new subquery failed, tableIndex:%d"
,
pSql
,
tableIndex
);
tscError
(
"
0x%"
PRIx64
" new subquery failed, tableIndex:%d"
,
pSql
->
self
,
tableIndex
);
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
NULL
;
}
...
...
@@ -2295,7 +2295,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
}
if
(
tscAllocPayload
(
pnCmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
)
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"
%p new subquery failed, tableIndex:%d, vgroupIndex:%d"
,
pSql
,
tableIndex
,
pTableMetaInfo
->
vgroupIndex
);
tscError
(
"
0x%"
PRIx64
" new subquery failed, tableIndex:%d, vgroupIndex:%d"
,
pSql
->
self
,
tableIndex
,
pTableMetaInfo
->
vgroupIndex
);
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
goto
_error
;
}
...
...
@@ -2346,7 +2346,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
// this case cannot be happened
if
(
pFinalInfo
->
pTableMeta
==
NULL
)
{
tscError
(
"
%p new subquery failed since no tableMeta, name:%s"
,
pSql
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
));
tscError
(
"
0x%"
PRIx64
" new subquery failed since no tableMeta, name:%s"
,
pSql
->
self
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
));
if
(
pPrevSql
!=
NULL
)
{
// pass the previous error to client
assert
(
pPrevSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
);
...
...
src/common/src/tglobal.c
浏览文件 @
188127bd
...
...
@@ -139,7 +139,7 @@ int32_t tsTableIncStepPerVnode = TSDB_TABLES_STEP;
int8_t
tsEnableBalance
=
1
;
int8_t
tsAlternativeRole
=
0
;
int32_t
tsBalanceInterval
=
300
;
// seconds
int32_t
tsOfflineThreshold
=
86400
*
10
0
;
// seconds 10
0 days
int32_t
tsOfflineThreshold
=
86400
*
10
;
// seconds of 1
0 days
int32_t
tsMnodeEqualVnodeNum
=
4
;
int8_t
tsEnableFlowCtrl
=
1
;
int8_t
tsEnableSlaveQuery
=
1
;
...
...
src/common/src/tvariant.c
浏览文件 @
188127bd
...
...
@@ -48,6 +48,13 @@ void tVariantCreate(tVariant *pVar, SStrToken *token) {
case
TSDB_DATA_TYPE_INT
:{
ret
=
tStrToInteger
(
token
->
z
,
token
->
type
,
token
->
n
,
&
pVar
->
i64
,
true
);
if
(
ret
!=
0
)
{
SStrToken
t
=
{
0
};
tSQLGetToken
(
token
->
z
,
&
t
.
type
);
if
(
t
.
type
==
TK_MINUS
)
{
// it is a signed number which is greater than INT64_MAX or less than INT64_MIN
pVar
->
nType
=
-
1
;
// -1 means error type
return
;
}
// data overflow, try unsigned parse the input number
ret
=
tStrToInteger
(
token
->
z
,
token
->
type
,
token
->
n
,
&
pVar
->
i64
,
false
);
if
(
ret
!=
0
)
{
...
...
go
@
7a26c432
比较
d9975135
...
7a26c432
Subproject commit
d99751356e285696f57bc604304ffafd10287439
Subproject commit
7a26c432f8b4203e42344ff3290b9b9b01b983d5
src/kit/taosdemo/taosdemo.c
浏览文件 @
188127bd
...
...
@@ -81,7 +81,7 @@ enum QUERY_MODE {
#define MAX_DB_NAME_SIZE 64
#define MAX_HOSTNAME_SIZE 64
#define MAX_TB_NAME_SIZE 64
#define MAX_DATA_SIZE
16000
#define MAX_DATA_SIZE
(16*1024)
#define MAX_NUM_DATATYPE 10
#define OPT_ABORT 1
/* –abort */
#define STRING_LEN 60000
...
...
@@ -210,13 +210,13 @@ typedef struct SArguments_S {
int
len_of_binary
;
int
num_of_CPR
;
int
num_of_threads
;
int
insert_interval
;
int
query_times
;
int
interlace_rows
;
int
num_of_RPR
;
int
max_sql_len
;
int
num_of_tables
;
int
num_of_DPT
;
int
64_t
insert_interval
;
int
64_t
query_times
;
int
64_t
interlace_rows
;
int
64_t
num_of_RPR
;
// num_of_records_per_req
int
64_t
max_sql_len
;
int
64_t
num_of_tables
;
int
64_t
num_of_DPT
;
int
abort
;
int
disorderRatio
;
// 0: no disorder, >0: x%
int
disorderRange
;
// ms or us by database precision
...
...
@@ -235,25 +235,25 @@ typedef struct SColumn_S {
typedef
struct
SSuperTable_S
{
char
sTblName
[
MAX_TB_NAME_SIZE
+
1
];
int
childTblCount
;
int
64_t
childTblCount
;
bool
childTblExists
;
// 0: no, 1: yes
int
batchCreateTableNum
;
// 0: no batch, > 0: batch table number in one sql
int
64_t
batchCreateTableNum
;
// 0: no batch, > 0: batch table number in one sql
int8_t
autoCreateTable
;
// 0: create sub table, 1: auto create sub table
char
childTblPrefix
[
MAX_TB_NAME_SIZE
];
char
dataSource
[
MAX_TB_NAME_SIZE
+
1
];
// rand_gen or sample
char
insertMode
[
MAX_TB_NAME_SIZE
];
// taosc, restful
int
childTblLimit
;
int
childTblOffset
;
int
64_t
childTblLimit
;
int
64_t
childTblOffset
;
int
multiThreadWriteOneTbl
;
// 0: no, 1: yes
int
interlaceRows
;
//
//
int multiThreadWriteOneTbl; // 0: no, 1: yes
int
64_t
interlaceRows
;
//
int
disorderRatio
;
// 0: no disorder, >0: x%
int
disorderRange
;
// ms or us by database precision
int
maxSqlLen
;
//
int
64_t
maxSqlLen
;
//
int
insertInterval
;
// insert interval, will override global insert interval
int64_t
insertRows
;
// 0: no limit
int
timeStampStep
;
int
64_t
insertInterval
;
// insert interval, will override global insert interval
int64_t
insertRows
;
int
64_t
timeStampStep
;
char
startTimestamp
[
MAX_TB_NAME_SIZE
];
char
sampleFormat
[
MAX_TB_NAME_SIZE
];
// csv, json
char
sampleFile
[
MAX_FILE_NAME_LEN
+
1
];
...
...
@@ -266,8 +266,8 @@ typedef struct SSuperTable_S {
char
*
childTblName
;
char
*
colsOfCreateChildTable
;
int
lenOfOneRow
;
int
lenOfTagOfOneRow
;
int
64_t
lenOfOneRow
;
int
64_t
lenOfTagOfOneRow
;
char
*
sampleDataBuf
;
//int sampleRowCount;
...
...
@@ -279,8 +279,8 @@ typedef struct SSuperTable_S {
int
tagUsePos
;
// statistics
int64_t
totalInsertRows
;
int64_t
totalAffectedRows
;
int64_t
totalInsertRows
;
int64_t
totalAffectedRows
;
}
SSuperTable
;
typedef
struct
{
...
...
@@ -327,7 +327,7 @@ typedef struct SDataBase_S {
char
dbName
[
MAX_DB_NAME_SIZE
];
bool
drop
;
// 0: use exists, 1: if exists, drop then new create
SDbCfg
dbCfg
;
int
superTblCount
;
int
64_t
superTblCount
;
SSuperTable
superTbls
[
MAX_SUPER_TABLE_COUNT
];
}
SDataBase
;
...
...
@@ -349,44 +349,44 @@ typedef struct SDbs_S {
SDataBase
db
[
MAX_DB_COUNT
];
// statistics
int64_t
totalInsertRows
;
int64_t
totalAffectedRows
;
int64_t
totalInsertRows
;
int64_t
totalAffectedRows
;
}
SDbs
;
typedef
struct
SpecifiedQueryInfo_S
{
int
queryInterval
;
// 0: unlimit > 0 loop/s
int
concurrent
;
int
sqlCount
;
int
64_t
queryInterval
;
// 0: unlimit > 0 loop/s
int
64_t
concurrent
;
int
64_t
sqlCount
;
int
mode
;
// 0: sync, 1: async
int
subscribeInterval
;
// ms
int
queryTimes
;
int
64_t
subscribeInterval
;
// ms
int
64_t
queryTimes
;
int
subscribeRestart
;
int
subscribeKeepProgress
;
char
sql
[
MAX_QUERY_SQL_COUNT
][
MAX_QUERY_SQL_LENGTH
+
1
];
char
result
[
MAX_QUERY_SQL_COUNT
][
MAX_FILE_NAME_LEN
+
1
];
TAOS_SUB
*
tsub
[
MAX_QUERY_SQL_COUNT
];
int
totalQueried
;
int
64_t
totalQueried
;
}
SpecifiedQueryInfo
;
typedef
struct
SuperQueryInfo_S
{
char
sTblName
[
MAX_TB_NAME_SIZE
+
1
];
int
queryInterval
;
// 0: unlimit > 0 loop/s
int
64_t
queryInterval
;
// 0: unlimit > 0 loop/s
int
threadCnt
;
int
mode
;
// 0: sync, 1: async
int
subscribeInterval
;
// ms
int
64_t
subscribeInterval
;
// ms
int
subscribeRestart
;
int
subscribeKeepProgress
;
int
queryTimes
;
int
childTblCount
;
int
64_t
queryTimes
;
int
64_t
childTblCount
;
char
childTblPrefix
[
MAX_TB_NAME_SIZE
];
int
sqlCount
;
int
64_t
sqlCount
;
char
sql
[
MAX_QUERY_SQL_COUNT
][
MAX_QUERY_SQL_LENGTH
+
1
];
char
result
[
MAX_QUERY_SQL_COUNT
][
MAX_FILE_NAME_LEN
+
1
];
TAOS_SUB
*
tsub
[
MAX_QUERY_SQL_COUNT
];
char
*
childTblName
;
int
totalQueried
;
int
64_t
totalQueried
;
}
SuperQueryInfo
;
typedef
struct
SQueryMetaInfo_S
{
...
...
@@ -400,7 +400,7 @@ typedef struct SQueryMetaInfo_S {
SpecifiedQueryInfo
specifiedQueryInfo
;
SuperQueryInfo
superQueryInfo
;
int
totalQueried
;
int
64_t
totalQueried
;
}
SQueryMetaInfo
;
typedef
struct
SThreadInfo_S
{
...
...
@@ -410,11 +410,11 @@ typedef struct SThreadInfo_S {
uint32_t
time_precision
;
char
fp
[
4096
];
char
tb_prefix
[
MAX_TB_NAME_SIZE
];
int
start_table_from
;
int
end_table_to
;
int
ntables
;
int
data_of_rate
;
u
int64_t
start_time
;
int
64_t
start_table_from
;
int
64_t
end_table_to
;
int
64_t
ntables
;
int
64_t
data_of_rate
;
int64_t
start_time
;
char
*
cols
;
bool
use_metric
;
SSuperTable
*
superTblInfo
;
...
...
@@ -427,7 +427,7 @@ typedef struct SThreadInfo_S {
int64_t
lastTs
;
// sample data
int
samplePos
;
int
64_t
samplePos
;
// statistics
int64_t
totalInsertRows
;
int64_t
totalAffectedRows
;
...
...
@@ -440,7 +440,7 @@ typedef struct SThreadInfo_S {
int64_t
minDelay
;
// query
int
querySeq
;
// sequence number of sql command
int
64_t
querySeq
;
// sequence number of sql command
}
threadInfo
;
#ifdef WINDOWS
...
...
@@ -1001,13 +1001,18 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
break
;
printf
(
"
\n
"
);
}
printf
(
"# Insertion interval: %d
\n
"
,
arguments
->
insert_interval
);
printf
(
"# Number of records per req: %d
\n
"
,
arguments
->
num_of_RPR
);
printf
(
"# Max SQL length: %d
\n
"
,
arguments
->
max_sql_len
);
printf
(
"# Insertion interval: %"
PRId64
"
\n
"
,
arguments
->
insert_interval
);
printf
(
"# Number of records per req: %"
PRId64
"
\n
"
,
arguments
->
num_of_RPR
);
printf
(
"# Max SQL length: %"
PRId64
"
\n
"
,
arguments
->
max_sql_len
);
printf
(
"# Length of Binary: %d
\n
"
,
arguments
->
len_of_binary
);
printf
(
"# Number of Threads: %d
\n
"
,
arguments
->
num_of_threads
);
printf
(
"# Number of Tables: %d
\n
"
,
arguments
->
num_of_tables
);
printf
(
"# Number of Data per Table: %d
\n
"
,
arguments
->
num_of_DPT
);
printf
(
"# Number of Tables: %"
PRId64
"
\n
"
,
arguments
->
num_of_tables
);
printf
(
"# Number of Data per Table: %"
PRId64
"
\n
"
,
arguments
->
num_of_DPT
);
printf
(
"# Database name: %s
\n
"
,
arguments
->
database
);
printf
(
"# Table prefix: %s
\n
"
,
arguments
->
tb_prefix
);
if
(
arguments
->
disorderRatio
)
{
...
...
@@ -1244,9 +1249,12 @@ static int printfInsertMeta() {
printf
(
"resultFile:
\033
[33m%s
\033
[0m
\n
"
,
g_Dbs
.
resultFile
);
printf
(
"thread num of insert data:
\033
[33m%d
\033
[0m
\n
"
,
g_Dbs
.
threadCount
);
printf
(
"thread num of create table:
\033
[33m%d
\033
[0m
\n
"
,
g_Dbs
.
threadCountByCreateTbl
);
printf
(
"top insert interval:
\033
[33m%d
\033
[0m
\n
"
,
g_args
.
insert_interval
);
printf
(
"number of records per req:
\033
[33m%d
\033
[0m
\n
"
,
g_args
.
num_of_RPR
);
printf
(
"max sql length:
\033
[33m%d
\033
[0m
\n
"
,
g_args
.
max_sql_len
);
printf
(
"top insert interval:
\033
[33m%"
PRId64
"
\033
[0m
\n
"
,
g_args
.
insert_interval
);
printf
(
"number of records per req:
\033
[33m%"
PRId64
"
\033
[0m
\n
"
,
g_args
.
num_of_RPR
);
printf
(
"max sql length:
\033
[33m%"
PRId64
"
\033
[0m
\n
"
,
g_args
.
max_sql_len
);
printf
(
"database count:
\033
[33m%d
\033
[0m
\n
"
,
g_Dbs
.
dbCount
);
...
...
@@ -1307,10 +1315,10 @@ static int printfInsertMeta() {
}
}
printf
(
" super table count:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" super table count:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTblCount
);
for
(
int
j
=
0
;
j
<
g_Dbs
.
db
[
i
].
superTblCount
;
j
++
)
{
printf
(
" super table[
\033
[33m%
d
\033
[0m]:
\n
"
,
j
);
for
(
int
64_t
j
=
0
;
j
<
g_Dbs
.
db
[
i
].
superTblCount
;
j
++
)
{
printf
(
" super table[
\033
[33m%
"
PRId64
"
\033
[0m]:
\n
"
,
j
);
printf
(
" stbName:
\033
[33m%s
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sTblName
);
...
...
@@ -1331,7 +1339,7 @@ static int printfInsertMeta() {
printf
(
" childTblExists:
\033
[33m%s
\033
[0m
\n
"
,
"error"
);
}
printf
(
" childTblCount:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" childTblCount:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
);
printf
(
" childTblPrefix:
\033
[33m%s
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblPrefix
);
...
...
@@ -1340,26 +1348,27 @@ static int printfInsertMeta() {
printf
(
" insertMode:
\033
[33m%s
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertMode
);
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblLimit
>
0
)
{
printf
(
" childTblLimit:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" childTblLimit:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblLimit
);
}
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblOffset
>=
0
)
{
printf
(
" childTblOffset:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" childTblOffset:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblOffset
);
}
printf
(
" insertRows:
\033
[33m%"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertRows
);
/*
if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) {
printf(" multiThreadWriteOneTbl: \033[33mno\033[0m\n");
}else {
printf(" multiThreadWriteOneTbl: \033[33myes\033[0m\n");
}
printf
(
" interlaceRows:
\033
[33m%d
\033
[0m
\n
"
,
*/
printf
(
" interlaceRows:
\033
[33m%"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
);
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
>
0
)
{
printf
(
" stable insert interval:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" stable insert interval:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
);
}
...
...
@@ -1367,9 +1376,9 @@ static int printfInsertMeta() {
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRange
);
printf
(
" disorderRatio:
\033
[33m%d
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRatio
);
printf
(
" maxSqlLen:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" maxSqlLen:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
maxSqlLen
);
printf
(
" timeStampStep:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
" timeStampStep:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
timeStampStep
);
printf
(
" startTimestamp:
\033
[33m%s
\033
[0m
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
startTimestamp
);
...
...
@@ -1433,8 +1442,8 @@ static void printfInsertMetaToFile(FILE* fp) {
fprintf
(
fp
,
"resultFile: %s
\n
"
,
g_Dbs
.
resultFile
);
fprintf
(
fp
,
"thread num of insert data: %d
\n
"
,
g_Dbs
.
threadCount
);
fprintf
(
fp
,
"thread num of create table: %d
\n
"
,
g_Dbs
.
threadCountByCreateTbl
);
fprintf
(
fp
,
"number of records per req: %
d
\n
"
,
g_args
.
num_of_RPR
);
fprintf
(
fp
,
"max sql length: %
d
\n
"
,
g_args
.
max_sql_len
);
fprintf
(
fp
,
"number of records per req: %
"
PRId64
"
\n
"
,
g_args
.
num_of_RPR
);
fprintf
(
fp
,
"max sql length: %
"
PRId64
"
\n
"
,
g_args
.
max_sql_len
);
fprintf
(
fp
,
"database count: %d
\n
"
,
g_Dbs
.
dbCount
);
for
(
int
i
=
0
;
i
<
g_Dbs
.
dbCount
;
i
++
)
{
...
...
@@ -1491,7 +1500,7 @@ static void printfInsertMetaToFile(FILE* fp) {
}
}
fprintf
(
fp
,
" super table count: %
d
\n
"
,
g_Dbs
.
db
[
i
].
superTblCount
);
fprintf
(
fp
,
" super table count: %
"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTblCount
);
for
(
int
j
=
0
;
j
<
g_Dbs
.
db
[
i
].
superTblCount
;
j
++
)
{
fprintf
(
fp
,
" super table[%d]:
\n
"
,
j
);
...
...
@@ -1513,7 +1522,7 @@ static void printfInsertMetaToFile(FILE* fp) {
fprintf
(
fp
,
" childTblExists: %s
\n
"
,
"error"
);
}
fprintf
(
fp
,
" childTblCount: %
d
\n
"
,
fprintf
(
fp
,
" childTblCount: %
"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
);
fprintf
(
fp
,
" childTblPrefix: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblPrefix
);
...
...
@@ -1523,26 +1532,30 @@ static void printfInsertMetaToFile(FILE* fp) {
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertMode
);
fprintf
(
fp
,
" insertRows: %"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertRows
);
fprintf
(
fp
,
" interlace rows: %
d
\n
"
,
fprintf
(
fp
,
" interlace rows: %
"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
);
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
>
0
)
{
fprintf
(
fp
,
" stable insert interval: %
d
\n
"
,
fprintf
(
fp
,
" stable insert interval: %
"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
);
}
/*
if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) {
fprintf(fp, " multiThreadWriteOneTbl: no\n");
}else {
fprintf(fp, " multiThreadWriteOneTbl: yes\n");
}
fprintf
(
fp
,
" interlaceRows: %d
\n
"
,
*/
fprintf
(
fp
,
" interlaceRows: %"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
);
fprintf
(
fp
,
" disorderRange: %d
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRange
);
fprintf
(
fp
,
" disorderRatio: %d
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRatio
);
fprintf
(
fp
,
" maxSqlLen: %d
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
maxSqlLen
);
fprintf
(
fp
,
" maxSqlLen: %"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
maxSqlLen
);
fprintf
(
fp
,
" timeStampStep: %d
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
timeStampStep
);
fprintf
(
fp
,
" startTimestamp: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
startTimestamp
);
fprintf
(
fp
,
" timeStampStep: %"
PRId64
"
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
timeStampStep
);
fprintf
(
fp
,
" startTimestamp: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
startTimestamp
);
fprintf
(
fp
,
" sampleFormat: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleFormat
);
fprintf
(
fp
,
" sampleFile: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleFile
);
fprintf
(
fp
,
" tagsFile: %s
\n
"
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagsFile
);
...
...
@@ -1597,21 +1610,21 @@ static void printfQueryMeta() {
printf
(
"
\n
"
);
printf
(
"specified table query info:
\n
"
);
printf
(
"query interval:
\033
[33m%
d
ms
\033
[0m
\n
"
,
printf
(
"query interval:
\033
[33m%
"
PRId64
"
ms
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
queryInterval
);
printf
(
"top query times:
\033
[33m%
d
\033
[0m
\n
"
,
g_args
.
query_times
);
printf
(
"concurrent:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"top query times:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_args
.
query_times
);
printf
(
"concurrent:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
concurrent
);
printf
(
"sqlCount:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"sqlCount:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
);
printf
(
"specified tbl query times:
\n
"
);
printf
(
"
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
queryTimes
);
if
(
SUBSCRIBE_TEST
==
g_args
.
test_mode
)
{
printf
(
"mod:
\033
[33m%d
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
mode
);
printf
(
"interval:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"interval:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
subscribeInterval
);
printf
(
"restart:
\033
[33m%d
\033
[0m
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
subscribeRestart
);
...
...
@@ -1619,27 +1632,27 @@ static void printfQueryMeta() {
g_queryInfo
.
specifiedQueryInfo
.
subscribeKeepProgress
);
}
for
(
int
i
=
0
;
i
<
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
;
i
++
)
{
printf
(
" sql[%
d
]:
\033
[33m%s
\033
[0m
\n
"
,
for
(
int
64_t
i
=
0
;
i
<
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
;
i
++
)
{
printf
(
" sql[%
"
PRId64
"
]:
\033
[33m%s
\033
[0m
\n
"
,
i
,
g_queryInfo
.
specifiedQueryInfo
.
sql
[
i
]);
}
printf
(
"
\n
"
);
printf
(
"super table query info:
\n
"
);
printf
(
"query interval:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"query interval:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
queryInterval
);
printf
(
"threadCnt:
\033
[33m%d
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
threadCnt
);
printf
(
"childTblCount:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"childTblCount:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
childTblCount
);
printf
(
"stable name:
\033
[33m%s
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
sTblName
);
printf
(
"stb query times:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"stb query times:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
queryTimes
);
if
(
SUBSCRIBE_TEST
==
g_args
.
test_mode
)
{
printf
(
"mod:
\033
[33m%d
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
mode
);
printf
(
"interval:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"interval:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
subscribeInterval
);
printf
(
"restart:
\033
[33m%d
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
subscribeRestart
);
...
...
@@ -1647,7 +1660,7 @@ static void printfQueryMeta() {
g_queryInfo
.
superQueryInfo
.
subscribeKeepProgress
);
}
printf
(
"sqlCount:
\033
[33m%
d
\033
[0m
\n
"
,
printf
(
"sqlCount:
\033
[33m%
"
PRId64
"
\033
[0m
\n
"
,
g_queryInfo
.
superQueryInfo
.
sqlCount
);
for
(
int
i
=
0
;
i
<
g_queryInfo
.
superQueryInfo
.
sqlCount
;
i
++
)
{
printf
(
" sql[%d]:
\033
[33m%s
\033
[0m
\n
"
,
...
...
@@ -2278,7 +2291,7 @@ static int calcRowLen(SSuperTable* superTbls) {
static
int
getChildNameOfSuperTableWithLimitAndOffset
(
TAOS
*
taos
,
char
*
dbName
,
char
*
sTblName
,
char
**
childTblNameOfSuperTbl
,
int
*
childTblCountOfSuperTbl
,
int
limit
,
in
t
offset
)
{
int
64_t
*
childTblCountOfSuperTbl
,
int64_t
limit
,
int64_
t
offset
)
{
char
command
[
BUFFER_SIZE
]
=
"
\0
"
;
char
limitBuf
[
100
]
=
"
\0
"
;
...
...
@@ -2289,7 +2302,8 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
char
*
childTblName
=
*
childTblNameOfSuperTbl
;
if
(
offset
>=
0
)
{
snprintf
(
limitBuf
,
100
,
" limit %d offset %d"
,
limit
,
offset
);
snprintf
(
limitBuf
,
100
,
" limit %"
PRId64
" offset %"
PRId64
""
,
limit
,
offset
);
}
//get all child table name use cmd: select tbname from superTblName;
...
...
@@ -2354,7 +2368,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
static
int
getAllChildNameOfSuperTable
(
TAOS
*
taos
,
char
*
dbName
,
char
*
sTblName
,
char
**
childTblNameOfSuperTbl
,
int
*
childTblCountOfSuperTbl
)
{
int
64_t
*
childTblCountOfSuperTbl
)
{
return
getChildNameOfSuperTableWithLimitAndOffset
(
taos
,
dbName
,
sTblName
,
childTblNameOfSuperTbl
,
childTblCountOfSuperTbl
,
...
...
@@ -2694,7 +2708,7 @@ static int createDatabasesAndStables() {
printf
(
"
\n
create database %s success!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
);
}
debugPrint
(
"%s()
%d supertbl count:%d
\n
"
,
debugPrint
(
"%s()
LN%d supertbl count:%"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
g_Dbs
.
db
[
i
].
superTblCount
);
int
validStbCount
=
0
;
...
...
@@ -2753,14 +2767,15 @@ static void* createTable(void *sarg)
int
len
=
0
;
int
batchNum
=
0
;
verbosePrint
(
"%s() LN%d: Creating table from %
d to %d
\n
"
,
verbosePrint
(
"%s() LN%d: Creating table from %
"
PRId64
" to %"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
pThreadInfo
->
start_table_from
,
pThreadInfo
->
end_table_to
);
for
(
int
i
=
pThreadInfo
->
start_table_from
;
i
<=
pThreadInfo
->
end_table_to
;
i
++
)
{
for
(
int64_t
i
=
pThreadInfo
->
start_table_from
;
i
<=
pThreadInfo
->
end_table_to
;
i
++
)
{
if
(
0
==
g_Dbs
.
use_metric
)
{
snprintf
(
buffer
,
buff_len
,
"create table if not exists %s.%s%
d
%s;"
,
"create table if not exists %s.%s%
"
PRId64
"
%s;"
,
pThreadInfo
->
db_name
,
g_args
.
tb_prefix
,
i
,
pThreadInfo
->
cols
);
...
...
@@ -2791,7 +2806,7 @@ static void* createTable(void *sarg)
}
len
+=
snprintf
(
buffer
+
len
,
buff_len
-
len
,
"if not exists %s.%s%
d
using %s.%s tags %s "
,
"if not exists %s.%s%
"
PRId64
"
using %s.%s tags %s "
,
pThreadInfo
->
db_name
,
superTblInfo
->
childTblPrefix
,
i
,
pThreadInfo
->
db_name
,
superTblInfo
->
sTblName
,
tagsValBuf
);
...
...
@@ -2815,7 +2830,7 @@ static void* createTable(void *sarg)
int64_t
currentPrintTime
=
taosGetTimestampMs
();
if
(
currentPrintTime
-
lastPrintTime
>
30
*
1000
)
{
printf
(
"thread[%d] already create %
d - %d
tables
\n
"
,
printf
(
"thread[%d] already create %
"
PRId64
" - %"
PRId64
"
tables
\n
"
,
pThreadInfo
->
threadID
,
pThreadInfo
->
start_table_from
,
i
);
lastPrintTime
=
currentPrintTime
;
}
...
...
@@ -2833,7 +2848,7 @@ static void* createTable(void *sarg)
}
static
int
startMultiThreadCreateChildTable
(
char
*
cols
,
int
threads
,
int
startFrom
,
in
t
ntables
,
char
*
cols
,
int
threads
,
int
64_t
startFrom
,
int64_
t
ntables
,
char
*
db_name
,
SSuperTable
*
superTblInfo
)
{
pthread_t
*
pids
=
malloc
(
threads
*
sizeof
(
pthread_t
));
...
...
@@ -2848,16 +2863,16 @@ static int startMultiThreadCreateChildTable(
threads
=
1
;
}
int
a
=
ntables
/
threads
;
int
64_t
a
=
ntables
/
threads
;
if
(
a
<
1
)
{
threads
=
ntables
;
a
=
1
;
}
int
b
=
0
;
int
64_t
b
=
0
;
b
=
ntables
%
threads
;
for
(
int
i
=
0
;
i
<
threads
;
i
++
)
{
for
(
int
64_t
i
=
0
;
i
<
threads
;
i
++
)
{
threadInfo
*
t_info
=
infos
+
i
;
t_info
->
threadID
=
i
;
tstrncpy
(
t_info
->
db_name
,
db_name
,
MAX_DB_NAME_SIZE
);
...
...
@@ -2949,7 +2964,7 @@ static void createChildTables() {
snprintf
(
tblColsBuf
+
len
,
MAX_SQL_SIZE
-
len
,
")"
);
verbosePrint
(
"%s() LN%d: dbName: %s num of tb: %
d
schema: %s
\n
"
,
verbosePrint
(
"%s() LN%d: dbName: %s num of tb: %
"
PRId64
"
schema: %s
\n
"
,
__func__
,
__LINE__
,
g_Dbs
.
db
[
i
].
dbName
,
g_args
.
num_of_tables
,
tblColsBuf
);
startMultiThreadCreateChildTable
(
...
...
@@ -3077,7 +3092,7 @@ static int readSampleFromCsvFileToMem(
}
if
(
readLen
>
superTblInfo
->
lenOfOneRow
)
{
printf
(
"sample row len[%d] overflow define schema len[%
d
], so discard this row
\n
"
,
printf
(
"sample row len[%d] overflow define schema len[%
"
PRId64
"
], so discard this row
\n
"
,
(
int32_t
)
readLen
,
superTblInfo
->
lenOfOneRow
);
continue
;
}
...
...
@@ -3344,9 +3359,9 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
// rows per table need be less than insert batch
if
(
g_args
.
interlace_rows
>
g_args
.
num_of_RPR
)
{
printf
(
"NOTICE: interlace rows value %
d > num_of_records_per_req %d
\n\n
"
,
printf
(
"NOTICE: interlace rows value %
"
PRId64
" > num_of_records_per_req %"
PRId64
"
\n\n
"
,
g_args
.
interlace_rows
,
g_args
.
num_of_RPR
);
printf
(
" interlace rows value will be set to num_of_records_per_req %
d
\n\n
"
,
printf
(
" interlace rows value will be set to num_of_records_per_req %
"
PRId64
"
\n\n
"
,
g_args
.
num_of_RPR
);
printf
(
" press Enter key to continue or Ctrl-C to stop."
);
(
void
)
getchar
();
...
...
@@ -3375,7 +3390,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if
(
numRecPerReq
&&
numRecPerReq
->
type
==
cJSON_Number
)
{
g_args
.
num_of_RPR
=
numRecPerReq
->
valueint
;
}
else
if
(
!
numRecPerReq
)
{
g_args
.
num_of_RPR
=
INT
32
_MAX
;
g_args
.
num_of_RPR
=
INT
64
_MAX
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, num_of_records_per_req not found
\n
"
,
__func__
,
__LINE__
);
...
...
@@ -3657,7 +3672,6 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
goto
PARSE_OVER
;
}
/*
cJSON
*
batchCreateTbl
=
cJSON_GetObjectItem
(
stbInfo
,
"batch_create_tbl_num"
);
if
(
batchCreateTbl
&&
batchCreateTbl
->
type
==
cJSON_Number
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
batchCreateTableNum
=
batchCreateTbl
->
valueint
;
...
...
@@ -3667,7 +3681,6 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
printf
(
"ERROR: failed to read json, batch_create_tbl_num not found
\n
"
);
goto
PARSE_OVER
;
}
*/
cJSON
*
childTblExists
=
cJSON_GetObjectItem
(
stbInfo
,
"child_table_exists"
);
// yes, no
if
(
childTblExists
...
...
@@ -3849,9 +3862,9 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
=
interlaceRows
->
valueint
;
// rows per table need be less than insert batch
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
>
g_args
.
num_of_RPR
)
{
printf
(
"NOTICE: db[%d].superTbl[%d]'s interlace rows value %
d > num_of_records_per_req %d
\n\n
"
,
printf
(
"NOTICE: db[%d].superTbl[%d]'s interlace rows value %
"
PRId64
" > num_of_records_per_req %"
PRId64
"
\n\n
"
,
i
,
j
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
,
g_args
.
num_of_RPR
);
printf
(
" interlace rows value will be set to num_of_records_per_req %
d
\n\n
"
,
printf
(
" interlace rows value will be set to num_of_records_per_req %
"
PRId64
"
\n\n
"
,
g_args
.
num_of_RPR
);
printf
(
" press Enter key to continue or Ctrl-C to stop."
);
(
void
)
getchar
();
...
...
@@ -3907,7 +3920,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if
(
insertInterval
&&
insertInterval
->
type
==
cJSON_Number
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
=
insertInterval
->
valueint
;
}
else
if
(
!
insertInterval
)
{
verbosePrint
(
"%s() LN%d: stable insert interval be overrided by global %
d
.
\n
"
,
verbosePrint
(
"%s() LN%d: stable insert interval be overrided by global %
"
PRId64
"
.
\n
"
,
__func__
,
__LINE__
,
g_args
.
insert_interval
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
=
g_args
.
insert_interval
;
}
else
{
...
...
@@ -4047,7 +4060,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
concurrent
&&
concurrent
->
type
==
cJSON_Number
)
{
g_queryInfo
.
specifiedQueryInfo
.
concurrent
=
concurrent
->
valueint
;
if
(
g_queryInfo
.
specifiedQueryInfo
.
concurrent
<=
0
)
{
errorPrint
(
"%s() LN%d, query sqlCount %
d or concurrent %d
is not correct.
\n
"
,
errorPrint
(
"%s() LN%d, query sqlCount %
"
PRId64
" or concurrent %"
PRId64
"
is not correct.
\n
"
,
__func__
,
__LINE__
,
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
,
g_queryInfo
.
specifiedQueryInfo
.
concurrent
);
goto
PARSE_OVER
;
...
...
@@ -4412,8 +4425,9 @@ static void postFreeResource() {
}
}
static
int
getRowDataFromSample
(
char
*
dataBuf
,
int
maxLen
,
int64_t
timestamp
,
SSuperTable
*
superTblInfo
,
int
*
sampleUsePos
)
{
static
int
getRowDataFromSample
(
char
*
dataBuf
,
int64_t
maxLen
,
int64_t
timestamp
,
SSuperTable
*
superTblInfo
,
int64_t
*
sampleUsePos
)
{
if
((
*
sampleUsePos
)
==
MAX_SAMPLES_ONCE_FROM_FILE
)
{
/* int ret = readSampleFromCsvFileToMem(superTblInfo);
if (0 != ret) {
...
...
@@ -4438,10 +4452,10 @@ static int getRowDataFromSample(char* dataBuf, int maxLen, int64_t timestamp,
return
dataLen
;
}
static
int
generateRowData
(
char
*
recBuf
,
int64_t
timestamp
,
SSuperTable
*
stbInfo
)
{
int
dataLen
=
0
;
static
int
64_t
generateRowData
(
char
*
recBuf
,
int64_t
timestamp
,
SSuperTable
*
stbInfo
)
{
int
64_t
dataLen
=
0
;
char
*
pstr
=
recBuf
;
int
maxLen
=
MAX_DATA_SIZE
;
int
64_t
maxLen
=
MAX_DATA_SIZE
;
dataLen
+=
snprintf
(
pstr
+
dataLen
,
maxLen
-
dataLen
,
"(%"
PRId64
", "
,
timestamp
);
...
...
@@ -4508,7 +4522,7 @@ static int generateRowData(char* recBuf, int64_t timestamp, SSuperTable* stbInfo
return
strlen
(
recBuf
);
}
static
int
32
_t
generateData
(
char
*
recBuf
,
char
**
data_type
,
static
int
64
_t
generateData
(
char
*
recBuf
,
char
**
data_type
,
int
num_of_cols
,
int64_t
timestamp
,
int
lenOfBinary
)
{
memset
(
recBuf
,
0
,
MAX_DATA_SIZE
);
char
*
pstr
=
recBuf
;
...
...
@@ -4574,7 +4588,7 @@ static int prepareSampleDataForSTable(SSuperTable *superTblInfo) {
sampleDataBuf
=
calloc
(
superTblInfo
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
1
);
if
(
sampleDataBuf
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to calloc %
d
Bytes, reason:%s
\n
"
,
errorPrint
(
"%s() LN%d, Failed to calloc %
"
PRId64
"
Bytes, reason:%s
\n
"
,
__func__
,
__LINE__
,
superTblInfo
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
strerror
(
errno
));
...
...
@@ -4595,7 +4609,7 @@ static int prepareSampleDataForSTable(SSuperTable *superTblInfo) {
return
0
;
}
static
int
execInsert
(
threadInfo
*
pThreadInfo
,
char
*
buffer
,
int
k
)
static
int
64_t
execInsert
(
threadInfo
*
pThreadInfo
,
char
*
buffer
,
int
k
)
{
int
affectedRows
;
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
...
...
@@ -4621,7 +4635,7 @@ static int execInsert(threadInfo *pThreadInfo, char *buffer, int k)
return
affectedRows
;
}
static
void
getTableName
(
char
*
pTblName
,
threadInfo
*
pThreadInfo
,
int
tableSeq
)
static
void
getTableName
(
char
*
pTblName
,
threadInfo
*
pThreadInfo
,
int
64_t
tableSeq
)
{
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
if
(
superTblInfo
)
{
...
...
@@ -4632,7 +4646,7 @@ static void getTableName(char *pTblName, threadInfo* pThreadInfo, int tableSeq)
(
tableSeq
-
superTblInfo
->
childTblOffset
)
*
TSDB_TABLE_NAME_LEN
);
}
else
{
verbosePrint
(
"[%d] %s() LN%d: from=%
d count=%d seq=%d
\n
"
,
verbosePrint
(
"[%d] %s() LN%d: from=%
"
PRId64
" count=%"
PRId64
" seq=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
pThreadInfo
->
start_table_from
,
pThreadInfo
->
ntables
,
tableSeq
);
...
...
@@ -4640,16 +4654,16 @@ static void getTableName(char *pTblName, threadInfo* pThreadInfo, int tableSeq)
superTblInfo
->
childTblName
+
tableSeq
*
TSDB_TABLE_NAME_LEN
);
}
}
else
{
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s%
d
"
,
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s%
"
PRId64
"
"
,
g_args
.
tb_prefix
,
tableSeq
);
}
}
static
int
generateDataTail
(
static
int
64_t
generateDataTail
(
SSuperTable
*
superTblInfo
,
int
batch
,
char
*
buffer
,
in
t
remainderBufLen
,
int64_t
insertRows
,
int64_t
startFrom
,
uint64_t
startTime
,
int
*
pSamplePos
,
in
t
*
dataLen
)
{
int
len
=
0
;
int
64_t
batch
,
char
*
buffer
,
int64_
t
remainderBufLen
,
int64_t
insertRows
,
int64_t
startFrom
,
int64_t
startTime
,
int64_t
*
pSamplePos
,
int64_
t
*
dataLen
)
{
int
64_t
len
=
0
;
int
ncols_per_record
=
1
;
// count first col ts
char
*
pstr
=
buffer
;
...
...
@@ -4662,14 +4676,14 @@ static int generateDataTail(
}
}
verbosePrint
(
"%s() LN%d batch=%
d
\n
"
,
__func__
,
__LINE__
,
batch
);
verbosePrint
(
"%s() LN%d batch=%
"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
batch
);
int
k
=
0
;
int
64_t
k
=
0
;
for
(
k
=
0
;
k
<
batch
;)
{
char
data
[
MAX_DATA_SIZE
];
memset
(
data
,
0
,
MAX_DATA_SIZE
);
int
retLen
=
0
;
int
64_t
retLen
=
0
;
if
(
superTblInfo
)
{
if
(
0
==
strncasecmp
(
superTblInfo
->
dataSource
,
...
...
@@ -4683,16 +4697,16 @@ static int generateDataTail(
}
else
if
(
0
==
strncasecmp
(
superTblInfo
->
dataSource
,
"rand"
,
strlen
(
"rand"
)))
{
int
randTail
=
superTblInfo
->
timeStampStep
*
k
;
int
64_t
randTail
=
superTblInfo
->
timeStampStep
*
k
;
if
(
superTblInfo
->
disorderRatio
>
0
)
{
int
rand_num
=
taosRandom
()
%
100
;
if
(
rand_num
<
superTblInfo
->
disorderRatio
)
{
randTail
=
(
randTail
+
(
taosRandom
()
%
superTblInfo
->
disorderRange
+
1
))
*
(
-
1
);
debugPrint
(
"rand data generated, back %
d
\n
"
,
randTail
);
debugPrint
(
"rand data generated, back %
"
PRId64
"
\n
"
,
randTail
);
}
}
u
int64_t
d
=
startTime
int64_t
d
=
startTime
+
randTail
;
retLen
=
generateRowData
(
data
,
...
...
@@ -4712,14 +4726,15 @@ static int generateDataTail(
char
**
data_type
=
g_args
.
datatype
;
int
lenOfBinary
=
g_args
.
len_of_binary
;
int
rand_num
=
taosRandom
()
%
100
;
int
randTail
;
int64_t
randTail
=
DEFAULT_TIMESTAMP_STEP
*
k
;
if
((
g_args
.
disorderRatio
!=
0
)
&&
(
rand_num
<
g_args
.
disorderRatio
))
{
randTail
=
(
DEFAULT_TIMESTAMP_STEP
*
k
+
(
taosRandom
()
%
g_args
.
disorderRange
+
1
))
*
(
-
1
);
debugPrint
(
"rand data generated, back %d
\n
"
,
randTail
);
if
(
g_args
.
disorderRatio
!=
0
)
{
int
rand_num
=
taosRandom
()
%
100
;
if
(
rand_num
<
g_args
.
disorderRatio
)
{
randTail
=
(
randTail
+
(
taosRandom
()
%
g_args
.
disorderRange
+
1
))
*
(
-
1
);
debugPrint
(
"rand data generated, back %"
PRId64
"
\n
"
,
randTail
);
}
}
else
{
randTail
=
DEFAULT_TIMESTAMP_STEP
*
k
;
}
...
...
@@ -4738,7 +4753,7 @@ static int generateDataTail(
remainderBufLen
-=
retLen
;
}
verbosePrint
(
"%s() LN%d len=%
d k=%d
\n
buffer=%s
\n
"
,
verbosePrint
(
"%s() LN%d len=%
"
PRId64
" k=%"
PRId64
"
\n
buffer=%s
\n
"
,
__func__
,
__LINE__
,
len
,
k
,
buffer
);
startFrom
++
;
...
...
@@ -4819,13 +4834,13 @@ static int generateSQLHead(char *tableName, int32_t tableSeq,
return
len
;
}
static
int
generateInterlaceDataBuffer
(
char
*
tableName
,
int
batchPerTbl
,
int
i
,
in
t
batchPerTblTimes
,
int
32
_t
tableSeq
,
static
int
64_t
generateInterlaceDataBuffer
(
char
*
tableName
,
int
64_t
batchPerTbl
,
int64_t
i
,
int64_
t
batchPerTblTimes
,
int
64
_t
tableSeq
,
threadInfo
*
pThreadInfo
,
char
*
buffer
,
int64_t
insertRows
,
int64_t
startTime
,
int
*
pRemainderBufLen
)
int
64_t
*
pRemainderBufLen
)
{
assert
(
buffer
);
char
*
pstr
=
buffer
;
...
...
@@ -4838,15 +4853,15 @@ static int generateInterlaceDataBuffer(
return
0
;
}
// generate data buffer
verbosePrint
(
"[%d] %s() LN%d i=%
d
buffer:
\n
%s
\n
"
,
verbosePrint
(
"[%d] %s() LN%d i=%
"
PRId64
"
buffer:
\n
%s
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
i
,
buffer
);
pstr
+=
headLen
;
*
pRemainderBufLen
-=
headLen
;
int
dataLen
=
0
;
int
64_t
dataLen
=
0
;
verbosePrint
(
"[%d] %s() LN%d i=%
d batchPerTblTimes=%d batchPerTbl = %d
\n
"
,
verbosePrint
(
"[%d] %s() LN%d i=%
"
PRId64
" batchPerTblTimes=%"
PRId64
" batchPerTbl = %"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
i
,
batchPerTblTimes
,
batchPerTbl
);
...
...
@@ -4858,7 +4873,7 @@ static int generateInterlaceDataBuffer(
startTime
=
1500000000000
;
}
int
k
=
generateDataTail
(
int
64_t
k
=
generateDataTail
(
superTblInfo
,
batchPerTbl
,
pstr
,
*
pRemainderBufLen
,
insertRows
,
0
,
startTime
,
...
...
@@ -4868,6 +4883,8 @@ static int generateInterlaceDataBuffer(
pstr
+=
dataLen
;
*
pRemainderBufLen
-=
dataLen
;
}
else
{
debugPrint
(
"%s() LN%d, generated data tail: %"
PRId64
", not equal batch per table: %"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
k
,
batchPerTbl
);
pstr
-=
headLen
;
pstr
[
0
]
=
'\0'
;
k
=
0
;
...
...
@@ -4878,11 +4895,11 @@ static int generateInterlaceDataBuffer(
static
int
generateProgressiveDataBuffer
(
char
*
tableName
,
int
32
_t
tableSeq
,
int
64
_t
tableSeq
,
threadInfo
*
pThreadInfo
,
char
*
buffer
,
int64_t
insertRows
,
int64_t
startFrom
,
int64_t
startTime
,
int
*
pSamplePos
,
int
*
pRemainderBufLen
)
int64_t
startFrom
,
int64_t
startTime
,
int
64_t
*
pSamplePos
,
int
64_t
*
pRemainderBufLen
)
{
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
...
...
@@ -4899,11 +4916,11 @@ static int generateProgressiveDataBuffer(
assert
(
buffer
!=
NULL
);
char
*
pstr
=
buffer
;
int
k
=
0
;
int
64_t
k
=
0
;
memset
(
buffer
,
0
,
*
pRemainderBufLen
);
int
headLen
=
generateSQLHead
(
tableName
,
tableSeq
,
pThreadInfo
,
superTblInfo
,
int
64_t
headLen
=
generateSQLHead
(
tableName
,
tableSeq
,
pThreadInfo
,
superTblInfo
,
buffer
,
*
pRemainderBufLen
);
if
(
headLen
<=
0
)
{
...
...
@@ -4912,7 +4929,7 @@ static int generateProgressiveDataBuffer(
pstr
+=
headLen
;
*
pRemainderBufLen
-=
headLen
;
int
dataLen
;
int
64_t
dataLen
;
k
=
generateDataTail
(
superTblInfo
,
g_args
.
num_of_RPR
,
pstr
,
*
pRemainderBufLen
,
insertRows
,
startFrom
,
startTime
,
...
...
@@ -4925,13 +4942,27 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
debugPrint
(
"[%d] %s() LN%d: ### interlace write
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
);
int64_t
insertRows
;
int64_t
interlaceRows
;
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
int64_t
insertRows
=
(
superTblInfo
)
?
superTblInfo
->
insertRows
:
g_args
.
num_of_DPT
;
int
interlaceRows
=
superTblInfo
?
superTblInfo
->
interlaceRows
:
g_args
.
interlace_rows
;
if
(
superTblInfo
)
{
insertRows
=
superTblInfo
->
insertRows
;
if
((
superTblInfo
->
interlaceRows
==
0
)
&&
(
g_args
.
interlace_rows
>
0
))
{
interlaceRows
=
g_args
.
interlace_rows
;
}
else
{
interlaceRows
=
superTblInfo
->
interlaceRows
;
}
}
else
{
insertRows
=
g_args
.
num_of_DPT
;
interlaceRows
=
g_args
.
interlace_rows
;
}
if
(
interlaceRows
>
insertRows
)
interlaceRows
=
insertRows
;
interlaceRows
=
insertRows
;
if
(
interlaceRows
>
g_args
.
num_of_RPR
)
interlaceRows
=
g_args
.
num_of_RPR
;
...
...
@@ -4947,10 +4978,10 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
// TODO: prompt tbl count multple interlace rows and batch
//
int
maxSqlLen
=
superTblInfo
?
superTblInfo
->
maxSqlLen
:
g_args
.
max_sql_len
;
int
64_t
maxSqlLen
=
superTblInfo
?
superTblInfo
->
maxSqlLen
:
g_args
.
max_sql_len
;
char
*
buffer
=
calloc
(
maxSqlLen
,
1
);
if
(
NULL
==
buffer
)
{
errorPrint
(
"%s() LN%d, Failed to alloc %
d
Bytes, reason:%s
\n
"
,
errorPrint
(
"%s() LN%d, Failed to alloc %
"
PRId64
"
Bytes, reason:%s
\n
"
,
__func__
,
__LINE__
,
maxSqlLen
,
strerror
(
errno
));
return
NULL
;
}
...
...
@@ -4960,20 +4991,20 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo
->
totalInsertRows
=
0
;
pThreadInfo
->
totalAffectedRows
=
0
;
int
nTimeStampStep
=
superTblInfo
?
superTblInfo
->
timeStampStep
:
DEFAULT_TIMESTAMP_STEP
;
int
64_t
nTimeStampStep
=
superTblInfo
?
superTblInfo
->
timeStampStep
:
DEFAULT_TIMESTAMP_STEP
;
int
insert_interval
=
superTblInfo
?
superTblInfo
->
insertInterval
:
g_args
.
insert_interval
;
u
int64_t
st
=
0
;
u
int64_t
et
=
0xffffffff
;
int64_t
st
=
0
;
int64_t
et
=
0xffffffff
;
int64_t
lastPrintTime
=
taosGetTimestampMs
();
int64_t
startTs
=
taosGetTimestampMs
();
int64_t
endTs
;
int
tableSeq
=
pThreadInfo
->
start_table_from
;
int
64_t
tableSeq
=
pThreadInfo
->
start_table_from
;
debugPrint
(
"[%d] %s() LN%d: start_table_from=%
d ntables=%d
insertRows=%"
PRId64
"
\n
"
,
debugPrint
(
"[%d] %s() LN%d: start_table_from=%
"
PRId64
" ntables=%"
PRId64
"
insertRows=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
pThreadInfo
->
start_table_from
,
pThreadInfo
->
ntables
,
insertRows
);
...
...
@@ -4981,9 +5012,9 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
assert
(
pThreadInfo
->
ntables
>
0
);
int
batchPerTbl
=
interlaceRows
;
int
64_t
batchPerTbl
=
interlaceRows
;
int
batchPerTblTimes
;
int
64_t
batchPerTblTimes
;
if
((
interlaceRows
>
0
)
&&
(
pThreadInfo
->
ntables
>
1
))
{
batchPerTblTimes
=
g_args
.
num_of_RPR
/
interlaceRows
;
...
...
@@ -4991,9 +5022,9 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
batchPerTblTimes
=
1
;
}
int
generatedRecPerTbl
=
0
;
int
64_t
generatedRecPerTbl
=
0
;
bool
flagSleep
=
true
;
int
sleepTimeTotal
=
0
;
int
64_t
sleepTimeTotal
=
0
;
char
*
strInsertInto
=
"insert into "
;
int
nInsertBufLen
=
strlen
(
strInsertInto
);
...
...
@@ -5005,7 +5036,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
}
// generate data
memset
(
buffer
,
0
,
maxSqlLen
);
int
remainderBufLen
=
maxSqlLen
;
int
64_t
remainderBufLen
=
maxSqlLen
;
char
*
pstr
=
buffer
;
...
...
@@ -5013,9 +5044,9 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pstr
+=
len
;
remainderBufLen
-=
len
;
int
recOfBatch
=
0
;
int
64_t
recOfBatch
=
0
;
for
(
int
i
=
0
;
i
<
batchPerTblTimes
;
i
++
)
{
for
(
int
64_t
i
=
0
;
i
<
batchPerTblTimes
;
i
++
)
{
getTableName
(
tableName
,
pThreadInfo
,
tableSeq
);
if
(
0
==
strlen
(
tableName
))
{
errorPrint
(
"[%d] %s() LN%d, getTableName return null
\n
"
,
...
...
@@ -5024,8 +5055,8 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
return
NULL
;
}
int
oldRemainderLen
=
remainderBufLen
;
int
generated
=
generateInterlaceDataBuffer
(
int
64_t
oldRemainderLen
=
remainderBufLen
;
int
64_t
generated
=
generateInterlaceDataBuffer
(
tableName
,
batchPerTbl
,
i
,
batchPerTblTimes
,
tableSeq
,
pThreadInfo
,
pstr
,
...
...
@@ -5034,7 +5065,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
&
remainderBufLen
);
if
(
generated
<
0
)
{
debugPrint
(
"[%d] %s() LN%d, generated data is %
d
\n
"
,
debugPrint
(
"[%d] %s() LN%d, generated data is %
"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
generated
);
goto
free_and_statistics_interlace
;
}
else
if
(
generated
==
0
)
{
...
...
@@ -5046,7 +5077,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pstr
+=
(
oldRemainderLen
-
remainderBufLen
);
// startTime += batchPerTbl * superTblInfo->timeStampStep;
pThreadInfo
->
totalInsertRows
+=
batchPerTbl
;
verbosePrint
(
"[%d] %s() LN%d batchPerTbl=%
d recOfBatch=%d
\n
"
,
verbosePrint
(
"[%d] %s() LN%d batchPerTbl=%
"
PRId64
" recOfBatch=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
batchPerTbl
,
recOfBatch
);
...
...
@@ -5063,16 +5094,16 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
if
(
generatedRecPerTbl
>=
insertRows
)
break
;
int
remainRows
=
insertRows
-
generatedRecPerTbl
;
if
((
remainRows
>
0
)
&&
(
batchPerTbl
>
remainRows
))
batchPerTbl
=
remainRows
;
if
(
pThreadInfo
->
ntables
*
batchPerTbl
<
g_args
.
num_of_RPR
)
break
;
}
}
int
remainRows
=
insertRows
-
generatedRecPerTbl
;
if
((
remainRows
>
0
)
&&
(
batchPerTbl
>
remainRows
))
batchPerTbl
=
remainRows
;
verbosePrint
(
"[%d] %s() LN%d generatedRecPerTbl=%d insertRows=%"
PRId64
"
\n
"
,
verbosePrint
(
"[%d] %s() LN%d generatedRecPerTbl=%"
PRId64
" insertRows=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
generatedRecPerTbl
,
insertRows
);
...
...
@@ -5080,7 +5111,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
break
;
}
verbosePrint
(
"[%d] %s() LN%d recOfBatch=%
d
totalInsertRows=%"
PRId64
"
\n
"
,
verbosePrint
(
"[%d] %s() LN%d recOfBatch=%
"
PRId64
"
totalInsertRows=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
recOfBatch
,
pThreadInfo
->
totalInsertRows
);
verbosePrint
(
"[%d] %s() LN%d, buffer=%s
\n
"
,
...
...
@@ -5088,7 +5119,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
startTs
=
taosGetTimestampMs
();
int
affectedRows
=
execInsert
(
pThreadInfo
,
buffer
,
recOfBatch
);
int
64_t
affectedRows
=
execInsert
(
pThreadInfo
,
buffer
,
recOfBatch
);
endTs
=
taosGetTimestampMs
();
int64_t
delay
=
endTs
-
startTs
;
...
...
@@ -5100,10 +5131,11 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo
->
cntDelay
++
;
pThreadInfo
->
totalDelay
+=
delay
;
verbosePrint
(
"[%d] %s() LN%d affectedRows=%d
\n
"
,
pThreadInfo
->
threadID
,
verbosePrint
(
"[%d] %s() LN%d affectedRows=%"
PRId64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
affectedRows
);
if
((
affectedRows
<
0
)
||
(
recOfBatch
!=
affectedRows
))
{
errorPrint
(
"[%d] %s() LN%d execInsert insert %
d, affected rows: %d
\n
%s
\n
"
,
errorPrint
(
"[%d] %s() LN%d execInsert insert %
"
PRId64
", affected rows: %"
PRId64
"
\n
%s
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
recOfBatch
,
affectedRows
,
buffer
);
goto
free_and_statistics_interlace
;
...
...
@@ -5169,7 +5201,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
int64_t
startTs
=
taosGetTimestampMs
();
int64_t
endTs
;
int
timeStampStep
=
int
64_t
timeStampStep
=
superTblInfo
?
superTblInfo
->
timeStampStep
:
DEFAULT_TIMESTAMP_STEP
;
/* int insert_interval =
superTblInfo?superTblInfo->insertInterval:g_args.insert_interval;
...
...
@@ -5182,7 +5214,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo
->
samplePos
=
0
;
for
(
uint32
_t
tableSeq
=
for
(
int64
_t
tableSeq
=
pThreadInfo
->
start_table_from
;
tableSeq
<=
pThreadInfo
->
end_table_to
;
tableSeq
++
)
{
int64_t
start_time
=
pThreadInfo
->
start_time
;
...
...
@@ -5199,11 +5231,11 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
char
tableName
[
TSDB_TABLE_NAME_LEN
];
getTableName
(
tableName
,
pThreadInfo
,
tableSeq
);
verbosePrint
(
"%s() LN%d: tid=%d seq=%
d
tableName=%s
\n
"
,
verbosePrint
(
"%s() LN%d: tid=%d seq=%
"
PRId64
"
tableName=%s
\n
"
,
__func__
,
__LINE__
,
pThreadInfo
->
threadID
,
tableSeq
,
tableName
);
int
remainderBufLen
=
maxSqlLen
;
int
64_t
remainderBufLen
=
maxSqlLen
;
char
*
pstr
=
buffer
;
int
nInsertBufLen
=
strlen
(
"insert into "
);
...
...
@@ -5227,7 +5259,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
startTs
=
taosGetTimestampMs
();
int
affectedRows
=
execInsert
(
pThreadInfo
,
buffer
,
generated
);
int
64_t
affectedRows
=
execInsert
(
pThreadInfo
,
buffer
,
generated
);
endTs
=
taosGetTimestampMs
();
int64_t
delay
=
endTs
-
startTs
;
...
...
@@ -5273,7 +5305,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
if
((
tableSeq
==
pThreadInfo
->
ntables
-
1
)
&&
superTblInfo
&&
(
0
==
strncasecmp
(
superTblInfo
->
dataSource
,
"sample"
,
strlen
(
"sample"
))))
{
verbosePrint
(
"%s() LN%d samplePos=%
d
\n
"
,
verbosePrint
(
"%s() LN%d samplePos=%
"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
pThreadInfo
->
samplePos
);
}
}
...
...
@@ -5294,7 +5326,18 @@ static void* syncWrite(void *sarg) {
threadInfo
*
pThreadInfo
=
(
threadInfo
*
)
sarg
;
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
int
interlaceRows
=
superTblInfo
?
superTblInfo
->
interlaceRows
:
g_args
.
interlace_rows
;
int
interlaceRows
;
if
(
superTblInfo
)
{
if
((
superTblInfo
->
interlaceRows
==
0
)
&&
(
g_args
.
interlace_rows
>
0
))
{
interlaceRows
=
g_args
.
interlace_rows
;
}
else
{
interlaceRows
=
superTblInfo
->
interlaceRows
;
}
}
else
{
interlaceRows
=
g_args
.
interlace_rows
;
}
if
(
interlaceRows
>
0
)
{
// interlace mode
...
...
@@ -5321,7 +5364,8 @@ static void callBack(void *param, TAOS_RES *res, int code) {
char
*
buffer
=
calloc
(
1
,
pThreadInfo
->
superTblInfo
->
maxSqlLen
);
char
data
[
MAX_DATA_SIZE
];
char
*
pstr
=
buffer
;
pstr
+=
sprintf
(
pstr
,
"insert into %s.%s%d values"
,
pThreadInfo
->
db_name
,
pThreadInfo
->
tb_prefix
,
pstr
+=
sprintf
(
pstr
,
"insert into %s.%s%"
PRId64
" values"
,
pThreadInfo
->
db_name
,
pThreadInfo
->
tb_prefix
,
pThreadInfo
->
start_table_from
);
// if (pThreadInfo->counter >= pThreadInfo->superTblInfo->insertRows) {
if
(
pThreadInfo
->
counter
>=
g_args
.
num_of_RPR
)
{
...
...
@@ -5519,7 +5563,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
exit
(
-
1
);
}
int
childTblCount
;
int
64_t
childTblCount
;
getChildNameOfSuperTableWithLimitAndOffset
(
taos
,
db_name
,
superTblInfo
->
sTblName
,
...
...
@@ -5570,18 +5614,19 @@ static void startMultiThreadInsertData(int threads, char* db_name,
t_info
->
taos
=
NULL
;
}
if
((
NULL
==
superTblInfo
)
/*
if ((NULL == superTblInfo)
|| (0 == superTblInfo->multiThreadWriteOneTbl)) {
*/
t_info
->
start_table_from
=
startFrom
;
t_info
->
ntables
=
i
<
b
?
a
+
1
:
a
;
t_info
->
end_table_to
=
i
<
b
?
startFrom
+
a
:
startFrom
+
a
-
1
;
startFrom
=
t_info
->
end_table_to
+
1
;
}
else
{
/*
} else {
t_info->start_table_from = 0;
t_info->ntables = superTblInfo->childTblCount;
t_info->start_time = t_info->start_time + rand_int() % 10000 - rand_tinyint();
}
*/
tsem_init
(
&
(
t_info
->
lock_sem
),
0
,
0
);
if
(
SYNC
==
g_Dbs
.
queryMode
)
{
pthread_create
(
pids
+
i
,
NULL
,
syncWrite
,
t_info
);
...
...
@@ -5992,8 +6037,8 @@ static void *specifiedTableQuery(void *sarg) {
pThreadInfo
->
threadID
,
totalQueried
,
(
double
)(
totalQueried
/
((
endTs
-
startTs
)
/
1000
.
0
)));
lastPrintTime
=
currentPrintTime
;
}
lastPrintTime
=
currentPrintTime
;
}
return
NULL
;
}
...
...
@@ -6078,12 +6123,12 @@ static void *superTableQuery(void *sarg) {
pThreadInfo
->
threadID
,
totalQueried
,
(
double
)(
totalQueried
/
((
endTs
-
startTs
)
/
1000
.
0
)));
lastPrintTime
=
currentPrintTime
;
}
lastPrintTime
=
currentPrintTime
;
}
}
et
=
taosGetTimestampMs
();
printf
(
"####thread[%"
PRId64
"] complete all sqls to allocate all sub-tables[%
d - %d
] once queries duration:%.4fs
\n\n
"
,
printf
(
"####thread[%"
PRId64
"] complete all sqls to allocate all sub-tables[%
"
PRId64
" - %"
PRId64
"
] once queries duration:%.4fs
\n\n
"
,
taosGetSelfPthreadId
(),
pThreadInfo
->
start_table_from
,
pThreadInfo
->
end_table_to
,
...
...
@@ -6423,7 +6468,7 @@ static void *specifiedSubscribe(void *sarg) {
}
tsub
[
i
]
=
subscribeImpl
(
pThreadInfo
->
taos
,
g_queryInfo
.
specifiedQueryInfo
.
sql
[
i
],
topic
,
tmpFile
);
if
(
NULL
==
g_queryInfo
.
specifiedQueryInfo
.
tsub
[
i
])
{
if
(
NULL
==
tsub
[
i
])
{
taos_close
(
pThreadInfo
->
taos
);
return
NULL
;
}
...
...
@@ -6499,7 +6544,7 @@ static int subscribeTestProcess() {
//==== create sub threads for query from super table
if
((
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
<=
0
)
||
(
g_queryInfo
.
specifiedQueryInfo
.
concurrent
<=
0
))
{
errorPrint
(
"%s() LN%d, query sqlCount %
d or concurrent %d
is not correct.
\n
"
,
errorPrint
(
"%s() LN%d, query sqlCount %
"
PRId64
" or concurrent %"
PRId64
"
is not correct.
\n
"
,
__func__
,
__LINE__
,
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
,
g_queryInfo
.
specifiedQueryInfo
.
concurrent
);
exit
(
-
1
);
...
...
src/mnode/inc/mnodeDb.h
浏览文件 @
188127bd
...
...
@@ -31,6 +31,7 @@ enum _TSDB_DB_STATUS {
int32_t
mnodeInitDbs
();
void
mnodeCleanupDbs
();
int64_t
mnodeGetDbNum
();
int32_t
mnodeGetDbMaxReplica
();
SDbObj
*
mnodeGetDb
(
char
*
db
);
SDbObj
*
mnodeGetDbByTableName
(
char
*
db
);
void
*
mnodeGetNextDb
(
void
*
pIter
,
SDbObj
**
pDb
);
...
...
src/mnode/src/mnodeDb.c
浏览文件 @
188127bd
...
...
@@ -74,6 +74,24 @@ int64_t mnodeGetDbNum() {
return
sdbGetNumOfRows
(
tsDbSdb
);
}
int32_t
mnodeGetDbMaxReplica
()
{
int32_t
maxReplica
=
0
;
SDbObj
*
pDb
=
NULL
;
void
*
pIter
=
NULL
;
while
(
1
)
{
pIter
=
mnodeGetNextDb
(
pIter
,
&
pDb
);
if
(
pDb
==
NULL
)
break
;
if
(
pDb
->
cfg
.
replications
>
maxReplica
)
maxReplica
=
pDb
->
cfg
.
replications
;
mnodeDecDbRef
(
pDb
);
}
return
maxReplica
;
}
static
int32_t
mnodeDbActionInsert
(
SSdbRow
*
pRow
)
{
SDbObj
*
pDb
=
pRow
->
pObj
;
SAcctObj
*
pAcct
=
mnodeGetAcct
(
pDb
->
acct
);
...
...
src/mnode/src/mnodeDnode.c
浏览文件 @
188127bd
...
...
@@ -29,6 +29,7 @@
#include "mnodeDef.h"
#include "mnodeInt.h"
#include "mnodeDnode.h"
#include "mnodeDb.h"
#include "mnodeMnode.h"
#include "mnodeSdb.h"
#include "mnodeShow.h"
...
...
@@ -745,6 +746,14 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_NO_REMOVE_MASTER
;
}
int32_t
maxReplica
=
mnodeGetDbMaxReplica
();
int32_t
dnodesNum
=
mnodeGetDnodesNum
();
if
(
dnodesNum
<=
maxReplica
)
{
mError
(
"dnode:%d, can't drop dnode:%s, #dnodes: %d, replia: %d"
,
pDnode
->
dnodeId
,
ep
,
dnodesNum
,
maxReplica
);
mnodeDecDnodeRef
(
pDnode
);
return
TSDB_CODE_MND_NO_ENOUGH_DNODES
;
}
mInfo
(
"dnode:%d, start to drop it"
,
pDnode
->
dnodeId
);
int32_t
code
=
bnDropDnode
(
pDnode
);
...
...
src/vnode/src/vnodeWrite.c
浏览文件 @
188127bd
...
...
@@ -347,9 +347,11 @@ static void vnodeFlowCtrlMsgToWQueue(void *param, void *tmrId) {
vDebug
(
"vgId:%d, msg:%p, write into vwqueue after flowctrl, retry:%d"
,
pVnode
->
vgId
,
pWrite
,
pWrite
->
processedCount
);
pWrite
->
processedCount
=
0
;
void
*
handle
=
pWrite
->
rpcMsg
.
handle
;
code
=
vnodeWriteToWQueueImp
(
pWrite
);
if
(
code
!=
0
)
{
dnodeSendRpcVWriteRsp
(
pWrite
->
pVnode
,
pWrite
,
code
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
SRpcMsg
rpcRsp
=
{.
handle
=
handle
,
.
code
=
code
};
rpcSendResponse
(
&
rpcRsp
);
}
}
}
...
...
tests/perftest-scripts/perftest-taosdemo-compare.sh
0 → 100755
浏览文件 @
188127bd
#!/bin/bash
WORK_DIR
=
/home/ubuntu/pxiao
TDENGINE_DIR
=
/home/ubuntu/pxiao/TDengine
NUM_OF_VERSIONS
=
5
CURRENT_VERSION
=
0
today
=
`
date
+
"%Y%m%d"
`
TAOSDEMO_COMPARE_TEST_REPORT
=
$TDENGINE_DIR
/tests/taosdemo-compare-test-report-
$today
.log
# Coloured Echoes
function
red_echo
{
echo
-e
"
\0
33[31m
$@
\0
33[0m"
;
}
function
green_echo
{
echo
-e
"
\0
33[32m
$@
\0
33[0m"
;
}
function
yellow_echo
{
echo
-e
"
\0
33[33m
$@
\0
33[0m"
;
}
function
white_echo
{
echo
-e
"
\0
33[1;37m
$@
\0
33[0m"
;
}
# Coloured Printfs
function
red_printf
{
printf
"
\0
33[31m
$@
\0
33[0m"
;
}
function
green_printf
{
printf
"
\0
33[32m
$@
\0
33[0m"
;
}
function
yellow_printf
{
printf
"
\0
33[33m
$@
\0
33[0m"
;
}
function
white_printf
{
printf
"
\0
33[1;37m
$@
\0
33[0m"
;
}
# Debugging Outputs
function
white_brackets
{
local
args
=
"
$@
"
;
white_printf
"["
;
printf
"
${
args
}
"
;
white_printf
"]"
;
}
function
echoInfo
{
local
args
=
"
$@
"
;
white_brackets
$(
green_printf
"INFO"
)
&&
echo
"
${
args
}
"
;
}
function
echoWarn
{
local
args
=
"
$@
"
;
echo
"
$(
white_brackets
"
$(
yellow_printf
"WARN"
)
"
&&
echo
"
${
args
}
"
;
)
"
1>&2
;
}
function
echoError
{
local
args
=
"
$@
"
;
echo
"
$(
white_brackets
"
$(
red_printf
"ERROR"
)
"
&&
echo
"
${
args
}
"
;
)
"
1>&2
;
}
function
getCurrentVersion
{
echoInfo
"Build TDengine"
cd
$WORK_DIR
/TDengine
git remote update
>
/dev/null
git reset
--hard
HEAD
git checkout master
REMOTE_COMMIT
=
`
git rev-parse
--short
remotes/origin/master
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
echo
" LOCAL:
$LOCAL_COMMIT
"
echo
"REMOTE:
$REMOTE_COMMIT
"
if
[
"
$LOCAL_COMMIT
"
==
"
$REMOTE_COMMIT
"
]
;
then
echo
"repo up-to-date"
else
echo
"repo need to pull"
git pull
>
/dev/null 2>&1
fi
cd
debug
rm
-rf
*
cmake ..
>
/dev/null 2>&1
make
>
/dev/null 2>&1
make
install
>
/dev/null 2>&1
rm
-rf
$WORK_DIR
/taosdemo
cp
-r
$TDENGINE_DIR
/src/kit/taosdemo
$WORK_DIR
CURRENT_VERSION
=
`
taosd
-V
|
grep
version |
awk
'{print $3}'
|
awk
-F
.
'{print $3}'
`
}
function
buildTDengineByVersion
()
{
echoInfo
"build TDengine on branch:
$1
"
git reset
--hard
HEAD
git checkout
$1
git pull
>
/dev/null
rm
-rf
$TDENGINE_DIR
/src/kit/taosdemo
cp
-r
$WORK_DIR
/taosdemo
$TDENGINE_DIR
/src/kit
cd
$TDENGINE_DIR
/debug
rm
-rf
*
cmake ..
>
/dev/null 2>&1
make
>
/dev/null 2>&1
make
install
>
/dev/null 2>&1
}
function
stopTaosd
{
echo
"Stop taosd"
systemctl stop taosd
PID
=
`
ps
-ef
|grep
-w
taosd |
grep
-v
grep
|
awk
'{print $2}'
`
while
[
-n
"
$PID
"
]
do
pkill
-TERM
-x
taosd
sleep
1
PID
=
`
ps
-ef
|grep
-w
taosd |
grep
-v
grep
|
awk
'{print $2}'
`
done
}
function
startTaosd
{
echo
"Start taosd"
rm
-rf
/var/lib/perf/
*
rm
-rf
/var/log/perf/
*
nohup
taosd
-c
/etc/perf/
>
/dev/null 2>&1 &
sleep
10
}
function
runTaosdemoCompare
{
echoInfo
"Stop Taosd"
stopTaosd
getCurrentVersion
release
=
"master"
[
-f
$TAOSDEMO_COMPARE_TEST_REPORT
]
&&
rm
$TAOSDEMO_COMPARE_TEST_REPORT
for
((
i
=
0
;
i<
$NUM_OF_VERSIONS
;
i++
))
do
startTaosd
taos
-s
"drop database if exists demodb;"
taosdemo
-y
-d
demodb
>
taosdemoperf.txt
echo
"==================== taosdemo performance for
$release
===================="
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
CREATE_TABLE_TIME
=
`
grep
'Spent'
taosdemoperf.txt |
awk
'NR==1{print $2}'
`
INSERT_RECORDS_TIME
=
`
grep
'Spent'
taosdemoperf.txt |
awk
'NR==2{print $2}'
`
RECORDS_PER_SECOND
=
`
grep
'Spent'
taosdemoperf.txt |
awk
'NR==2{print $16}'
`
AVG_DELAY
=
`
grep
'delay'
taosdemoperf.txt |
awk
'{print $4}'
|
awk
-Fm
'{print $1}'
`
MAX_DELAY
=
`
grep
'delay'
taosdemoperf.txt |
awk
'{print $6}'
|
awk
-Fm
'{print $1}'
`
MIN_DELAY
=
`
grep
'delay'
taosdemoperf.txt |
awk
'{print $8}'
|
awk
-Fm
'{print $1}'
`
echo
"create table time:
$CREATE_TABLE_TIME
seconds"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
echo
"insert records time:
$INSERT_RECORDS_TIME
seconds"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
echo
"records per second:
$RECORDS_PER_SECOND
records/second"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
echo
"avg delay:
$AVG_DELAY
ms"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
echo
"max delay:
$MAX_DELAY
ms"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
echo
"min delay:
$MIN_DELAY
ms"
|
tee
-a
$TAOSDEMO_COMPARE_TEST_REPORT
[
-f
taosdemoperf.txt
]
&&
rm
taosdemoperf.txt
stopTaosd
version
=
`
expr
$CURRENT_VERSION
-
$i
`
release
=
"release/s1
$version
"
buildTDengineByVersion
$release
done
}
function
sendReport
{
echo
"send report"
receiver
=
"develop@taosdata.com"
mimebody
=
"MIME-Version: 1.0
\n
Content-Type: text/html; charset=utf-8
\n
"
cd
$TDENGINE_DIR
sed
-i
's/\x1b\[[0-9;]*m//g'
$TAOSDEMO_COMPARE_TEST_REPORT
BODY_CONTENT
=
`
cat
$TAOSDEMO_COMPARE_TEST_REPORT
`
echo
-e
"to:
${
receiver
}
\n
subject: taosdemo performance compare test report
${
today
}
, commit ID:
${
LOCAL_COMMIT
}
\n\n
${
today
}
:
\n
${
BODY_CONTENT
}
"
|
\
(
cat
-
&&
uuencode
$TAOSDEMO_COMPARE_TEST_REPORT
taosdemo-compare-test-report-
$today
.log
)
|
\
ssmtp
"
${
receiver
}
"
&&
echo
"Report Sent!"
}
runTaosdemoCompare
sendReport
echoInfo
"End of Taosdemo Compare Test"
|
tee
-a
$WORK_DIR
/cron.log
\ No newline at end of file
tests/pytest/fulltest.sh
浏览文件 @
188127bd
...
...
@@ -224,6 +224,7 @@ python3 ./test.py -f query/queryJoin10tables.py
python3 ./test.py
-f
query/queryStddevWithGroupby.py
python3 ./test.py
-f
query/querySecondtscolumnTowherenow.py
python3 ./test.py
-f
query/queryFilterTswithDateUnit.py
python3 ./test.py
-f
query/queryTscomputWithNow.py
...
...
@@ -238,6 +239,8 @@ python3 ./test.py -f stream/history.py
python3 ./test.py
-f
stream/sys.py
python3 ./test.py
-f
stream/table_1.py
python3 ./test.py
-f
stream/table_n.py
python3 ./test.py
-f
stream/showStreamExecTimeisNull.py
python3 ./test.py
-f
stream/cqSupportBefore1970.py
#alter table
python3 ./test.py
-f
alter/alter_table_crash.py
...
...
tests/pytest/functions/function_operations.py
浏览文件 @
188127bd
...
...
@@ -82,14 +82,14 @@ class TDTestCase:
self
.
ts
=
self
.
ts
+
self
.
rowNum
+
10
tdSql
.
execute
(
"insert into test1 values(%d, 1, 1, 1, 1, 1.1, 1.1, 1, NULL, '涛思数据3',
1, 1, 1, 1
)"
%
(
self
.
ts
+
self
.
rowNum
+
1
))
tdSql
.
execute
(
"insert into test1 values(%d, 1, 1, 1, 1, 1.1, 1.1, 1, NULL, '涛思数据3',
254, 65534, 4294967294, 18446744073709551614
)"
%
(
self
.
ts
+
self
.
rowNum
+
1
))
tdSql
.
execute
(
"insert into test1 values(%d, 1, 1, 1, 1, 1.1, 1.1, 1, 'taosdata', NULL, 1, 1, 1, 1)"
%
(
self
.
ts
+
self
.
rowNum
+
2
))
tdSql
.
execute
(
"insert into test1 values(%d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)"
%
(
self
.
ts
+
self
.
rowNum
+
3
))
tdSql
.
execute
(
"insert into test1 values(%d, 1, 1, 1, 1, NULL, 1.1, 1, NULL, '涛思数据3', 1, 1, 1, 1)"
%
(
self
.
ts
+
self
.
rowNum
+
4
))
tdSql
.
execute
(
"insert into test1 values(%d, 1, 1, 1, 1, 1.1, NULL, 1, 'taosdata', NULL, 1, 1, 1, 1)"
%
(
self
.
ts
+
self
.
rowNum
+
5
))
self
.
rowNum
=
self
.
rowNum
+
5
col_list
=
[
'col1'
,
'col2'
,
'col3'
,
'col4'
,
'col5'
,
'col6'
,
'col7'
,
'col8'
,
'col9'
,
'col11'
,
'col12'
,
'col13'
,
'col14'
,
'1'
,
'1.1'
,
'NULL'
]
col_list
=
[
'col1'
,
'col2'
,
'col3'
,
'col4'
,
'col5'
,
'col6'
,
'col7'
,
'col8'
,
'col9'
,
'col11'
,
'col12'
,
'col13'
,
'col14'
,
'1'
,
'1.1'
,
'NULL'
,
'18446744073709551614'
]
op_list
=
[
'+'
,
'-'
,
'*'
,
'/'
,
'%'
]
err_list
=
[
'col7'
,
'col8'
,
'col9'
,
'NULL'
]
order_lsit
=
[
' order by ts '
,
' order by ts desc '
,
' order by ts asc '
]
...
...
tests/pytest/query/queryFilterTswithDateUnit.py
浏览文件 @
188127bd
...
...
@@ -47,53 +47,53 @@ class TDTestCase:
for
col
in
cols
:
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<
-
1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1m "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1w "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
=
-
1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= 1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>=
-
1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<>
1
u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 0d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 0s "
)
...
...
@@ -125,6 +125,12 @@ class TDTestCase:
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 0/1d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> 1w+'2010-01-01 00:00:00' "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
= 1-1h "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
< 1w-d "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
> 0/u "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
>= d/s "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<= 1/a "
)
tdSql
.
error
(
f
" select * from tts1 where
{
col
}
<> d/1 "
)
def
run
(
self
):
tdSql
.
execute
(
"drop database if exists dbms"
)
...
...
@@ -148,19 +154,16 @@ class TDTestCase:
# create databases precision is us
tdSql
.
execute
(
"create database if not exists dbus keep 36500 precision 'us' "
)
tdSql
.
execute
(
"use dbus"
)
tsp2
=
-
28800000
*
1000
tsp3
=
-
946800000000
*
1000
tsp2
=
tsp2
*
1000
tsp3
=
tsp3
*
1000
self
.
insertnow
(
tsp1
,
tsp2
,
tsp3
)
self
.
querynow
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/query/queryTscomputWithNow.py
0 → 100644
浏览文件 @
188127bd
###################################################################
# 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
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to execute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
inertnow
(
self
):
tsp1
=
0
tsp2
=
-
28800000
tsp3
=
-
946800000000
tdSql
.
execute
(
"create table stbts (ts timestamp, ts1 timestamp, c1 int, ts2 timestamp) TAGS(t1 int)"
)
tdSql
.
execute
(
"create table tts1 using stbts tags(1)"
)
tdSql
.
execute
(
"insert into tts1 values (now+1d, now+1d, 6, now+1d)"
)
tdSql
.
execute
(
"insert into tts1 values (now, now, 5, now)"
)
tdSql
.
execute
(
"insert into tts1 values (now-1d, now-1d, 4, now-1d)"
)
tdSql
.
execute
(
f
"insert into tts1 values (
{
tsp1
}
,
{
tsp1
}
, 3,
{
tsp1
}
)"
)
tdSql
.
execute
(
f
"insert into tts1 values (
{
tsp2
}
,
{
tsp2
}
, 2,
{
tsp2
}
)"
)
tdSql
.
execute
(
f
"insert into tts1 values (
{
tsp3
}
,
{
tsp3
}
, 1,
{
tsp3
}
)"
)
def
querynow
(
self
):
interval_day1
=
(
datetime
.
date
.
today
()
-
datetime
.
date
(
1970
,
1
,
1
)).
days
interval_day2
=
(
datetime
.
date
.
today
()
-
datetime
.
date
(
1940
,
1
,
1
)).
days
tdLog
.
printNoPrefix
(
"==========step query: execute query operation"
)
time
.
sleep
(
1
)
tdSql
.
execute
(
" select * from tts1 where ts > now+1d "
)
ts_len1
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
" select * from tts1 where ts < now+1d "
)
ts_len2
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
" select * from tts1 where ts > now-1d "
)
ts_len3
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
" select * from tts1 where ts < now-1d "
)
ts_len4
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts > now-
{
interval_day1
+
1
}
d "
)
ts_len5
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts < now-
{
interval_day1
+
1
}
d "
)
ts_len6
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts > now-
{
interval_day1
-
1
}
d "
)
ts_len7
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts < now-
{
interval_day1
-
1
}
d "
)
ts_len8
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts > now-
{
interval_day2
+
1
}
d "
)
ts_len9
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts < now-
{
interval_day2
+
1
}
d "
)
ts_len10
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts > now-
{
interval_day2
-
1
}
d "
)
ts_len11
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
execute
(
f
" select * from tts1 where ts < now-
{
interval_day2
-
1
}
d "
)
ts_len12
=
len
(
tdSql
.
cursor
.
fetchall
())
tdSql
.
query
(
" select * from tts1 where ts1 > now+1d "
)
tdSql
.
checkRows
(
ts_len1
)
tdSql
.
query
(
" select * from tts1 where ts2 > now+1440m "
)
tdSql
.
checkRows
(
ts_len1
)
tdSql
.
query
(
" select * from tts1 where ts1 < now+1d "
)
tdSql
.
checkRows
(
ts_len2
)
tdSql
.
query
(
" select * from tts1 where ts2 < now+1440m "
)
tdSql
.
checkRows
(
ts_len2
)
tdSql
.
query
(
" select * from tts1 where ts1 > now-1d "
)
tdSql
.
checkRows
(
ts_len3
)
tdSql
.
query
(
" select * from tts1 where ts2 > now-1440m "
)
tdSql
.
checkRows
(
ts_len3
)
tdSql
.
query
(
" select * from tts1 where ts1 < now-1d "
)
tdSql
.
checkRows
(
ts_len4
)
tdSql
.
query
(
" select * from tts1 where ts2 < now-1440m "
)
tdSql
.
checkRows
(
ts_len4
)
tdSql
.
query
(
f
" select * from tts1 where ts1 > now-
{
interval_day1
+
1
}
d "
)
tdSql
.
checkRows
(
ts_len5
)
tdSql
.
query
(
f
" select * from tts1 where ts2 > now-
{
(
interval_day1
+
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len5
)
tdSql
.
query
(
f
" select * from tts1 where ts1 < now-
{
interval_day1
+
1
}
d "
)
tdSql
.
checkRows
(
ts_len6
)
tdSql
.
query
(
f
" select * from tts1 where ts2 < now-
{
(
interval_day1
+
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len6
)
tdSql
.
query
(
f
" select * from tts1 where ts1 > now-
{
interval_day1
-
1
}
d "
)
tdSql
.
checkRows
(
ts_len7
)
tdSql
.
query
(
f
" select * from tts1 where ts2 > now-
{
(
interval_day1
-
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len7
)
tdSql
.
query
(
f
" select * from tts1 where ts1 < now-
{
interval_day1
-
1
}
d "
)
tdSql
.
checkRows
(
ts_len8
)
tdSql
.
query
(
f
" select * from tts1 where ts2 < now-
{
(
interval_day1
-
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len8
)
tdSql
.
query
(
f
" select * from tts1 where ts1 > now-
{
interval_day2
+
1
}
d "
)
tdSql
.
checkRows
(
ts_len9
)
tdSql
.
query
(
f
" select * from tts1 where ts2 > now-
{
(
interval_day2
+
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len9
)
tdSql
.
query
(
f
" select * from tts1 where ts1 < now-
{
interval_day2
+
1
}
d "
)
tdSql
.
checkRows
(
ts_len10
)
tdSql
.
query
(
f
" select * from tts1 where ts2 < now-
{
(
interval_day2
+
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len10
)
tdSql
.
query
(
f
" select * from tts1 where ts1 > now-
{
interval_day2
-
1
}
d "
)
tdSql
.
checkRows
(
ts_len11
)
tdSql
.
query
(
f
" select * from tts1 where ts2 > now-
{
(
interval_day2
-
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len11
)
tdSql
.
query
(
f
" select * from tts1 where ts1 < now-
{
interval_day2
-
1
}
d "
)
tdSql
.
checkRows
(
ts_len12
)
tdSql
.
query
(
f
" select * from tts1 where ts2 < now-
{
(
interval_day2
-
1
)
*
1440
}
m "
)
tdSql
.
checkRows
(
ts_len12
)
def
run
(
self
):
tdSql
.
execute
(
"drop database if exists dbms"
)
tdSql
.
execute
(
"drop database if exists dbus"
)
# timestamp list:
# 0 -> "1970-01-01 08:00:00" | -28800000 -> "1970-01-01 00:00:00" | -946800000000 -> "1940-01-01 00:00:00"
# -631180800000 -> "1950-01-01 00:00:00"
tdLog
.
printNoPrefix
(
"==========step1:create table precision ms && insert data && query"
)
# create databases precision is ms
tdSql
.
execute
(
"create database if not exists dbms keep 36500"
)
tdSql
.
execute
(
"use dbms"
)
self
.
inertnow
()
self
.
querynow
()
tdLog
.
printNoPrefix
(
"==========step2:create table precision us && insert data && query"
)
# create databases precision is us
tdSql
.
execute
(
"create database if not exists dbus keep 36500 precision 'us' "
)
tdSql
.
execute
(
"use dbus"
)
self
.
inertnow
()
self
.
querynow
()
tdSql
.
query
(
"show dnodes"
)
index
=
tdSql
.
getData
(
0
,
0
)
tdDnodes
.
stop
(
index
)
tdDnodes
.
start
(
index
)
tdLog
.
printNoPrefix
(
"==========step3:after wal, query table precision ms"
)
tdSql
.
execute
(
"use dbus"
)
self
.
querynow
()
tdLog
.
printNoPrefix
(
"==========step4: query table precision us"
)
tdSql
.
execute
(
"use dbus"
)
self
.
querynow
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/pytest/stream/cqSupportBefore1970.py
0 → 100644
浏览文件 @
188127bd
# 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
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to execute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
insertnow
(
self
):
# timestamp list:
# 0 -> "1970-01-01 08:00:00" | -28800000 -> "1970-01-01 00:00:00" | -946800000000 -> "1940-01-01 00:00:00"
# -631180800000 -> "1950-01-01 00:00:00"
tsp1
=
0
tsp2
=
-
28800000
tsp3
=
-
946800000000
tsp4
=
"1969-01-01 00:00:00.000"
tdSql
.
execute
(
"insert into tcq1 values (now-11d, 5)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp1
}
, 4)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp2
}
, 3)"
)
tdSql
.
execute
(
f
"insert into tcq1 values ('
{
tsp4
}
', 2)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp3
}
, 1)"
)
def
waitedQuery
(
self
,
sql
,
expectRows
,
timeout
):
tdLog
.
info
(
f
"sql:
{
sql
}
, try to retrieve
{
expectRows
}
rows in
{
timeout
}
seconds"
)
try
:
for
i
in
range
(
timeout
):
tdSql
.
cursor
.
execute
(
sql
)
self
.
queryResult
=
tdSql
.
cursor
.
fetchall
()
self
.
queryRows
=
len
(
self
.
queryResult
)
self
.
queryCols
=
len
(
tdSql
.
cursor
.
description
)
# tdLog.info("sql: %s, try to retrieve %d rows,get %d rows" % (sql, expectRows, self.queryRows))
if
self
.
queryRows
>=
expectRows
:
return
(
self
.
queryRows
,
i
)
time
.
sleep
(
1
)
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
tdLog
.
notice
(
f
"
{
caller
.
filename
}
(
{
caller
.
lineno
}
) failed: sql:
{
sql
}
,
{
repr
(
e
)
}
"
)
raise
Exception
(
repr
(
e
))
return
(
self
.
queryRows
,
timeout
)
def
cq
(
self
):
tdSql
.
execute
(
"create table cq1 as select avg(c1) from tcq1 where ts > -946800000000 interval(10d) sliding(1d)"
)
self
.
waitedQuery
(
"select * from cq1"
,
1
,
120
)
def
querycq
(
self
):
tdSql
.
query
(
"select * from cq1"
)
tdSql
.
checkData
(
0
,
1
,
1.0
)
tdSql
.
checkData
(
10
,
1
,
2.0
)
def
run
(
self
):
tdSql
.
execute
(
"drop database if exists dbcq"
)
tdSql
.
execute
(
"create database if not exists dbcq keep 36500"
)
tdSql
.
execute
(
"use dbcq"
)
tdSql
.
execute
(
"create table stbcq (ts timestamp, c1 int ) TAGS(t1 int)"
)
tdSql
.
execute
(
"create table tcq1 using stbcq tags(1)"
)
self
.
insertnow
()
self
.
cq
()
self
.
querycq
()
# after wal and sync, check again
tdSql
.
query
(
"show dnodes"
)
index
=
tdSql
.
getData
(
0
,
0
)
tdDnodes
.
stop
(
index
)
tdDnodes
.
start
(
index
)
self
.
querycq
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/pytest/stream/showStreamExecTimeisNull.py
0 → 100644
浏览文件 @
188127bd
# 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
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to execute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
insertnow
(
self
):
# timestamp list:
# 0 -> "1970-01-01 08:00:00" | -28800000 -> "1970-01-01 00:00:00" | -946800000000 -> "1940-01-01 00:00:00"
# -631180800000 -> "1950-01-01 00:00:00"
tsp1
=
0
tsp2
=
-
28800000
tsp3
=
-
946800000000
tsp4
=
"1969-01-01 00:00:00.000"
tdSql
.
execute
(
"insert into tcq1 values (now-11d, 5)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp1
}
, 4)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp2
}
, 3)"
)
tdSql
.
execute
(
f
"insert into tcq1 values ('
{
tsp4
}
', 2)"
)
tdSql
.
execute
(
f
"insert into tcq1 values (
{
tsp3
}
, 1)"
)
def
waitedQuery
(
self
,
sql
,
expectRows
,
timeout
):
tdLog
.
info
(
f
"sql:
{
sql
}
, try to retrieve
{
expectRows
}
rows in
{
timeout
}
seconds"
)
try
:
for
i
in
range
(
timeout
):
tdSql
.
cursor
.
execute
(
sql
)
self
.
queryResult
=
tdSql
.
cursor
.
fetchall
()
self
.
queryRows
=
len
(
self
.
queryResult
)
self
.
queryCols
=
len
(
tdSql
.
cursor
.
description
)
# tdLog.info("sql: %s, try to retrieve %d rows,get %d rows" % (sql, expectRows, self.queryRows))
if
self
.
queryRows
>=
expectRows
:
return
(
self
.
queryRows
,
i
)
time
.
sleep
(
1
)
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
tdLog
.
notice
(
f
"
{
caller
.
filename
}
(
{
caller
.
lineno
}
) failed: sql:
{
sql
}
,
{
repr
(
e
)
}
"
)
raise
Exception
(
repr
(
e
))
return
(
self
.
queryRows
,
timeout
)
def
showstream
(
self
):
tdSql
.
execute
(
"create table cq1 as select avg(c1) from tcq1 interval(10d) sliding(1d)"
)
sql
=
"show streams"
timeout
=
30
exception
=
"ValueError('year -292275055 is out of range')"
try
:
for
i
in
range
(
timeout
):
tdSql
.
cursor
.
execute
(
sql
)
self
.
queryResult
=
tdSql
.
cursor
.
fetchall
()
self
.
queryRows
=
len
(
self
.
queryResult
)
self
.
queryCols
=
len
(
tdSql
.
cursor
.
description
)
# tdLog.info("sql: %s, try to retrieve %d rows,get %d rows" % (sql, expectRows, self.queryRows))
if
self
.
queryRows
>=
timeout
:
return
(
self
.
queryRows
,
i
)
time
.
sleep
(
1
)
except
Exception
as
e
:
tdLog
.
info
(
f
"sql:
{
sql
}
except raise
{
exception
}
, actually raise
{
repr
(
e
)
}
"
)
else
:
tdLog
.
exit
(
f
"sql:
{
sql
}
except raise
{
exception
}
, actually not"
)
def
run
(
self
):
tdSql
.
execute
(
"drop database if exists dbcq"
)
tdSql
.
execute
(
"create database if not exists dbcq keep 36500"
)
tdSql
.
execute
(
"use dbcq"
)
tdSql
.
execute
(
"create table stbcq (ts timestamp, c1 int ) TAGS(t1 int)"
)
tdSql
.
execute
(
"create table tcq1 using stbcq tags(1)"
)
self
.
insertnow
()
self
.
showstream
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/script/general/parser/function.sim
浏览文件 @
188127bd
...
...
@@ -393,6 +393,19 @@ if $rows != 24 then
return -1
endi
print ========================> TD-3948
sql drop table if exists meters
sql create stable meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupId int);
sql_error insert into td3948Err1(phase) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql_error insert into td3948Err2(phase, voltage) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql_error insert into td3948Err3(phase, current) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql insert into td3948 using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql select count(ts) from td3948;
if $rows != 1 then
print expect 1, actual:$rows
return -1
endi
print ========================> TD-2740
sql drop table if exists m1;
sql create table m1(ts timestamp, k int) tags(a int);
...
...
tests/script/unique/cluster/balance2.sim
浏览文件 @
188127bd
...
...
@@ -338,10 +338,6 @@ system sh/exec.sh -n dnode1 -s stop -x SIGINT
print stop dnode1 and sleep 3000
sleep 3000
sql drop dnode $hostname1
print drop dnode1 and sleep 9000
sleep 9000
sql show mnodes
$dnode1Role = $data2_1
$dnode4Role = $data2_4
...
...
@@ -357,6 +353,25 @@ endi
print ============================== step6.1
system sh/exec.sh -n dnode1 -s start
$x = 0
step6.1:
$x = $x + 1
sleep 1000
if $x == 10 then
return -1
endi
sql show dnodes
print dnode1 $data4_1
if $data4_1 != ready then
goto step6.1
endi
sql drop dnode $hostname1
print drop dnode1 and sleep 9000
sleep 9000
$x = 0
show6:
$x = $x + 1
...
...
tests/script/unique/dnode/remove1.sim
浏览文件 @
188127bd
...
...
@@ -97,7 +97,6 @@ if $data2_2 != 3 then
endi
print ========== step3
sql drop dnode $hostname2
$x = 0
show3:
...
...
@@ -114,6 +113,7 @@ print dnode2 openVnodes $data2_2
print ========== step4
sql create dnode $hostname3
system sh/exec.sh -n dnode3 -s start
sql drop dnode $hostname2
$x = 0
show4:
...
...
@@ -224,4 +224,4 @@ system sh/exec.sh -n dnode4 -s stop -x SIGINT
system sh/exec.sh -n dnode5 -s stop -x SIGINT
system sh/exec.sh -n dnode6 -s stop -x SIGINT
system sh/exec.sh -n dnode7 -s stop -x SIGINT
system sh/exec.sh -n dnode8 -s stop -x SIGINT
\ No newline at end of file
system sh/exec.sh -n dnode8 -s stop -x SIGINT
tests/script/unique/dnode/remove2.sim
浏览文件 @
188127bd
...
...
@@ -98,7 +98,6 @@ endi
print ========== step3
system sh/exec.sh -n dnode2 -s stop -x SIGINT
sql drop dnode $hostname2
sql show dnodes
print dnode1 openVnodes $data2_1
...
...
@@ -128,6 +127,26 @@ endi
print ============ step 4.1
system sh/exec.sh -n dnode2 -s start
$x = 0
step4.1:
$x = $x + 1
sleep 1000
if $x == 10 then
return -1
endi
sql show dnodes
print dnode1 $data4_1
print dnode2 $data4_2
print dnode3 $data4_3
print dnode4 $data4_4
if $data4_2 != ready then
goto step4.1
endi
sql drop dnode $hostname2
$x = 0
show4:
$x = $x + 1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录