Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
beb74d6d
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
beb74d6d
编写于
8月 25, 2021
作者:
Z
zhaoyanggh
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/taosdata/TDengine
into fix/TS-165
上级
07db0733
93f5ff2e
变更
25
显示空白变更内容
内联
并排
Showing
25 changed file
with
717 addition
and
319 deletion
+717
-319
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+1
-0
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+7
-5
src/client/src/tscServer.c
src/client/src/tscServer.c
+5
-0
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+49
-8
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+19
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
...src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+10
-3
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/MultiConnectionWithDifferentDbTest.java
...osdata/jdbc/cases/MultiConnectionWithDifferentDbTest.java
+101
-0
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/DatabaseSpecifiedTest.java
...test/java/com/taosdata/jdbc/rs/DatabaseSpecifiedTest.java
+69
-0
src/connector/python/examples/demo.py
src/connector/python/examples/demo.py
+1
-1
src/connector/python/taos/cinterface.py
src/connector/python/taos/cinterface.py
+1
-1
src/kit/shell/inc/shell.h
src/kit/shell/inc/shell.h
+2
-0
src/kit/shell/src/shellLinux.c
src/kit/shell/src/shellLinux.c
+14
-1
src/kit/shell/src/shellMain.c
src/kit/shell/src/shellMain.c
+3
-1
src/kit/shell/src/shellWindows.c
src/kit/shell/src/shellWindows.c
+5
-1
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+278
-279
src/os/src/linux/linuxEnv.c
src/os/src/linux/linuxEnv.c
+14
-8
src/plugins/monitor/src/monMain.c
src/plugins/monitor/src/monMain.c
+1
-1
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+2
-2
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+2
-0
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+3
-3
src/util/inc/tnettest.h
src/util/inc/tnettest.h
+1
-1
src/util/src/tnettest.c
src/util/src/tnettest.c
+113
-3
tests/nettest/FQDNnettest.sh
tests/nettest/FQDNnettest.sh
+3
-0
tests/nettest/TCPUDP.sh
tests/nettest/TCPUDP.sh
+12
-0
未找到文件。
src/client/inc/tscUtil.h
浏览文件 @
beb74d6d
...
...
@@ -190,6 +190,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo);
void
tscFieldInfoCopy
(
SFieldInfo
*
pFieldInfo
,
const
SFieldInfo
*
pSrc
,
const
SArray
*
pExprList
);
static
FORCE_INLINE
int32_t
tscNumOfFields
(
SQueryInfo
*
pQueryInfo
)
{
return
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
}
int32_t
tscGetFirstInvisibleFieldPos
(
SQueryInfo
*
pQueryInfo
);
int32_t
tscFieldInfoCompare
(
const
SFieldInfo
*
pFieldInfo1
,
const
SFieldInfo
*
pFieldInfo2
,
int32_t
*
diffSize
);
void
tscInsertPrimaryTsSourceColumn
(
SQueryInfo
*
pQueryInfo
,
uint64_t
uid
);
...
...
src/client/src/tscSQLParser.c
浏览文件 @
beb74d6d
...
...
@@ -6944,8 +6944,6 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
}
}
size_t
size
=
tscNumOfExprs
(
pQueryInfo
);
if
(
TSDB_COL_IS_TAG
(
pColIndex
->
flag
))
{
int32_t
f
=
TSDB_FUNC_TAG
;
...
...
@@ -6953,8 +6951,10 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
f
=
TSDB_FUNC_TAGPRJ
;
}
int32_t
pos
=
tscGetFirstInvisibleFieldPos
(
pQueryInfo
);
SColumnIndex
index
=
{.
tableIndex
=
pQueryInfo
->
groupbyExpr
.
tableIndex
,
.
columnIndex
=
colIndex
};
SExprInfo
*
pExpr
=
tscExpr
Append
(
pQueryInfo
,
f
,
&
index
,
s
->
type
,
s
->
bytes
,
getNewResColId
(
pCmd
),
s
->
bytes
,
true
);
SExprInfo
*
pExpr
=
tscExpr
Insert
(
pQueryInfo
,
pos
,
f
,
&
index
,
s
->
type
,
s
->
bytes
,
getNewResColId
(
pCmd
),
s
->
bytes
,
true
);
memset
(
pExpr
->
base
.
aliasName
,
0
,
sizeof
(
pExpr
->
base
.
aliasName
));
tstrncpy
(
pExpr
->
base
.
aliasName
,
s
->
name
,
sizeof
(
pExpr
->
base
.
aliasName
));
...
...
@@ -6964,13 +6964,15 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
// NOTE: tag column does not add to source column list
SColumnList
ids
=
createColumnList
(
1
,
0
,
pColIndex
->
colIndex
);
insertResultField
(
pQueryInfo
,
(
int32_t
)
size
,
&
ids
,
s
->
bytes
,
(
int8_t
)
s
->
type
,
s
->
name
,
pExpr
);
insertResultField
(
pQueryInfo
,
pos
,
&
ids
,
s
->
bytes
,
(
int8_t
)
s
->
type
,
s
->
name
,
pExpr
);
}
else
{
// if this query is "group by" normal column, time window query is not allowed
if
(
isTimeWindowQuery
(
pQueryInfo
))
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
size_t
size
=
tscNumOfExprs
(
pQueryInfo
);
bool
hasGroupColumn
=
false
;
for
(
int32_t
j
=
0
;
j
<
size
;
++
j
)
{
SExprInfo
*
pExpr
=
tscExprGet
(
pQueryInfo
,
j
);
...
...
src/client/src/tscServer.c
浏览文件 @
beb74d6d
...
...
@@ -841,6 +841,11 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql) {
tableSerialize
=
totalTables
*
sizeof
(
STableIdInfo
);
}
SCond
*
pCond
=
&
pQueryInfo
->
tagCond
.
tbnameCond
;
if
(
pCond
->
len
>
0
)
{
srcColListSize
+=
pCond
->
len
;
}
return
MIN_QUERY_MSG_PKT_SIZE
+
minMsgSize
()
+
sizeof
(
SQueryTableMsg
)
+
srcColListSize
+
srcColFilterSize
+
srcTagFilterSize
+
exprSize
+
tsBufSize
+
tableSerialize
+
sqlLen
+
4096
+
pQueryInfo
->
bufLen
;
}
...
...
src/client/src/tscSubquery.c
浏览文件 @
beb74d6d
...
...
@@ -15,8 +15,9 @@
#define _GNU_SOURCE
#include "os.h"
#include "texpr.h"
#include "tsched.h"
#include "qTsbuf.h"
#include "tcompare.h"
#include "tscLog.h"
...
...
@@ -2425,6 +2426,26 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) {
return
terrno
;
}
typedef
struct
SPair
{
int32_t
first
;
int32_t
second
;
}
SPair
;
static
void
doSendQueryReqs
(
SSchedMsg
*
pSchedMsg
)
{
SSqlObj
*
pSql
=
pSchedMsg
->
ahandle
;
SPair
*
p
=
pSchedMsg
->
msg
;
for
(
int32_t
i
=
p
->
first
;
i
<
p
->
second
;
++
i
)
{
SSqlObj
*
pSub
=
pSql
->
pSubs
[
i
];
SRetrieveSupport
*
pSupport
=
pSub
->
param
;
tscDebug
(
"0x%"
PRIx64
" sub:0x%"
PRIx64
" launch subquery, orderOfSub:%d."
,
pSql
->
self
,
pSub
->
self
,
pSupport
->
subqueryIndex
);
tscBuildAndSendRequest
(
pSub
,
NULL
);
}
tfree
(
p
);
}
int32_t
tscHandleMasterSTableQuery
(
SSqlObj
*
pSql
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
...
...
@@ -2548,12 +2569,32 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
return
pRes
->
code
;
}
for
(
int32_t
j
=
0
;
j
<
pState
->
numOfSub
;
++
j
)
{
SSqlObj
*
pSub
=
pSql
->
pSubs
[
j
];
SRetrieveSupport
*
pSupport
=
pSub
->
param
;
// concurrently sent the query requests.
const
int32_t
MAX_REQUEST_PER_TASK
=
8
;
tscDebug
(
"0x%"
PRIx64
" sub:0x%"
PRIx64
" launch subquery, orderOfSub:%d."
,
pSql
->
self
,
pSub
->
self
,
pSupport
->
subqueryIndex
);
tscBuildAndSendRequest
(
pSub
,
NULL
);
int32_t
numOfTasks
=
(
pState
->
numOfSub
+
MAX_REQUEST_PER_TASK
-
1
)
/
MAX_REQUEST_PER_TASK
;
assert
(
numOfTasks
>=
1
);
int32_t
num
=
(
pState
->
numOfSub
/
numOfTasks
)
+
1
;
tscDebug
(
"0x%"
PRIx64
" query will be sent by %d threads"
,
pSql
->
self
,
numOfTasks
);
for
(
int32_t
j
=
0
;
j
<
numOfTasks
;
++
j
)
{
SSchedMsg
schedMsg
=
{
0
};
schedMsg
.
fp
=
doSendQueryReqs
;
schedMsg
.
ahandle
=
(
void
*
)
pSql
;
schedMsg
.
thandle
=
NULL
;
SPair
*
p
=
calloc
(
1
,
sizeof
(
SPair
));
p
->
first
=
j
*
num
;
if
(
j
==
numOfTasks
-
1
)
{
p
->
second
=
pState
->
numOfSub
;
}
else
{
p
->
second
=
(
j
+
1
)
*
num
;
}
schedMsg
.
msg
=
p
;
taosScheduleTask
(
tscQhandle
,
&
schedMsg
);
}
return
TSDB_CODE_SUCCESS
;
...
...
src/client/src/tscUtil.c
浏览文件 @
beb74d6d
...
...
@@ -2093,6 +2093,22 @@ TAOS_FIELD tscCreateField(int8_t type, const char* name, int16_t bytes) {
return
f
;
}
int32_t
tscGetFirstInvisibleFieldPos
(
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
->
fieldsInfo
.
numOfOutput
<=
0
||
pQueryInfo
->
fieldsInfo
.
internalField
==
NULL
)
{
return
0
;
}
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
SInternalField
*
pField
=
taosArrayGet
(
pQueryInfo
->
fieldsInfo
.
internalField
,
i
);
if
(
!
pField
->
visible
)
{
return
i
;
}
}
return
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
}
SInternalField
*
tscFieldInfoAppend
(
SFieldInfo
*
pFieldInfo
,
TAOS_FIELD
*
pField
)
{
assert
(
pFieldInfo
!=
NULL
);
pFieldInfo
->
numOfOutput
++
;
...
...
@@ -3778,6 +3794,8 @@ static void tscSubqueryCompleteCallback(void* param, TAOS_RES* tres, int code) {
tscDebug
(
"0x%"
PRIx64
" all subquery response received, retry"
,
pParentSql
->
self
);
if
(
code
&&
!
((
code
==
TSDB_CODE_TDB_INVALID_TABLE_ID
||
code
==
TSDB_CODE_VND_INVALID_VGROUP_ID
)
&&
pParentSql
->
retry
<
pParentSql
->
maxRetry
))
{
pParentSql
->
res
.
code
=
code
;
tscAsyncResultOnError
(
pParentSql
);
return
;
}
...
...
@@ -3858,6 +3876,7 @@ void executeQuery(SSqlObj* pSql, SQueryInfo* pQueryInfo) {
pNew
->
signature
=
pNew
;
pNew
->
sqlstr
=
strdup
(
pSql
->
sqlstr
);
pNew
->
fp
=
tscSubqueryCompleteCallback
;
pNew
->
fetchFp
=
tscSubqueryCompleteCallback
;
pNew
->
maxRetry
=
pSql
->
maxRetry
;
pNew
->
cmd
.
resColumnId
=
TSDB_RES_COL_ID
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
浏览文件 @
beb74d6d
...
...
@@ -18,7 +18,7 @@ public class RestfulConnection extends AbstractConnection {
private
final
String
url
;
private
final
String
database
;
private
final
String
token
;
/******************************************************/
private
boolean
isClosed
;
private
final
DatabaseMetaData
metadata
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
beb74d6d
...
...
@@ -88,17 +88,24 @@ public class RestfulStatement extends AbstractStatement {
}
private
String
getUrl
()
throws
SQLException
{
String
dbname
=
conn
.
getClientInfo
(
TSDBDriver
.
PROPERTY_KEY_DBNAME
);
if
(
dbname
==
null
||
dbname
.
trim
().
isEmpty
())
{
dbname
=
""
;
}
else
{
dbname
=
"/"
+
dbname
.
toLowerCase
();
}
TimestampFormat
timestampFormat
=
TimestampFormat
.
valueOf
(
conn
.
getClientInfo
(
TSDBDriver
.
PROPERTY_KEY_TIMESTAMP_FORMAT
).
trim
().
toUpperCase
());
String
url
;
switch
(
timestampFormat
)
{
case
TIMESTAMP:
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sqlt"
;
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sqlt"
+
dbname
;
break
;
case
UTC:
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sqlutc"
;
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sqlutc"
+
dbname
;
break
;
default
:
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sql"
;
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sql"
+
dbname
;
}
return
url
;
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/MultiConnectionWithDifferentDbTest.java
0 → 100644
浏览文件 @
beb74d6d
package
com.taosdata.jdbc.cases
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.sql.*
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
import
java.util.stream.IntStream
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
public
class
MultiConnectionWithDifferentDbTest
{
private
static
String
host
=
"127.0.0.1"
;
private
static
String
db1
=
"db1"
;
private
static
String
db2
=
"db2"
;
private
long
ts
;
@Test
public
void
test
()
{
List
<
Thread
>
threads
=
IntStream
.
range
(
1
,
3
).
mapToObj
(
i
->
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
for
(
int
j
=
0
;
j
<
10
;
j
++)
{
queryDb
();
try
{
TimeUnit
.
SECONDS
.
sleep
(
1
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
private
void
queryDb
()
{
String
url
=
"jdbc:TAOS-RS://"
+
host
+
":6041/db"
+
i
+
"?user=root&password=taosdata"
;
try
(
Connection
connection
=
DriverManager
.
getConnection
(
url
))
{
Statement
stmt
=
connection
.
createStatement
();
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from weather"
);
assertNotNull
(
rs
);
rs
.
next
();
long
actual
=
rs
.
getTimestamp
(
"ts"
).
getTime
();
assertEquals
(
ts
,
actual
);
int
f1
=
rs
.
getInt
(
"f1"
);
assertEquals
(
i
,
f1
);
String
loc
=
i
==
1
?
"beijing"
:
"shanghai"
;
String
loc_actual
=
rs
.
getString
(
"loc"
);
assertEquals
(
loc
,
loc_actual
);
stmt
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
},
"thread-"
+
i
)).
collect
(
Collectors
.
toList
());
threads
.
forEach
(
Thread:
:
start
);
for
(
Thread
t
:
threads
)
{
try
{
t
.
join
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
@Before
public
void
before
()
{
ts
=
System
.
currentTimeMillis
();
try
{
Connection
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/?user=root&password=taosdata"
);
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop database if exists "
+
db1
);
stmt
.
execute
(
"create database if not exists "
+
db1
);
stmt
.
execute
(
"use "
+
db1
);
stmt
.
execute
(
"create table weather(ts timestamp, f1 int) tags(loc nchar(10))"
);
stmt
.
execute
(
"insert into t1 using weather tags('beijing') values("
+
ts
+
", 1)"
);
stmt
.
execute
(
"drop database if exists "
+
db2
);
stmt
.
execute
(
"create database if not exists "
+
db2
);
stmt
.
execute
(
"use "
+
db2
);
stmt
.
execute
(
"create table weather(ts timestamp, f1 int) tags(loc nchar(10))"
);
stmt
.
execute
(
"insert into t1 using weather tags('shanghai') values("
+
ts
+
", 2)"
);
conn
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/DatabaseSpecifiedTest.java
0 → 100644
浏览文件 @
beb74d6d
package
com.taosdata.jdbc.rs
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.sql.*
;
import
static
org
.
junit
.
Assert
.*;
public
class
DatabaseSpecifiedTest
{
private
static
String
host
=
"127.0.0.1"
;
private
static
String
dbname
=
"test_db_spec"
;
private
Connection
connection
;
private
long
ts
;
@Test
public
void
test
()
throws
SQLException
{
// when
connection
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/"
+
dbname
+
"?user=root&password=taosdata"
);
try
(
Statement
stmt
=
connection
.
createStatement
();)
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from weather"
);
//then
assertNotNull
(
rs
);
rs
.
next
();
long
now
=
rs
.
getTimestamp
(
"ts"
).
getTime
();
assertEquals
(
ts
,
now
);
int
f1
=
rs
.
getInt
(
2
);
assertEquals
(
1
,
f1
);
String
loc
=
rs
.
getString
(
"loc"
);
assertEquals
(
"beijing"
,
loc
);
}
connection
.
close
();
}
@Before
public
void
before
()
{
ts
=
System
.
currentTimeMillis
();
try
{
Connection
connection
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/?user=root&password=taosdata"
);
Statement
stmt
=
connection
.
createStatement
();
stmt
.
execute
(
"drop database if exists "
+
dbname
);
stmt
.
execute
(
"create database if not exists "
+
dbname
);
stmt
.
execute
(
"use "
+
dbname
);
stmt
.
execute
(
"create table weather(ts timestamp, f1 int) tags(loc nchar(10))"
);
stmt
.
execute
(
"insert into t1 using weather tags('beijing') values( "
+
ts
+
", 1)"
);
stmt
.
close
();
connection
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@After
public
void
after
()
{
try
{
if
(
connection
!=
null
)
connection
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/connector/python/examples/demo.py
浏览文件 @
beb74d6d
...
...
@@ -2,7 +2,7 @@ import taos
conn
=
taos
.
connect
(
host
=
'127.0.0.1'
,
user
=
'root'
,
passwor
kd
=
'tao
data'
,
passwor
d
=
'taos
data'
,
database
=
'log'
)
cursor
=
conn
.
cursor
()
...
...
src/connector/python/taos/cinterface.py
浏览文件 @
beb74d6d
...
...
@@ -268,7 +268,7 @@ def _load_taos():
try
:
return
load_func
[
platform
.
system
()]()
except
:
sys
.
exit
(
'unsupported platform to TDengine connector
'
)
raise
InterfaceError
(
'unsupported platform or failed to load taos client library
'
)
class
CTaosInterface
(
object
):
...
...
src/kit/shell/inc/shell.h
浏览文件 @
beb74d6d
...
...
@@ -55,6 +55,8 @@ typedef struct SShellArguments {
int
abort
;
int
port
;
int
pktLen
;
int
pktNum
;
char
*
pktType
;
char
*
netTestRole
;
}
SShellArguments
;
...
...
src/kit/shell/src/shellLinux.c
浏览文件 @
beb74d6d
...
...
@@ -50,6 +50,8 @@ static struct argp_option options[] = {
{
"timezone"
,
'z'
,
"TIMEZONE"
,
0
,
"Time zone of the shell, default is local."
},
{
"netrole"
,
'n'
,
"NETROLE"
,
0
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync|speen|fqdn."
},
{
"pktlen"
,
'l'
,
"PKTLEN"
,
0
,
"Packet length used for net test, default is 1000 bytes."
},
{
"pktnum"
,
'N'
,
"PKTNUM"
,
0
,
"Packet numbers used for net test, default is 100."
},
{
"pkttype"
,
'S'
,
"PKTTYPE"
,
0
,
"Packet type used for net test, default is TCP."
},
{
0
}};
static
error_t
parse_opt
(
int
key
,
char
*
arg
,
struct
argp_state
*
state
)
{
...
...
@@ -106,7 +108,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
arguments
->
is_raw_time
=
true
;
break
;
case
'f'
:
if
(
wordexp
(
arg
,
&
full_path
,
0
)
!=
0
)
{
if
(
(
0
==
strlen
(
arg
))
||
(
wordexp
(
arg
,
&
full_path
,
0
)
!=
0
)
)
{
fprintf
(
stderr
,
"Invalid path %s
\n
"
,
arg
);
return
-
1
;
}
...
...
@@ -146,6 +148,17 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
return
-
1
;
}
break
;
case
'N'
:
if
(
arg
)
{
arguments
->
pktNum
=
atoi
(
arg
);
}
else
{
fprintf
(
stderr
,
"Invalid packet number
\n
"
);
return
-
1
;
}
break
;
case
'S'
:
arguments
->
pktType
=
arg
;
break
;
case
OPT_ABORT
:
arguments
->
abort
=
1
;
break
;
...
...
src/kit/shell/src/shellMain.c
浏览文件 @
beb74d6d
...
...
@@ -85,6 +85,8 @@ SShellArguments args = {
.
threadNum
=
5
,
.
commands
=
NULL
,
.
pktLen
=
1000
,
.
pktNum
=
100
,
.
pktType
=
"TCP"
,
.
netTestRole
=
NULL
};
...
...
@@ -118,7 +120,7 @@ int main(int argc, char* argv[]) {
printf
(
"Failed to init taos"
);
exit
(
EXIT_FAILURE
);
}
taosNetTest
(
args
.
netTestRole
,
args
.
host
,
args
.
port
,
args
.
pktLen
);
taosNetTest
(
args
.
netTestRole
,
args
.
host
,
args
.
port
,
args
.
pktLen
,
args
.
pktNum
,
args
.
pktType
);
exit
(
0
);
}
...
...
src/kit/shell/src/shellWindows.c
浏览文件 @
beb74d6d
...
...
@@ -55,9 +55,13 @@ void printHelp() {
printf
(
"%s%s
\n
"
,
indent
,
"-t"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Time zone of the shell, default is local."
);
printf
(
"%s%s
\n
"
,
indent
,
"-n"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync."
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Net role when network connectivity test, default is startup, options: client|server|rpc|startup|sync
|speed|fqdn
."
);
printf
(
"%s%s
\n
"
,
indent
,
"-l"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet length used for net test, default is 1000 bytes."
);
printf
(
"%s%s
\n
"
,
indent
,
"-N"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet numbers used for net test, default is 100."
);
printf
(
"%s%s
\n
"
,
indent
,
"-S"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Packet type used for net test, default is TCP."
);
printf
(
"%s%s
\n
"
,
indent
,
"-V"
);
printf
(
"%s%s%s
\n
"
,
indent
,
indent
,
"Print program version."
);
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
beb74d6d
...
...
@@ -443,6 +443,7 @@ typedef struct SThreadInfo_S {
uint64_t
start_table_from
;
uint64_t
end_table_to
;
int64_t
ntables
;
int64_t
tables_created
;
uint64_t
data_of_rate
;
int64_t
start_time
;
char
*
cols
;
...
...
@@ -639,6 +640,7 @@ SArguments g_args = {
static
SDbs
g_Dbs
;
static
int64_t
g_totalChildTables
=
0
;
static
int64_t
g_actualChildTables
=
0
;
static
SQueryMetaInfo
g_queryInfo
;
static
FILE
*
g_fpOfInsertResult
=
NULL
;
...
...
@@ -659,6 +661,13 @@ static FILE * g_fpOfInsertResult = NULL;
fprintf(stderr, "PERF: "fmt, __VA_ARGS__); } while(0)
#define errorPrint(fmt, ...) \
do {\
fprintf(stderr, " \033[31m");\
fprintf(stderr, "ERROR: "fmt, __VA_ARGS__);\
fprintf(stderr, " \033[0m");\
} while(0)
#define errorPrint2(fmt, ...) \
do {\
struct tm Tm, *ptm;\
struct timeval timeSecs; \
...
...
@@ -671,8 +680,8 @@ static FILE * g_fpOfInsertResult = NULL;
ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,\
ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec,\
taosGetSelfPthreadId());\
fprintf(stderr, "ERROR: "fmt, __VA_ARGS__);\
fprintf(stderr, " \033[0m");\
errorPrint(fmt, __VA_ARGS__);\
} while(0)
// for strncpy buffer overflow
...
...
@@ -815,6 +824,12 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
for
(
int
i
=
1
;
i
<
argc
;
i
++
)
{
if
(
strcmp
(
argv
[
i
],
"-f"
)
==
0
)
{
arguments
->
demo_mode
=
false
;
if
(
NULL
==
argv
[
i
+
1
])
{
printHelp
();
errorPrint
(
"%s"
,
"
\n\t
-f need a valid json file following!
\n
"
);
exit
(
EXIT_FAILURE
);
}
arguments
->
metaFile
=
argv
[
++
i
];
}
else
if
(
strcmp
(
argv
[
i
],
"-c"
)
==
0
)
{
if
(
argc
==
i
+
1
)
{
...
...
@@ -951,6 +966,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
exit
(
EXIT_FAILURE
);
}
arguments
->
num_of_tables
=
atoi
(
argv
[
++
i
]);
g_totalChildTables
=
arguments
->
num_of_tables
;
}
else
if
(
strcmp
(
argv
[
i
],
"-n"
)
==
0
)
{
if
((
argc
==
i
+
1
)
||
(
!
isStringNumber
(
argv
[
i
+
1
])))
{
...
...
@@ -1121,7 +1137,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
exit
(
EXIT_FAILURE
);
}
}
else
if
((
strcmp
(
argv
[
i
],
"--version"
)
==
0
)
||
(
strcmp
(
argv
[
i
],
"-V"
)
==
0
)){
(
strcmp
(
argv
[
i
],
"-V"
)
==
0
))
{
printVersion
();
exit
(
0
);
}
else
if
(
strcmp
(
argv
[
i
],
"--help"
)
==
0
)
{
...
...
@@ -1227,7 +1243,7 @@ static int queryDbExec(TAOS *taos, char *command, QUERY_TYPE type, bool quiet) {
verbosePrint
(
"%s() LN%d - command: %s
\n
"
,
__func__
,
__LINE__
,
command
);
if
(
code
!=
0
)
{
if
(
!
quiet
)
{
errorPrint
(
"Failed to execute %s, reason: %s
\n
"
,
errorPrint
2
(
"Failed to execute %s, reason: %s
\n
"
,
command
,
taos_errstr
(
res
));
}
taos_free_result
(
res
);
...
...
@@ -1249,7 +1265,7 @@ static void appendResultBufToFile(char *resultBuf, threadInfo *pThreadInfo)
{
pThreadInfo
->
fp
=
fopen
(
pThreadInfo
->
filePath
,
"at"
);
if
(
pThreadInfo
->
fp
==
NULL
)
{
errorPrint
(
errorPrint
2
(
"%s() LN%d, failed to open result file: %s, result will not save to file
\n
"
,
__func__
,
__LINE__
,
pThreadInfo
->
filePath
);
return
;
...
...
@@ -1268,7 +1284,7 @@ static void fetchResult(TAOS_RES *res, threadInfo* pThreadInfo) {
char
*
databuf
=
(
char
*
)
calloc
(
1
,
100
*
1024
*
1024
);
if
(
databuf
==
NULL
)
{
errorPrint
(
"%s() LN%d, failed to malloc, warning: save result to file slowly!
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to malloc, warning: save result to file slowly!
\n
"
,
__func__
,
__LINE__
);
return
;
}
...
...
@@ -1308,7 +1324,7 @@ static void selectAndGetResult(
if
(
0
==
strncasecmp
(
g_queryInfo
.
queryMode
,
"taosc"
,
strlen
(
"taosc"
)))
{
TAOS_RES
*
res
=
taos_query
(
pThreadInfo
->
taos
,
command
);
if
(
res
==
NULL
||
taos_errno
(
res
)
!=
0
)
{
errorPrint
(
"%s() LN%d, failed to execute sql:%s, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to execute sql:%s, reason:%s
\n
"
,
__func__
,
__LINE__
,
command
,
taos_errstr
(
res
));
taos_free_result
(
res
);
return
;
...
...
@@ -1327,19 +1343,19 @@ static void selectAndGetResult(
}
}
else
{
errorPrint
(
"%s() LN%d, unknown query mode: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, unknown query mode: %s
\n
"
,
__func__
,
__LINE__
,
g_queryInfo
.
queryMode
);
}
}
static
char
*
rand_bool_str
(){
static
char
*
rand_bool_str
()
{
static
int
cursor
;
cursor
++
;
if
(
cursor
>
(
MAX_PREPARED_RAND
-
1
))
cursor
=
0
;
return
g_randbool_buff
+
((
cursor
%
MAX_PREPARED_RAND
)
*
BOOL_BUFF_LEN
);
}
static
int32_t
rand_bool
(){
static
int32_t
rand_bool
()
{
static
int
cursor
;
cursor
++
;
if
(
cursor
>
(
MAX_PREPARED_RAND
-
1
))
cursor
=
0
;
...
...
@@ -1472,7 +1488,7 @@ static char *demo_phase_float_str() {
return
g_rand_phase_buff
+
((
cursor
%
MAX_PREPARED_RAND
)
*
FLOAT_BUFF_LEN
);
}
static
float
UNUSED_FUNC
demo_phase_float
(){
static
float
UNUSED_FUNC
demo_phase_float
()
{
static
int
cursor
;
cursor
++
;
if
(
cursor
>
(
MAX_PREPARED_RAND
-
1
))
cursor
=
0
;
...
...
@@ -1551,7 +1567,7 @@ static void init_rand_data() {
g_randdouble_buff
=
calloc
(
1
,
DOUBLE_BUFF_LEN
*
MAX_PREPARED_RAND
);
assert
(
g_randdouble_buff
);
for
(
int
i
=
0
;
i
<
MAX_PREPARED_RAND
;
i
++
){
for
(
int
i
=
0
;
i
<
MAX_PREPARED_RAND
;
i
++
)
{
g_randint
[
i
]
=
(
int
)(
taosRandom
()
%
65535
);
sprintf
(
g_randint_buff
+
i
*
INT_BUFF_LEN
,
"%d"
,
g_randint
[
i
]);
...
...
@@ -2177,7 +2193,7 @@ static int xDumpResultToFile(const char* fname, TAOS_RES* tres) {
FILE
*
fp
=
fopen
(
fname
,
"at"
);
if
(
fp
==
NULL
)
{
errorPrint
(
"%s() LN%d, failed to open file: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to open file: %s
\n
"
,
__func__
,
__LINE__
,
fname
);
return
-
1
;
}
...
...
@@ -2224,7 +2240,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) {
int32_t
code
=
taos_errno
(
res
);
if
(
code
!=
0
)
{
errorPrint
(
"failed to run <show databases>, reason: %s
\n
"
,
errorPrint
2
(
"failed to run <show databases>, reason: %s
\n
"
,
taos_errstr
(
res
));
return
-
1
;
}
...
...
@@ -2240,7 +2256,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) {
dbInfos
[
count
]
=
(
SDbInfo
*
)
calloc
(
1
,
sizeof
(
SDbInfo
));
if
(
dbInfos
[
count
]
==
NULL
)
{
errorPrint
(
"failed to allocate memory for some dbInfo[%d]
\n
"
,
count
);
errorPrint
2
(
"failed to allocate memory for some dbInfo[%d]
\n
"
,
count
);
return
-
1
;
}
...
...
@@ -2393,7 +2409,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port
request_buf
=
malloc
(
req_buf_len
);
if
(
NULL
==
request_buf
)
{
errorPrint
(
"%s"
,
"
ERROR,
cannot allocate memory.
\n
"
);
errorPrint
(
"%s"
,
"cannot allocate memory.
\n
"
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2532,7 +2548,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port
static
char
*
getTagValueFromTagSample
(
SSuperTable
*
stbInfo
,
int
tagUsePos
)
{
char
*
dataBuf
=
(
char
*
)
calloc
(
TSDB_MAX_SQL_LEN
+
1
,
1
);
if
(
NULL
==
dataBuf
)
{
errorPrint
(
"%s() LN%d, calloc failed! size:%d
\n
"
,
errorPrint
2
(
"%s() LN%d, calloc failed! size:%d
\n
"
,
__func__
,
__LINE__
,
TSDB_MAX_SQL_LEN
+
1
);
return
NULL
;
}
...
...
@@ -2632,7 +2648,7 @@ static char* generateTagValuesForStb(SSuperTable* stbInfo, int64_t tableSeq) {
dataLen
+=
snprintf
(
dataBuf
+
dataLen
,
TSDB_MAX_SQL_LEN
-
dataLen
,
"%"
PRId64
","
,
rand_bigint
());
}
else
{
errorPrint
(
"No support data type: %s
\n
"
,
stbInfo
->
tags
[
i
].
dataType
);
errorPrint
2
(
"No support data type: %s
\n
"
,
stbInfo
->
tags
[
i
].
dataType
);
tmfree
(
dataBuf
);
return
NULL
;
}
...
...
@@ -2671,7 +2687,7 @@ static int calcRowLen(SSuperTable* superTbls) {
}
else
if
(
strcasecmp
(
dataType
,
"TIMESTAMP"
)
==
0
)
{
lenOfOneRow
+=
TIMESTAMP_BUFF_LEN
;
}
else
{
errorPrint
(
"get error data type : %s
\n
"
,
dataType
);
errorPrint
2
(
"get error data type : %s
\n
"
,
dataType
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -2702,7 +2718,7 @@ static int calcRowLen(SSuperTable* superTbls) {
}
else
if
(
strcasecmp
(
dataType
,
"DOUBLE"
)
==
0
)
{
lenOfTagOfOneRow
+=
superTbls
->
tags
[
tagIndex
].
dataLen
+
DOUBLE_BUFF_LEN
;
}
else
{
errorPrint
(
"get error tag type : %s
\n
"
,
dataType
);
errorPrint
2
(
"get error tag type : %s
\n
"
,
dataType
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -2739,7 +2755,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
if
(
code
!=
0
)
{
taos_free_result
(
res
);
taos_close
(
taos
);
errorPrint
(
"%s() LN%d, failed to run command %s
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to run command %s
\n
"
,
__func__
,
__LINE__
,
command
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2751,7 +2767,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
if
(
NULL
==
childTblName
)
{
taos_free_result
(
res
);
taos_close
(
taos
);
errorPrint
(
"%s() LN%d, failed to allocate memory!
\n
"
,
__func__
,
__LINE__
);
errorPrint
2
(
"%s() LN%d, failed to allocate memory!
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -2761,7 +2777,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
int32_t
*
len
=
taos_fetch_lengths
(
res
);
if
(
0
==
strlen
((
char
*
)
row
[
0
]))
{
errorPrint
(
"%s() LN%d, No.%"
PRId64
" table return empty name
\n
"
,
errorPrint
2
(
"%s() LN%d, No.%"
PRId64
" table return empty name
\n
"
,
__func__
,
__LINE__
,
count
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2782,7 +2798,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
tmfree
(
childTblName
);
taos_free_result
(
res
);
taos_close
(
taos
);
errorPrint
(
"%s() LN%d, realloc fail for save child table name of %s.%s
\n
"
,
errorPrint
2
(
"%s() LN%d, realloc fail for save child table name of %s.%s
\n
"
,
__func__
,
__LINE__
,
dbName
,
sTblName
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2879,7 +2895,7 @@ static int getSuperTableFromServer(TAOS * taos, char* dbName,
int childTblCount = 10000;
superTbls->childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN);
if (superTbls->childTblName == NULL) {
errorPrint("%s() LN%d, alloc memory failed!\n", __func__, __LINE__);
errorPrint
2
("%s() LN%d, alloc memory failed!\n", __func__, __LINE__);
return -1;
}
getAllChildNameOfSuperTable(taos, dbName,
...
...
@@ -2905,7 +2921,7 @@ static int createSuperTable(
int
lenOfOneRow
=
0
;
if
(
superTbl
->
columnCount
==
0
)
{
errorPrint
(
"%s() LN%d, super table column count is %d
\n
"
,
errorPrint
2
(
"%s() LN%d, super table column count is %d
\n
"
,
__func__
,
__LINE__
,
superTbl
->
columnCount
);
free
(
command
);
return
-
1
;
...
...
@@ -2969,7 +2985,7 @@ static int createSuperTable(
}
else
{
taos_close
(
taos
);
free
(
command
);
errorPrint
(
"%s() LN%d, config error data type : %s
\n
"
,
errorPrint
2
(
"%s() LN%d, config error data type : %s
\n
"
,
__func__
,
__LINE__
,
dataType
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2982,7 +2998,7 @@ static int createSuperTable(
if
(
NULL
==
superTbl
->
colsOfCreateChildTable
)
{
taos_close
(
taos
);
free
(
command
);
errorPrint
(
"%s() LN%d, Failed when calloc, size:%d"
,
errorPrint
2
(
"%s() LN%d, Failed when calloc, size:%d"
,
__func__
,
__LINE__
,
len
+
1
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -2992,7 +3008,7 @@ static int createSuperTable(
__func__
,
__LINE__
,
superTbl
->
colsOfCreateChildTable
);
if
(
superTbl
->
tagCount
==
0
)
{
errorPrint
(
"%s() LN%d, super table tag count is %d
\n
"
,
errorPrint
2
(
"%s() LN%d, super table tag count is %d
\n
"
,
__func__
,
__LINE__
,
superTbl
->
tagCount
);
free
(
command
);
return
-
1
;
...
...
@@ -3059,7 +3075,7 @@ static int createSuperTable(
}
else
{
taos_close
(
taos
);
free
(
command
);
errorPrint
(
"%s() LN%d, config error tag type : %s
\n
"
,
errorPrint
2
(
"%s() LN%d, config error tag type : %s
\n
"
,
__func__
,
__LINE__
,
dataType
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3074,7 +3090,7 @@ static int createSuperTable(
"create table if not exists %s.%s (ts timestamp%s) tags %s"
,
dbName
,
superTbl
->
sTblName
,
cols
,
tags
);
if
(
0
!=
queryDbExec
(
taos
,
command
,
NO_INSERT_TYPE
,
false
))
{
errorPrint
(
"create supertable %s failed!
\n\n
"
,
errorPrint
2
(
"create supertable %s failed!
\n\n
"
,
superTbl
->
sTblName
);
free
(
command
);
return
-
1
;
...
...
@@ -3090,7 +3106,7 @@ int createDatabasesAndStables(char *command) {
int
ret
=
0
;
taos
=
taos_connect
(
g_Dbs
.
host
,
g_Dbs
.
user
,
g_Dbs
.
password
,
NULL
,
g_Dbs
.
port
);
if
(
taos
==
NULL
)
{
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
errorPrint
2
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
return
-
1
;
}
...
...
@@ -3186,7 +3202,7 @@ int createDatabasesAndStables(char *command) {
if
(
0
!=
queryDbExec
(
taos
,
command
,
NO_INSERT_TYPE
,
false
))
{
taos_close
(
taos
);
errorPrint
(
"
\n
create database %s failed!
\n\n
"
,
errorPrint
(
"
\n
create database %s failed!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
);
return
-
1
;
}
...
...
@@ -3216,7 +3232,7 @@ int createDatabasesAndStables(char *command) {
ret
=
getSuperTableFromServer
(
taos
,
g_Dbs
.
db
[
i
].
dbName
,
&
g_Dbs
.
db
[
i
].
superTbls
[
j
]);
if
(
0
!=
ret
)
{
errorPrint
(
"
\n
get super table %s.%s info failed!
\n\n
"
,
errorPrint
2
(
"
\n
get super table %s.%s info failed!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sTblName
);
continue
;
}
...
...
@@ -3244,7 +3260,7 @@ static void* createTable(void *sarg)
pThreadInfo
->
buffer
=
calloc
(
buff_len
,
1
);
if
(
pThreadInfo
->
buffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Memory allocated failed!
\n
"
,
__func__
,
__LINE__
);
errorPrint
2
(
"%s() LN%d, Memory allocated failed!
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3263,10 +3279,11 @@ static void* createTable(void *sarg)
pThreadInfo
->
db_name
,
g_args
.
tb_prefix
,
i
,
pThreadInfo
->
cols
);
batchNum
++
;
}
else
{
if
(
stbInfo
==
NULL
)
{
free
(
pThreadInfo
->
buffer
);
errorPrint
(
"%s() LN%d, use metric, but super table info is NULL
\n
"
,
errorPrint
2
(
"%s() LN%d, use metric, but super table info is NULL
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
else
{
...
...
@@ -3312,11 +3329,12 @@ static void* createTable(void *sarg)
len
=
0
;
if
(
0
!=
queryDbExec
(
pThreadInfo
->
taos
,
pThreadInfo
->
buffer
,
NO_INSERT_TYPE
,
false
)){
errorPrint
(
"queryDbExec() failed. buffer:
\n
%s
\n
"
,
pThreadInfo
->
buffer
);
NO_INSERT_TYPE
,
false
))
{
errorPrint
2
(
"queryDbExec() failed. buffer:
\n
%s
\n
"
,
pThreadInfo
->
buffer
);
free
(
pThreadInfo
->
buffer
);
return
NULL
;
}
pThreadInfo
->
tables_created
+=
batchNum
;
uint64_t
currentPrintTime
=
taosGetTimestampMs
();
if
(
currentPrintTime
-
lastPrintTime
>
30
*
1000
)
{
...
...
@@ -3329,7 +3347,7 @@ static void* createTable(void *sarg)
if
(
0
!=
len
)
{
if
(
0
!=
queryDbExec
(
pThreadInfo
->
taos
,
pThreadInfo
->
buffer
,
NO_INSERT_TYPE
,
false
))
{
errorPrint
(
"queryDbExec() failed. buffer:
\n
%s
\n
"
,
pThreadInfo
->
buffer
);
errorPrint
2
(
"queryDbExec() failed. buffer:
\n
%s
\n
"
,
pThreadInfo
->
buffer
);
}
}
...
...
@@ -3374,7 +3392,7 @@ static int startMultiThreadCreateChildTable(
db_name
,
g_Dbs
.
port
);
if
(
pThreadInfo
->
taos
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to connect to TDengine, reason:%s
\n
"
,
__func__
,
__LINE__
,
taos_errstr
(
NULL
));
free
(
pids
);
free
(
infos
);
...
...
@@ -3388,6 +3406,7 @@ static int startMultiThreadCreateChildTable(
pThreadInfo
->
use_metric
=
true
;
pThreadInfo
->
cols
=
cols
;
pThreadInfo
->
minDelay
=
UINT64_MAX
;
pThreadInfo
->
tables_created
=
0
;
pthread_create
(
pids
+
i
,
NULL
,
createTable
,
pThreadInfo
);
}
...
...
@@ -3398,6 +3417,8 @@ static int startMultiThreadCreateChildTable(
for
(
int
i
=
0
;
i
<
threads
;
i
++
)
{
threadInfo
*
pThreadInfo
=
infos
+
i
;
taos_close
(
pThreadInfo
->
taos
);
g_actualChildTables
+=
pThreadInfo
->
tables_created
;
}
free
(
pids
);
...
...
@@ -3424,7 +3445,6 @@ static void createChildTables() {
verbosePrint
(
"%s() LN%d: %s
\n
"
,
__func__
,
__LINE__
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
colsOfCreateChildTable
);
uint64_t
startFrom
=
0
;
g_totalChildTables
+=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
;
verbosePrint
(
"%s() LN%d: create %"
PRId64
" child tables from %"
PRIu64
"
\n
"
,
__func__
,
__LINE__
,
g_totalChildTables
,
startFrom
);
...
...
@@ -3549,7 +3569,7 @@ static int readSampleFromCsvFileToMem(
FILE
*
fp
=
fopen
(
stbInfo
->
sampleFile
,
"r"
);
if
(
fp
==
NULL
)
{
errorPrint
(
"Failed to open sample file: %s, reason:%s
\n
"
,
errorPrint
(
"Failed to open sample file: %s, reason:%s
\n
"
,
stbInfo
->
sampleFile
,
strerror
(
errno
));
return
-
1
;
}
...
...
@@ -3561,7 +3581,7 @@ static int readSampleFromCsvFileToMem(
readLen
=
tgetline
(
&
line
,
&
n
,
fp
);
if
(
-
1
==
readLen
)
{
if
(
0
!=
fseek
(
fp
,
0
,
SEEK_SET
))
{
errorPrint
(
"Failed to fseek file: %s, reason:%s
\n
"
,
errorPrint
(
"Failed to fseek file: %s, reason:%s
\n
"
,
stbInfo
->
sampleFile
,
strerror
(
errno
));
fclose
(
fp
);
return
-
1
;
...
...
@@ -3604,7 +3624,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
// columns
cJSON
*
columns
=
cJSON_GetObjectItem
(
stbInfo
,
"columns"
);
if
(
columns
&&
columns
->
type
!=
cJSON_Array
)
{
printf
(
"ERROR:
failed to read json, columns not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, columns not found
\n
"
);
goto
PARSE_OVER
;
}
else
if
(
NULL
==
columns
)
{
superTbls
->
columnCount
=
0
;
...
...
@@ -3614,8 +3634,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
int
columnSize
=
cJSON_GetArraySize
(
columns
);
if
((
columnSize
+
1
/* ts */
)
>
TSDB_MAX_COLUMNS
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, column size overflow, max column size is %d
\n
"
,
__func__
,
__LINE__
,
TSDB_MAX_COLUMNS
);
errorPrint
(
"failed to read json, column size overflow, max column size is %d
\n
"
,
TSDB_MAX_COLUMNS
);
goto
PARSE_OVER
;
}
...
...
@@ -3633,8 +3653,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if
(
countObj
&&
countObj
->
type
==
cJSON_Number
)
{
count
=
countObj
->
valueint
;
}
else
if
(
countObj
&&
countObj
->
type
!=
cJSON_Number
)
{
errorPrint
(
"%s() LN%d, failed to read json, column count not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, column count not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
count
=
1
;
...
...
@@ -3645,8 +3664,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
cJSON
*
dataType
=
cJSON_GetObjectItem
(
column
,
"type"
);
if
(
!
dataType
||
dataType
->
type
!=
cJSON_String
||
dataType
->
valuestring
==
NULL
)
{
errorPrint
(
"%s() LN%d: failed to read json, column type not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, column type not found
\n
"
);
goto
PARSE_OVER
;
}
//tstrncpy(superTbls->columns[k].dataType, dataType->valuestring, DATATYPE_BUFF_LEN);
...
...
@@ -3674,8 +3692,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
}
if
((
index
+
1
/* ts */
)
>
MAX_NUM_COLUMNS
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, column size overflow, allowed max column size is %d
\n
"
,
__func__
,
__LINE__
,
MAX_NUM_COLUMNS
);
errorPrint
(
"failed to read json, column size overflow, allowed max column size is %d
\n
"
,
MAX_NUM_COLUMNS
);
goto
PARSE_OVER
;
}
...
...
@@ -3686,15 +3704,14 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
// tags
cJSON
*
tags
=
cJSON_GetObjectItem
(
stbInfo
,
"tags"
);
if
(
!
tags
||
tags
->
type
!=
cJSON_Array
)
{
errorPrint
(
"%s() LN%d, failed to read json, tags not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, tags not found
\n
"
);
goto
PARSE_OVER
;
}
int
tagSize
=
cJSON_GetArraySize
(
tags
);
if
(
tagSize
>
TSDB_MAX_TAGS
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, tags size overflow, max tag size is %d
\n
"
,
__func__
,
__LINE__
,
TSDB_MAX_TAGS
);
errorPrint
(
"failed to read json, tags size overflow, max tag size is %d
\n
"
,
TSDB_MAX_TAGS
);
goto
PARSE_OVER
;
}
...
...
@@ -3708,7 +3725,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if
(
countObj
&&
countObj
->
type
==
cJSON_Number
)
{
count
=
countObj
->
valueint
;
}
else
if
(
countObj
&&
countObj
->
type
!=
cJSON_Number
)
{
printf
(
"ERROR:
failed to read json, column count not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, column count not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
count
=
1
;
...
...
@@ -3719,8 +3736,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
cJSON
*
dataType
=
cJSON_GetObjectItem
(
tag
,
"type"
);
if
(
!
dataType
||
dataType
->
type
!=
cJSON_String
||
dataType
->
valuestring
==
NULL
)
{
errorPrint
(
"%s() LN%d, failed to read json, tag type not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, tag type not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
columnCase
.
dataType
,
dataType
->
valuestring
,
...
...
@@ -3730,8 +3746,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if
(
dataLen
&&
dataLen
->
type
==
cJSON_Number
)
{
columnCase
.
dataLen
=
dataLen
->
valueint
;
}
else
if
(
dataLen
&&
dataLen
->
type
!=
cJSON_Number
)
{
errorPrint
(
"%s() LN%d, failed to read json, column len not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, column len not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
columnCase
.
dataLen
=
0
;
...
...
@@ -3746,16 +3761,16 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
}
if
(
index
>
TSDB_MAX_TAGS
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, tags size overflow, allowed max tag count is %d
\n
"
,
__func__
,
__LINE__
,
TSDB_MAX_TAGS
);
errorPrint
(
"failed to read json, tags size overflow, allowed max tag count is %d
\n
"
,
TSDB_MAX_TAGS
);
goto
PARSE_OVER
;
}
superTbls
->
tagCount
=
index
;
if
((
superTbls
->
columnCount
+
superTbls
->
tagCount
+
1
/* ts */
)
>
TSDB_MAX_COLUMNS
)
{
errorPrint
(
"
%s() LN%d,
columns + tags is more than allowed max columns count: %d
\n
"
,
__func__
,
__LINE__
,
TSDB_MAX_COLUMNS
);
errorPrint
(
"columns + tags is more than allowed max columns count: %d
\n
"
,
TSDB_MAX_COLUMNS
);
goto
PARSE_OVER
;
}
ret
=
true
;
...
...
@@ -3778,7 +3793,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
host
)
{
tstrncpy
(
g_Dbs
.
host
,
"127.0.0.1"
,
MAX_HOSTNAME_SIZE
);
}
else
{
printf
(
"ERROR:
failed to read json, host not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, host not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3816,7 +3831,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
threads
)
{
g_Dbs
.
threadCount
=
1
;
}
else
{
printf
(
"ERROR:
failed to read json, threads not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, threads not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3826,32 +3841,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
threads2
)
{
g_Dbs
.
threadCountByCreateTbl
=
1
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, threads2 not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, threads2 not found
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
gInsertInterval
=
cJSON_GetObjectItem
(
root
,
"insert_interval"
);
if
(
gInsertInterval
&&
gInsertInterval
->
type
==
cJSON_Number
)
{
if
(
gInsertInterval
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, insert interval input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert interval input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_args
.
insert_interval
=
gInsertInterval
->
valueint
;
}
else
if
(
!
gInsertInterval
)
{
g_args
.
insert_interval
=
0
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, insert_interval input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert_interval input mistake
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
interlaceRows
=
cJSON_GetObjectItem
(
root
,
"interlace_rows"
);
if
(
interlaceRows
&&
interlaceRows
->
type
==
cJSON_Number
)
{
if
(
interlaceRows
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, interlace_rows input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, interlace_rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3859,8 +3870,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
interlaceRows
)
{
g_args
.
interlace_rows
=
0
;
// 0 means progressive mode, > 0 mean interlace mode. max value is less or equ num_of_records_per_req
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, interlace_rows input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, interlace_rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3933,14 +3943,14 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON
*
dbs
=
cJSON_GetObjectItem
(
root
,
"databases"
);
if
(
!
dbs
||
dbs
->
type
!=
cJSON_Array
)
{
printf
(
"ERROR:
failed to read json, databases not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, databases not found
\n
"
);
goto
PARSE_OVER
;
}
int
dbSize
=
cJSON_GetArraySize
(
dbs
);
if
(
dbSize
>
MAX_DB_COUNT
)
{
errorPrint
(
"
ERROR:
failed to read json, databases size overflow, max database is %d
\n
"
,
"failed to read json, databases size overflow, max database is %d
\n
"
,
MAX_DB_COUNT
);
goto
PARSE_OVER
;
}
...
...
@@ -3953,13 +3963,13 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
// dbinfo
cJSON
*
dbinfo
=
cJSON_GetObjectItem
(
dbinfos
,
"dbinfo"
);
if
(
!
dbinfo
||
dbinfo
->
type
!=
cJSON_Object
)
{
printf
(
"ERROR:
failed to read json, dbinfo not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, dbinfo not found
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
dbName
=
cJSON_GetObjectItem
(
dbinfo
,
"name"
);
if
(
!
dbName
||
dbName
->
type
!=
cJSON_String
||
dbName
->
valuestring
==
NULL
)
{
printf
(
"ERROR:
failed to read json, db name not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, db name not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
g_Dbs
.
db
[
i
].
dbName
,
dbName
->
valuestring
,
TSDB_DB_NAME_LEN
);
...
...
@@ -3974,8 +3984,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
drop
)
{
g_Dbs
.
db
[
i
].
drop
=
g_args
.
drop_database
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, drop input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, drop input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3987,7 +3996,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
precision
)
{
memset
(
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
0
,
SMALL_BUFF_LEN
);
}
else
{
printf
(
"ERROR:
failed to read json, precision not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, precision not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -3997,7 +4006,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
update
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
update
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, update not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, update not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4007,7 +4016,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
replica
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
replica
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, replica not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, replica not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4017,7 +4026,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
keep
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
keep
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, keep not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, keep not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4027,7 +4036,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
days
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
days
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, days not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, days not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4037,7 +4046,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
cache
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
cache
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, cache not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, cache not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4047,7 +4056,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
blocks
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
blocks
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, block not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, block not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4067,7 +4076,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
minRows
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
minRows
=
0
;
// 0 means default
}
else
{
printf
(
"ERROR:
failed to read json, minRows not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, minRows not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4077,7 +4086,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
maxRows
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
maxRows
=
0
;
// 0 means default
}
else
{
printf
(
"ERROR:
failed to read json, maxRows not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, maxRows not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4087,7 +4096,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
comp
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
comp
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, comp not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, comp not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4097,7 +4106,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
walLevel
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
walLevel
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, walLevel not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, walLevel not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4107,7 +4116,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
cacheLast
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
cacheLast
=
-
1
;
}
else
{
printf
(
"ERROR:
failed to read json, cacheLast not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, cacheLast not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4127,24 +4136,22 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
fsync
)
{
g_Dbs
.
db
[
i
].
dbCfg
.
fsync
=
-
1
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, fsync input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, fsync input mistake
\n
"
);
goto
PARSE_OVER
;
}
// super_talbes
cJSON
*
stables
=
cJSON_GetObjectItem
(
dbinfos
,
"super_tables"
);
if
(
!
stables
||
stables
->
type
!=
cJSON_Array
)
{
errorPrint
(
"%s() LN%d, failed to read json, super_tables not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, super_tables not found
\n
"
);
goto
PARSE_OVER
;
}
int
stbSize
=
cJSON_GetArraySize
(
stables
);
if
(
stbSize
>
MAX_SUPER_TABLE_COUNT
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, supertable size overflow, max supertable is %d
\n
"
,
__func__
,
__LINE__
,
MAX_SUPER_TABLE_COUNT
);
"failed to read json, supertable size overflow, max supertable is %d
\n
"
,
MAX_SUPER_TABLE_COUNT
);
goto
PARSE_OVER
;
}
...
...
@@ -4157,8 +4164,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON
*
stbName
=
cJSON_GetObjectItem
(
stbInfo
,
"name"
);
if
(
!
stbName
||
stbName
->
type
!=
cJSON_String
||
stbName
->
valuestring
==
NULL
)
{
errorPrint
(
"%s() LN%d, failed to read json, stb name not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, stb name not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sTblName
,
stbName
->
valuestring
,
...
...
@@ -4166,7 +4172,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON
*
prefix
=
cJSON_GetObjectItem
(
stbInfo
,
"childtable_prefix"
);
if
(
!
prefix
||
prefix
->
type
!=
cJSON_String
||
prefix
->
valuestring
==
NULL
)
{
printf
(
"ERROR:
failed to read json, childtable_prefix not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, childtable_prefix not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblPrefix
,
prefix
->
valuestring
,
...
...
@@ -4187,7 +4193,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
autoCreateTbl
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
autoCreateTable
=
PRE_CREATE_SUBTBL
;
}
else
{
printf
(
"ERROR:
failed to read json, auto_create_table not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, auto_create_table not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4197,7 +4203,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
batchCreateTbl
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
batchCreateTableNum
=
1000
;
}
else
{
printf
(
"ERROR:
failed to read json, batch_create_tbl_num not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, batch_create_tbl_num not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4217,8 +4223,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
childTblExists
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblExists
=
TBL_NO_EXISTS
;
}
else
{
errorPrint
(
"%s
() LN%d, failed to read json, child_table_exists not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, child_table_exists not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4228,11 +4234,12 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON
*
count
=
cJSON_GetObjectItem
(
stbInfo
,
"childtable_count"
);
if
(
!
count
||
count
->
type
!=
cJSON_Number
||
0
>=
count
->
valueint
)
{
errorPrint
(
"%s
() LN%d, failed to read json, childtable_count input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, childtable_count input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
=
count
->
valueint
;
g_totalChildTables
+=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
;
cJSON
*
dataSource
=
cJSON_GetObjectItem
(
stbInfo
,
"data_source"
);
if
(
dataSource
&&
dataSource
->
type
==
cJSON_String
...
...
@@ -4244,8 +4251,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
dataSource
,
"rand"
,
min
(
SMALL_BUFF_LEN
,
strlen
(
"rand"
)
+
1
));
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, data_source not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, data_source not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4259,8 +4265,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
0
==
strcasecmp
(
stbIface
->
valuestring
,
"stmt"
))
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
iface
=
STMT_IFACE
;
}
else
{
errorPrint
(
"
%s() LN%d,
failed to read json, insert_mode %s not recognized
\n
"
,
__func__
,
__LINE__
,
stbIface
->
valuestring
);
errorPrint
(
"failed to read json, insert_mode %s not recognized
\n
"
,
stbIface
->
valuestring
);
goto
PARSE_OVER
;
}
}
else
if
(
!
stbIface
)
{
...
...
@@ -4274,7 +4280,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if
((
childTbl_limit
)
&&
(
g_Dbs
.
db
[
i
].
drop
!=
true
)
&&
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblExists
==
TBL_ALREADY_EXISTS
))
{
if
(
childTbl_limit
->
type
!=
cJSON_Number
)
{
printf
(
"ERROR:
failed to read json, childtable_limit
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, childtable_limit
\n
"
);
goto
PARSE_OVER
;
}
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblLimit
=
childTbl_limit
->
valueint
;
...
...
@@ -4287,7 +4293,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
&&
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblExists
==
TBL_ALREADY_EXISTS
))
{
if
((
childTbl_offset
->
type
!=
cJSON_Number
)
||
(
0
>
childTbl_offset
->
valueint
))
{
printf
(
"ERROR:
failed to read json, childtable_offset
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, childtable_offset
\n
"
);
goto
PARSE_OVER
;
}
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblOffset
=
childTbl_offset
->
valueint
;
...
...
@@ -4303,7 +4309,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
startTimestamp
,
"now"
,
TSDB_DB_NAME_LEN
);
}
else
{
printf
(
"ERROR:
failed to read json, start_timestamp not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, start_timestamp not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4313,7 +4319,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
timestampStep
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
timeStampStep
=
g_args
.
timestamp_step
;
}
else
{
printf
(
"ERROR:
failed to read json, timestamp_step not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, timestamp_step not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4328,7 +4334,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleFormat
,
"csv"
,
SMALL_BUFF_LEN
);
}
else
{
printf
(
"ERROR:
failed to read json, sample_format not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, sample_format not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4343,7 +4349,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
memset
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleFile
,
0
,
MAX_FILE_NAME_LEN
);
}
else
{
printf
(
"ERROR:
failed to read json, sample_file not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, sample_file not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4361,7 +4367,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
memset
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagsFile
,
0
,
MAX_FILE_NAME_LEN
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagSource
=
0
;
}
else
{
printf
(
"ERROR:
failed to read json, tags_file not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, tags_file not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4377,8 +4383,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
maxSqlLen
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
maxSqlLen
=
g_args
.
max_sql_len
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, stbMaxSqlLen input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, stbMaxSqlLen input mistake
\n
"
);
goto
PARSE_OVER
;
}
/*
...
...
@@ -4395,31 +4400,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!multiThreadWriteOneTbl) {
g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0;
} else {
printf("ERROR:
failed to read json, multiThreadWriteOneTbl not found\n");
errorPrint("%s", "
failed to read json, multiThreadWriteOneTbl not found\n");
goto PARSE_OVER;
}
*/
cJSON
*
insertRows
=
cJSON_GetObjectItem
(
stbInfo
,
"insert_rows"
);
if
(
insertRows
&&
insertRows
->
type
==
cJSON_Number
)
{
if
(
insertRows
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, insert_rows input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert_rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertRows
=
insertRows
->
valueint
;
}
else
if
(
!
insertRows
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertRows
=
0x7FFFFFFFFFFFFFFF
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, insert_rows input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert_rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
stbInterlaceRows
=
cJSON_GetObjectItem
(
stbInfo
,
"interlace_rows"
);
if
(
stbInterlaceRows
&&
stbInterlaceRows
->
type
==
cJSON_Number
)
{
if
(
stbInterlaceRows
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, interlace rows input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, interlace rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
=
stbInterlaceRows
->
valueint
;
...
...
@@ -4437,8 +4439,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
g_Dbs
.
db
[
i
].
superTbls
[
j
].
interlaceRows
=
0
;
// 0 means progressive mode, > 0 mean interlace mode. max value is less or equ num_of_records_per_req
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, interlace rows input mistake
\n
"
,
__func__
,
__LINE__
);
"%s"
,
"failed to read json, interlace rows input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4454,7 +4455,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
disorderRatio
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRatio
=
0
;
}
else
{
printf
(
"ERROR:
failed to read json, disorderRatio not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, disorderRatio not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4464,7 +4465,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
}
else
if
(
!
disorderRange
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
disorderRange
=
1000
;
}
else
{
printf
(
"ERROR:
failed to read json, disorderRange not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, disorderRange not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4472,8 +4473,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if
(
insertInterval
&&
insertInterval
->
type
==
cJSON_Number
)
{
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
=
insertInterval
->
valueint
;
if
(
insertInterval
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, insert_interval input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert_interval input mistake
\n
"
);
goto
PARSE_OVER
;
}
}
else
if
(
!
insertInterval
)
{
...
...
@@ -4481,8 +4481,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
__func__
,
__LINE__
,
g_args
.
insert_interval
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
insertInterval
=
g_args
.
insert_interval
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, insert_interval input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, insert_interval input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4514,7 +4513,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
!
host
)
{
tstrncpy
(
g_queryInfo
.
host
,
"127.0.0.1"
,
MAX_HOSTNAME_SIZE
);
}
else
{
printf
(
"ERROR:
failed to read json, host not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, host not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4552,23 +4551,21 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
!
answerPrompt
)
{
g_args
.
answer_yes
=
false
;
}
else
{
printf
(
"ERROR:
failed to read json, confirm_parameter_prompt not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, confirm_parameter_prompt not found
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
gQueryTimes
=
cJSON_GetObjectItem
(
root
,
"query_times"
);
if
(
gQueryTimes
&&
gQueryTimes
->
type
==
cJSON_Number
)
{
if
(
gQueryTimes
->
valueint
<=
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, query_times input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s()"
,
"failed to read json, query_times input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_args
.
query_times
=
gQueryTimes
->
valueint
;
}
else
if
(
!
gQueryTimes
)
{
g_args
.
query_times
=
1
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, query_times input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, query_times input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4576,7 +4573,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
dbs
&&
dbs
->
type
==
cJSON_String
&&
dbs
->
valuestring
!=
NULL
)
{
tstrncpy
(
g_queryInfo
.
dbName
,
dbs
->
valuestring
,
TSDB_DB_NAME_LEN
);
}
else
if
(
!
dbs
)
{
printf
(
"ERROR:
failed to read json, databases not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, databases not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4590,7 +4587,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
tstrncpy
(
g_queryInfo
.
queryMode
,
"taosc"
,
min
(
SMALL_BUFF_LEN
,
strlen
(
"taosc"
)
+
1
));
}
else
{
printf
(
"ERROR:
failed to read json, query_mode not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, query_mode not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4600,7 +4597,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
g_queryInfo
.
specifiedQueryInfo
.
concurrent
=
1
;
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
=
0
;
}
else
if
(
specifiedQuery
->
type
!=
cJSON_Object
)
{
printf
(
"ERROR:
failed to read json, super_table_query not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, super_table_query not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
cJSON
*
queryInterval
=
cJSON_GetObjectItem
(
specifiedQuery
,
"query_interval"
);
...
...
@@ -4615,8 +4612,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
specifiedQueryTimes
&&
specifiedQueryTimes
->
type
==
cJSON_Number
)
{
if
(
specifiedQueryTimes
->
valueint
<=
0
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, query_times: %"
PRId64
", need be a valid (>0) number
\n
"
,
__func__
,
__LINE__
,
specifiedQueryTimes
->
valueint
);
"failed to read json, query_times: %"
PRId64
", need be a valid (>0) number
\n
"
,
specifiedQueryTimes
->
valueint
);
goto
PARSE_OVER
;
}
...
...
@@ -4633,8 +4630,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
concurrent
&&
concurrent
->
type
==
cJSON_Number
)
{
if
(
concurrent
->
valueint
<=
0
)
{
errorPrint
(
"%s() LN%d, query sqlCount %d or concurrent %d is not correct.
\n
"
,
__func__
,
__LINE__
,
"query sqlCount %d or concurrent %d is not correct.
\n
"
,
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
,
g_queryInfo
.
specifiedQueryInfo
.
concurrent
);
goto
PARSE_OVER
;
...
...
@@ -4652,8 +4648,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"async"
,
specifiedAsyncMode
->
valuestring
))
{
g_queryInfo
.
specifiedQueryInfo
.
asyncMode
=
ASYNC_MODE
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, async mode input error
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, async mode input error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4676,7 +4671,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"no"
,
restart
->
valuestring
))
{
g_queryInfo
.
specifiedQueryInfo
.
subscribeRestart
=
false
;
}
else
{
printf
(
"ERROR:
failed to read json, subscribe restart error
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, subscribe restart error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4692,7 +4687,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"no"
,
keepProgress
->
valuestring
))
{
g_queryInfo
.
specifiedQueryInfo
.
subscribeKeepProgress
=
0
;
}
else
{
printf
(
"ERROR:
failed to read json, subscribe keepProgress error
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, subscribe keepProgress error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4704,15 +4699,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
!
specifiedSqls
)
{
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
=
0
;
}
else
if
(
specifiedSqls
->
type
!=
cJSON_Array
)
{
errorPrint
(
"%s() LN%d, failed to read json, super sqls not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, super sqls not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
int
superSqlSize
=
cJSON_GetArraySize
(
specifiedSqls
);
if
(
superSqlSize
*
g_queryInfo
.
specifiedQueryInfo
.
concurrent
>
MAX_QUERY_SQL_COUNT
)
{
errorPrint
(
"%s() LN%d, failed to read json, query sql(%d) * concurrent(%d) overflow, max is %d
\n
"
,
__func__
,
__LINE__
,
errorPrint
(
"failed to read json, query sql(%d) * concurrent(%d) overflow, max is %d
\n
"
,
superSqlSize
,
g_queryInfo
.
specifiedQueryInfo
.
concurrent
,
MAX_QUERY_SQL_COUNT
);
...
...
@@ -4726,7 +4719,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON
*
sqlStr
=
cJSON_GetObjectItem
(
sql
,
"sql"
);
if
(
!
sqlStr
||
sqlStr
->
type
!=
cJSON_String
||
sqlStr
->
valuestring
==
NULL
)
{
printf
(
"ERROR:
failed to read json, sql not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, sql not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
g_queryInfo
.
specifiedQueryInfo
.
sql
[
j
],
...
...
@@ -4766,7 +4759,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
memset
(
g_queryInfo
.
specifiedQueryInfo
.
result
[
j
],
0
,
MAX_FILE_NAME_LEN
);
}
else
{
printf
(
"ERROR: failed to read json, super query result file not found
\n
"
);
errorPrint
(
"%s"
,
"failed to read json, super query result file not found
\n
"
);
goto
PARSE_OVER
;
}
}
...
...
@@ -4779,7 +4773,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
g_queryInfo
.
superQueryInfo
.
threadCnt
=
1
;
g_queryInfo
.
superQueryInfo
.
sqlCount
=
0
;
}
else
if
(
superQuery
->
type
!=
cJSON_Object
)
{
printf
(
"ERROR:
failed to read json, sub_table_query not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, sub_table_query not found
\n
"
);
ret
=
true
;
goto
PARSE_OVER
;
}
else
{
...
...
@@ -4793,24 +4787,22 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON
*
superQueryTimes
=
cJSON_GetObjectItem
(
superQuery
,
"query_times"
);
if
(
superQueryTimes
&&
superQueryTimes
->
type
==
cJSON_Number
)
{
if
(
superQueryTimes
->
valueint
<=
0
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, query_times: %"
PRId64
", need be a valid (>0) number
\n
"
,
__func__
,
__LINE__
,
superQueryTimes
->
valueint
);
errorPrint
(
"failed to read json, query_times: %"
PRId64
", need be a valid (>0) number
\n
"
,
superQueryTimes
->
valueint
);
goto
PARSE_OVER
;
}
g_queryInfo
.
superQueryInfo
.
queryTimes
=
superQueryTimes
->
valueint
;
}
else
if
(
!
superQueryTimes
)
{
g_queryInfo
.
superQueryInfo
.
queryTimes
=
g_args
.
query_times
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, query_times input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, query_times input mistake
\n
"
);
goto
PARSE_OVER
;
}
cJSON
*
threads
=
cJSON_GetObjectItem
(
superQuery
,
"threads"
);
if
(
threads
&&
threads
->
type
==
cJSON_Number
)
{
if
(
threads
->
valueint
<=
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, threads input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, threads input mistake
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4832,8 +4824,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
tstrncpy
(
g_queryInfo
.
superQueryInfo
.
sTblName
,
stblname
->
valuestring
,
TSDB_TABLE_NAME_LEN
);
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, super table name input error
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, super table name input error
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -4845,8 +4836,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"async"
,
superAsyncMode
->
valuestring
))
{
g_queryInfo
.
superQueryInfo
.
asyncMode
=
ASYNC_MODE
;
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, async mode input error
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, async mode input error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4856,8 +4846,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON
*
superInterval
=
cJSON_GetObjectItem
(
superQuery
,
"interval"
);
if
(
superInterval
&&
superInterval
->
type
==
cJSON_Number
)
{
if
(
superInterval
->
valueint
<
0
)
{
errorPrint
(
"%s() LN%d, failed to read json, interval input mistake
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, interval input mistake
\n
"
);
goto
PARSE_OVER
;
}
g_queryInfo
.
superQueryInfo
.
subscribeInterval
=
superInterval
->
valueint
;
...
...
@@ -4875,7 +4864,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"no"
,
subrestart
->
valuestring
))
{
g_queryInfo
.
superQueryInfo
.
subscribeRestart
=
false
;
}
else
{
printf
(
"ERROR:
failed to read json, subscribe restart error
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, subscribe restart error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4891,7 +4880,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
}
else
if
(
0
==
strcmp
(
"no"
,
superkeepProgress
->
valuestring
))
{
g_queryInfo
.
superQueryInfo
.
subscribeKeepProgress
=
0
;
}
else
{
printf
(
"ERROR: failed to read json, subscribe super table keepProgress error
\n
"
);
errorPrint
(
"%s"
,
"failed to read json, subscribe super table keepProgress error
\n
"
);
goto
PARSE_OVER
;
}
}
else
{
...
...
@@ -4928,14 +4918,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if
(
!
superSqls
)
{
g_queryInfo
.
superQueryInfo
.
sqlCount
=
0
;
}
else
if
(
superSqls
->
type
!=
cJSON_Array
)
{
errorPrint
(
"%s() LN%d: failed to read json, super sqls not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, super sqls not found
\n
"
);
goto
PARSE_OVER
;
}
else
{
int
superSqlSize
=
cJSON_GetArraySize
(
superSqls
);
if
(
superSqlSize
>
MAX_QUERY_SQL_COUNT
)
{
errorPrint
(
"
%s() LN%d,
failed to read json, query sql size overflow, max is %d
\n
"
,
__func__
,
__LINE__
,
MAX_QUERY_SQL_COUNT
);
errorPrint
(
"failed to read json, query sql size overflow, max is %d
\n
"
,
MAX_QUERY_SQL_COUNT
);
goto
PARSE_OVER
;
}
...
...
@@ -4947,8 +4936,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON
*
sqlStr
=
cJSON_GetObjectItem
(
sql
,
"sql"
);
if
(
!
sqlStr
||
sqlStr
->
type
!=
cJSON_String
||
sqlStr
->
valuestring
==
NULL
)
{
errorPrint
(
"%s() LN%d, failed to read json, sql not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, sql not found
\n
"
);
goto
PARSE_OVER
;
}
tstrncpy
(
g_queryInfo
.
superQueryInfo
.
sql
[
j
],
sqlStr
->
valuestring
,
...
...
@@ -4956,14 +4944,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON
*
result
=
cJSON_GetObjectItem
(
sql
,
"result"
);
if
(
result
!=
NULL
&&
result
->
type
==
cJSON_String
&&
result
->
valuestring
!=
NULL
){
&&
result
->
valuestring
!=
NULL
)
{
tstrncpy
(
g_queryInfo
.
superQueryInfo
.
result
[
j
],
result
->
valuestring
,
MAX_FILE_NAME_LEN
);
}
else
if
(
NULL
==
result
)
{
memset
(
g_queryInfo
.
superQueryInfo
.
result
[
j
],
0
,
MAX_FILE_NAME_LEN
);
}
else
{
errorPrint
(
"%s() LN%d, failed to read json, sub query result file not found
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"failed to read json, sub query result file not found
\n
"
);
goto
PARSE_OVER
;
}
}
...
...
@@ -4981,7 +4968,7 @@ static bool getInfoFromJsonFile(char* file) {
FILE
*
fp
=
fopen
(
file
,
"r"
);
if
(
!
fp
)
{
printf
(
"failed to read %s, reason:%s
\n
"
,
file
,
strerror
(
errno
));
errorPrint
(
"failed to read %s, reason:%s
\n
"
,
file
,
strerror
(
errno
));
return
false
;
}
...
...
@@ -4992,14 +4979,14 @@ static bool getInfoFromJsonFile(char* file) {
if
(
len
<=
0
)
{
free
(
content
);
fclose
(
fp
);
printf
(
"failed to read %s, content is null"
,
file
);
errorPrint
(
"failed to read %s, content is null"
,
file
);
return
false
;
}
content
[
len
]
=
0
;
cJSON
*
root
=
cJSON_Parse
(
content
);
if
(
root
==
NULL
)
{
printf
(
"ERROR:
failed to cjson parse %s, invalid json format
\n
"
,
file
);
errorPrint
(
"
failed to cjson parse %s, invalid json format
\n
"
,
file
);
goto
PARSE_OVER
;
}
...
...
@@ -5012,13 +4999,13 @@ static bool getInfoFromJsonFile(char* file) {
}
else
if
(
0
==
strcasecmp
(
"subscribe"
,
filetype
->
valuestring
))
{
g_args
.
test_mode
=
SUBSCRIBE_TEST
;
}
else
{
printf
(
"ERROR:
failed to read json, filetype not support
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, filetype not support
\n
"
);
goto
PARSE_OVER
;
}
}
else
if
(
!
filetype
)
{
g_args
.
test_mode
=
INSERT_TEST
;
}
else
{
printf
(
"ERROR:
failed to read json, filetype not found
\n
"
);
errorPrint
(
"%s"
,
"
failed to read json, filetype not found
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -5028,8 +5015,8 @@ static bool getInfoFromJsonFile(char* file) {
||
(
SUBSCRIBE_TEST
==
g_args
.
test_mode
))
{
ret
=
getMetaFromQueryJsonFile
(
root
);
}
else
{
errorPrint
(
"%s
() LN%d, input json file type error! please input correct file type: insert or query or subscribe
\n
"
,
__func__
,
__LINE__
);
errorPrint
(
"%s"
,
"input json file type error! please input correct file type: insert or query or subscribe
\n
"
);
goto
PARSE_OVER
;
}
...
...
@@ -5147,7 +5134,7 @@ static int64_t generateStbRowData(
||
(
0
==
strncasecmp
(
stbInfo
->
columns
[
i
].
dataType
,
"NCHAR"
,
5
)))
{
if
(
stbInfo
->
columns
[
i
].
dataLen
>
TSDB_MAX_BINARY_LEN
)
{
errorPrint
(
"binary or nchar length overflow, max size:%u
\n
"
,
errorPrint
2
(
"binary or nchar length overflow, max size:%u
\n
"
,
(
uint32_t
)
TSDB_MAX_BINARY_LEN
);
return
-
1
;
}
...
...
@@ -5159,7 +5146,7 @@ static int64_t generateStbRowData(
}
char
*
buf
=
(
char
*
)
calloc
(
stbInfo
->
columns
[
i
].
dataLen
+
1
,
1
);
if
(
NULL
==
buf
)
{
errorPrint
(
"calloc failed! size:%d
\n
"
,
stbInfo
->
columns
[
i
].
dataLen
);
errorPrint
2
(
"calloc failed! size:%d
\n
"
,
stbInfo
->
columns
[
i
].
dataLen
);
return
-
1
;
}
rand_string
(
buf
,
stbInfo
->
columns
[
i
].
dataLen
);
...
...
@@ -5222,7 +5209,7 @@ static int64_t generateStbRowData(
tmpLen
=
strlen
(
tmp
);
tstrncpy
(
pstr
+
dataLen
,
tmp
,
min
(
tmpLen
+
1
,
BIGINT_BUFF_LEN
));
}
else
{
errorPrint
(
"Not support data type: %s
\n
"
,
errorPrint
2
(
"Not support data type: %s
\n
"
,
stbInfo
->
columns
[
i
].
dataType
);
return
-
1
;
}
...
...
@@ -5274,7 +5261,7 @@ static int64_t generateData(char *recBuf, char **data_type,
}
else
if
(
strcasecmp
(
data_type
[
i
%
columnCount
],
"BINARY"
)
==
0
)
{
char
*
s
=
malloc
(
lenOfBinary
+
1
);
if
(
s
==
NULL
)
{
errorPrint
(
"%s() LN%d, memory allocation %d bytes failed
\n
"
,
errorPrint
2
(
"%s() LN%d, memory allocation %d bytes failed
\n
"
,
__func__
,
__LINE__
,
lenOfBinary
+
1
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -5284,7 +5271,7 @@ static int64_t generateData(char *recBuf, char **data_type,
}
else
if
(
strcasecmp
(
data_type
[
i
%
columnCount
],
"NCHAR"
)
==
0
)
{
char
*
s
=
malloc
(
lenOfBinary
+
1
);
if
(
s
==
NULL
)
{
errorPrint
(
"%s() LN%d, memory allocation %d bytes failed
\n
"
,
errorPrint
2
(
"%s() LN%d, memory allocation %d bytes failed
\n
"
,
__func__
,
__LINE__
,
lenOfBinary
+
1
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -5311,7 +5298,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) {
sampleDataBuf
=
calloc
(
stbInfo
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
1
);
if
(
sampleDataBuf
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to calloc %"
PRIu64
" Bytes, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to calloc %"
PRIu64
" Bytes, reason:%s
\n
"
,
__func__
,
__LINE__
,
stbInfo
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
strerror
(
errno
));
...
...
@@ -5322,7 +5309,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) {
int
ret
=
readSampleFromCsvFileToMem
(
stbInfo
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, read sample from csv file failed.
\n
"
,
errorPrint
2
(
"%s() LN%d, read sample from csv file failed.
\n
"
,
__func__
,
__LINE__
);
tmfree
(
sampleDataBuf
);
stbInfo
->
sampleDataBuf
=
NULL
;
...
...
@@ -5377,7 +5364,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
debugPrint
(
"%s() LN%d, stmt=%p"
,
__func__
,
__LINE__
,
pThreadInfo
->
stmt
);
if
(
0
!=
taos_stmt_execute
(
pThreadInfo
->
stmt
))
{
errorPrint
(
"%s() LN%d, failied to execute insert statement. reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, failied to execute insert statement. reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
pThreadInfo
->
stmt
));
fprintf
(
stderr
,
"
\n\033
[31m === Please reduce batch number if WAL size exceeds limit. ===
\033
[0m
\n\n
"
);
...
...
@@ -5387,7 +5374,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
break
;
default:
errorPrint
(
"%s() LN%d: unknown insert mode: %d
\n
"
,
errorPrint
2
(
"%s() LN%d: unknown insert mode: %d
\n
"
,
__func__
,
__LINE__
,
stbInfo
->
iface
);
affectedRows
=
0
;
}
...
...
@@ -5615,7 +5602,7 @@ static int generateStbSQLHead(
tableSeq
%
stbInfo
->
tagSampleCount
);
}
if
(
NULL
==
tagsValBuf
)
{
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
errorPrint
2
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
...
...
@@ -5766,7 +5753,7 @@ static int32_t prepareStmtBindArrayByType(
if
(
0
==
strncasecmp
(
dataType
,
"BINARY"
,
strlen
(
"BINARY"
)))
{
if
(
dataLen
>
TSDB_MAX_BINARY_LEN
)
{
errorPrint
(
"binary length overflow, max size:%u
\n
"
,
errorPrint
2
(
"binary length overflow, max size:%u
\n
"
,
(
uint32_t
)
TSDB_MAX_BINARY_LEN
);
return
-
1
;
}
...
...
@@ -5789,7 +5776,7 @@ static int32_t prepareStmtBindArrayByType(
}
else
if
(
0
==
strncasecmp
(
dataType
,
"NCHAR"
,
strlen
(
"NCHAR"
)))
{
if
(
dataLen
>
TSDB_MAX_BINARY_LEN
)
{
errorPrint
(
"nchar length overflow, max size:%u
\n
"
,
errorPrint
2
(
"nchar length overflow, max size:%u
\n
"
,
(
uint32_t
)
TSDB_MAX_BINARY_LEN
);
return
-
1
;
}
...
...
@@ -5937,7 +5924,7 @@ static int32_t prepareStmtBindArrayByType(
value
,
&
tmpEpoch
,
strlen
(
value
),
timePrec
,
0
))
{
free
(
bind_ts2
);
errorPrint
(
"Input %s, time format error!
\n
"
,
value
);
errorPrint
2
(
"Input %s, time format error!
\n
"
,
value
);
return
-
1
;
}
*
bind_ts2
=
tmpEpoch
;
...
...
@@ -5953,7 +5940,7 @@ static int32_t prepareStmtBindArrayByType(
bind
->
length
=
&
bind
->
buffer_length
;
bind
->
is_null
=
NULL
;
}
else
{
errorPrint
(
"No
support data type: %s
\n
"
,
dataType
);
errorPrint
2
(
"Not
support data type: %s
\n
"
,
dataType
);
return
-
1
;
}
...
...
@@ -5970,7 +5957,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
if
(
0
==
strncasecmp
(
dataType
,
"BINARY"
,
strlen
(
"BINARY"
)))
{
if
(
dataLen
>
TSDB_MAX_BINARY_LEN
)
{
errorPrint
(
"binary length overflow, max size:%u
\n
"
,
errorPrint
2
(
"binary length overflow, max size:%u
\n
"
,
(
uint32_t
)
TSDB_MAX_BINARY_LEN
);
return
-
1
;
}
...
...
@@ -5993,7 +5980,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
}
else
if
(
0
==
strncasecmp
(
dataType
,
"NCHAR"
,
strlen
(
"NCHAR"
)))
{
if
(
dataLen
>
TSDB_MAX_BINARY_LEN
)
{
errorPrint
(
"nchar length overflow, max size:
%u
\n
"
,
errorPrint
2
(
"nchar length overflow, max size:
%u
\n
"
,
(
uint32_t
)
TSDB_MAX_BINARY_LEN
);
return
-
1
;
}
...
...
@@ -6145,7 +6132,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
if
(
TSDB_CODE_SUCCESS
!=
taosParseTime
(
value
,
&
tmpEpoch
,
strlen
(
value
),
timePrec
,
0
))
{
errorPrint
(
"Input %s, time format error!
\n
"
,
value
);
errorPrint
2
(
"Input %s, time format error!
\n
"
,
value
);
return
-
1
;
}
*
bind_ts2
=
tmpEpoch
;
...
...
@@ -6163,7 +6150,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
*
ptr
+=
bind
->
buffer_length
;
}
else
{
errorPrint
(
"No support data type: %s
\n
"
,
dataType
);
errorPrint
2
(
"No support data type: %s
\n
"
,
dataType
);
return
-
1
;
}
...
...
@@ -6181,7 +6168,7 @@ static int32_t prepareStmtWithoutStb(
TAOS_STMT
*
stmt
=
pThreadInfo
->
stmt
;
int
ret
=
taos_stmt_set_tbname
(
stmt
,
tableName
);
if
(
ret
!=
0
)
{
errorPrint
(
"failed to execute taos_stmt_set_tbname(%s). return 0x%x. reason: %s
\n
"
,
errorPrint
2
(
"failed to execute taos_stmt_set_tbname(%s). return 0x%x. reason: %s
\n
"
,
tableName
,
ret
,
taos_stmt_errstr
(
stmt
));
return
ret
;
}
...
...
@@ -6190,7 +6177,7 @@ static int32_t prepareStmtWithoutStb(
char
*
bindArray
=
malloc
(
sizeof
(
TAOS_BIND
)
*
(
g_args
.
num_of_CPR
+
1
));
if
(
bindArray
==
NULL
)
{
errorPrint
(
"Failed to allocate %d bind params
\n
"
,
errorPrint
2
(
"Failed to allocate %d bind params
\n
"
,
(
g_args
.
num_of_CPR
+
1
));
return
-
1
;
}
...
...
@@ -6231,13 +6218,13 @@ static int32_t prepareStmtWithoutStb(
}
}
if
(
0
!=
taos_stmt_bind_param
(
stmt
,
(
TAOS_BIND
*
)
bindArray
))
{
errorPrint
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
break
;
}
// if msg > 3MB, break
if
(
0
!=
taos_stmt_add_batch
(
stmt
))
{
errorPrint
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
break
;
}
...
...
@@ -6260,7 +6247,7 @@ static int32_t prepareStbStmtBindTag(
{
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
DOUBLE_BUFF_LEN
);
return
-
1
;
}
...
...
@@ -6292,7 +6279,7 @@ static int32_t prepareStbStmtBindRand(
{
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
DOUBLE_BUFF_LEN
);
return
-
1
;
}
...
...
@@ -6395,7 +6382,7 @@ static int32_t prepareStbStmtRand(
}
if
(
NULL
==
tagsValBuf
)
{
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
errorPrint
2
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
...
...
@@ -6403,7 +6390,7 @@ static int32_t prepareStbStmtRand(
char
*
tagsArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
stbInfo
->
tagCount
);
if
(
NULL
==
tagsArray
)
{
tmfree
(
tagsValBuf
);
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
errorPrint
2
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
...
...
@@ -6422,14 +6409,14 @@ static int32_t prepareStbStmtRand(
tmfree
(
tagsArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname_tags() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_set_tbname_tags() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
}
else
{
ret
=
taos_stmt_set_tbname
(
stmt
,
tableName
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_set_tbname() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
...
...
@@ -6437,7 +6424,7 @@ static int32_t prepareStbStmtRand(
char
*
bindArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
(
stbInfo
->
columnCount
+
1
));
if
(
bindArray
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
__func__
,
__LINE__
,
(
stbInfo
->
columnCount
+
1
));
return
-
1
;
}
...
...
@@ -6456,7 +6443,7 @@ static int32_t prepareStbStmtRand(
}
ret
=
taos_stmt_bind_param
(
stmt
,
(
TAOS_BIND
*
)
bindArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
free
(
bindArray
);
return
-
1
;
...
...
@@ -6464,7 +6451,7 @@ static int32_t prepareStbStmtRand(
// if msg > 3MB, break
ret
=
taos_stmt_add_batch
(
stmt
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
free
(
bindArray
);
return
-
1
;
...
...
@@ -6508,7 +6495,7 @@ static int32_t prepareStbStmtWithSample(
}
if
(
NULL
==
tagsValBuf
)
{
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
errorPrint
2
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
...
...
@@ -6516,7 +6503,7 @@ static int32_t prepareStbStmtWithSample(
char
*
tagsArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
stbInfo
->
tagCount
);
if
(
NULL
==
tagsArray
)
{
tmfree
(
tagsValBuf
);
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
errorPrint
2
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
...
...
@@ -6535,14 +6522,14 @@ static int32_t prepareStbStmtWithSample(
tmfree
(
tagsArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname_tags() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_set_tbname_tags() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
}
else
{
ret
=
taos_stmt_set_tbname
(
stmt
,
tableName
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_set_tbname() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
...
...
@@ -6564,14 +6551,14 @@ static int32_t prepareStbStmtWithSample(
}
ret
=
taos_stmt_bind_param
(
stmt
,
(
TAOS_BIND
*
)
bindArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
// if msg > 3MB, break
ret
=
taos_stmt_add_batch
(
stmt
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
...
...
@@ -6732,7 +6719,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo
->
buffer
=
calloc
(
maxSqlLen
,
1
);
if
(
NULL
==
pThreadInfo
->
buffer
)
{
errorPrint
(
"%s() LN%d, Failed to alloc %"
PRIu64
" Bytes, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to alloc %"
PRIu64
" Bytes, reason:%s
\n
"
,
__func__
,
__LINE__
,
maxSqlLen
,
strerror
(
errno
));
return
NULL
;
}
...
...
@@ -6780,7 +6767,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
getTableName
(
tableName
,
pThreadInfo
,
tableSeq
);
if
(
0
==
strlen
(
tableName
))
{
errorPrint
(
"[%d] %s() LN%d, getTableName return null
\n
"
,
errorPrint
2
(
"[%d] %s() LN%d, getTableName return null
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
);
free
(
pThreadInfo
->
buffer
);
return
NULL
;
...
...
@@ -6847,7 +6834,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
debugPrint
(
"[%d] %s() LN%d, generated records is %d
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
generated
);
if
(
generated
<
0
)
{
errorPrint
(
"[%d] %s() LN%d, generated records is %d
\n
"
,
errorPrint
2
(
"[%d] %s() LN%d, generated records is %d
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
generated
);
goto
free_of_interlace
;
}
else
if
(
generated
==
0
)
{
...
...
@@ -6901,7 +6888,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
startTs
=
taosGetTimestampUs
();
if
(
recOfBatch
==
0
)
{
errorPrint
(
"[%d] %s() LN%d Failed to insert records of batch %d
\n
"
,
errorPrint
2
(
"[%d] %s() LN%d Failed to insert records of batch %d
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
batchPerTbl
);
if
(
batchPerTbl
>
0
)
{
...
...
@@ -6928,7 +6915,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo
->
totalDelay
+=
delay
;
if
(
recOfBatch
!=
affectedRows
)
{
errorPrint
(
"[%d] %s() LN%d execInsert insert %d, affected rows: %"
PRId64
"
\n
%s
\n
"
,
errorPrint
2
(
"[%d] %s() LN%d execInsert insert %d, affected rows: %"
PRId64
"
\n
%s
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
recOfBatch
,
affectedRows
,
pThreadInfo
->
buffer
);
goto
free_of_interlace
;
...
...
@@ -6986,7 +6973,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo
->
buffer
=
calloc
(
maxSqlLen
,
1
);
if
(
NULL
==
pThreadInfo
->
buffer
)
{
errorPrint
(
"Failed to alloc %"
PRIu64
" B
ytes, reason:%s
\n
"
,
errorPrint
2
(
"Failed to alloc %"
PRIu64
" b
ytes, reason:%s
\n
"
,
maxSqlLen
,
strerror
(
errno
));
return
NULL
;
...
...
@@ -7027,7 +7014,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
__func__
,
__LINE__
,
pThreadInfo
->
threadID
,
tableSeq
,
tableName
);
if
(
0
==
strlen
(
tableName
))
{
errorPrint
(
"[%d] %s() LN%d, getTableName return null
\n
"
,
errorPrint
2
(
"[%d] %s() LN%d, getTableName return null
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
);
free
(
pThreadInfo
->
buffer
);
return
NULL
;
...
...
@@ -7116,7 +7103,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo
->
totalDelay
+=
delay
;
if
(
affectedRows
<
0
)
{
errorPrint
(
"%s() LN%d, affected rows: %d
\n
"
,
errorPrint
2
(
"%s() LN%d, affected rows: %d
\n
"
,
__func__
,
__LINE__
,
affectedRows
);
goto
free_of_progressive
;
}
...
...
@@ -7278,7 +7265,7 @@ static int convertHostToServAddr(char *host, uint16_t port, struct sockaddr_in *
uint16_t
rest_port
=
port
+
TSDB_PORT_HTTP
;
struct
hostent
*
server
=
gethostbyname
(
host
);
if
((
server
==
NULL
)
||
(
server
->
h_addr
==
NULL
))
{
errorPrint
(
"%s"
,
"ERROR,
no such host"
);
errorPrint
2
(
"%s"
,
"
no such host"
);
return
-
1
;
}
...
...
@@ -7303,7 +7290,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
{
stbInfo
->
sampleBindArray
=
calloc
(
1
,
sizeof
(
char
*
)
*
MAX_SAMPLES_ONCE_FROM_FILE
);
if
(
stbInfo
->
sampleBindArray
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %"
PRIu64
" bind array buffer
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %"
PRIu64
" bind array buffer
\n
"
,
__func__
,
__LINE__
,
(
uint64_t
)
sizeof
(
char
*
)
*
MAX_SAMPLES_ONCE_FROM_FILE
);
return
-
1
;
}
...
...
@@ -7312,7 +7299,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
for
(
int
i
=
0
;
i
<
MAX_SAMPLES_ONCE_FROM_FILE
;
i
++
)
{
char
*
bindArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
(
stbInfo
->
columnCount
+
1
));
if
(
bindArray
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
__func__
,
__LINE__
,
(
stbInfo
->
columnCount
+
1
));
return
-
1
;
}
...
...
@@ -7344,7 +7331,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
char
*
bindBuffer
=
calloc
(
1
,
index
+
1
);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
errorPrint
2
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
DOUBLE_BUFF_LEN
);
return
-
1
;
}
...
...
@@ -7382,7 +7369,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
}
else
if
(
0
==
strncasecmp
(
precision
,
"ns"
,
2
))
{
timePrec
=
TSDB_TIME_PRECISION_NANO
;
}
else
{
errorPrint
(
"Not support precision: %s
\n
"
,
precision
);
errorPrint
2
(
"Not support precision: %s
\n
"
,
precision
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -7412,7 +7399,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
if
((
stbInfo
)
&&
(
0
==
strncasecmp
(
stbInfo
->
dataSource
,
"sample"
,
strlen
(
"sample"
))))
{
if
(
0
!=
prepareSampleDataForSTable
(
stbInfo
))
{
errorPrint
(
"%s() LN%d, prepare sample data for stable failed!
\n
"
,
errorPrint
2
(
"%s() LN%d, prepare sample data for stable failed!
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -7422,7 +7409,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
g_Dbs
.
host
,
g_Dbs
.
user
,
g_Dbs
.
password
,
db_name
,
g_Dbs
.
port
);
if
(
NULL
==
taos0
)
{
errorPrint
(
"%s() LN%d, connect to server fail , reason: %s
\n
"
,
errorPrint
2
(
"%s() LN%d, connect to server fail , reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_errstr
(
NULL
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -7477,7 +7464,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
limit
*
TSDB_TABLE_NAME_LEN
);
if
(
stbInfo
->
childTblName
==
NULL
)
{
taos_close
(
taos0
);
errorPrint
(
"%s() LN%d, alloc memory failed!
\n
"
,
__func__
,
__LINE__
);
errorPrint
2
(
"%s() LN%d, alloc memory failed!
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -7583,7 +7570,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
g_Dbs
.
password
,
db_name
,
g_Dbs
.
port
);
if
(
NULL
==
pThreadInfo
->
taos
)
{
free
(
infos
);
errorPrint
(
errorPrint
2
(
"%s() LN%d, connect to server fail from insert sub thread, reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_errstr
(
NULL
));
...
...
@@ -7599,7 +7586,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
if
(
NULL
==
pThreadInfo
->
stmt
)
{
free
(
pids
);
free
(
infos
);
errorPrint
(
errorPrint
2
(
"%s() LN%d, failed init stmt, reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_errstr
(
NULL
));
...
...
@@ -7607,11 +7594,11 @@ static void startMultiThreadInsertData(int threads, char* db_name,
}
int
ret
=
taos_stmt_prepare
(
pThreadInfo
->
stmt
,
stmtBuffer
,
0
);
if
(
ret
!=
0
){
if
(
ret
!=
0
)
{
free
(
pids
);
free
(
infos
);
free
(
stmtBuffer
);
errorPrint
(
"failed to execute taos_stmt_prepare. return 0x%x. reason: %s
\n
"
,
errorPrint
2
(
"failed to execute taos_stmt_prepare. return 0x%x. reason: %s
\n
"
,
ret
,
taos_stmt_errstr
(
pThreadInfo
->
stmt
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -7755,7 +7742,7 @@ static void *readTable(void *sarg) {
char
*
tb_prefix
=
pThreadInfo
->
tb_prefix
;
FILE
*
fp
=
fopen
(
pThreadInfo
->
filePath
,
"a"
);
if
(
NULL
==
fp
)
{
errorPrint
(
"fopen %s fail, reason:%s.
\n
"
,
pThreadInfo
->
filePath
,
strerror
(
errno
));
errorPrint
2
(
"fopen %s fail, reason:%s.
\n
"
,
pThreadInfo
->
filePath
,
strerror
(
errno
));
free
(
command
);
return
NULL
;
}
...
...
@@ -7791,7 +7778,7 @@ static void *readTable(void *sarg) {
int32_t
code
=
taos_errno
(
pSql
);
if
(
code
!=
0
)
{
errorPrint
(
"Failed to query:%s
\n
"
,
taos_errstr
(
pSql
));
errorPrint
2
(
"Failed to query:%s
\n
"
,
taos_errstr
(
pSql
));
taos_free_result
(
pSql
);
taos_close
(
taos
);
fclose
(
fp
);
...
...
@@ -7873,7 +7860,7 @@ static void *readMetric(void *sarg) {
int32_t
code
=
taos_errno
(
pSql
);
if
(
code
!=
0
)
{
errorPrint
(
"Failed to query:%s
\n
"
,
taos_errstr
(
pSql
));
errorPrint
2
(
"Failed to query:%s
\n
"
,
taos_errstr
(
pSql
));
taos_free_result
(
pSql
);
taos_close
(
taos
);
fclose
(
fp
);
...
...
@@ -7920,7 +7907,7 @@ static int insertTestProcess() {
debugPrint
(
"%d result file: %s
\n
"
,
__LINE__
,
g_Dbs
.
resultFile
);
g_fpOfInsertResult
=
fopen
(
g_Dbs
.
resultFile
,
"a"
);
if
(
NULL
==
g_fpOfInsertResult
)
{
errorPrint
(
"Failed to open %s for save result
\n
"
,
g_Dbs
.
resultFile
);
errorPrint
(
"Failed to open %s for save result
\n
"
,
g_Dbs
.
resultFile
);
return
-
1
;
}
...
...
@@ -7953,18 +7940,30 @@ static int insertTestProcess() {
double
start
;
double
end
;
if
(
g_totalChildTables
>
0
)
{
fprintf
(
stderr
,
"creating %"
PRId64
" table(s) with %d thread(s)
\n\n
"
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
);
if
(
g_fpOfInsertResult
)
{
fprintf
(
g_fpOfInsertResult
,
"creating %"
PRId64
" table(s) with %d thread(s)
\n\n
"
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
);
}
// create child tables
start
=
taosGetTimestampMs
();
createChildTables
();
end
=
taosGetTimestampMs
();
if
(
g_totalChildTables
>
0
)
{
fprintf
(
stderr
,
"Spent %.4f seconds to create %"
PRId64
" tables with %d thread(s)
\n\n
"
,
(
end
-
start
)
/
1000
.
0
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
);
fprintf
(
stderr
,
"
\n
Spent %.4f seconds to create %"
PRId64
" table(s) with %d thread(s), actual %"
PRId64
" table(s) created
\n\n
"
,
(
end
-
start
)
/
1000
.
0
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
,
g_actualChildTables
);
if
(
g_fpOfInsertResult
)
{
fprintf
(
g_fpOfInsertResult
,
"Spent %.4f seconds to create %"
PRId64
" tables with %d thread(s)
\n\n
"
,
(
end
-
start
)
/
1000
.
0
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
);
"
\n
Spent %.4f seconds to create %"
PRId64
" table(s) with %d thread(s), actual %"
PRId64
" table(s) created
\n\n
"
,
(
end
-
start
)
/
1000
.
0
,
g_totalChildTables
,
g_Dbs
.
threadCountByCreateTbl
,
g_actualChildTables
);
}
}
...
...
@@ -8022,7 +8021,7 @@ static void *specifiedTableQuery(void *sarg) {
NULL
,
g_queryInfo
.
port
);
if
(
taos
==
NULL
)
{
errorPrint
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
pThreadInfo
->
threadID
,
taos_errstr
(
NULL
));
return
NULL
;
}
else
{
...
...
@@ -8034,7 +8033,7 @@ static void *specifiedTableQuery(void *sarg) {
sprintf
(
sqlStr
,
"use %s"
,
g_queryInfo
.
dbName
);
if
(
0
!=
queryDbExec
(
pThreadInfo
->
taos
,
sqlStr
,
NO_INSERT_TYPE
,
false
))
{
taos_close
(
pThreadInfo
->
taos
);
errorPrint
(
"use database %s failed!
\n\n
"
,
errorPrint
(
"use database %s failed!
\n\n
"
,
g_queryInfo
.
dbName
);
return
NULL
;
}
...
...
@@ -8200,7 +8199,7 @@ static int queryTestProcess() {
NULL
,
g_queryInfo
.
port
);
if
(
taos
==
NULL
)
{
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -8258,7 +8257,7 @@ static int queryTestProcess() {
taos_close
(
taos
);
free
(
infos
);
free
(
pids
);
errorPrint
(
"use database %s failed!
\n\n
"
,
errorPrint
2
(
"use database %s failed!
\n\n
"
,
g_queryInfo
.
dbName
);
return
-
1
;
}
...
...
@@ -8356,7 +8355,7 @@ static int queryTestProcess() {
static
void
stable_sub_callback
(
TAOS_SUB
*
tsub
,
TAOS_RES
*
res
,
void
*
param
,
int
code
)
{
if
(
res
==
NULL
||
taos_errno
(
res
)
!=
0
)
{
errorPrint
(
"%s() LN%d, failed to subscribe result, code:%d, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to subscribe result, code:%d, reason:%s
\n
"
,
__func__
,
__LINE__
,
code
,
taos_errstr
(
res
));
return
;
}
...
...
@@ -8369,7 +8368,7 @@ static void stable_sub_callback(
static
void
specified_sub_callback
(
TAOS_SUB
*
tsub
,
TAOS_RES
*
res
,
void
*
param
,
int
code
)
{
if
(
res
==
NULL
||
taos_errno
(
res
)
!=
0
)
{
errorPrint
(
"%s() LN%d, failed to subscribe result, code:%d, reason:%s
\n
"
,
errorPrint
2
(
"%s() LN%d, failed to subscribe result, code:%d, reason:%s
\n
"
,
__func__
,
__LINE__
,
code
,
taos_errstr
(
res
));
return
;
}
...
...
@@ -8408,7 +8407,7 @@ static TAOS_SUB* subscribeImpl(
}
if
(
tsub
==
NULL
)
{
errorPrint
(
"failed to create subscription. topic:%s, sql:%s
\n
"
,
topic
,
sql
);
errorPrint
2
(
"failed to create subscription. topic:%s, sql:%s
\n
"
,
topic
,
sql
);
return
NULL
;
}
...
...
@@ -8439,7 +8438,7 @@ static void *superSubscribe(void *sarg) {
g_queryInfo
.
dbName
,
g_queryInfo
.
port
);
if
(
pThreadInfo
->
taos
==
NULL
)
{
errorPrint
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
pThreadInfo
->
threadID
,
taos_errstr
(
NULL
));
free
(
subSqlStr
);
return
NULL
;
...
...
@@ -8450,7 +8449,7 @@ static void *superSubscribe(void *sarg) {
sprintf
(
sqlStr
,
"USE %s"
,
g_queryInfo
.
dbName
);
if
(
0
!=
queryDbExec
(
pThreadInfo
->
taos
,
sqlStr
,
NO_INSERT_TYPE
,
false
))
{
taos_close
(
pThreadInfo
->
taos
);
errorPrint
(
"use database %s failed!
\n\n
"
,
errorPrint
2
(
"use database %s failed!
\n\n
"
,
g_queryInfo
.
dbName
);
free
(
subSqlStr
);
return
NULL
;
...
...
@@ -8586,7 +8585,7 @@ static void *specifiedSubscribe(void *sarg) {
g_queryInfo
.
dbName
,
g_queryInfo
.
port
);
if
(
pThreadInfo
->
taos
==
NULL
)
{
errorPrint
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"[%d] Failed to connect to TDengine, reason:%s
\n
"
,
pThreadInfo
->
threadID
,
taos_errstr
(
NULL
));
return
NULL
;
}
...
...
@@ -8693,7 +8692,7 @@ static int subscribeTestProcess() {
g_queryInfo
.
dbName
,
g_queryInfo
.
port
);
if
(
taos
==
NULL
)
{
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -8721,7 +8720,7 @@ static int subscribeTestProcess() {
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
);
}
else
{
if
(
g_queryInfo
.
specifiedQueryInfo
.
concurrent
<=
0
)
{
errorPrint
(
"%s() LN%d, sepcified query sqlCount %d.
\n
"
,
errorPrint
2
(
"%s() LN%d, sepcified query sqlCount %d.
\n
"
,
__func__
,
__LINE__
,
g_queryInfo
.
specifiedQueryInfo
.
sqlCount
);
exit
(
EXIT_FAILURE
);
...
...
@@ -8738,7 +8737,7 @@ static int subscribeTestProcess() {
g_queryInfo
.
specifiedQueryInfo
.
concurrent
*
sizeof
(
threadInfo
));
if
((
NULL
==
pids
)
||
(
NULL
==
infos
))
{
errorPrint
(
"%s() LN%d, malloc failed for create threads
\n
"
,
__func__
,
__LINE__
);
errorPrint
2
(
"%s() LN%d, malloc failed for create threads
\n
"
,
__func__
,
__LINE__
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -8773,7 +8772,7 @@ static int subscribeTestProcess() {
g_queryInfo
.
superQueryInfo
.
threadCnt
*
sizeof
(
threadInfo
));
if
((
NULL
==
pidsOfStable
)
||
(
NULL
==
infosOfStable
))
{
errorPrint
(
"%s() LN%d, malloc failed for create threads
\n
"
,
errorPrint
2
(
"%s() LN%d, malloc failed for create threads
\n
"
,
__func__
,
__LINE__
);
// taos_close(taos);
exit
(
EXIT_FAILURE
);
...
...
@@ -9039,7 +9038,7 @@ static void querySqlFile(TAOS* taos, char* sqlFile)
memcpy
(
cmd
+
cmd_len
,
line
,
read_len
);
if
(
0
!=
queryDbExec
(
taos
,
cmd
,
NO_INSERT_TYPE
,
false
))
{
errorPrint
(
"%s() LN%d, queryDbExec %s failed!
\n
"
,
errorPrint
2
(
"%s() LN%d, queryDbExec %s failed!
\n
"
,
__func__
,
__LINE__
,
cmd
);
tmfree
(
cmd
);
tmfree
(
line
);
...
...
@@ -9113,7 +9112,7 @@ static void queryResult() {
g_Dbs
.
port
);
if
(
pThreadInfo
->
taos
==
NULL
)
{
free
(
pThreadInfo
);
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
errorPrint
2
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -9135,7 +9134,7 @@ static void testCmdLine() {
if
(
strlen
(
configDir
))
{
wordexp_t
full_path
;
if
(
wordexp
(
configDir
,
&
full_path
,
0
)
!=
0
)
{
errorPrint
(
"Invalid path %s
\n
"
,
configDir
);
errorPrint
(
"Invalid path %s
\n
"
,
configDir
);
return
;
}
taos_options
(
TSDB_OPTION_CONFIGDIR
,
full_path
.
we_wordv
[
0
]);
...
...
src/os/src/linux/linuxEnv.c
浏览文件 @
beb74d6d
...
...
@@ -50,14 +50,20 @@ void osInit() {
char
*
taosGetCmdlineByPID
(
int
pid
)
{
static
char
cmdline
[
1024
];
sprintf
(
cmdline
,
"/proc/%d/cmdline"
,
pid
);
FILE
*
f
=
fopen
(
cmdline
,
"r"
);
if
(
f
)
{
size_t
size
;
size
=
fread
(
cmdline
,
sizeof
(
char
),
1024
,
f
);
if
(
size
>
0
)
{
if
(
'\n'
==
cmdline
[
size
-
1
])
cmdline
[
size
-
1
]
=
'\0'
;
}
fclose
(
f
);
int
fd
=
open
(
cmdline
,
O_RDONLY
);
if
(
fd
>=
0
)
{
int
n
=
read
(
fd
,
cmdline
,
sizeof
(
cmdline
)
-
1
);
if
(
n
<
0
)
n
=
0
;
if
(
n
>
0
&&
cmdline
[
n
-
1
]
==
'\n'
)
--
n
;
cmdline
[
n
]
=
0
;
close
(
fd
);
}
else
{
cmdline
[
0
]
=
0
;
}
return
cmdline
;
}
src/plugins/monitor/src/monMain.c
浏览文件 @
beb74d6d
...
...
@@ -34,7 +34,7 @@
#define monTrace(...) { if (monDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monDebugFlag, __VA_ARGS__); }}
#define SQL_LENGTH 1030
#define LOG_LEN_STR
100
#define LOG_LEN_STR
512
#define IP_LEN_STR TSDB_EP_LEN
#define CHECK_INTERVAL 1000
...
...
src/query/src/qAggMain.c
浏览文件 @
beb74d6d
src/query/src/qExecutor.c
浏览文件 @
beb74d6d
...
...
@@ -7449,10 +7449,12 @@ int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SQueryParam* param) {
pQueryMsg
->
numOfOutput
=
htons
(
pQueryMsg
->
numOfOutput
);
pQueryMsg
->
numOfGroupCols
=
htons
(
pQueryMsg
->
numOfGroupCols
);
pQueryMsg
->
tagCondLen
=
htonl
(
pQueryMsg
->
tagCondLen
);
pQueryMsg
->
tsBuf
.
tsOffset
=
htonl
(
pQueryMsg
->
tsBuf
.
tsOffset
);
pQueryMsg
->
tsBuf
.
tsLen
=
htonl
(
pQueryMsg
->
tsBuf
.
tsLen
);
pQueryMsg
->
tsBuf
.
tsNumOfBlocks
=
htonl
(
pQueryMsg
->
tsBuf
.
tsNumOfBlocks
);
pQueryMsg
->
tsBuf
.
tsOrder
=
htonl
(
pQueryMsg
->
tsBuf
.
tsOrder
);
pQueryMsg
->
numOfTags
=
htonl
(
pQueryMsg
->
numOfTags
);
pQueryMsg
->
tbnameCondLen
=
htonl
(
pQueryMsg
->
tbnameCondLen
);
pQueryMsg
->
secondStageOutput
=
htonl
(
pQueryMsg
->
secondStageOutput
);
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
beb74d6d
...
...
@@ -1572,7 +1572,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
int32_t
numOfColsOfRow1
=
0
;
if
(
pSchema1
==
NULL
)
{
pSchema1
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row1
));
pSchema1
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row1
));
}
if
(
isRow1DataRow
)
{
numOfColsOfRow1
=
schemaNCols
(
pSchema1
);
...
...
@@ -1584,7 +1584,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
if
(
row2
)
{
isRow2DataRow
=
isDataRow
(
row2
);
if
(
pSchema2
==
NULL
)
{
pSchema2
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row2
));
pSchema2
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row2
));
}
if
(
isRow2DataRow
)
{
numOfColsOfRow2
=
schemaNCols
(
pSchema2
);
...
...
src/util/inc/tnettest.h
浏览文件 @
beb74d6d
...
...
@@ -20,7 +20,7 @@
extern
"C"
{
#endif
void
taosNetTest
(
char
*
role
,
char
*
host
,
int
port
,
int
pkgLen
);
void
taosNetTest
(
char
*
role
,
char
*
host
,
int
32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
);
#ifdef __cplusplus
}
...
...
src/util/src/tnettest.c
浏览文件 @
beb74d6d
...
...
@@ -27,6 +27,10 @@
#include "syncMsg.h"
#define MAX_PKG_LEN (64 * 1000)
#define MAX_SPEED_PKG_LEN (1024 * 1024 * 1024)
#define MIN_SPEED_PKG_LEN 1024
#define MAX_SPEED_PKG_NUM 10000
#define MIN_SPEED_PKG_NUM 1
#define BUFFER_SIZE (MAX_PKG_LEN + 1024)
extern
int32_t
tsRpcMaxUdpSize
;
...
...
@@ -466,6 +470,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen
=
pkgLen
;
}
tsRpcForceTcp
=
1
;
int32_t
ret
=
taosNetCheckRpc
(
host
,
port
,
sendpkgLen
,
spi
,
NULL
);
if
(
ret
<
0
)
{
printf
(
"failed to test TCP port:%d
\n
"
,
port
);
...
...
@@ -479,6 +484,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen
=
pkgLen
;
}
tsRpcForceTcp
=
0
;
ret
=
taosNetCheckRpc
(
host
,
port
,
pkgLen
,
spi
,
NULL
);
if
(
ret
<
0
)
{
printf
(
"failed to test UDP port:%d
\n
"
,
port
);
...
...
@@ -542,12 +548,110 @@ static void taosNetTestServer(char *host, int32_t startPort, int32_t pkgLen) {
}
}
void
taosNetTest
(
char
*
role
,
char
*
host
,
int32_t
port
,
int32_t
pkgLen
)
{
static
void
taosNetTestFqdn
(
char
*
host
)
{
int
code
=
0
;
uint64_t
startTime
=
taosGetTimestampUs
();
uint32_t
ip
=
taosGetIpv4FromFqdn
(
host
);
if
(
ip
==
0xffffffff
)
{
uError
(
"failed to get IP address from %s since %s"
,
host
,
strerror
(
errno
));
code
=
-
1
;
}
uint64_t
endTime
=
taosGetTimestampUs
();
uint64_t
el
=
endTime
-
startTime
;
printf
(
"check convert fqdn spend, status: %d
\t
cost: %"
PRIu64
" us
\n
"
,
code
,
el
);
return
;
}
static
void
taosNetCheckSpeed
(
char
*
host
,
int32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
)
{
// record config
int32_t
compressTmp
=
tsCompressMsgSize
;
int32_t
maxUdpSize
=
tsRpcMaxUdpSize
;
int32_t
forceTcp
=
tsRpcForceTcp
;
if
(
0
==
strcmp
(
"tcp"
,
pkgType
)){
tsRpcForceTcp
=
1
;
tsRpcMaxUdpSize
=
0
;
// force tcp
}
else
{
tsRpcForceTcp
=
0
;
tsRpcMaxUdpSize
=
INT_MAX
;
}
tsCompressMsgSize
=
-
1
;
SRpcEpSet
epSet
;
SRpcMsg
reqMsg
;
SRpcMsg
rspMsg
;
void
*
pRpcConn
;
char
secretEncrypt
[
32
]
=
{
0
};
char
spi
=
0
;
pRpcConn
=
taosNetInitRpc
(
secretEncrypt
,
spi
);
if
(
NULL
==
pRpcConn
)
{
uError
(
"failed to init client rpc"
);
return
;
}
printf
(
"check net spend, host:%s port:%d pkgLen:%d pkgNum:%d pkgType:%s
\n\n
"
,
host
,
port
,
pkgLen
,
pkgNum
,
pkgType
);
int32_t
totalSucc
=
0
;
uint64_t
startT
=
taosGetTimestampUs
();
for
(
int32_t
i
=
1
;
i
<=
pkgNum
;
i
++
)
{
uint64_t
startTime
=
taosGetTimestampUs
();
memset
(
&
epSet
,
0
,
sizeof
(
SRpcEpSet
));
epSet
.
inUse
=
0
;
epSet
.
numOfEps
=
1
;
epSet
.
port
[
0
]
=
port
;
strcpy
(
epSet
.
fqdn
[
0
],
host
);
reqMsg
.
msgType
=
TSDB_MSG_TYPE_NETWORK_TEST
;
reqMsg
.
pCont
=
rpcMallocCont
(
pkgLen
);
reqMsg
.
contLen
=
pkgLen
;
reqMsg
.
code
=
0
;
reqMsg
.
handle
=
NULL
;
// rpc handle returned to app
reqMsg
.
ahandle
=
NULL
;
// app handle set by client
strcpy
(
reqMsg
.
pCont
,
"nettest speed"
);
rpcSendRecv
(
pRpcConn
,
&
epSet
,
&
reqMsg
,
&
rspMsg
);
int
code
=
0
;
if
((
rspMsg
.
code
!=
0
)
||
(
rspMsg
.
msgType
!=
TSDB_MSG_TYPE_NETWORK_TEST
+
1
))
{
uError
(
"ret code 0x%x %s"
,
rspMsg
.
code
,
tstrerror
(
rspMsg
.
code
));
code
=
-
1
;
}
else
{
totalSucc
++
;
}
rpcFreeCont
(
rspMsg
.
pCont
);
uint64_t
endTime
=
taosGetTimestampUs
();
uint64_t
el
=
endTime
-
startTime
;
printf
(
"progress:%5d/%d
\t
status:%d
\t
cost:%8.2lf ms
\t
speed:%8.2lf MB/s
\n
"
,
i
,
pkgNum
,
code
,
el
/
1000
.
0
,
pkgLen
/
(
el
/
1000000
.
0
)
/
1024
.
0
/
1024
.
0
);
}
int64_t
endT
=
taosGetTimestampUs
();
uint64_t
elT
=
endT
-
startT
;
printf
(
"
\n
total succ:%5d/%d
\t
cost:%8.2lf ms
\t
speed:%8.2lf MB/s
\n
"
,
totalSucc
,
pkgNum
,
elT
/
1000
.
0
,
pkgLen
/
(
elT
/
1000000
.
0
)
/
1024
.
0
/
1024
.
0
*
totalSucc
);
rpcClose
(
pRpcConn
);
// return config
tsCompressMsgSize
=
compressTmp
;
tsRpcMaxUdpSize
=
maxUdpSize
;
tsRpcForceTcp
=
forceTcp
;
return
;
}
void
taosNetTest
(
char
*
role
,
char
*
host
,
int32_t
port
,
int32_t
pkgLen
,
int32_t
pkgNum
,
char
*
pkgType
)
{
tscEmbedded
=
1
;
if
(
host
==
NULL
)
host
=
tsLocalFqdn
;
if
(
port
==
0
)
port
=
tsServerPort
;
if
(
0
==
strcmp
(
"speed"
,
role
)){
if
(
pkgLen
<=
MIN_SPEED_PKG_LEN
)
pkgLen
=
MIN_SPEED_PKG_LEN
;
if
(
pkgLen
>
MAX_SPEED_PKG_LEN
)
pkgLen
=
MAX_SPEED_PKG_LEN
;
if
(
pkgNum
<=
MIN_SPEED_PKG_NUM
)
pkgNum
=
MIN_SPEED_PKG_NUM
;
if
(
pkgNum
>
MAX_SPEED_PKG_NUM
)
pkgNum
=
MAX_SPEED_PKG_NUM
;
}
else
{
if
(
pkgLen
<=
10
)
pkgLen
=
1000
;
if
(
pkgLen
>
MAX_PKG_LEN
)
pkgLen
=
MAX_PKG_LEN
;
}
if
(
0
==
strcmp
(
"client"
,
role
))
{
taosNetTestClient
(
host
,
port
,
pkgLen
);
...
...
@@ -560,6 +664,12 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
taosNetCheckSync
(
host
,
port
);
}
else
if
(
0
==
strcmp
(
"startup"
,
role
))
{
taosNetTestStartup
(
host
,
port
);
}
else
if
(
0
==
strcmp
(
"speed"
,
role
))
{
tscEmbedded
=
0
;
char
type
[
10
]
=
{
0
};
taosNetCheckSpeed
(
host
,
port
,
pkgLen
,
pkgNum
,
strtolower
(
type
,
pkgType
));
}
else
if
(
0
==
strcmp
(
"fqdn"
,
role
))
{
taosNetTestFqdn
(
host
);
}
else
{
taosNetTestStartup
(
host
,
port
);
}
...
...
tests/nettest/FQDNnettest.sh
0 → 100755
浏览文件 @
beb74d6d
#!/bin/bash
taos
-n
fqdn
tests/nettest/TCPUDP.sh
0 → 100755
浏览文件 @
beb74d6d
#!/bin/bash
for
N
in
-1
0 1 10000 10001
do
for
l
in
1023 1024 1073741824 1073741825
do
for
S
in
udp tcp
do
taos
-n
speed
-h
BCC-2
-P
6030
-N
$N
-l
$l
-S
$S
2>&1 |
tee
-a
result.txt
done
done
done
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录