“59dc24f75ace50a695e719552524c83cb019e48c”上不存在“source/server/mnode/src/mnodeOper.c”
提交 beb74d6d 编写于 作者: Z zhaoyanggh

Merge branch 'master' of https://github.com/taosdata/TDengine into fix/TS-165

...@@ -190,6 +190,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo); ...@@ -190,6 +190,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo);
void tscFieldInfoCopy(SFieldInfo* pFieldInfo, const SFieldInfo* pSrc, const SArray* pExprList); void tscFieldInfoCopy(SFieldInfo* pFieldInfo, const SFieldInfo* pSrc, const SArray* pExprList);
static FORCE_INLINE int32_t tscNumOfFields(SQueryInfo* pQueryInfo) { return pQueryInfo->fieldsInfo.numOfOutput; } 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); int32_t tscFieldInfoCompare(const SFieldInfo* pFieldInfo1, const SFieldInfo* pFieldInfo2, int32_t *diffSize);
void tscInsertPrimaryTsSourceColumn(SQueryInfo* pQueryInfo, uint64_t uid); void tscInsertPrimaryTsSourceColumn(SQueryInfo* pQueryInfo, uint64_t uid);
......
...@@ -6943,9 +6943,7 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo ...@@ -6943,9 +6943,7 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
s = &pSchema[colIndex]; s = &pSchema[colIndex];
} }
} }
size_t size = tscNumOfExprs(pQueryInfo);
if (TSDB_COL_IS_TAG(pColIndex->flag)) { if (TSDB_COL_IS_TAG(pColIndex->flag)) {
int32_t f = TSDB_FUNC_TAG; int32_t f = TSDB_FUNC_TAG;
...@@ -6953,8 +6951,10 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo ...@@ -6953,8 +6951,10 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
f = TSDB_FUNC_TAGPRJ; f = TSDB_FUNC_TAGPRJ;
} }
int32_t pos = tscGetFirstInvisibleFieldPos(pQueryInfo);
SColumnIndex index = {.tableIndex = pQueryInfo->groupbyExpr.tableIndex, .columnIndex = colIndex}; SColumnIndex index = {.tableIndex = pQueryInfo->groupbyExpr.tableIndex, .columnIndex = colIndex};
SExprInfo* pExpr = tscExprAppend(pQueryInfo, f, &index, s->type, s->bytes, getNewResColId(pCmd), s->bytes, true); SExprInfo* pExpr = tscExprInsert(pQueryInfo, pos, f, &index, s->type, s->bytes, getNewResColId(pCmd), s->bytes, true);
memset(pExpr->base.aliasName, 0, sizeof(pExpr->base.aliasName)); memset(pExpr->base.aliasName, 0, sizeof(pExpr->base.aliasName));
tstrncpy(pExpr->base.aliasName, s->name, 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 ...@@ -6964,13 +6964,15 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
// NOTE: tag column does not add to source column list // NOTE: tag column does not add to source column list
SColumnList ids = createColumnList(1, 0, pColIndex->colIndex); 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 { } else {
// if this query is "group by" normal column, time window query is not allowed // if this query is "group by" normal column, time window query is not allowed
if (isTimeWindowQuery(pQueryInfo)) { if (isTimeWindowQuery(pQueryInfo)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
} }
size_t size = tscNumOfExprs(pQueryInfo);
bool hasGroupColumn = false; bool hasGroupColumn = false;
for (int32_t j = 0; j < size; ++j) { for (int32_t j = 0; j < size; ++j) {
SExprInfo* pExpr = tscExprGet(pQueryInfo, j); SExprInfo* pExpr = tscExprGet(pQueryInfo, j);
......
...@@ -841,6 +841,11 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql) { ...@@ -841,6 +841,11 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql) {
tableSerialize = totalTables * sizeof(STableIdInfo); 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 + return MIN_QUERY_MSG_PKT_SIZE + minMsgSize() + sizeof(SQueryTableMsg) + srcColListSize + srcColFilterSize + srcTagFilterSize +
exprSize + tsBufSize + tableSerialize + sqlLen + 4096 + pQueryInfo->bufLen; exprSize + tsBufSize + tableSerialize + sqlLen + 4096 + pQueryInfo->bufLen;
} }
......
...@@ -15,8 +15,9 @@ ...@@ -15,8 +15,9 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include "os.h" #include "os.h"
#include "texpr.h" #include "texpr.h"
#include "tsched.h"
#include "qTsbuf.h" #include "qTsbuf.h"
#include "tcompare.h" #include "tcompare.h"
#include "tscLog.h" #include "tscLog.h"
...@@ -2425,6 +2426,26 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) { ...@@ -2425,6 +2426,26 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) {
return terrno; 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) { int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
SSqlRes *pRes = &pSql->res; SSqlRes *pRes = &pSql->res;
SSqlCmd *pCmd = &pSql->cmd; SSqlCmd *pCmd = &pSql->cmd;
...@@ -2547,13 +2568,33 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) { ...@@ -2547,13 +2568,33 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
doCleanupSubqueries(pSql, i); doCleanupSubqueries(pSql, i);
return pRes->code; return pRes->code;
} }
for(int32_t j = 0; j < pState->numOfSub; ++j) { // concurrently sent the query requests.
SSqlObj* pSub = pSql->pSubs[j]; const int32_t MAX_REQUEST_PER_TASK = 8;
SRetrieveSupport* pSupport = pSub->param;
int32_t numOfTasks = (pState->numOfSub + MAX_REQUEST_PER_TASK - 1)/MAX_REQUEST_PER_TASK;
tscDebug("0x%"PRIx64" sub:0x%"PRIx64" launch subquery, orderOfSub:%d.", pSql->self, pSub->self, pSupport->subqueryIndex); assert(numOfTasks >= 1);
tscBuildAndSendRequest(pSub, NULL);
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; return TSDB_CODE_SUCCESS;
......
...@@ -2093,6 +2093,22 @@ TAOS_FIELD tscCreateField(int8_t type, const char* name, int16_t bytes) { ...@@ -2093,6 +2093,22 @@ TAOS_FIELD tscCreateField(int8_t type, const char* name, int16_t bytes) {
return f; 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) { SInternalField* tscFieldInfoAppend(SFieldInfo* pFieldInfo, TAOS_FIELD* pField) {
assert(pFieldInfo != NULL); assert(pFieldInfo != NULL);
pFieldInfo->numOfOutput++; pFieldInfo->numOfOutput++;
...@@ -3778,6 +3794,8 @@ static void tscSubqueryCompleteCallback(void* param, TAOS_RES* tres, int code) { ...@@ -3778,6 +3794,8 @@ static void tscSubqueryCompleteCallback(void* param, TAOS_RES* tres, int code) {
tscDebug("0x%"PRIx64" all subquery response received, retry", pParentSql->self); 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)) { 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); tscAsyncResultOnError(pParentSql);
return; return;
} }
...@@ -3858,6 +3876,7 @@ void executeQuery(SSqlObj* pSql, SQueryInfo* pQueryInfo) { ...@@ -3858,6 +3876,7 @@ void executeQuery(SSqlObj* pSql, SQueryInfo* pQueryInfo) {
pNew->signature = pNew; pNew->signature = pNew;
pNew->sqlstr = strdup(pSql->sqlstr); pNew->sqlstr = strdup(pSql->sqlstr);
pNew->fp = tscSubqueryCompleteCallback; pNew->fp = tscSubqueryCompleteCallback;
pNew->fetchFp = tscSubqueryCompleteCallback;
pNew->maxRetry = pSql->maxRetry; pNew->maxRetry = pSql->maxRetry;
pNew->cmd.resColumnId = TSDB_RES_COL_ID; pNew->cmd.resColumnId = TSDB_RES_COL_ID;
......
...@@ -18,7 +18,7 @@ public class RestfulConnection extends AbstractConnection { ...@@ -18,7 +18,7 @@ public class RestfulConnection extends AbstractConnection {
private final String url; private final String url;
private final String database; private final String database;
private final String token; private final String token;
/******************************************************/
private boolean isClosed; private boolean isClosed;
private final DatabaseMetaData metadata; private final DatabaseMetaData metadata;
......
...@@ -88,17 +88,24 @@ public class RestfulStatement extends AbstractStatement { ...@@ -88,17 +88,24 @@ public class RestfulStatement extends AbstractStatement {
} }
private String getUrl() throws SQLException { 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()); TimestampFormat timestampFormat = TimestampFormat.valueOf(conn.getClientInfo(TSDBDriver.PROPERTY_KEY_TIMESTAMP_FORMAT).trim().toUpperCase());
String url; String url;
switch (timestampFormat) { switch (timestampFormat) {
case TIMESTAMP: case TIMESTAMP:
url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sqlt"; url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sqlt" + dbname;
break; break;
case UTC: case UTC:
url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sqlutc"; url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sqlutc" + dbname;
break; break;
default: default:
url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sql"; url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sql" + dbname;
} }
return url; return url;
} }
......
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();
}
}
}
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();
}
}
}
...@@ -2,7 +2,7 @@ import taos ...@@ -2,7 +2,7 @@ import taos
conn = taos.connect(host='127.0.0.1', conn = taos.connect(host='127.0.0.1',
user='root', user='root',
passworkd='taodata', password='taosdata',
database='log') database='log')
cursor = conn.cursor() cursor = conn.cursor()
......
...@@ -268,7 +268,7 @@ def _load_taos(): ...@@ -268,7 +268,7 @@ def _load_taos():
try: try:
return load_func[platform.system()]() return load_func[platform.system()]()
except: except:
sys.exit('unsupported platform to TDengine connector') raise InterfaceError('unsupported platform or failed to load taos client library')
class CTaosInterface(object): class CTaosInterface(object):
......
...@@ -55,6 +55,8 @@ typedef struct SShellArguments { ...@@ -55,6 +55,8 @@ typedef struct SShellArguments {
int abort; int abort;
int port; int port;
int pktLen; int pktLen;
int pktNum;
char* pktType;
char* netTestRole; char* netTestRole;
} SShellArguments; } SShellArguments;
......
...@@ -50,6 +50,8 @@ static struct argp_option options[] = { ...@@ -50,6 +50,8 @@ static struct argp_option options[] = {
{"timezone", 'z', "TIMEZONE", 0, "Time zone of the shell, default is local."}, {"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."}, {"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."}, {"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}}; {0}};
static error_t parse_opt(int key, char *arg, struct argp_state *state) { 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) { ...@@ -106,7 +108,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
arguments->is_raw_time = true; arguments->is_raw_time = true;
break; break;
case 'f': 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); fprintf(stderr, "Invalid path %s\n", arg);
return -1; return -1;
} }
...@@ -146,6 +148,17 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { ...@@ -146,6 +148,17 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
return -1; return -1;
} }
break; 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: case OPT_ABORT:
arguments->abort = 1; arguments->abort = 1;
break; break;
......
...@@ -85,6 +85,8 @@ SShellArguments args = { ...@@ -85,6 +85,8 @@ SShellArguments args = {
.threadNum = 5, .threadNum = 5,
.commands = NULL, .commands = NULL,
.pktLen = 1000, .pktLen = 1000,
.pktNum = 100,
.pktType = "TCP",
.netTestRole = NULL .netTestRole = NULL
}; };
...@@ -118,7 +120,7 @@ int main(int argc, char* argv[]) { ...@@ -118,7 +120,7 @@ int main(int argc, char* argv[]) {
printf("Failed to init taos"); printf("Failed to init taos");
exit(EXIT_FAILURE); 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); exit(0);
} }
......
...@@ -55,9 +55,13 @@ void printHelp() { ...@@ -55,9 +55,13 @@ void printHelp() {
printf("%s%s\n", indent, "-t"); printf("%s%s\n", indent, "-t");
printf("%s%s%s\n", indent, indent, "Time zone of the shell, default is local."); printf("%s%s%s\n", indent, indent, "Time zone of the shell, default is local.");
printf("%s%s\n", indent, "-n"); 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\n", indent, "-l");
printf("%s%s%s\n", indent, indent, "Packet length used for net test, default is 1000 bytes."); 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\n", indent, "-V");
printf("%s%s%s\n", indent, indent, "Print program version."); printf("%s%s%s\n", indent, indent, "Print program version.");
......
...@@ -443,6 +443,7 @@ typedef struct SThreadInfo_S { ...@@ -443,6 +443,7 @@ typedef struct SThreadInfo_S {
uint64_t start_table_from; uint64_t start_table_from;
uint64_t end_table_to; uint64_t end_table_to;
int64_t ntables; int64_t ntables;
int64_t tables_created;
uint64_t data_of_rate; uint64_t data_of_rate;
int64_t start_time; int64_t start_time;
char* cols; char* cols;
...@@ -639,6 +640,7 @@ SArguments g_args = { ...@@ -639,6 +640,7 @@ SArguments g_args = {
static SDbs g_Dbs; static SDbs g_Dbs;
static int64_t g_totalChildTables = 0; static int64_t g_totalChildTables = 0;
static int64_t g_actualChildTables = 0;
static SQueryMetaInfo g_queryInfo; static SQueryMetaInfo g_queryInfo;
static FILE * g_fpOfInsertResult = NULL; static FILE * g_fpOfInsertResult = NULL;
...@@ -659,6 +661,13 @@ static FILE * g_fpOfInsertResult = NULL; ...@@ -659,6 +661,13 @@ static FILE * g_fpOfInsertResult = NULL;
fprintf(stderr, "PERF: "fmt, __VA_ARGS__); } while(0) fprintf(stderr, "PERF: "fmt, __VA_ARGS__); } while(0)
#define errorPrint(fmt, ...) \ #define errorPrint(fmt, ...) \
do {\
fprintf(stderr, " \033[31m");\
fprintf(stderr, "ERROR: "fmt, __VA_ARGS__);\
fprintf(stderr, " \033[0m");\
} while(0)
#define errorPrint2(fmt, ...) \
do {\ do {\
struct tm Tm, *ptm;\ struct tm Tm, *ptm;\
struct timeval timeSecs; \ struct timeval timeSecs; \
...@@ -671,8 +680,8 @@ static FILE * g_fpOfInsertResult = NULL; ...@@ -671,8 +680,8 @@ static FILE * g_fpOfInsertResult = NULL;
ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,\ ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,\
ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec,\ ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec,\
taosGetSelfPthreadId());\ taosGetSelfPthreadId());\
fprintf(stderr, "ERROR: "fmt, __VA_ARGS__);\
fprintf(stderr, " \033[0m");\ fprintf(stderr, " \033[0m");\
errorPrint(fmt, __VA_ARGS__);\
} while(0) } while(0)
// for strncpy buffer overflow // for strncpy buffer overflow
...@@ -815,6 +824,12 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) { ...@@ -815,6 +824,12 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
for (int i = 1; i < argc; i++) { for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-f") == 0) { if (strcmp(argv[i], "-f") == 0) {
arguments->demo_mode = false; 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]; arguments->metaFile = argv[++i];
} else if (strcmp(argv[i], "-c") == 0) { } else if (strcmp(argv[i], "-c") == 0) {
if (argc == i+1) { if (argc == i+1) {
...@@ -951,6 +966,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) { ...@@ -951,6 +966,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
arguments->num_of_tables = atoi(argv[++i]); arguments->num_of_tables = atoi(argv[++i]);
g_totalChildTables = arguments->num_of_tables;
} else if (strcmp(argv[i], "-n") == 0) { } else if (strcmp(argv[i], "-n") == 0) {
if ((argc == i+1) || if ((argc == i+1) ||
(!isStringNumber(argv[i+1]))) { (!isStringNumber(argv[i+1]))) {
...@@ -1121,7 +1137,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) { ...@@ -1121,7 +1137,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} else if ((strcmp(argv[i], "--version") == 0) || } else if ((strcmp(argv[i], "--version") == 0) ||
(strcmp(argv[i], "-V") == 0)){ (strcmp(argv[i], "-V") == 0)) {
printVersion(); printVersion();
exit(0); exit(0);
} else if (strcmp(argv[i], "--help") == 0) { } else if (strcmp(argv[i], "--help") == 0) {
...@@ -1227,7 +1243,7 @@ static int queryDbExec(TAOS *taos, char *command, QUERY_TYPE type, bool quiet) { ...@@ -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); verbosePrint("%s() LN%d - command: %s\n", __func__, __LINE__, command);
if (code != 0) { if (code != 0) {
if (!quiet) { if (!quiet) {
errorPrint("Failed to execute %s, reason: %s\n", errorPrint2("Failed to execute %s, reason: %s\n",
command, taos_errstr(res)); command, taos_errstr(res));
} }
taos_free_result(res); taos_free_result(res);
...@@ -1249,7 +1265,7 @@ static void appendResultBufToFile(char *resultBuf, threadInfo *pThreadInfo) ...@@ -1249,7 +1265,7 @@ static void appendResultBufToFile(char *resultBuf, threadInfo *pThreadInfo)
{ {
pThreadInfo->fp = fopen(pThreadInfo->filePath, "at"); pThreadInfo->fp = fopen(pThreadInfo->filePath, "at");
if (pThreadInfo->fp == NULL) { if (pThreadInfo->fp == NULL) {
errorPrint( errorPrint2(
"%s() LN%d, failed to open result file: %s, result will not save to file\n", "%s() LN%d, failed to open result file: %s, result will not save to file\n",
__func__, __LINE__, pThreadInfo->filePath); __func__, __LINE__, pThreadInfo->filePath);
return; return;
...@@ -1268,7 +1284,7 @@ static void fetchResult(TAOS_RES *res, threadInfo* pThreadInfo) { ...@@ -1268,7 +1284,7 @@ static void fetchResult(TAOS_RES *res, threadInfo* pThreadInfo) {
char* databuf = (char*) calloc(1, 100*1024*1024); char* databuf = (char*) calloc(1, 100*1024*1024);
if (databuf == NULL) { if (databuf == NULL) {
errorPrint("%s() LN%d, failed to malloc, warning: save result to file slowly!\n", errorPrint2("%s() LN%d, failed to malloc, warning: save result to file slowly!\n",
__func__, __LINE__); __func__, __LINE__);
return ; return ;
} }
...@@ -1308,7 +1324,7 @@ static void selectAndGetResult( ...@@ -1308,7 +1324,7 @@ static void selectAndGetResult(
if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", strlen("taosc"))) { if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", strlen("taosc"))) {
TAOS_RES *res = taos_query(pThreadInfo->taos, command); TAOS_RES *res = taos_query(pThreadInfo->taos, command);
if (res == NULL || taos_errno(res) != 0) { if (res == NULL || taos_errno(res) != 0) {
errorPrint("%s() LN%d, failed to execute sql:%s, reason:%s\n", errorPrint2("%s() LN%d, failed to execute sql:%s, reason:%s\n",
__func__, __LINE__, command, taos_errstr(res)); __func__, __LINE__, command, taos_errstr(res));
taos_free_result(res); taos_free_result(res);
return; return;
...@@ -1327,19 +1343,19 @@ static void selectAndGetResult( ...@@ -1327,19 +1343,19 @@ static void selectAndGetResult(
} }
} else { } else {
errorPrint("%s() LN%d, unknown query mode: %s\n", errorPrint2("%s() LN%d, unknown query mode: %s\n",
__func__, __LINE__, g_queryInfo.queryMode); __func__, __LINE__, g_queryInfo.queryMode);
} }
} }
static char *rand_bool_str(){ static char *rand_bool_str() {
static int cursor; static int cursor;
cursor++; cursor++;
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0; if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
return g_randbool_buff + ((cursor % MAX_PREPARED_RAND) * BOOL_BUFF_LEN); return g_randbool_buff + ((cursor % MAX_PREPARED_RAND) * BOOL_BUFF_LEN);
} }
static int32_t rand_bool(){ static int32_t rand_bool() {
static int cursor; static int cursor;
cursor++; cursor++;
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0; if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
...@@ -1472,7 +1488,7 @@ static char *demo_phase_float_str() { ...@@ -1472,7 +1488,7 @@ static char *demo_phase_float_str() {
return g_rand_phase_buff + ((cursor % MAX_PREPARED_RAND) * FLOAT_BUFF_LEN); 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; static int cursor;
cursor++; cursor++;
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0; if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
...@@ -1551,7 +1567,7 @@ static void init_rand_data() { ...@@ -1551,7 +1567,7 @@ static void init_rand_data() {
g_randdouble_buff = calloc(1, DOUBLE_BUFF_LEN * MAX_PREPARED_RAND); g_randdouble_buff = calloc(1, DOUBLE_BUFF_LEN * MAX_PREPARED_RAND);
assert(g_randdouble_buff); 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); g_randint[i] = (int)(taosRandom() % 65535);
sprintf(g_randint_buff + i * INT_BUFF_LEN, "%d", sprintf(g_randint_buff + i * INT_BUFF_LEN, "%d",
g_randint[i]); g_randint[i]);
...@@ -2177,7 +2193,7 @@ static int xDumpResultToFile(const char* fname, TAOS_RES* tres) { ...@@ -2177,7 +2193,7 @@ static int xDumpResultToFile(const char* fname, TAOS_RES* tres) {
FILE* fp = fopen(fname, "at"); FILE* fp = fopen(fname, "at");
if (fp == NULL) { if (fp == NULL) {
errorPrint("%s() LN%d, failed to open file: %s\n", errorPrint2("%s() LN%d, failed to open file: %s\n",
__func__, __LINE__, fname); __func__, __LINE__, fname);
return -1; return -1;
} }
...@@ -2224,7 +2240,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) { ...@@ -2224,7 +2240,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) {
int32_t code = taos_errno(res); int32_t code = taos_errno(res);
if (code != 0) { if (code != 0) {
errorPrint( "failed to run <show databases>, reason: %s\n", errorPrint2("failed to run <show databases>, reason: %s\n",
taos_errstr(res)); taos_errstr(res));
return -1; return -1;
} }
...@@ -2240,7 +2256,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) { ...@@ -2240,7 +2256,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) {
dbInfos[count] = (SDbInfo *)calloc(1, sizeof(SDbInfo)); dbInfos[count] = (SDbInfo *)calloc(1, sizeof(SDbInfo));
if (dbInfos[count] == NULL) { if (dbInfos[count] == NULL) {
errorPrint( "failed to allocate memory for some dbInfo[%d]\n", count); errorPrint2("failed to allocate memory for some dbInfo[%d]\n", count);
return -1; return -1;
} }
...@@ -2393,7 +2409,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port ...@@ -2393,7 +2409,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port
request_buf = malloc(req_buf_len); request_buf = malloc(req_buf_len);
if (NULL == request_buf) { if (NULL == request_buf) {
errorPrint("%s", "ERROR, cannot allocate memory.\n"); errorPrint("%s", "cannot allocate memory.\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2532,7 +2548,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port ...@@ -2532,7 +2548,7 @@ static int postProceSql(char *host, struct sockaddr_in *pServAddr, uint16_t port
static char* getTagValueFromTagSample(SSuperTable* stbInfo, int tagUsePos) { static char* getTagValueFromTagSample(SSuperTable* stbInfo, int tagUsePos) {
char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1); char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1);
if (NULL == dataBuf) { if (NULL == dataBuf) {
errorPrint("%s() LN%d, calloc failed! size:%d\n", errorPrint2("%s() LN%d, calloc failed! size:%d\n",
__func__, __LINE__, TSDB_MAX_SQL_LEN+1); __func__, __LINE__, TSDB_MAX_SQL_LEN+1);
return NULL; return NULL;
} }
...@@ -2632,7 +2648,7 @@ static char* generateTagValuesForStb(SSuperTable* stbInfo, int64_t tableSeq) { ...@@ -2632,7 +2648,7 @@ static char* generateTagValuesForStb(SSuperTable* stbInfo, int64_t tableSeq) {
dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen,
"%"PRId64",", rand_bigint()); "%"PRId64",", rand_bigint());
} else { } else {
errorPrint("No support data type: %s\n", stbInfo->tags[i].dataType); errorPrint2("No support data type: %s\n", stbInfo->tags[i].dataType);
tmfree(dataBuf); tmfree(dataBuf);
return NULL; return NULL;
} }
...@@ -2671,7 +2687,7 @@ static int calcRowLen(SSuperTable* superTbls) { ...@@ -2671,7 +2687,7 @@ static int calcRowLen(SSuperTable* superTbls) {
} else if (strcasecmp(dataType, "TIMESTAMP") == 0) { } else if (strcasecmp(dataType, "TIMESTAMP") == 0) {
lenOfOneRow += TIMESTAMP_BUFF_LEN; lenOfOneRow += TIMESTAMP_BUFF_LEN;
} else { } else {
errorPrint("get error data type : %s\n", dataType); errorPrint2("get error data type : %s\n", dataType);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
...@@ -2702,7 +2718,7 @@ static int calcRowLen(SSuperTable* superTbls) { ...@@ -2702,7 +2718,7 @@ static int calcRowLen(SSuperTable* superTbls) {
} else if (strcasecmp(dataType, "DOUBLE") == 0) { } else if (strcasecmp(dataType, "DOUBLE") == 0) {
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + DOUBLE_BUFF_LEN; lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + DOUBLE_BUFF_LEN;
} else { } else {
errorPrint("get error tag type : %s\n", dataType); errorPrint2("get error tag type : %s\n", dataType);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
...@@ -2739,7 +2755,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos, ...@@ -2739,7 +2755,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
if (code != 0) { if (code != 0) {
taos_free_result(res); taos_free_result(res);
taos_close(taos); taos_close(taos);
errorPrint("%s() LN%d, failed to run command %s\n", errorPrint2("%s() LN%d, failed to run command %s\n",
__func__, __LINE__, command); __func__, __LINE__, command);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2751,7 +2767,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos, ...@@ -2751,7 +2767,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
if (NULL == childTblName) { if (NULL == childTblName) {
taos_free_result(res); taos_free_result(res);
taos_close(taos); taos_close(taos);
errorPrint("%s() LN%d, failed to allocate memory!\n", __func__, __LINE__); errorPrint2("%s() LN%d, failed to allocate memory!\n", __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
...@@ -2761,7 +2777,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos, ...@@ -2761,7 +2777,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
int32_t* len = taos_fetch_lengths(res); int32_t* len = taos_fetch_lengths(res);
if (0 == strlen((char *)row[0])) { if (0 == strlen((char *)row[0])) {
errorPrint("%s() LN%d, No.%"PRId64" table return empty name\n", errorPrint2("%s() LN%d, No.%"PRId64" table return empty name\n",
__func__, __LINE__, count); __func__, __LINE__, count);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2782,7 +2798,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos, ...@@ -2782,7 +2798,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
tmfree(childTblName); tmfree(childTblName);
taos_free_result(res); taos_free_result(res);
taos_close(taos); taos_close(taos);
errorPrint("%s() LN%d, realloc fail for save child table name of %s.%s\n", errorPrint2("%s() LN%d, realloc fail for save child table name of %s.%s\n",
__func__, __LINE__, dbName, sTblName); __func__, __LINE__, dbName, sTblName);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2879,7 +2895,7 @@ static int getSuperTableFromServer(TAOS * taos, char* dbName, ...@@ -2879,7 +2895,7 @@ static int getSuperTableFromServer(TAOS * taos, char* dbName,
int childTblCount = 10000; int childTblCount = 10000;
superTbls->childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN); superTbls->childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN);
if (superTbls->childTblName == NULL) { if (superTbls->childTblName == NULL) {
errorPrint("%s() LN%d, alloc memory failed!\n", __func__, __LINE__); errorPrint2("%s() LN%d, alloc memory failed!\n", __func__, __LINE__);
return -1; return -1;
} }
getAllChildNameOfSuperTable(taos, dbName, getAllChildNameOfSuperTable(taos, dbName,
...@@ -2905,7 +2921,7 @@ static int createSuperTable( ...@@ -2905,7 +2921,7 @@ static int createSuperTable(
int lenOfOneRow = 0; int lenOfOneRow = 0;
if (superTbl->columnCount == 0) { if (superTbl->columnCount == 0) {
errorPrint("%s() LN%d, super table column count is %d\n", errorPrint2("%s() LN%d, super table column count is %d\n",
__func__, __LINE__, superTbl->columnCount); __func__, __LINE__, superTbl->columnCount);
free(command); free(command);
return -1; return -1;
...@@ -2969,7 +2985,7 @@ static int createSuperTable( ...@@ -2969,7 +2985,7 @@ static int createSuperTable(
} else { } else {
taos_close(taos); taos_close(taos);
free(command); free(command);
errorPrint("%s() LN%d, config error data type : %s\n", errorPrint2("%s() LN%d, config error data type : %s\n",
__func__, __LINE__, dataType); __func__, __LINE__, dataType);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2982,7 +2998,7 @@ static int createSuperTable( ...@@ -2982,7 +2998,7 @@ static int createSuperTable(
if (NULL == superTbl->colsOfCreateChildTable) { if (NULL == superTbl->colsOfCreateChildTable) {
taos_close(taos); taos_close(taos);
free(command); free(command);
errorPrint("%s() LN%d, Failed when calloc, size:%d", errorPrint2("%s() LN%d, Failed when calloc, size:%d",
__func__, __LINE__, len+1); __func__, __LINE__, len+1);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -2992,7 +3008,7 @@ static int createSuperTable( ...@@ -2992,7 +3008,7 @@ static int createSuperTable(
__func__, __LINE__, superTbl->colsOfCreateChildTable); __func__, __LINE__, superTbl->colsOfCreateChildTable);
if (superTbl->tagCount == 0) { if (superTbl->tagCount == 0) {
errorPrint("%s() LN%d, super table tag count is %d\n", errorPrint2("%s() LN%d, super table tag count is %d\n",
__func__, __LINE__, superTbl->tagCount); __func__, __LINE__, superTbl->tagCount);
free(command); free(command);
return -1; return -1;
...@@ -3059,7 +3075,7 @@ static int createSuperTable( ...@@ -3059,7 +3075,7 @@ static int createSuperTable(
} else { } else {
taos_close(taos); taos_close(taos);
free(command); free(command);
errorPrint("%s() LN%d, config error tag type : %s\n", errorPrint2("%s() LN%d, config error tag type : %s\n",
__func__, __LINE__, dataType); __func__, __LINE__, dataType);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -3074,7 +3090,7 @@ static int createSuperTable( ...@@ -3074,7 +3090,7 @@ static int createSuperTable(
"create table if not exists %s.%s (ts timestamp%s) tags %s", "create table if not exists %s.%s (ts timestamp%s) tags %s",
dbName, superTbl->sTblName, cols, tags); dbName, superTbl->sTblName, cols, tags);
if (0 != queryDbExec(taos, command, NO_INSERT_TYPE, false)) { if (0 != queryDbExec(taos, command, NO_INSERT_TYPE, false)) {
errorPrint( "create supertable %s failed!\n\n", errorPrint2("create supertable %s failed!\n\n",
superTbl->sTblName); superTbl->sTblName);
free(command); free(command);
return -1; return -1;
...@@ -3090,7 +3106,7 @@ int createDatabasesAndStables(char *command) { ...@@ -3090,7 +3106,7 @@ int createDatabasesAndStables(char *command) {
int ret = 0; int ret = 0;
taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, NULL, g_Dbs.port); taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, NULL, g_Dbs.port);
if (taos == NULL) { if (taos == NULL) {
errorPrint( "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); errorPrint2("Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL));
return -1; return -1;
} }
...@@ -3186,7 +3202,7 @@ int createDatabasesAndStables(char *command) { ...@@ -3186,7 +3202,7 @@ int createDatabasesAndStables(char *command) {
if (0 != queryDbExec(taos, command, NO_INSERT_TYPE, false)) { if (0 != queryDbExec(taos, command, NO_INSERT_TYPE, false)) {
taos_close(taos); taos_close(taos);
errorPrint( "\ncreate database %s failed!\n\n", errorPrint("\ncreate database %s failed!\n\n",
g_Dbs.db[i].dbName); g_Dbs.db[i].dbName);
return -1; return -1;
} }
...@@ -3216,7 +3232,7 @@ int createDatabasesAndStables(char *command) { ...@@ -3216,7 +3232,7 @@ int createDatabasesAndStables(char *command) {
ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName,
&g_Dbs.db[i].superTbls[j]); &g_Dbs.db[i].superTbls[j]);
if (0 != ret) { if (0 != ret) {
errorPrint("\nget super table %s.%s info failed!\n\n", errorPrint2("\nget super table %s.%s info failed!\n\n",
g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName); g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName);
continue; continue;
} }
...@@ -3244,7 +3260,7 @@ static void* createTable(void *sarg) ...@@ -3244,7 +3260,7 @@ static void* createTable(void *sarg)
pThreadInfo->buffer = calloc(buff_len, 1); pThreadInfo->buffer = calloc(buff_len, 1);
if (pThreadInfo->buffer == NULL) { if (pThreadInfo->buffer == NULL) {
errorPrint("%s() LN%d, Memory allocated failed!\n", __func__, __LINE__); errorPrint2("%s() LN%d, Memory allocated failed!\n", __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -3263,10 +3279,11 @@ static void* createTable(void *sarg) ...@@ -3263,10 +3279,11 @@ static void* createTable(void *sarg)
pThreadInfo->db_name, pThreadInfo->db_name,
g_args.tb_prefix, i, g_args.tb_prefix, i,
pThreadInfo->cols); pThreadInfo->cols);
batchNum ++;
} else { } else {
if (stbInfo == NULL) { if (stbInfo == NULL) {
free(pThreadInfo->buffer); free(pThreadInfo->buffer);
errorPrint("%s() LN%d, use metric, but super table info is NULL\n", errorPrint2("%s() LN%d, use metric, but super table info is NULL\n",
__func__, __LINE__); __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} else { } else {
...@@ -3312,13 +3329,14 @@ static void* createTable(void *sarg) ...@@ -3312,13 +3329,14 @@ static void* createTable(void *sarg)
len = 0; len = 0;
if (0 != queryDbExec(pThreadInfo->taos, pThreadInfo->buffer, if (0 != queryDbExec(pThreadInfo->taos, pThreadInfo->buffer,
NO_INSERT_TYPE, false)){ NO_INSERT_TYPE, false)) {
errorPrint( "queryDbExec() failed. buffer:\n%s\n", pThreadInfo->buffer); errorPrint2("queryDbExec() failed. buffer:\n%s\n", pThreadInfo->buffer);
free(pThreadInfo->buffer); free(pThreadInfo->buffer);
return NULL; return NULL;
} }
pThreadInfo->tables_created += batchNum;
uint64_t currentPrintTime = taosGetTimestampMs(); uint64_t currentPrintTime = taosGetTimestampMs();
if (currentPrintTime - lastPrintTime > 30*1000) { if (currentPrintTime - lastPrintTime > 30*1000) {
printf("thread[%d] already create %"PRIu64" - %"PRIu64" tables\n", printf("thread[%d] already create %"PRIu64" - %"PRIu64" tables\n",
pThreadInfo->threadID, pThreadInfo->start_table_from, i); pThreadInfo->threadID, pThreadInfo->start_table_from, i);
...@@ -3329,7 +3347,7 @@ static void* createTable(void *sarg) ...@@ -3329,7 +3347,7 @@ static void* createTable(void *sarg)
if (0 != len) { if (0 != len) {
if (0 != queryDbExec(pThreadInfo->taos, pThreadInfo->buffer, if (0 != queryDbExec(pThreadInfo->taos, pThreadInfo->buffer,
NO_INSERT_TYPE, false)) { NO_INSERT_TYPE, false)) {
errorPrint( "queryDbExec() failed. buffer:\n%s\n", pThreadInfo->buffer); errorPrint2("queryDbExec() failed. buffer:\n%s\n", pThreadInfo->buffer);
} }
} }
...@@ -3374,7 +3392,7 @@ static int startMultiThreadCreateChildTable( ...@@ -3374,7 +3392,7 @@ static int startMultiThreadCreateChildTable(
db_name, db_name,
g_Dbs.port); g_Dbs.port);
if (pThreadInfo->taos == NULL) { if (pThreadInfo->taos == NULL) {
errorPrint( "%s() LN%d, Failed to connect to TDengine, reason:%s\n", errorPrint2("%s() LN%d, Failed to connect to TDengine, reason:%s\n",
__func__, __LINE__, taos_errstr(NULL)); __func__, __LINE__, taos_errstr(NULL));
free(pids); free(pids);
free(infos); free(infos);
...@@ -3388,6 +3406,7 @@ static int startMultiThreadCreateChildTable( ...@@ -3388,6 +3406,7 @@ static int startMultiThreadCreateChildTable(
pThreadInfo->use_metric = true; pThreadInfo->use_metric = true;
pThreadInfo->cols = cols; pThreadInfo->cols = cols;
pThreadInfo->minDelay = UINT64_MAX; pThreadInfo->minDelay = UINT64_MAX;
pThreadInfo->tables_created = 0;
pthread_create(pids + i, NULL, createTable, pThreadInfo); pthread_create(pids + i, NULL, createTable, pThreadInfo);
} }
...@@ -3398,6 +3417,8 @@ static int startMultiThreadCreateChildTable( ...@@ -3398,6 +3417,8 @@ static int startMultiThreadCreateChildTable(
for (int i = 0; i < threads; i++) { for (int i = 0; i < threads; i++) {
threadInfo *pThreadInfo = infos + i; threadInfo *pThreadInfo = infos + i;
taos_close(pThreadInfo->taos); taos_close(pThreadInfo->taos);
g_actualChildTables += pThreadInfo->tables_created;
} }
free(pids); free(pids);
...@@ -3424,7 +3445,6 @@ static void createChildTables() { ...@@ -3424,7 +3445,6 @@ static void createChildTables() {
verbosePrint("%s() LN%d: %s\n", __func__, __LINE__, verbosePrint("%s() LN%d: %s\n", __func__, __LINE__,
g_Dbs.db[i].superTbls[j].colsOfCreateChildTable); g_Dbs.db[i].superTbls[j].colsOfCreateChildTable);
uint64_t startFrom = 0; uint64_t startFrom = 0;
g_totalChildTables += g_Dbs.db[i].superTbls[j].childTblCount;
verbosePrint("%s() LN%d: create %"PRId64" child tables from %"PRIu64"\n", verbosePrint("%s() LN%d: create %"PRId64" child tables from %"PRIu64"\n",
__func__, __LINE__, g_totalChildTables, startFrom); __func__, __LINE__, g_totalChildTables, startFrom);
...@@ -3549,7 +3569,7 @@ static int readSampleFromCsvFileToMem( ...@@ -3549,7 +3569,7 @@ static int readSampleFromCsvFileToMem(
FILE* fp = fopen(stbInfo->sampleFile, "r"); FILE* fp = fopen(stbInfo->sampleFile, "r");
if (fp == NULL) { 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)); stbInfo->sampleFile, strerror(errno));
return -1; return -1;
} }
...@@ -3561,7 +3581,7 @@ static int readSampleFromCsvFileToMem( ...@@ -3561,7 +3581,7 @@ static int readSampleFromCsvFileToMem(
readLen = tgetline(&line, &n, fp); readLen = tgetline(&line, &n, fp);
if (-1 == readLen) { if (-1 == readLen) {
if(0 != fseek(fp, 0, SEEK_SET)) { 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)); stbInfo->sampleFile, strerror(errno));
fclose(fp); fclose(fp);
return -1; return -1;
...@@ -3604,7 +3624,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3604,7 +3624,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
// columns // columns
cJSON *columns = cJSON_GetObjectItem(stbInfo, "columns"); cJSON *columns = cJSON_GetObjectItem(stbInfo, "columns");
if (columns && columns->type != cJSON_Array) { 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; goto PARSE_OVER;
} else if (NULL == columns) { } else if (NULL == columns) {
superTbls->columnCount = 0; superTbls->columnCount = 0;
...@@ -3614,8 +3634,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3614,8 +3634,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
int columnSize = cJSON_GetArraySize(columns); int columnSize = cJSON_GetArraySize(columns);
if ((columnSize + 1/* ts */) > TSDB_MAX_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", errorPrint("failed to read json, column size overflow, max column size is %d\n",
__func__, __LINE__, TSDB_MAX_COLUMNS); TSDB_MAX_COLUMNS);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3633,8 +3653,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3633,8 +3653,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if (countObj && countObj->type == cJSON_Number) { if (countObj && countObj->type == cJSON_Number) {
count = countObj->valueint; count = countObj->valueint;
} else if (countObj && countObj->type != cJSON_Number) { } else if (countObj && countObj->type != cJSON_Number) {
errorPrint("%s() LN%d, failed to read json, column count not found\n", errorPrint("%s", "failed to read json, column count not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} else { } else {
count = 1; count = 1;
...@@ -3645,8 +3664,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3645,8 +3664,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
cJSON *dataType = cJSON_GetObjectItem(column, "type"); cJSON *dataType = cJSON_GetObjectItem(column, "type");
if (!dataType || dataType->type != cJSON_String if (!dataType || dataType->type != cJSON_String
|| dataType->valuestring == NULL) { || dataType->valuestring == NULL) {
errorPrint("%s() LN%d: failed to read json, column type not found\n", errorPrint("%s", "failed to read json, column type not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
//tstrncpy(superTbls->columns[k].dataType, dataType->valuestring, DATATYPE_BUFF_LEN); //tstrncpy(superTbls->columns[k].dataType, dataType->valuestring, DATATYPE_BUFF_LEN);
...@@ -3674,8 +3692,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3674,8 +3692,8 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
} }
if ((index + 1 /* ts */) > MAX_NUM_COLUMNS) { 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", errorPrint("failed to read json, column size overflow, allowed max column size is %d\n",
__func__, __LINE__, MAX_NUM_COLUMNS); MAX_NUM_COLUMNS);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3686,15 +3704,14 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3686,15 +3704,14 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
// tags // tags
cJSON *tags = cJSON_GetObjectItem(stbInfo, "tags"); cJSON *tags = cJSON_GetObjectItem(stbInfo, "tags");
if (!tags || tags->type != cJSON_Array) { if (!tags || tags->type != cJSON_Array) {
errorPrint("%s() LN%d, failed to read json, tags not found\n", errorPrint("%s", "failed to read json, tags not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
int tagSize = cJSON_GetArraySize(tags); int tagSize = cJSON_GetArraySize(tags);
if (tagSize > TSDB_MAX_TAGS) { if (tagSize > TSDB_MAX_TAGS) {
errorPrint("%s() LN%d, failed to read json, tags size overflow, max tag size is %d\n", errorPrint("failed to read json, tags size overflow, max tag size is %d\n",
__func__, __LINE__, TSDB_MAX_TAGS); TSDB_MAX_TAGS);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3708,7 +3725,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3708,7 +3725,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if (countObj && countObj->type == cJSON_Number) { if (countObj && countObj->type == cJSON_Number) {
count = countObj->valueint; count = countObj->valueint;
} else if (countObj && countObj->type != cJSON_Number) { } 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; goto PARSE_OVER;
} else { } else {
count = 1; count = 1;
...@@ -3719,8 +3736,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3719,8 +3736,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
cJSON *dataType = cJSON_GetObjectItem(tag, "type"); cJSON *dataType = cJSON_GetObjectItem(tag, "type");
if (!dataType || dataType->type != cJSON_String if (!dataType || dataType->type != cJSON_String
|| dataType->valuestring == NULL) { || dataType->valuestring == NULL) {
errorPrint("%s() LN%d, failed to read json, tag type not found\n", errorPrint("%s", "failed to read json, tag type not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
tstrncpy(columnCase.dataType, dataType->valuestring, tstrncpy(columnCase.dataType, dataType->valuestring,
...@@ -3730,8 +3746,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3730,8 +3746,7 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if (dataLen && dataLen->type == cJSON_Number) { if (dataLen && dataLen->type == cJSON_Number) {
columnCase.dataLen = dataLen->valueint; columnCase.dataLen = dataLen->valueint;
} else if (dataLen && dataLen->type != cJSON_Number) { } else if (dataLen && dataLen->type != cJSON_Number) {
errorPrint("%s() LN%d, failed to read json, column len not found\n", errorPrint("%s", "failed to read json, column len not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} else { } else {
columnCase.dataLen = 0; columnCase.dataLen = 0;
...@@ -3746,16 +3761,16 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -3746,16 +3761,16 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
} }
if (index > TSDB_MAX_TAGS) { if (index > TSDB_MAX_TAGS) {
errorPrint("%s() LN%d, failed to read json, tags size overflow, allowed max tag count is %d\n", errorPrint("failed to read json, tags size overflow, allowed max tag count is %d\n",
__func__, __LINE__, TSDB_MAX_TAGS); TSDB_MAX_TAGS);
goto PARSE_OVER; goto PARSE_OVER;
} }
superTbls->tagCount = index; superTbls->tagCount = index;
if ((superTbls->columnCount + superTbls->tagCount + 1 /* ts */) > TSDB_MAX_COLUMNS) { 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", errorPrint("columns + tags is more than allowed max columns count: %d\n",
__func__, __LINE__, TSDB_MAX_COLUMNS); TSDB_MAX_COLUMNS);
goto PARSE_OVER; goto PARSE_OVER;
} }
ret = true; ret = true;
...@@ -3778,7 +3793,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3778,7 +3793,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!host) { } else if (!host) {
tstrncpy(g_Dbs.host, "127.0.0.1", MAX_HOSTNAME_SIZE); tstrncpy(g_Dbs.host, "127.0.0.1", MAX_HOSTNAME_SIZE);
} else { } else {
printf("ERROR: failed to read json, host not found\n"); errorPrint("%s", "failed to read json, host not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3816,7 +3831,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3816,7 +3831,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!threads) { } else if (!threads) {
g_Dbs.threadCount = 1; g_Dbs.threadCount = 1;
} else { } else {
printf("ERROR: failed to read json, threads not found\n"); errorPrint("%s", "failed to read json, threads not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3826,32 +3841,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3826,32 +3841,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!threads2) { } else if (!threads2) {
g_Dbs.threadCountByCreateTbl = 1; g_Dbs.threadCountByCreateTbl = 1;
} else { } else {
errorPrint("%s() LN%d, failed to read json, threads2 not found\n", errorPrint("%s", "failed to read json, threads2 not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
cJSON* gInsertInterval = cJSON_GetObjectItem(root, "insert_interval"); cJSON* gInsertInterval = cJSON_GetObjectItem(root, "insert_interval");
if (gInsertInterval && gInsertInterval->type == cJSON_Number) { if (gInsertInterval && gInsertInterval->type == cJSON_Number) {
if (gInsertInterval->valueint <0) { if (gInsertInterval->valueint <0) {
errorPrint("%s() LN%d, failed to read json, insert interval input mistake\n", errorPrint("%s", "failed to read json, insert interval input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_args.insert_interval = gInsertInterval->valueint; g_args.insert_interval = gInsertInterval->valueint;
} else if (!gInsertInterval) { } else if (!gInsertInterval) {
g_args.insert_interval = 0; g_args.insert_interval = 0;
} else { } else {
errorPrint("%s() LN%d, failed to read json, insert_interval input mistake\n", errorPrint("%s", "failed to read json, insert_interval input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
cJSON* interlaceRows = cJSON_GetObjectItem(root, "interlace_rows"); cJSON* interlaceRows = cJSON_GetObjectItem(root, "interlace_rows");
if (interlaceRows && interlaceRows->type == cJSON_Number) { if (interlaceRows && interlaceRows->type == cJSON_Number) {
if (interlaceRows->valueint < 0) { if (interlaceRows->valueint < 0) {
errorPrint("%s() LN%d, failed to read json, interlace_rows input mistake\n", errorPrint("%s", "failed to read json, interlace_rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3859,8 +3870,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3859,8 +3870,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!interlaceRows) { } 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 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 { } else {
errorPrint("%s() LN%d, failed to read json, interlace_rows input mistake\n", errorPrint("%s", "failed to read json, interlace_rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3933,14 +3943,14 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3933,14 +3943,14 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON* dbs = cJSON_GetObjectItem(root, "databases"); cJSON* dbs = cJSON_GetObjectItem(root, "databases");
if (!dbs || dbs->type != cJSON_Array) { 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; goto PARSE_OVER;
} }
int dbSize = cJSON_GetArraySize(dbs); int dbSize = cJSON_GetArraySize(dbs);
if (dbSize > MAX_DB_COUNT) { if (dbSize > MAX_DB_COUNT) {
errorPrint( 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); MAX_DB_COUNT);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3953,13 +3963,13 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3953,13 +3963,13 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
// dbinfo // dbinfo
cJSON *dbinfo = cJSON_GetObjectItem(dbinfos, "dbinfo"); cJSON *dbinfo = cJSON_GetObjectItem(dbinfos, "dbinfo");
if (!dbinfo || dbinfo->type != cJSON_Object) { 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; goto PARSE_OVER;
} }
cJSON *dbName = cJSON_GetObjectItem(dbinfo, "name"); cJSON *dbName = cJSON_GetObjectItem(dbinfo, "name");
if (!dbName || dbName->type != cJSON_String || dbName->valuestring == NULL) { 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; goto PARSE_OVER;
} }
tstrncpy(g_Dbs.db[i].dbName, dbName->valuestring, TSDB_DB_NAME_LEN); tstrncpy(g_Dbs.db[i].dbName, dbName->valuestring, TSDB_DB_NAME_LEN);
...@@ -3974,8 +3984,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3974,8 +3984,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!drop) { } else if (!drop) {
g_Dbs.db[i].drop = g_args.drop_database; g_Dbs.db[i].drop = g_args.drop_database;
} else { } else {
errorPrint("%s() LN%d, failed to read json, drop input mistake\n", errorPrint("%s", "failed to read json, drop input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3987,7 +3996,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3987,7 +3996,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!precision) { } else if (!precision) {
memset(g_Dbs.db[i].dbCfg.precision, 0, SMALL_BUFF_LEN); memset(g_Dbs.db[i].dbCfg.precision, 0, SMALL_BUFF_LEN);
} else { } else {
printf("ERROR: failed to read json, precision not found\n"); errorPrint("%s", "failed to read json, precision not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -3997,7 +4006,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -3997,7 +4006,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!update) { } else if (!update) {
g_Dbs.db[i].dbCfg.update = -1; g_Dbs.db[i].dbCfg.update = -1;
} else { } else {
printf("ERROR: failed to read json, update not found\n"); errorPrint("%s", "failed to read json, update not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4007,7 +4016,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4007,7 +4016,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!replica) { } else if (!replica) {
g_Dbs.db[i].dbCfg.replica = -1; g_Dbs.db[i].dbCfg.replica = -1;
} else { } else {
printf("ERROR: failed to read json, replica not found\n"); errorPrint("%s", "failed to read json, replica not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4017,7 +4026,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4017,7 +4026,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!keep) { } else if (!keep) {
g_Dbs.db[i].dbCfg.keep = -1; g_Dbs.db[i].dbCfg.keep = -1;
} else { } else {
printf("ERROR: failed to read json, keep not found\n"); errorPrint("%s", "failed to read json, keep not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4027,7 +4036,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4027,7 +4036,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!days) { } else if (!days) {
g_Dbs.db[i].dbCfg.days = -1; g_Dbs.db[i].dbCfg.days = -1;
} else { } else {
printf("ERROR: failed to read json, days not found\n"); errorPrint("%s", "failed to read json, days not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4037,7 +4046,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4037,7 +4046,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!cache) { } else if (!cache) {
g_Dbs.db[i].dbCfg.cache = -1; g_Dbs.db[i].dbCfg.cache = -1;
} else { } else {
printf("ERROR: failed to read json, cache not found\n"); errorPrint("%s", "failed to read json, cache not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4047,7 +4056,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4047,7 +4056,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!blocks) { } else if (!blocks) {
g_Dbs.db[i].dbCfg.blocks = -1; g_Dbs.db[i].dbCfg.blocks = -1;
} else { } else {
printf("ERROR: failed to read json, block not found\n"); errorPrint("%s", "failed to read json, block not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4067,7 +4076,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4067,7 +4076,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!minRows) { } else if (!minRows) {
g_Dbs.db[i].dbCfg.minRows = 0; // 0 means default g_Dbs.db[i].dbCfg.minRows = 0; // 0 means default
} else { } else {
printf("ERROR: failed to read json, minRows not found\n"); errorPrint("%s", "failed to read json, minRows not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4077,7 +4086,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4077,7 +4086,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!maxRows) { } else if (!maxRows) {
g_Dbs.db[i].dbCfg.maxRows = 0; // 0 means default g_Dbs.db[i].dbCfg.maxRows = 0; // 0 means default
} else { } else {
printf("ERROR: failed to read json, maxRows not found\n"); errorPrint("%s", "failed to read json, maxRows not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4087,7 +4096,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4087,7 +4096,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!comp) { } else if (!comp) {
g_Dbs.db[i].dbCfg.comp = -1; g_Dbs.db[i].dbCfg.comp = -1;
} else { } else {
printf("ERROR: failed to read json, comp not found\n"); errorPrint("%s", "failed to read json, comp not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4097,7 +4106,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4097,7 +4106,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!walLevel) { } else if (!walLevel) {
g_Dbs.db[i].dbCfg.walLevel = -1; g_Dbs.db[i].dbCfg.walLevel = -1;
} else { } else {
printf("ERROR: failed to read json, walLevel not found\n"); errorPrint("%s", "failed to read json, walLevel not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4107,7 +4116,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4107,7 +4116,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!cacheLast) { } else if (!cacheLast) {
g_Dbs.db[i].dbCfg.cacheLast = -1; g_Dbs.db[i].dbCfg.cacheLast = -1;
} else { } else {
printf("ERROR: failed to read json, cacheLast not found\n"); errorPrint("%s", "failed to read json, cacheLast not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4127,24 +4136,22 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4127,24 +4136,22 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!fsync) { } else if (!fsync) {
g_Dbs.db[i].dbCfg.fsync = -1; g_Dbs.db[i].dbCfg.fsync = -1;
} else { } else {
errorPrint("%s() LN%d, failed to read json, fsync input mistake\n", errorPrint("%s", "failed to read json, fsync input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
// super_talbes // super_talbes
cJSON *stables = cJSON_GetObjectItem(dbinfos, "super_tables"); cJSON *stables = cJSON_GetObjectItem(dbinfos, "super_tables");
if (!stables || stables->type != cJSON_Array) { if (!stables || stables->type != cJSON_Array) {
errorPrint("%s() LN%d, failed to read json, super_tables not found\n", errorPrint("%s", "failed to read json, super_tables not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
int stbSize = cJSON_GetArraySize(stables); int stbSize = cJSON_GetArraySize(stables);
if (stbSize > MAX_SUPER_TABLE_COUNT) { if (stbSize > MAX_SUPER_TABLE_COUNT) {
errorPrint( errorPrint(
"%s() LN%d, failed to read json, supertable size overflow, max supertable is %d\n", "failed to read json, supertable size overflow, max supertable is %d\n",
__func__, __LINE__, MAX_SUPER_TABLE_COUNT); MAX_SUPER_TABLE_COUNT);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4157,8 +4164,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4157,8 +4164,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON *stbName = cJSON_GetObjectItem(stbInfo, "name"); cJSON *stbName = cJSON_GetObjectItem(stbInfo, "name");
if (!stbName || stbName->type != cJSON_String if (!stbName || stbName->type != cJSON_String
|| stbName->valuestring == NULL) { || stbName->valuestring == NULL) {
errorPrint("%s() LN%d, failed to read json, stb name not found\n", errorPrint("%s", "failed to read json, stb name not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
tstrncpy(g_Dbs.db[i].superTbls[j].sTblName, stbName->valuestring, tstrncpy(g_Dbs.db[i].superTbls[j].sTblName, stbName->valuestring,
...@@ -4166,7 +4172,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4166,7 +4172,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON *prefix = cJSON_GetObjectItem(stbInfo, "childtable_prefix"); cJSON *prefix = cJSON_GetObjectItem(stbInfo, "childtable_prefix");
if (!prefix || prefix->type != cJSON_String || prefix->valuestring == NULL) { 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; goto PARSE_OVER;
} }
tstrncpy(g_Dbs.db[i].superTbls[j].childTblPrefix, prefix->valuestring, tstrncpy(g_Dbs.db[i].superTbls[j].childTblPrefix, prefix->valuestring,
...@@ -4187,7 +4193,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4187,7 +4193,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!autoCreateTbl) { } else if (!autoCreateTbl) {
g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL;
} else { } 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; goto PARSE_OVER;
} }
...@@ -4197,7 +4203,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4197,7 +4203,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!batchCreateTbl) { } else if (!batchCreateTbl) {
g_Dbs.db[i].superTbls[j].batchCreateTableNum = 1000; g_Dbs.db[i].superTbls[j].batchCreateTableNum = 1000;
} else { } 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; goto PARSE_OVER;
} }
...@@ -4217,8 +4223,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4217,8 +4223,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!childTblExists) { } else if (!childTblExists) {
g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS;
} else { } else {
errorPrint("%s() LN%d, failed to read json, child_table_exists not found\n", errorPrint("%s",
__func__, __LINE__); "failed to read json, child_table_exists not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4228,11 +4234,12 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4228,11 +4234,12 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
cJSON* count = cJSON_GetObjectItem(stbInfo, "childtable_count"); cJSON* count = cJSON_GetObjectItem(stbInfo, "childtable_count");
if (!count || count->type != cJSON_Number || 0 >= count->valueint) { if (!count || count->type != cJSON_Number || 0 >= count->valueint) {
errorPrint("%s() LN%d, failed to read json, childtable_count input mistake\n", errorPrint("%s",
__func__, __LINE__); "failed to read json, childtable_count input mistake\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
g_Dbs.db[i].superTbls[j].childTblCount = count->valueint; 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"); cJSON *dataSource = cJSON_GetObjectItem(stbInfo, "data_source");
if (dataSource && dataSource->type == cJSON_String if (dataSource && dataSource->type == cJSON_String
...@@ -4244,8 +4251,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4244,8 +4251,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy(g_Dbs.db[i].superTbls[j].dataSource, "rand", tstrncpy(g_Dbs.db[i].superTbls[j].dataSource, "rand",
min(SMALL_BUFF_LEN, strlen("rand") + 1)); min(SMALL_BUFF_LEN, strlen("rand") + 1));
} else { } else {
errorPrint("%s() LN%d, failed to read json, data_source not found\n", errorPrint("%s", "failed to read json, data_source not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4259,8 +4265,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4259,8 +4265,8 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (0 == strcasecmp(stbIface->valuestring, "stmt")) { } else if (0 == strcasecmp(stbIface->valuestring, "stmt")) {
g_Dbs.db[i].superTbls[j].iface= STMT_IFACE; g_Dbs.db[i].superTbls[j].iface= STMT_IFACE;
} else { } else {
errorPrint("%s() LN%d, failed to read json, insert_mode %s not recognized\n", errorPrint("failed to read json, insert_mode %s not recognized\n",
__func__, __LINE__, stbIface->valuestring); stbIface->valuestring);
goto PARSE_OVER; goto PARSE_OVER;
} }
} else if (!stbIface) { } else if (!stbIface) {
...@@ -4274,7 +4280,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4274,7 +4280,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if ((childTbl_limit) && (g_Dbs.db[i].drop != true) if ((childTbl_limit) && (g_Dbs.db[i].drop != true)
&& (g_Dbs.db[i].superTbls[j].childTblExists == TBL_ALREADY_EXISTS)) { && (g_Dbs.db[i].superTbls[j].childTblExists == TBL_ALREADY_EXISTS)) {
if (childTbl_limit->type != cJSON_Number) { 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; goto PARSE_OVER;
} }
g_Dbs.db[i].superTbls[j].childTblLimit = childTbl_limit->valueint; g_Dbs.db[i].superTbls[j].childTblLimit = childTbl_limit->valueint;
...@@ -4287,7 +4293,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4287,7 +4293,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
&& (g_Dbs.db[i].superTbls[j].childTblExists == TBL_ALREADY_EXISTS)) { && (g_Dbs.db[i].superTbls[j].childTblExists == TBL_ALREADY_EXISTS)) {
if ((childTbl_offset->type != cJSON_Number) if ((childTbl_offset->type != cJSON_Number)
|| (0 > childTbl_offset->valueint)) { || (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; goto PARSE_OVER;
} }
g_Dbs.db[i].superTbls[j].childTblOffset = childTbl_offset->valueint; g_Dbs.db[i].superTbls[j].childTblOffset = childTbl_offset->valueint;
...@@ -4303,7 +4309,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4303,7 +4309,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy(g_Dbs.db[i].superTbls[j].startTimestamp, tstrncpy(g_Dbs.db[i].superTbls[j].startTimestamp,
"now", TSDB_DB_NAME_LEN); "now", TSDB_DB_NAME_LEN);
} else { } 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; goto PARSE_OVER;
} }
...@@ -4313,7 +4319,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4313,7 +4319,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!timestampStep) { } else if (!timestampStep) {
g_Dbs.db[i].superTbls[j].timeStampStep = g_args.timestamp_step; g_Dbs.db[i].superTbls[j].timeStampStep = g_args.timestamp_step;
} else { } 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; goto PARSE_OVER;
} }
...@@ -4328,7 +4334,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4328,7 +4334,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
tstrncpy(g_Dbs.db[i].superTbls[j].sampleFormat, "csv", tstrncpy(g_Dbs.db[i].superTbls[j].sampleFormat, "csv",
SMALL_BUFF_LEN); SMALL_BUFF_LEN);
} else { } 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; goto PARSE_OVER;
} }
...@@ -4343,7 +4349,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4343,7 +4349,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
memset(g_Dbs.db[i].superTbls[j].sampleFile, 0, memset(g_Dbs.db[i].superTbls[j].sampleFile, 0,
MAX_FILE_NAME_LEN); MAX_FILE_NAME_LEN);
} else { } 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; goto PARSE_OVER;
} }
...@@ -4361,7 +4367,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4361,7 +4367,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
memset(g_Dbs.db[i].superTbls[j].tagsFile, 0, MAX_FILE_NAME_LEN); memset(g_Dbs.db[i].superTbls[j].tagsFile, 0, MAX_FILE_NAME_LEN);
g_Dbs.db[i].superTbls[j].tagSource = 0; g_Dbs.db[i].superTbls[j].tagSource = 0;
} else { } 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; goto PARSE_OVER;
} }
...@@ -4377,8 +4383,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4377,8 +4383,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!maxSqlLen) { } else if (!maxSqlLen) {
g_Dbs.db[i].superTbls[j].maxSqlLen = g_args.max_sql_len; g_Dbs.db[i].superTbls[j].maxSqlLen = g_args.max_sql_len;
} else { } else {
errorPrint("%s() LN%d, failed to read json, stbMaxSqlLen input mistake\n", errorPrint("%s", "failed to read json, stbMaxSqlLen input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
/* /*
...@@ -4395,31 +4400,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4395,31 +4400,28 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!multiThreadWriteOneTbl) { } else if (!multiThreadWriteOneTbl) {
g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0; g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0;
} else { } else {
printf("ERROR: failed to read json, multiThreadWriteOneTbl not found\n"); errorPrint("%s", "failed to read json, multiThreadWriteOneTbl not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
*/ */
cJSON* insertRows = cJSON_GetObjectItem(stbInfo, "insert_rows"); cJSON* insertRows = cJSON_GetObjectItem(stbInfo, "insert_rows");
if (insertRows && insertRows->type == cJSON_Number) { if (insertRows && insertRows->type == cJSON_Number) {
if (insertRows->valueint < 0) { if (insertRows->valueint < 0) {
errorPrint("%s() LN%d, failed to read json, insert_rows input mistake\n", errorPrint("%s", "failed to read json, insert_rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_Dbs.db[i].superTbls[j].insertRows = insertRows->valueint; g_Dbs.db[i].superTbls[j].insertRows = insertRows->valueint;
} else if (!insertRows) { } else if (!insertRows) {
g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF; g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF;
} else { } else {
errorPrint("%s() LN%d, failed to read json, insert_rows input mistake\n", errorPrint("%s", "failed to read json, insert_rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
cJSON* stbInterlaceRows = cJSON_GetObjectItem(stbInfo, "interlace_rows"); cJSON* stbInterlaceRows = cJSON_GetObjectItem(stbInfo, "interlace_rows");
if (stbInterlaceRows && stbInterlaceRows->type == cJSON_Number) { if (stbInterlaceRows && stbInterlaceRows->type == cJSON_Number) {
if (stbInterlaceRows->valueint < 0) { if (stbInterlaceRows->valueint < 0) {
errorPrint("%s() LN%d, failed to read json, interlace rows input mistake\n", errorPrint("%s", "failed to read json, interlace rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_Dbs.db[i].superTbls[j].interlaceRows = stbInterlaceRows->valueint; g_Dbs.db[i].superTbls[j].interlaceRows = stbInterlaceRows->valueint;
...@@ -4437,8 +4439,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -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 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 { } else {
errorPrint( errorPrint(
"%s() LN%d, failed to read json, interlace rows input mistake\n", "%s", "failed to read json, interlace rows input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4454,7 +4455,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4454,7 +4455,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!disorderRatio) { } else if (!disorderRatio) {
g_Dbs.db[i].superTbls[j].disorderRatio = 0; g_Dbs.db[i].superTbls[j].disorderRatio = 0;
} else { } else {
printf("ERROR: failed to read json, disorderRatio not found\n"); errorPrint("%s", "failed to read json, disorderRatio not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4464,7 +4465,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4464,7 +4465,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
} else if (!disorderRange) { } else if (!disorderRange) {
g_Dbs.db[i].superTbls[j].disorderRange = 1000; g_Dbs.db[i].superTbls[j].disorderRange = 1000;
} else { } else {
printf("ERROR: failed to read json, disorderRange not found\n"); errorPrint("%s", "failed to read json, disorderRange not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4472,8 +4473,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4472,8 +4473,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
if (insertInterval && insertInterval->type == cJSON_Number) { if (insertInterval && insertInterval->type == cJSON_Number) {
g_Dbs.db[i].superTbls[j].insertInterval = insertInterval->valueint; g_Dbs.db[i].superTbls[j].insertInterval = insertInterval->valueint;
if (insertInterval->valueint < 0) { if (insertInterval->valueint < 0) {
errorPrint("%s() LN%d, failed to read json, insert_interval input mistake\n", errorPrint("%s", "failed to read json, insert_interval input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
} else if (!insertInterval) { } else if (!insertInterval) {
...@@ -4481,8 +4481,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { ...@@ -4481,8 +4481,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
__func__, __LINE__, g_args.insert_interval); __func__, __LINE__, g_args.insert_interval);
g_Dbs.db[i].superTbls[j].insertInterval = g_args.insert_interval; g_Dbs.db[i].superTbls[j].insertInterval = g_args.insert_interval;
} else { } else {
errorPrint("%s() LN%d, failed to read json, insert_interval input mistake\n", errorPrint("%s", "failed to read json, insert_interval input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4514,7 +4513,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4514,7 +4513,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (!host) { } else if (!host) {
tstrncpy(g_queryInfo.host, "127.0.0.1", MAX_HOSTNAME_SIZE); tstrncpy(g_queryInfo.host, "127.0.0.1", MAX_HOSTNAME_SIZE);
} else { } else {
printf("ERROR: failed to read json, host not found\n"); errorPrint("%s", "failed to read json, host not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4552,23 +4551,21 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4552,23 +4551,21 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (!answerPrompt) { } else if (!answerPrompt) {
g_args.answer_yes = false; g_args.answer_yes = false;
} else { } 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; goto PARSE_OVER;
} }
cJSON* gQueryTimes = cJSON_GetObjectItem(root, "query_times"); cJSON* gQueryTimes = cJSON_GetObjectItem(root, "query_times");
if (gQueryTimes && gQueryTimes->type == cJSON_Number) { if (gQueryTimes && gQueryTimes->type == cJSON_Number) {
if (gQueryTimes->valueint <= 0) { if (gQueryTimes->valueint <= 0) {
errorPrint("%s() LN%d, failed to read json, query_times input mistake\n", errorPrint("%s()", "failed to read json, query_times input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_args.query_times = gQueryTimes->valueint; g_args.query_times = gQueryTimes->valueint;
} else if (!gQueryTimes) { } else if (!gQueryTimes) {
g_args.query_times = 1; g_args.query_times = 1;
} else { } else {
errorPrint("%s() LN%d, failed to read json, query_times input mistake\n", errorPrint("%s", "failed to read json, query_times input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4576,7 +4573,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4576,7 +4573,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if (dbs && dbs->type == cJSON_String && dbs->valuestring != NULL) { if (dbs && dbs->type == cJSON_String && dbs->valuestring != NULL) {
tstrncpy(g_queryInfo.dbName, dbs->valuestring, TSDB_DB_NAME_LEN); tstrncpy(g_queryInfo.dbName, dbs->valuestring, TSDB_DB_NAME_LEN);
} else if (!dbs) { } 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; goto PARSE_OVER;
} }
...@@ -4590,7 +4587,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4590,7 +4587,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
tstrncpy(g_queryInfo.queryMode, "taosc", tstrncpy(g_queryInfo.queryMode, "taosc",
min(SMALL_BUFF_LEN, strlen("taosc") + 1)); min(SMALL_BUFF_LEN, strlen("taosc") + 1));
} else { } 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; goto PARSE_OVER;
} }
...@@ -4600,7 +4597,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4600,7 +4597,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
g_queryInfo.specifiedQueryInfo.concurrent = 1; g_queryInfo.specifiedQueryInfo.concurrent = 1;
g_queryInfo.specifiedQueryInfo.sqlCount = 0; g_queryInfo.specifiedQueryInfo.sqlCount = 0;
} else if (specifiedQuery->type != cJSON_Object) { } 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; goto PARSE_OVER;
} else { } else {
cJSON* queryInterval = cJSON_GetObjectItem(specifiedQuery, "query_interval"); cJSON* queryInterval = cJSON_GetObjectItem(specifiedQuery, "query_interval");
...@@ -4615,8 +4612,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4615,8 +4612,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if (specifiedQueryTimes && specifiedQueryTimes->type == cJSON_Number) { if (specifiedQueryTimes && specifiedQueryTimes->type == cJSON_Number) {
if (specifiedQueryTimes->valueint <= 0) { if (specifiedQueryTimes->valueint <= 0) {
errorPrint( errorPrint(
"%s() LN%d, failed to read json, query_times: %"PRId64", need be a valid (>0) number\n", "failed to read json, query_times: %"PRId64", need be a valid (>0) number\n",
__func__, __LINE__, specifiedQueryTimes->valueint); specifiedQueryTimes->valueint);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4633,8 +4630,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4633,8 +4630,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if (concurrent && concurrent->type == cJSON_Number) { if (concurrent && concurrent->type == cJSON_Number) {
if (concurrent->valueint <= 0) { if (concurrent->valueint <= 0) {
errorPrint( errorPrint(
"%s() LN%d, query sqlCount %d or concurrent %d is not correct.\n", "query sqlCount %d or concurrent %d is not correct.\n",
__func__, __LINE__,
g_queryInfo.specifiedQueryInfo.sqlCount, g_queryInfo.specifiedQueryInfo.sqlCount,
g_queryInfo.specifiedQueryInfo.concurrent); g_queryInfo.specifiedQueryInfo.concurrent);
goto PARSE_OVER; goto PARSE_OVER;
...@@ -4652,8 +4648,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4652,8 +4648,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("async", specifiedAsyncMode->valuestring)) { } else if (0 == strcmp("async", specifiedAsyncMode->valuestring)) {
g_queryInfo.specifiedQueryInfo.asyncMode = ASYNC_MODE; g_queryInfo.specifiedQueryInfo.asyncMode = ASYNC_MODE;
} else { } else {
errorPrint("%s() LN%d, failed to read json, async mode input error\n", errorPrint("%s", "failed to read json, async mode input error\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
} else { } else {
...@@ -4676,7 +4671,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4676,7 +4671,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("no", restart->valuestring)) { } else if (0 == strcmp("no", restart->valuestring)) {
g_queryInfo.specifiedQueryInfo.subscribeRestart = false; g_queryInfo.specifiedQueryInfo.subscribeRestart = false;
} else { } else {
printf("ERROR: failed to read json, subscribe restart error\n"); errorPrint("%s", "failed to read json, subscribe restart error\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
} else { } else {
...@@ -4692,7 +4687,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4692,7 +4687,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("no", keepProgress->valuestring)) { } else if (0 == strcmp("no", keepProgress->valuestring)) {
g_queryInfo.specifiedQueryInfo.subscribeKeepProgress = 0; g_queryInfo.specifiedQueryInfo.subscribeKeepProgress = 0;
} else { } else {
printf("ERROR: failed to read json, subscribe keepProgress error\n"); errorPrint("%s", "failed to read json, subscribe keepProgress error\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
} else { } else {
...@@ -4704,15 +4699,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4704,15 +4699,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if (!specifiedSqls) { if (!specifiedSqls) {
g_queryInfo.specifiedQueryInfo.sqlCount = 0; g_queryInfo.specifiedQueryInfo.sqlCount = 0;
} else if (specifiedSqls->type != cJSON_Array) { } else if (specifiedSqls->type != cJSON_Array) {
errorPrint("%s() LN%d, failed to read json, super sqls not found\n", errorPrint("%s", "failed to read json, super sqls not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} else { } else {
int superSqlSize = cJSON_GetArraySize(specifiedSqls); int superSqlSize = cJSON_GetArraySize(specifiedSqls);
if (superSqlSize * g_queryInfo.specifiedQueryInfo.concurrent if (superSqlSize * g_queryInfo.specifiedQueryInfo.concurrent
> MAX_QUERY_SQL_COUNT) { > MAX_QUERY_SQL_COUNT) {
errorPrint("%s() LN%d, failed to read json, query sql(%d) * concurrent(%d) overflow, max is %d\n", errorPrint("failed to read json, query sql(%d) * concurrent(%d) overflow, max is %d\n",
__func__, __LINE__,
superSqlSize, superSqlSize,
g_queryInfo.specifiedQueryInfo.concurrent, g_queryInfo.specifiedQueryInfo.concurrent,
MAX_QUERY_SQL_COUNT); MAX_QUERY_SQL_COUNT);
...@@ -4726,7 +4719,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4726,7 +4719,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql");
if (!sqlStr || sqlStr->type != cJSON_String || sqlStr->valuestring == NULL) { 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; goto PARSE_OVER;
} }
tstrncpy(g_queryInfo.specifiedQueryInfo.sql[j], tstrncpy(g_queryInfo.specifiedQueryInfo.sql[j],
...@@ -4766,7 +4759,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4766,7 +4759,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
memset(g_queryInfo.specifiedQueryInfo.result[j], memset(g_queryInfo.specifiedQueryInfo.result[j],
0, MAX_FILE_NAME_LEN); 0, MAX_FILE_NAME_LEN);
} else { } 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; goto PARSE_OVER;
} }
} }
...@@ -4779,7 +4773,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4779,7 +4773,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
g_queryInfo.superQueryInfo.threadCnt = 1; g_queryInfo.superQueryInfo.threadCnt = 1;
g_queryInfo.superQueryInfo.sqlCount = 0; g_queryInfo.superQueryInfo.sqlCount = 0;
} else if (superQuery->type != cJSON_Object) { } 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; ret = true;
goto PARSE_OVER; goto PARSE_OVER;
} else { } else {
...@@ -4793,24 +4787,22 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4793,24 +4787,22 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON* superQueryTimes = cJSON_GetObjectItem(superQuery, "query_times"); cJSON* superQueryTimes = cJSON_GetObjectItem(superQuery, "query_times");
if (superQueryTimes && superQueryTimes->type == cJSON_Number) { if (superQueryTimes && superQueryTimes->type == cJSON_Number) {
if (superQueryTimes->valueint <= 0) { if (superQueryTimes->valueint <= 0) {
errorPrint("%s() LN%d, failed to read json, query_times: %"PRId64", need be a valid (>0) number\n", errorPrint("failed to read json, query_times: %"PRId64", need be a valid (>0) number\n",
__func__, __LINE__, superQueryTimes->valueint); superQueryTimes->valueint);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_queryInfo.superQueryInfo.queryTimes = superQueryTimes->valueint; g_queryInfo.superQueryInfo.queryTimes = superQueryTimes->valueint;
} else if (!superQueryTimes) { } else if (!superQueryTimes) {
g_queryInfo.superQueryInfo.queryTimes = g_args.query_times; g_queryInfo.superQueryInfo.queryTimes = g_args.query_times;
} else { } else {
errorPrint("%s() LN%d, failed to read json, query_times input mistake\n", errorPrint("%s", "failed to read json, query_times input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
cJSON* threads = cJSON_GetObjectItem(superQuery, "threads"); cJSON* threads = cJSON_GetObjectItem(superQuery, "threads");
if (threads && threads->type == cJSON_Number) { if (threads && threads->type == cJSON_Number) {
if (threads->valueint <= 0) { if (threads->valueint <= 0) {
errorPrint("%s() LN%d, failed to read json, threads input mistake\n", errorPrint("%s", "failed to read json, threads input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4832,8 +4824,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4832,8 +4824,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
tstrncpy(g_queryInfo.superQueryInfo.sTblName, stblname->valuestring, tstrncpy(g_queryInfo.superQueryInfo.sTblName, stblname->valuestring,
TSDB_TABLE_NAME_LEN); TSDB_TABLE_NAME_LEN);
} else { } else {
errorPrint("%s() LN%d, failed to read json, super table name input error\n", errorPrint("%s", "failed to read json, super table name input error\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4845,8 +4836,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4845,8 +4836,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("async", superAsyncMode->valuestring)) { } else if (0 == strcmp("async", superAsyncMode->valuestring)) {
g_queryInfo.superQueryInfo.asyncMode = ASYNC_MODE; g_queryInfo.superQueryInfo.asyncMode = ASYNC_MODE;
} else { } else {
errorPrint("%s() LN%d, failed to read json, async mode input error\n", errorPrint("%s", "failed to read json, async mode input error\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
} else { } else {
...@@ -4856,8 +4846,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4856,8 +4846,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON* superInterval = cJSON_GetObjectItem(superQuery, "interval"); cJSON* superInterval = cJSON_GetObjectItem(superQuery, "interval");
if (superInterval && superInterval->type == cJSON_Number) { if (superInterval && superInterval->type == cJSON_Number) {
if (superInterval->valueint < 0) { if (superInterval->valueint < 0) {
errorPrint("%s() LN%d, failed to read json, interval input mistake\n", errorPrint("%s", "failed to read json, interval input mistake\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
g_queryInfo.superQueryInfo.subscribeInterval = superInterval->valueint; g_queryInfo.superQueryInfo.subscribeInterval = superInterval->valueint;
...@@ -4875,7 +4864,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4875,7 +4864,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("no", subrestart->valuestring)) { } else if (0 == strcmp("no", subrestart->valuestring)) {
g_queryInfo.superQueryInfo.subscribeRestart = false; g_queryInfo.superQueryInfo.subscribeRestart = false;
} else { } else {
printf("ERROR: failed to read json, subscribe restart error\n"); errorPrint("%s", "failed to read json, subscribe restart error\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
} else { } else {
...@@ -4891,7 +4880,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4891,7 +4880,8 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
} else if (0 == strcmp("no", superkeepProgress->valuestring)) { } else if (0 == strcmp("no", superkeepProgress->valuestring)) {
g_queryInfo.superQueryInfo.subscribeKeepProgress = 0; g_queryInfo.superQueryInfo.subscribeKeepProgress = 0;
} else { } 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; goto PARSE_OVER;
} }
} else { } else {
...@@ -4928,14 +4918,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4928,14 +4918,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
if (!superSqls) { if (!superSqls) {
g_queryInfo.superQueryInfo.sqlCount = 0; g_queryInfo.superQueryInfo.sqlCount = 0;
} else if (superSqls->type != cJSON_Array) { } else if (superSqls->type != cJSON_Array) {
errorPrint("%s() LN%d: failed to read json, super sqls not found\n", errorPrint("%s", "failed to read json, super sqls not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} else { } else {
int superSqlSize = cJSON_GetArraySize(superSqls); int superSqlSize = cJSON_GetArraySize(superSqls);
if (superSqlSize > MAX_QUERY_SQL_COUNT) { if (superSqlSize > MAX_QUERY_SQL_COUNT) {
errorPrint("%s() LN%d, failed to read json, query sql size overflow, max is %d\n", errorPrint("failed to read json, query sql size overflow, max is %d\n",
__func__, __LINE__, MAX_QUERY_SQL_COUNT); MAX_QUERY_SQL_COUNT);
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -4947,8 +4936,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4947,8 +4936,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql");
if (!sqlStr || sqlStr->type != cJSON_String if (!sqlStr || sqlStr->type != cJSON_String
|| sqlStr->valuestring == NULL) { || sqlStr->valuestring == NULL) {
errorPrint("%s() LN%d, failed to read json, sql not found\n", errorPrint("%s", "failed to read json, sql not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
tstrncpy(g_queryInfo.superQueryInfo.sql[j], sqlStr->valuestring, tstrncpy(g_queryInfo.superQueryInfo.sql[j], sqlStr->valuestring,
...@@ -4956,14 +4944,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) { ...@@ -4956,14 +4944,13 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
cJSON *result = cJSON_GetObjectItem(sql, "result"); cJSON *result = cJSON_GetObjectItem(sql, "result");
if (result != NULL && result->type == cJSON_String if (result != NULL && result->type == cJSON_String
&& result->valuestring != NULL){ && result->valuestring != NULL) {
tstrncpy(g_queryInfo.superQueryInfo.result[j], tstrncpy(g_queryInfo.superQueryInfo.result[j],
result->valuestring, MAX_FILE_NAME_LEN); result->valuestring, MAX_FILE_NAME_LEN);
} else if (NULL == result) { } else if (NULL == result) {
memset(g_queryInfo.superQueryInfo.result[j], 0, MAX_FILE_NAME_LEN); memset(g_queryInfo.superQueryInfo.result[j], 0, MAX_FILE_NAME_LEN);
} else { } else {
errorPrint("%s() LN%d, failed to read json, sub query result file not found\n", errorPrint("%s", "failed to read json, sub query result file not found\n");
__func__, __LINE__);
goto PARSE_OVER; goto PARSE_OVER;
} }
} }
...@@ -4981,7 +4968,7 @@ static bool getInfoFromJsonFile(char* file) { ...@@ -4981,7 +4968,7 @@ static bool getInfoFromJsonFile(char* file) {
FILE *fp = fopen(file, "r"); FILE *fp = fopen(file, "r");
if (!fp) { 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; return false;
} }
...@@ -4992,14 +4979,14 @@ static bool getInfoFromJsonFile(char* file) { ...@@ -4992,14 +4979,14 @@ static bool getInfoFromJsonFile(char* file) {
if (len <= 0) { if (len <= 0) {
free(content); free(content);
fclose(fp); fclose(fp);
printf("failed to read %s, content is null", file); errorPrint("failed to read %s, content is null", file);
return false; return false;
} }
content[len] = 0; content[len] = 0;
cJSON* root = cJSON_Parse(content); cJSON* root = cJSON_Parse(content);
if (root == NULL) { 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; goto PARSE_OVER;
} }
...@@ -5012,13 +4999,13 @@ static bool getInfoFromJsonFile(char* file) { ...@@ -5012,13 +4999,13 @@ static bool getInfoFromJsonFile(char* file) {
} else if (0 == strcasecmp("subscribe", filetype->valuestring)) { } else if (0 == strcasecmp("subscribe", filetype->valuestring)) {
g_args.test_mode = SUBSCRIBE_TEST; g_args.test_mode = SUBSCRIBE_TEST;
} else { } else {
printf("ERROR: failed to read json, filetype not support\n"); errorPrint("%s", "failed to read json, filetype not support\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
} else if (!filetype) { } else if (!filetype) {
g_args.test_mode = INSERT_TEST; g_args.test_mode = INSERT_TEST;
} else { } else {
printf("ERROR: failed to read json, filetype not found\n"); errorPrint("%s", "failed to read json, filetype not found\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -5028,8 +5015,8 @@ static bool getInfoFromJsonFile(char* file) { ...@@ -5028,8 +5015,8 @@ static bool getInfoFromJsonFile(char* file) {
|| (SUBSCRIBE_TEST == g_args.test_mode)) { || (SUBSCRIBE_TEST == g_args.test_mode)) {
ret = getMetaFromQueryJsonFile(root); ret = getMetaFromQueryJsonFile(root);
} else { } else {
errorPrint("%s() LN%d, input json file type error! please input correct file type: insert or query or subscribe\n", errorPrint("%s",
__func__, __LINE__); "input json file type error! please input correct file type: insert or query or subscribe\n");
goto PARSE_OVER; goto PARSE_OVER;
} }
...@@ -5147,7 +5134,7 @@ static int64_t generateStbRowData( ...@@ -5147,7 +5134,7 @@ static int64_t generateStbRowData(
|| (0 == strncasecmp(stbInfo->columns[i].dataType, || (0 == strncasecmp(stbInfo->columns[i].dataType,
"NCHAR", 5))) { "NCHAR", 5))) {
if (stbInfo->columns[i].dataLen > TSDB_MAX_BINARY_LEN) { if (stbInfo->columns[i].dataLen > TSDB_MAX_BINARY_LEN) {
errorPrint( "binary or nchar length overflow, max size:%u\n", errorPrint2("binary or nchar length overflow, max size:%u\n",
(uint32_t)TSDB_MAX_BINARY_LEN); (uint32_t)TSDB_MAX_BINARY_LEN);
return -1; return -1;
} }
...@@ -5159,7 +5146,7 @@ static int64_t generateStbRowData( ...@@ -5159,7 +5146,7 @@ static int64_t generateStbRowData(
} }
char* buf = (char*)calloc(stbInfo->columns[i].dataLen+1, 1); char* buf = (char*)calloc(stbInfo->columns[i].dataLen+1, 1);
if (NULL == buf) { if (NULL == buf) {
errorPrint( "calloc failed! size:%d\n", stbInfo->columns[i].dataLen); errorPrint2("calloc failed! size:%d\n", stbInfo->columns[i].dataLen);
return -1; return -1;
} }
rand_string(buf, stbInfo->columns[i].dataLen); rand_string(buf, stbInfo->columns[i].dataLen);
...@@ -5222,7 +5209,7 @@ static int64_t generateStbRowData( ...@@ -5222,7 +5209,7 @@ static int64_t generateStbRowData(
tmpLen = strlen(tmp); tmpLen = strlen(tmp);
tstrncpy(pstr + dataLen, tmp, min(tmpLen +1, BIGINT_BUFF_LEN)); tstrncpy(pstr + dataLen, tmp, min(tmpLen +1, BIGINT_BUFF_LEN));
} else { } else {
errorPrint( "Not support data type: %s\n", errorPrint2("Not support data type: %s\n",
stbInfo->columns[i].dataType); stbInfo->columns[i].dataType);
return -1; return -1;
} }
...@@ -5274,7 +5261,7 @@ static int64_t generateData(char *recBuf, char **data_type, ...@@ -5274,7 +5261,7 @@ static int64_t generateData(char *recBuf, char **data_type,
} else if (strcasecmp(data_type[i % columnCount], "BINARY") == 0) { } else if (strcasecmp(data_type[i % columnCount], "BINARY") == 0) {
char *s = malloc(lenOfBinary + 1); char *s = malloc(lenOfBinary + 1);
if (s == NULL) { if (s == NULL) {
errorPrint("%s() LN%d, memory allocation %d bytes failed\n", errorPrint2("%s() LN%d, memory allocation %d bytes failed\n",
__func__, __LINE__, lenOfBinary + 1); __func__, __LINE__, lenOfBinary + 1);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -5284,7 +5271,7 @@ static int64_t generateData(char *recBuf, char **data_type, ...@@ -5284,7 +5271,7 @@ static int64_t generateData(char *recBuf, char **data_type,
} else if (strcasecmp(data_type[i % columnCount], "NCHAR") == 0) { } else if (strcasecmp(data_type[i % columnCount], "NCHAR") == 0) {
char *s = malloc(lenOfBinary + 1); char *s = malloc(lenOfBinary + 1);
if (s == NULL) { if (s == NULL) {
errorPrint("%s() LN%d, memory allocation %d bytes failed\n", errorPrint2("%s() LN%d, memory allocation %d bytes failed\n",
__func__, __LINE__, lenOfBinary + 1); __func__, __LINE__, lenOfBinary + 1);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -5311,7 +5298,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) { ...@@ -5311,7 +5298,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) {
sampleDataBuf = calloc( sampleDataBuf = calloc(
stbInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, 1); stbInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, 1);
if (sampleDataBuf == NULL) { if (sampleDataBuf == NULL) {
errorPrint("%s() LN%d, Failed to calloc %"PRIu64" Bytes, reason:%s\n", errorPrint2("%s() LN%d, Failed to calloc %"PRIu64" Bytes, reason:%s\n",
__func__, __LINE__, __func__, __LINE__,
stbInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, stbInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE,
strerror(errno)); strerror(errno));
...@@ -5322,7 +5309,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) { ...@@ -5322,7 +5309,7 @@ static int prepareSampleDataForSTable(SSuperTable *stbInfo) {
int ret = readSampleFromCsvFileToMem(stbInfo); int ret = readSampleFromCsvFileToMem(stbInfo);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, read sample from csv file failed.\n", errorPrint2("%s() LN%d, read sample from csv file failed.\n",
__func__, __LINE__); __func__, __LINE__);
tmfree(sampleDataBuf); tmfree(sampleDataBuf);
stbInfo->sampleDataBuf = NULL; stbInfo->sampleDataBuf = NULL;
...@@ -5377,7 +5364,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k) ...@@ -5377,7 +5364,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
debugPrint("%s() LN%d, stmt=%p", debugPrint("%s() LN%d, stmt=%p",
__func__, __LINE__, pThreadInfo->stmt); __func__, __LINE__, pThreadInfo->stmt);
if (0 != taos_stmt_execute(pThreadInfo->stmt)) { if (0 != taos_stmt_execute(pThreadInfo->stmt)) {
errorPrint("%s() LN%d, failied to execute insert statement. reason: %s\n", errorPrint2("%s() LN%d, failied to execute insert statement. reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(pThreadInfo->stmt)); __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"); 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) ...@@ -5387,7 +5374,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
break; break;
default: default:
errorPrint("%s() LN%d: unknown insert mode: %d\n", errorPrint2("%s() LN%d: unknown insert mode: %d\n",
__func__, __LINE__, stbInfo->iface); __func__, __LINE__, stbInfo->iface);
affectedRows = 0; affectedRows = 0;
} }
...@@ -5615,7 +5602,7 @@ static int generateStbSQLHead( ...@@ -5615,7 +5602,7 @@ static int generateStbSQLHead(
tableSeq % stbInfo->tagSampleCount); tableSeq % stbInfo->tagSampleCount);
} }
if (NULL == tagsValBuf) { if (NULL == tagsValBuf) {
errorPrint("%s() LN%d, tag buf failed to allocate memory\n", errorPrint2("%s() LN%d, tag buf failed to allocate memory\n",
__func__, __LINE__); __func__, __LINE__);
return -1; return -1;
} }
...@@ -5766,7 +5753,7 @@ static int32_t prepareStmtBindArrayByType( ...@@ -5766,7 +5753,7 @@ static int32_t prepareStmtBindArrayByType(
if (0 == strncasecmp(dataType, if (0 == strncasecmp(dataType,
"BINARY", strlen("BINARY"))) { "BINARY", strlen("BINARY"))) {
if (dataLen > TSDB_MAX_BINARY_LEN) { if (dataLen > TSDB_MAX_BINARY_LEN) {
errorPrint( "binary length overflow, max size:%u\n", errorPrint2("binary length overflow, max size:%u\n",
(uint32_t)TSDB_MAX_BINARY_LEN); (uint32_t)TSDB_MAX_BINARY_LEN);
return -1; return -1;
} }
...@@ -5789,7 +5776,7 @@ static int32_t prepareStmtBindArrayByType( ...@@ -5789,7 +5776,7 @@ static int32_t prepareStmtBindArrayByType(
} else if (0 == strncasecmp(dataType, } else if (0 == strncasecmp(dataType,
"NCHAR", strlen("NCHAR"))) { "NCHAR", strlen("NCHAR"))) {
if (dataLen > TSDB_MAX_BINARY_LEN) { if (dataLen > TSDB_MAX_BINARY_LEN) {
errorPrint( "nchar length overflow, max size:%u\n", errorPrint2("nchar length overflow, max size:%u\n",
(uint32_t)TSDB_MAX_BINARY_LEN); (uint32_t)TSDB_MAX_BINARY_LEN);
return -1; return -1;
} }
...@@ -5937,7 +5924,7 @@ static int32_t prepareStmtBindArrayByType( ...@@ -5937,7 +5924,7 @@ static int32_t prepareStmtBindArrayByType(
value, &tmpEpoch, strlen(value), value, &tmpEpoch, strlen(value),
timePrec, 0)) { timePrec, 0)) {
free(bind_ts2); free(bind_ts2);
errorPrint("Input %s, time format error!\n", value); errorPrint2("Input %s, time format error!\n", value);
return -1; return -1;
} }
*bind_ts2 = tmpEpoch; *bind_ts2 = tmpEpoch;
...@@ -5953,7 +5940,7 @@ static int32_t prepareStmtBindArrayByType( ...@@ -5953,7 +5940,7 @@ static int32_t prepareStmtBindArrayByType(
bind->length = &bind->buffer_length; bind->length = &bind->buffer_length;
bind->is_null = NULL; bind->is_null = NULL;
} else { } else {
errorPrint( "No support data type: %s\n", dataType); errorPrint2("Not support data type: %s\n", dataType);
return -1; return -1;
} }
...@@ -5970,7 +5957,7 @@ static int32_t prepareStmtBindArrayByTypeForRand( ...@@ -5970,7 +5957,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
if (0 == strncasecmp(dataType, if (0 == strncasecmp(dataType,
"BINARY", strlen("BINARY"))) { "BINARY", strlen("BINARY"))) {
if (dataLen > TSDB_MAX_BINARY_LEN) { if (dataLen > TSDB_MAX_BINARY_LEN) {
errorPrint( "binary length overflow, max size:%u\n", errorPrint2("binary length overflow, max size:%u\n",
(uint32_t)TSDB_MAX_BINARY_LEN); (uint32_t)TSDB_MAX_BINARY_LEN);
return -1; return -1;
} }
...@@ -5993,7 +5980,7 @@ static int32_t prepareStmtBindArrayByTypeForRand( ...@@ -5993,7 +5980,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
} else if (0 == strncasecmp(dataType, } else if (0 == strncasecmp(dataType,
"NCHAR", strlen("NCHAR"))) { "NCHAR", strlen("NCHAR"))) {
if (dataLen > TSDB_MAX_BINARY_LEN) { if (dataLen > TSDB_MAX_BINARY_LEN) {
errorPrint( "nchar length overflow, max size:%u\n", errorPrint2("nchar length overflow, max size: %u\n",
(uint32_t)TSDB_MAX_BINARY_LEN); (uint32_t)TSDB_MAX_BINARY_LEN);
return -1; return -1;
} }
...@@ -6145,7 +6132,7 @@ static int32_t prepareStmtBindArrayByTypeForRand( ...@@ -6145,7 +6132,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
if (TSDB_CODE_SUCCESS != taosParseTime( if (TSDB_CODE_SUCCESS != taosParseTime(
value, &tmpEpoch, strlen(value), value, &tmpEpoch, strlen(value),
timePrec, 0)) { timePrec, 0)) {
errorPrint("Input %s, time format error!\n", value); errorPrint2("Input %s, time format error!\n", value);
return -1; return -1;
} }
*bind_ts2 = tmpEpoch; *bind_ts2 = tmpEpoch;
...@@ -6163,7 +6150,7 @@ static int32_t prepareStmtBindArrayByTypeForRand( ...@@ -6163,7 +6150,7 @@ static int32_t prepareStmtBindArrayByTypeForRand(
*ptr += bind->buffer_length; *ptr += bind->buffer_length;
} else { } else {
errorPrint( "No support data type: %s\n", dataType); errorPrint2("No support data type: %s\n", dataType);
return -1; return -1;
} }
...@@ -6181,7 +6168,7 @@ static int32_t prepareStmtWithoutStb( ...@@ -6181,7 +6168,7 @@ static int32_t prepareStmtWithoutStb(
TAOS_STMT *stmt = pThreadInfo->stmt; TAOS_STMT *stmt = pThreadInfo->stmt;
int ret = taos_stmt_set_tbname(stmt, tableName); int ret = taos_stmt_set_tbname(stmt, tableName);
if (ret != 0) { if (ret != 0) {
errorPrint("failed to execute taos_stmt_set_tbname(%s). return 0x%x. reason: %s\n", errorPrint2("failed to execute taos_stmt_set_tbname(%s). return 0x%x. reason: %s\n",
tableName, ret, taos_stmt_errstr(stmt)); tableName, ret, taos_stmt_errstr(stmt));
return ret; return ret;
} }
...@@ -6190,7 +6177,7 @@ static int32_t prepareStmtWithoutStb( ...@@ -6190,7 +6177,7 @@ static int32_t prepareStmtWithoutStb(
char *bindArray = malloc(sizeof(TAOS_BIND) * (g_args.num_of_CPR + 1)); char *bindArray = malloc(sizeof(TAOS_BIND) * (g_args.num_of_CPR + 1));
if (bindArray == NULL) { if (bindArray == NULL) {
errorPrint("Failed to allocate %d bind params\n", errorPrint2("Failed to allocate %d bind params\n",
(g_args.num_of_CPR + 1)); (g_args.num_of_CPR + 1));
return -1; return -1;
} }
...@@ -6231,13 +6218,13 @@ static int32_t prepareStmtWithoutStb( ...@@ -6231,13 +6218,13 @@ static int32_t prepareStmtWithoutStb(
} }
} }
if (0 != taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray)) { if (0 != taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray)) {
errorPrint("%s() LN%d, stmt_bind_param() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_bind_param() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
break; break;
} }
// if msg > 3MB, break // if msg > 3MB, break
if (0 != taos_stmt_add_batch(stmt)) { if (0 != taos_stmt_add_batch(stmt)) {
errorPrint("%s() LN%d, stmt_add_batch() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_add_batch() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
break; break;
} }
...@@ -6260,7 +6247,7 @@ static int32_t prepareStbStmtBindTag( ...@@ -6260,7 +6247,7 @@ static int32_t prepareStbStmtBindTag(
{ {
char *bindBuffer = calloc(1, DOUBLE_BUFF_LEN); // g_args.len_of_binary); char *bindBuffer = calloc(1, DOUBLE_BUFF_LEN); // g_args.len_of_binary);
if (bindBuffer == NULL) { if (bindBuffer == NULL) {
errorPrint("%s() LN%d, Failed to allocate %d bind buffer\n", errorPrint2("%s() LN%d, Failed to allocate %d bind buffer\n",
__func__, __LINE__, DOUBLE_BUFF_LEN); __func__, __LINE__, DOUBLE_BUFF_LEN);
return -1; return -1;
} }
...@@ -6292,7 +6279,7 @@ static int32_t prepareStbStmtBindRand( ...@@ -6292,7 +6279,7 @@ static int32_t prepareStbStmtBindRand(
{ {
char *bindBuffer = calloc(1, DOUBLE_BUFF_LEN); // g_args.len_of_binary); char *bindBuffer = calloc(1, DOUBLE_BUFF_LEN); // g_args.len_of_binary);
if (bindBuffer == NULL) { if (bindBuffer == NULL) {
errorPrint("%s() LN%d, Failed to allocate %d bind buffer\n", errorPrint2("%s() LN%d, Failed to allocate %d bind buffer\n",
__func__, __LINE__, DOUBLE_BUFF_LEN); __func__, __LINE__, DOUBLE_BUFF_LEN);
return -1; return -1;
} }
...@@ -6395,7 +6382,7 @@ static int32_t prepareStbStmtRand( ...@@ -6395,7 +6382,7 @@ static int32_t prepareStbStmtRand(
} }
if (NULL == tagsValBuf) { if (NULL == tagsValBuf) {
errorPrint("%s() LN%d, tag buf failed to allocate memory\n", errorPrint2("%s() LN%d, tag buf failed to allocate memory\n",
__func__, __LINE__); __func__, __LINE__);
return -1; return -1;
} }
...@@ -6403,7 +6390,7 @@ static int32_t prepareStbStmtRand( ...@@ -6403,7 +6390,7 @@ static int32_t prepareStbStmtRand(
char *tagsArray = calloc(1, sizeof(TAOS_BIND) * stbInfo->tagCount); char *tagsArray = calloc(1, sizeof(TAOS_BIND) * stbInfo->tagCount);
if (NULL == tagsArray) { if (NULL == tagsArray) {
tmfree(tagsValBuf); tmfree(tagsValBuf);
errorPrint("%s() LN%d, tag buf failed to allocate memory\n", errorPrint2("%s() LN%d, tag buf failed to allocate memory\n",
__func__, __LINE__); __func__, __LINE__);
return -1; return -1;
} }
...@@ -6422,14 +6409,14 @@ static int32_t prepareStbStmtRand( ...@@ -6422,14 +6409,14 @@ static int32_t prepareStbStmtRand(
tmfree(tagsArray); tmfree(tagsArray);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_set_tbname_tags() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_set_tbname_tags() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
} else { } else {
ret = taos_stmt_set_tbname(stmt, tableName); ret = taos_stmt_set_tbname(stmt, tableName);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_set_tbname() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_set_tbname() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
...@@ -6437,7 +6424,7 @@ static int32_t prepareStbStmtRand( ...@@ -6437,7 +6424,7 @@ static int32_t prepareStbStmtRand(
char *bindArray = calloc(1, sizeof(TAOS_BIND) * (stbInfo->columnCount + 1)); char *bindArray = calloc(1, sizeof(TAOS_BIND) * (stbInfo->columnCount + 1));
if (bindArray == NULL) { if (bindArray == NULL) {
errorPrint("%s() LN%d, Failed to allocate %d bind params\n", errorPrint2("%s() LN%d, Failed to allocate %d bind params\n",
__func__, __LINE__, (stbInfo->columnCount + 1)); __func__, __LINE__, (stbInfo->columnCount + 1));
return -1; return -1;
} }
...@@ -6456,7 +6443,7 @@ static int32_t prepareStbStmtRand( ...@@ -6456,7 +6443,7 @@ static int32_t prepareStbStmtRand(
} }
ret = taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray); ret = taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_bind_param() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_bind_param() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
free(bindArray); free(bindArray);
return -1; return -1;
...@@ -6464,7 +6451,7 @@ static int32_t prepareStbStmtRand( ...@@ -6464,7 +6451,7 @@ static int32_t prepareStbStmtRand(
// if msg > 3MB, break // if msg > 3MB, break
ret = taos_stmt_add_batch(stmt); ret = taos_stmt_add_batch(stmt);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_add_batch() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_add_batch() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
free(bindArray); free(bindArray);
return -1; return -1;
...@@ -6508,7 +6495,7 @@ static int32_t prepareStbStmtWithSample( ...@@ -6508,7 +6495,7 @@ static int32_t prepareStbStmtWithSample(
} }
if (NULL == tagsValBuf) { if (NULL == tagsValBuf) {
errorPrint("%s() LN%d, tag buf failed to allocate memory\n", errorPrint2("%s() LN%d, tag buf failed to allocate memory\n",
__func__, __LINE__); __func__, __LINE__);
return -1; return -1;
} }
...@@ -6516,7 +6503,7 @@ static int32_t prepareStbStmtWithSample( ...@@ -6516,7 +6503,7 @@ static int32_t prepareStbStmtWithSample(
char *tagsArray = calloc(1, sizeof(TAOS_BIND) * stbInfo->tagCount); char *tagsArray = calloc(1, sizeof(TAOS_BIND) * stbInfo->tagCount);
if (NULL == tagsArray) { if (NULL == tagsArray) {
tmfree(tagsValBuf); tmfree(tagsValBuf);
errorPrint("%s() LN%d, tag buf failed to allocate memory\n", errorPrint2("%s() LN%d, tag buf failed to allocate memory\n",
__func__, __LINE__); __func__, __LINE__);
return -1; return -1;
} }
...@@ -6535,14 +6522,14 @@ static int32_t prepareStbStmtWithSample( ...@@ -6535,14 +6522,14 @@ static int32_t prepareStbStmtWithSample(
tmfree(tagsArray); tmfree(tagsArray);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_set_tbname_tags() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_set_tbname_tags() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
} else { } else {
ret = taos_stmt_set_tbname(stmt, tableName); ret = taos_stmt_set_tbname(stmt, tableName);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_set_tbname() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_set_tbname() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
...@@ -6564,14 +6551,14 @@ static int32_t prepareStbStmtWithSample( ...@@ -6564,14 +6551,14 @@ static int32_t prepareStbStmtWithSample(
} }
ret = taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray); ret = taos_stmt_bind_param(stmt, (TAOS_BIND *)bindArray);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_bind_param() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_bind_param() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
// if msg > 3MB, break // if msg > 3MB, break
ret = taos_stmt_add_batch(stmt); ret = taos_stmt_add_batch(stmt);
if (0 != ret) { if (0 != ret) {
errorPrint("%s() LN%d, stmt_add_batch() failed! reason: %s\n", errorPrint2("%s() LN%d, stmt_add_batch() failed! reason: %s\n",
__func__, __LINE__, taos_stmt_errstr(stmt)); __func__, __LINE__, taos_stmt_errstr(stmt));
return -1; return -1;
} }
...@@ -6732,7 +6719,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { ...@@ -6732,7 +6719,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo->buffer = calloc(maxSqlLen, 1); pThreadInfo->buffer = calloc(maxSqlLen, 1);
if (NULL == pThreadInfo->buffer) { if (NULL == pThreadInfo->buffer) {
errorPrint( "%s() LN%d, Failed to alloc %"PRIu64" Bytes, reason:%s\n", errorPrint2( "%s() LN%d, Failed to alloc %"PRIu64" Bytes, reason:%s\n",
__func__, __LINE__, maxSqlLen, strerror(errno)); __func__, __LINE__, maxSqlLen, strerror(errno));
return NULL; return NULL;
} }
...@@ -6780,7 +6767,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { ...@@ -6780,7 +6767,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
getTableName(tableName, pThreadInfo, tableSeq); getTableName(tableName, pThreadInfo, tableSeq);
if (0 == strlen(tableName)) { if (0 == strlen(tableName)) {
errorPrint("[%d] %s() LN%d, getTableName return null\n", errorPrint2("[%d] %s() LN%d, getTableName return null\n",
pThreadInfo->threadID, __func__, __LINE__); pThreadInfo->threadID, __func__, __LINE__);
free(pThreadInfo->buffer); free(pThreadInfo->buffer);
return NULL; return NULL;
...@@ -6847,7 +6834,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { ...@@ -6847,7 +6834,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
debugPrint("[%d] %s() LN%d, generated records is %d\n", debugPrint("[%d] %s() LN%d, generated records is %d\n",
pThreadInfo->threadID, __func__, __LINE__, generated); pThreadInfo->threadID, __func__, __LINE__, generated);
if (generated < 0) { if (generated < 0) {
errorPrint("[%d] %s() LN%d, generated records is %d\n", errorPrint2("[%d] %s() LN%d, generated records is %d\n",
pThreadInfo->threadID, __func__, __LINE__, generated); pThreadInfo->threadID, __func__, __LINE__, generated);
goto free_of_interlace; goto free_of_interlace;
} else if (generated == 0) { } else if (generated == 0) {
...@@ -6901,7 +6888,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { ...@@ -6901,7 +6888,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
startTs = taosGetTimestampUs(); startTs = taosGetTimestampUs();
if (recOfBatch == 0) { if (recOfBatch == 0) {
errorPrint("[%d] %s() LN%d Failed to insert records of batch %d\n", errorPrint2("[%d] %s() LN%d Failed to insert records of batch %d\n",
pThreadInfo->threadID, __func__, __LINE__, pThreadInfo->threadID, __func__, __LINE__,
batchPerTbl); batchPerTbl);
if (batchPerTbl > 0) { if (batchPerTbl > 0) {
...@@ -6928,7 +6915,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { ...@@ -6928,7 +6915,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
pThreadInfo->totalDelay += delay; pThreadInfo->totalDelay += delay;
if (recOfBatch != affectedRows) { if (recOfBatch != affectedRows) {
errorPrint("[%d] %s() LN%d execInsert insert %d, affected rows: %"PRId64"\n%s\n", errorPrint2("[%d] %s() LN%d execInsert insert %d, affected rows: %"PRId64"\n%s\n",
pThreadInfo->threadID, __func__, __LINE__, pThreadInfo->threadID, __func__, __LINE__,
recOfBatch, affectedRows, pThreadInfo->buffer); recOfBatch, affectedRows, pThreadInfo->buffer);
goto free_of_interlace; goto free_of_interlace;
...@@ -6986,7 +6973,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) { ...@@ -6986,7 +6973,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo->buffer = calloc(maxSqlLen, 1); pThreadInfo->buffer = calloc(maxSqlLen, 1);
if (NULL == pThreadInfo->buffer) { if (NULL == pThreadInfo->buffer) {
errorPrint( "Failed to alloc %"PRIu64" Bytes, reason:%s\n", errorPrint2("Failed to alloc %"PRIu64" bytes, reason:%s\n",
maxSqlLen, maxSqlLen,
strerror(errno)); strerror(errno));
return NULL; return NULL;
...@@ -7027,7 +7014,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) { ...@@ -7027,7 +7014,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
__func__, __LINE__, __func__, __LINE__,
pThreadInfo->threadID, tableSeq, tableName); pThreadInfo->threadID, tableSeq, tableName);
if (0 == strlen(tableName)) { if (0 == strlen(tableName)) {
errorPrint("[%d] %s() LN%d, getTableName return null\n", errorPrint2("[%d] %s() LN%d, getTableName return null\n",
pThreadInfo->threadID, __func__, __LINE__); pThreadInfo->threadID, __func__, __LINE__);
free(pThreadInfo->buffer); free(pThreadInfo->buffer);
return NULL; return NULL;
...@@ -7116,7 +7103,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) { ...@@ -7116,7 +7103,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo->totalDelay += delay; pThreadInfo->totalDelay += delay;
if (affectedRows < 0) { if (affectedRows < 0) {
errorPrint("%s() LN%d, affected rows: %d\n", errorPrint2("%s() LN%d, affected rows: %d\n",
__func__, __LINE__, affectedRows); __func__, __LINE__, affectedRows);
goto free_of_progressive; goto free_of_progressive;
} }
...@@ -7278,7 +7265,7 @@ static int convertHostToServAddr(char *host, uint16_t port, struct sockaddr_in * ...@@ -7278,7 +7265,7 @@ static int convertHostToServAddr(char *host, uint16_t port, struct sockaddr_in *
uint16_t rest_port = port + TSDB_PORT_HTTP; uint16_t rest_port = port + TSDB_PORT_HTTP;
struct hostent *server = gethostbyname(host); struct hostent *server = gethostbyname(host);
if ((server == NULL) || (server->h_addr == NULL)) { if ((server == NULL) || (server->h_addr == NULL)) {
errorPrint("%s", "ERROR, no such host"); errorPrint2("%s", "no such host");
return -1; return -1;
} }
...@@ -7303,7 +7290,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec) ...@@ -7303,7 +7290,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
{ {
stbInfo->sampleBindArray = calloc(1, sizeof(char *) * MAX_SAMPLES_ONCE_FROM_FILE); stbInfo->sampleBindArray = calloc(1, sizeof(char *) * MAX_SAMPLES_ONCE_FROM_FILE);
if (stbInfo->sampleBindArray == NULL) { if (stbInfo->sampleBindArray == NULL) {
errorPrint("%s() LN%d, Failed to allocate %"PRIu64" bind array buffer\n", errorPrint2("%s() LN%d, Failed to allocate %"PRIu64" bind array buffer\n",
__func__, __LINE__, (uint64_t)sizeof(char *) * MAX_SAMPLES_ONCE_FROM_FILE); __func__, __LINE__, (uint64_t)sizeof(char *) * MAX_SAMPLES_ONCE_FROM_FILE);
return -1; return -1;
} }
...@@ -7312,7 +7299,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec) ...@@ -7312,7 +7299,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
for (int i=0; i < MAX_SAMPLES_ONCE_FROM_FILE; i++) { for (int i=0; i < MAX_SAMPLES_ONCE_FROM_FILE; i++) {
char *bindArray = calloc(1, sizeof(TAOS_BIND) * (stbInfo->columnCount + 1)); char *bindArray = calloc(1, sizeof(TAOS_BIND) * (stbInfo->columnCount + 1));
if (bindArray == NULL) { if (bindArray == NULL) {
errorPrint("%s() LN%d, Failed to allocate %d bind params\n", errorPrint2("%s() LN%d, Failed to allocate %d bind params\n",
__func__, __LINE__, (stbInfo->columnCount + 1)); __func__, __LINE__, (stbInfo->columnCount + 1));
return -1; return -1;
} }
...@@ -7344,7 +7331,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec) ...@@ -7344,7 +7331,7 @@ static int parseSampleFileToStmt(SSuperTable *stbInfo, uint32_t timePrec)
char *bindBuffer = calloc(1, index + 1); char *bindBuffer = calloc(1, index + 1);
if (bindBuffer == NULL) { if (bindBuffer == NULL) {
errorPrint("%s() LN%d, Failed to allocate %d bind buffer\n", errorPrint2("%s() LN%d, Failed to allocate %d bind buffer\n",
__func__, __LINE__, DOUBLE_BUFF_LEN); __func__, __LINE__, DOUBLE_BUFF_LEN);
return -1; return -1;
} }
...@@ -7382,7 +7369,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7382,7 +7369,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
} else if (0 == strncasecmp(precision, "ns", 2)) { } else if (0 == strncasecmp(precision, "ns", 2)) {
timePrec = TSDB_TIME_PRECISION_NANO; timePrec = TSDB_TIME_PRECISION_NANO;
} else { } else {
errorPrint("Not support precision: %s\n", precision); errorPrint2("Not support precision: %s\n", precision);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
...@@ -7412,7 +7399,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7412,7 +7399,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
if ((stbInfo) && (0 == strncasecmp(stbInfo->dataSource, if ((stbInfo) && (0 == strncasecmp(stbInfo->dataSource,
"sample", strlen("sample")))) { "sample", strlen("sample")))) {
if (0 != prepareSampleDataForSTable(stbInfo)) { if (0 != prepareSampleDataForSTable(stbInfo)) {
errorPrint("%s() LN%d, prepare sample data for stable failed!\n", errorPrint2("%s() LN%d, prepare sample data for stable failed!\n",
__func__, __LINE__); __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -7422,7 +7409,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7422,7 +7409,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
g_Dbs.host, g_Dbs.user, g_Dbs.host, g_Dbs.user,
g_Dbs.password, db_name, g_Dbs.port); g_Dbs.password, db_name, g_Dbs.port);
if (NULL == taos0) { if (NULL == taos0) {
errorPrint("%s() LN%d, connect to server fail , reason: %s\n", errorPrint2("%s() LN%d, connect to server fail , reason: %s\n",
__func__, __LINE__, taos_errstr(NULL)); __func__, __LINE__, taos_errstr(NULL));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -7477,7 +7464,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7477,7 +7464,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
limit * TSDB_TABLE_NAME_LEN); limit * TSDB_TABLE_NAME_LEN);
if (stbInfo->childTblName == NULL) { if (stbInfo->childTblName == NULL) {
taos_close(taos0); taos_close(taos0);
errorPrint("%s() LN%d, alloc memory failed!\n", __func__, __LINE__); errorPrint2("%s() LN%d, alloc memory failed!\n", __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -7583,7 +7570,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7583,7 +7570,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
g_Dbs.password, db_name, g_Dbs.port); g_Dbs.password, db_name, g_Dbs.port);
if (NULL == pThreadInfo->taos) { if (NULL == pThreadInfo->taos) {
free(infos); free(infos);
errorPrint( errorPrint2(
"%s() LN%d, connect to server fail from insert sub thread, reason: %s\n", "%s() LN%d, connect to server fail from insert sub thread, reason: %s\n",
__func__, __LINE__, __func__, __LINE__,
taos_errstr(NULL)); taos_errstr(NULL));
...@@ -7599,7 +7586,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7599,7 +7586,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
if (NULL == pThreadInfo->stmt) { if (NULL == pThreadInfo->stmt) {
free(pids); free(pids);
free(infos); free(infos);
errorPrint( errorPrint2(
"%s() LN%d, failed init stmt, reason: %s\n", "%s() LN%d, failed init stmt, reason: %s\n",
__func__, __LINE__, __func__, __LINE__,
taos_errstr(NULL)); taos_errstr(NULL));
...@@ -7607,11 +7594,11 @@ static void startMultiThreadInsertData(int threads, char* db_name, ...@@ -7607,11 +7594,11 @@ static void startMultiThreadInsertData(int threads, char* db_name,
} }
int ret = taos_stmt_prepare(pThreadInfo->stmt, stmtBuffer, 0); int ret = taos_stmt_prepare(pThreadInfo->stmt, stmtBuffer, 0);
if (ret != 0){ if (ret != 0) {
free(pids); free(pids);
free(infos); free(infos);
free(stmtBuffer); free(stmtBuffer);
errorPrint("failed to execute taos_stmt_prepare. return 0x%x. reason: %s\n", errorPrint2("failed to execute taos_stmt_prepare. return 0x%x. reason: %s\n",
ret, taos_stmt_errstr(pThreadInfo->stmt)); ret, taos_stmt_errstr(pThreadInfo->stmt));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -7755,7 +7742,7 @@ static void *readTable(void *sarg) { ...@@ -7755,7 +7742,7 @@ static void *readTable(void *sarg) {
char *tb_prefix = pThreadInfo->tb_prefix; char *tb_prefix = pThreadInfo->tb_prefix;
FILE *fp = fopen(pThreadInfo->filePath, "a"); FILE *fp = fopen(pThreadInfo->filePath, "a");
if (NULL == fp) { if (NULL == fp) {
errorPrint( "fopen %s fail, reason:%s.\n", pThreadInfo->filePath, strerror(errno)); errorPrint2("fopen %s fail, reason:%s.\n", pThreadInfo->filePath, strerror(errno));
free(command); free(command);
return NULL; return NULL;
} }
...@@ -7791,7 +7778,7 @@ static void *readTable(void *sarg) { ...@@ -7791,7 +7778,7 @@ static void *readTable(void *sarg) {
int32_t code = taos_errno(pSql); int32_t code = taos_errno(pSql);
if (code != 0) { if (code != 0) {
errorPrint( "Failed to query:%s\n", taos_errstr(pSql)); errorPrint2("Failed to query:%s\n", taos_errstr(pSql));
taos_free_result(pSql); taos_free_result(pSql);
taos_close(taos); taos_close(taos);
fclose(fp); fclose(fp);
...@@ -7873,7 +7860,7 @@ static void *readMetric(void *sarg) { ...@@ -7873,7 +7860,7 @@ static void *readMetric(void *sarg) {
int32_t code = taos_errno(pSql); int32_t code = taos_errno(pSql);
if (code != 0) { if (code != 0) {
errorPrint( "Failed to query:%s\n", taos_errstr(pSql)); errorPrint2("Failed to query:%s\n", taos_errstr(pSql));
taos_free_result(pSql); taos_free_result(pSql);
taos_close(taos); taos_close(taos);
fclose(fp); fclose(fp);
...@@ -7920,7 +7907,7 @@ static int insertTestProcess() { ...@@ -7920,7 +7907,7 @@ static int insertTestProcess() {
debugPrint("%d result file: %s\n", __LINE__, g_Dbs.resultFile); debugPrint("%d result file: %s\n", __LINE__, g_Dbs.resultFile);
g_fpOfInsertResult = fopen(g_Dbs.resultFile, "a"); g_fpOfInsertResult = fopen(g_Dbs.resultFile, "a");
if (NULL == g_fpOfInsertResult) { 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; return -1;
} }
...@@ -7953,18 +7940,30 @@ static int insertTestProcess() { ...@@ -7953,18 +7940,30 @@ static int insertTestProcess() {
double start; double start;
double end; double end;
// create child tables
start = taosGetTimestampMs();
createChildTables();
end = taosGetTimestampMs();
if (g_totalChildTables > 0) { if (g_totalChildTables > 0) {
fprintf(stderr, "Spent %.4f seconds to create %"PRId64" tables with %d thread(s)\n\n", fprintf(stderr,
(end - start)/1000.0, g_totalChildTables, g_Dbs.threadCountByCreateTbl); "creating %"PRId64" table(s) with %d thread(s)\n\n",
g_totalChildTables, g_Dbs.threadCountByCreateTbl);
if (g_fpOfInsertResult) { if (g_fpOfInsertResult) {
fprintf(g_fpOfInsertResult, fprintf(g_fpOfInsertResult,
"Spent %.4f seconds to create %"PRId64" tables with %d thread(s)\n\n", "creating %"PRId64" table(s) with %d thread(s)\n\n",
(end - start)/1000.0, g_totalChildTables, g_Dbs.threadCountByCreateTbl); g_totalChildTables, g_Dbs.threadCountByCreateTbl);
}
// create child tables
start = taosGetTimestampMs();
createChildTables();
end = taosGetTimestampMs();
fprintf(stderr,
"\nSpent %.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,
"\nSpent %.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) { ...@@ -8022,7 +8021,7 @@ static void *specifiedTableQuery(void *sarg) {
NULL, NULL,
g_queryInfo.port); g_queryInfo.port);
if (taos == NULL) { if (taos == NULL) {
errorPrint("[%d] Failed to connect to TDengine, reason:%s\n", errorPrint2("[%d] Failed to connect to TDengine, reason:%s\n",
pThreadInfo->threadID, taos_errstr(NULL)); pThreadInfo->threadID, taos_errstr(NULL));
return NULL; return NULL;
} else { } else {
...@@ -8034,7 +8033,7 @@ static void *specifiedTableQuery(void *sarg) { ...@@ -8034,7 +8033,7 @@ static void *specifiedTableQuery(void *sarg) {
sprintf(sqlStr, "use %s", g_queryInfo.dbName); sprintf(sqlStr, "use %s", g_queryInfo.dbName);
if (0 != queryDbExec(pThreadInfo->taos, sqlStr, NO_INSERT_TYPE, false)) { if (0 != queryDbExec(pThreadInfo->taos, sqlStr, NO_INSERT_TYPE, false)) {
taos_close(pThreadInfo->taos); taos_close(pThreadInfo->taos);
errorPrint( "use database %s failed!\n\n", errorPrint("use database %s failed!\n\n",
g_queryInfo.dbName); g_queryInfo.dbName);
return NULL; return NULL;
} }
...@@ -8200,7 +8199,7 @@ static int queryTestProcess() { ...@@ -8200,7 +8199,7 @@ static int queryTestProcess() {
NULL, NULL,
g_queryInfo.port); g_queryInfo.port);
if (taos == NULL) { if (taos == NULL) {
errorPrint( "Failed to connect to TDengine, reason:%s\n", errorPrint("Failed to connect to TDengine, reason:%s\n",
taos_errstr(NULL)); taos_errstr(NULL));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -8258,7 +8257,7 @@ static int queryTestProcess() { ...@@ -8258,7 +8257,7 @@ static int queryTestProcess() {
taos_close(taos); taos_close(taos);
free(infos); free(infos);
free(pids); free(pids);
errorPrint( "use database %s failed!\n\n", errorPrint2("use database %s failed!\n\n",
g_queryInfo.dbName); g_queryInfo.dbName);
return -1; return -1;
} }
...@@ -8356,7 +8355,7 @@ static int queryTestProcess() { ...@@ -8356,7 +8355,7 @@ static int queryTestProcess() {
static void stable_sub_callback( static void stable_sub_callback(
TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) { TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) {
if (res == NULL || taos_errno(res) != 0) { if (res == NULL || taos_errno(res) != 0) {
errorPrint("%s() LN%d, failed to subscribe result, code:%d, reason:%s\n", errorPrint2("%s() LN%d, failed to subscribe result, code:%d, reason:%s\n",
__func__, __LINE__, code, taos_errstr(res)); __func__, __LINE__, code, taos_errstr(res));
return; return;
} }
...@@ -8369,7 +8368,7 @@ static void stable_sub_callback( ...@@ -8369,7 +8368,7 @@ static void stable_sub_callback(
static void specified_sub_callback( static void specified_sub_callback(
TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) { TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) {
if (res == NULL || taos_errno(res) != 0) { if (res == NULL || taos_errno(res) != 0) {
errorPrint("%s() LN%d, failed to subscribe result, code:%d, reason:%s\n", errorPrint2("%s() LN%d, failed to subscribe result, code:%d, reason:%s\n",
__func__, __LINE__, code, taos_errstr(res)); __func__, __LINE__, code, taos_errstr(res));
return; return;
} }
...@@ -8408,7 +8407,7 @@ static TAOS_SUB* subscribeImpl( ...@@ -8408,7 +8407,7 @@ static TAOS_SUB* subscribeImpl(
} }
if (tsub == NULL) { if (tsub == NULL) {
errorPrint("failed to create subscription. topic:%s, sql:%s\n", topic, sql); errorPrint2("failed to create subscription. topic:%s, sql:%s\n", topic, sql);
return NULL; return NULL;
} }
...@@ -8439,7 +8438,7 @@ static void *superSubscribe(void *sarg) { ...@@ -8439,7 +8438,7 @@ static void *superSubscribe(void *sarg) {
g_queryInfo.dbName, g_queryInfo.dbName,
g_queryInfo.port); g_queryInfo.port);
if (pThreadInfo->taos == NULL) { if (pThreadInfo->taos == NULL) {
errorPrint("[%d] Failed to connect to TDengine, reason:%s\n", errorPrint2("[%d] Failed to connect to TDengine, reason:%s\n",
pThreadInfo->threadID, taos_errstr(NULL)); pThreadInfo->threadID, taos_errstr(NULL));
free(subSqlStr); free(subSqlStr);
return NULL; return NULL;
...@@ -8450,7 +8449,7 @@ static void *superSubscribe(void *sarg) { ...@@ -8450,7 +8449,7 @@ static void *superSubscribe(void *sarg) {
sprintf(sqlStr, "USE %s", g_queryInfo.dbName); sprintf(sqlStr, "USE %s", g_queryInfo.dbName);
if (0 != queryDbExec(pThreadInfo->taos, sqlStr, NO_INSERT_TYPE, false)) { if (0 != queryDbExec(pThreadInfo->taos, sqlStr, NO_INSERT_TYPE, false)) {
taos_close(pThreadInfo->taos); taos_close(pThreadInfo->taos);
errorPrint( "use database %s failed!\n\n", errorPrint2("use database %s failed!\n\n",
g_queryInfo.dbName); g_queryInfo.dbName);
free(subSqlStr); free(subSqlStr);
return NULL; return NULL;
...@@ -8586,7 +8585,7 @@ static void *specifiedSubscribe(void *sarg) { ...@@ -8586,7 +8585,7 @@ static void *specifiedSubscribe(void *sarg) {
g_queryInfo.dbName, g_queryInfo.dbName,
g_queryInfo.port); g_queryInfo.port);
if (pThreadInfo->taos == NULL) { if (pThreadInfo->taos == NULL) {
errorPrint("[%d] Failed to connect to TDengine, reason:%s\n", errorPrint2("[%d] Failed to connect to TDengine, reason:%s\n",
pThreadInfo->threadID, taos_errstr(NULL)); pThreadInfo->threadID, taos_errstr(NULL));
return NULL; return NULL;
} }
...@@ -8693,7 +8692,7 @@ static int subscribeTestProcess() { ...@@ -8693,7 +8692,7 @@ static int subscribeTestProcess() {
g_queryInfo.dbName, g_queryInfo.dbName,
g_queryInfo.port); g_queryInfo.port);
if (taos == NULL) { if (taos == NULL) {
errorPrint( "Failed to connect to TDengine, reason:%s\n", errorPrint2("Failed to connect to TDengine, reason:%s\n",
taos_errstr(NULL)); taos_errstr(NULL));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -8721,7 +8720,7 @@ static int subscribeTestProcess() { ...@@ -8721,7 +8720,7 @@ static int subscribeTestProcess() {
g_queryInfo.specifiedQueryInfo.sqlCount); g_queryInfo.specifiedQueryInfo.sqlCount);
} else { } else {
if (g_queryInfo.specifiedQueryInfo.concurrent <= 0) { if (g_queryInfo.specifiedQueryInfo.concurrent <= 0) {
errorPrint("%s() LN%d, sepcified query sqlCount %d.\n", errorPrint2("%s() LN%d, sepcified query sqlCount %d.\n",
__func__, __LINE__, __func__, __LINE__,
g_queryInfo.specifiedQueryInfo.sqlCount); g_queryInfo.specifiedQueryInfo.sqlCount);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -8738,7 +8737,7 @@ static int subscribeTestProcess() { ...@@ -8738,7 +8737,7 @@ static int subscribeTestProcess() {
g_queryInfo.specifiedQueryInfo.concurrent * g_queryInfo.specifiedQueryInfo.concurrent *
sizeof(threadInfo)); sizeof(threadInfo));
if ((NULL == pids) || (NULL == infos)) { if ((NULL == pids) || (NULL == infos)) {
errorPrint("%s() LN%d, malloc failed for create threads\n", __func__, __LINE__); errorPrint2("%s() LN%d, malloc failed for create threads\n", __func__, __LINE__);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -8773,7 +8772,7 @@ static int subscribeTestProcess() { ...@@ -8773,7 +8772,7 @@ static int subscribeTestProcess() {
g_queryInfo.superQueryInfo.threadCnt * g_queryInfo.superQueryInfo.threadCnt *
sizeof(threadInfo)); sizeof(threadInfo));
if ((NULL == pidsOfStable) || (NULL == infosOfStable)) { if ((NULL == pidsOfStable) || (NULL == infosOfStable)) {
errorPrint("%s() LN%d, malloc failed for create threads\n", errorPrint2("%s() LN%d, malloc failed for create threads\n",
__func__, __LINE__); __func__, __LINE__);
// taos_close(taos); // taos_close(taos);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
...@@ -9039,7 +9038,7 @@ static void querySqlFile(TAOS* taos, char* sqlFile) ...@@ -9039,7 +9038,7 @@ static void querySqlFile(TAOS* taos, char* sqlFile)
memcpy(cmd + cmd_len, line, read_len); memcpy(cmd + cmd_len, line, read_len);
if (0 != queryDbExec(taos, cmd, NO_INSERT_TYPE, false)) { if (0 != queryDbExec(taos, cmd, NO_INSERT_TYPE, false)) {
errorPrint("%s() LN%d, queryDbExec %s failed!\n", errorPrint2("%s() LN%d, queryDbExec %s failed!\n",
__func__, __LINE__, cmd); __func__, __LINE__, cmd);
tmfree(cmd); tmfree(cmd);
tmfree(line); tmfree(line);
...@@ -9113,7 +9112,7 @@ static void queryResult() { ...@@ -9113,7 +9112,7 @@ static void queryResult() {
g_Dbs.port); g_Dbs.port);
if (pThreadInfo->taos == NULL) { if (pThreadInfo->taos == NULL) {
free(pThreadInfo); free(pThreadInfo);
errorPrint( "Failed to connect to TDengine, reason:%s\n", errorPrint2("Failed to connect to TDengine, reason:%s\n",
taos_errstr(NULL)); taos_errstr(NULL));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -9135,7 +9134,7 @@ static void testCmdLine() { ...@@ -9135,7 +9134,7 @@ static void testCmdLine() {
if (strlen(configDir)) { if (strlen(configDir)) {
wordexp_t full_path; wordexp_t full_path;
if (wordexp(configDir, &full_path, 0) != 0) { if (wordexp(configDir, &full_path, 0) != 0) {
errorPrint( "Invalid path %s\n", configDir); errorPrint("Invalid path %s\n", configDir);
return; return;
} }
taos_options(TSDB_OPTION_CONFIGDIR, full_path.we_wordv[0]); taos_options(TSDB_OPTION_CONFIGDIR, full_path.we_wordv[0]);
......
...@@ -50,14 +50,20 @@ void osInit() { ...@@ -50,14 +50,20 @@ void osInit() {
char* taosGetCmdlineByPID(int pid) { char* taosGetCmdlineByPID(int pid) {
static char cmdline[1024]; static char cmdline[1024];
sprintf(cmdline, "/proc/%d/cmdline", pid); sprintf(cmdline, "/proc/%d/cmdline", pid);
FILE* f = fopen(cmdline, "r");
if (f) { int fd = open(cmdline, O_RDONLY);
size_t size; if (fd >= 0) {
size = fread(cmdline, sizeof(char), 1024, f); int n = read(fd, cmdline, sizeof(cmdline) - 1);
if (size > 0) { if (n < 0) n = 0;
if ('\n' == cmdline[size - 1]) cmdline[size - 1] = '\0';
} if (n > 0 && cmdline[n - 1] == '\n') --n;
fclose(f);
cmdline[n] = 0;
close(fd);
} else {
cmdline[0] = 0;
} }
return cmdline; return cmdline;
} }
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#define monTrace(...) { if (monDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monDebugFlag, __VA_ARGS__); }} #define monTrace(...) { if (monDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monDebugFlag, __VA_ARGS__); }}
#define SQL_LENGTH 1030 #define SQL_LENGTH 1030
#define LOG_LEN_STR 100 #define LOG_LEN_STR 512
#define IP_LEN_STR TSDB_EP_LEN #define IP_LEN_STR TSDB_EP_LEN
#define CHECK_INTERVAL 1000 #define CHECK_INTERVAL 1000
......
...@@ -4089,7 +4089,7 @@ static void mergeTableBlockDist(SResultRowCellInfo* pResInfo, const STableBlockD ...@@ -4089,7 +4089,7 @@ static void mergeTableBlockDist(SResultRowCellInfo* pResInfo, const STableBlockD
} else { } else {
pDist->maxRows = pSrc->maxRows; pDist->maxRows = pSrc->maxRows;
pDist->minRows = pSrc->minRows; pDist->minRows = pSrc->minRows;
int32_t maxSteps = TSDB_MAX_MAX_ROW_FBLOCK/TSDB_BLOCK_DIST_STEP_ROWS; int32_t maxSteps = TSDB_MAX_MAX_ROW_FBLOCK/TSDB_BLOCK_DIST_STEP_ROWS;
if (TSDB_MAX_MAX_ROW_FBLOCK % TSDB_BLOCK_DIST_STEP_ROWS != 0) { if (TSDB_MAX_MAX_ROW_FBLOCK % TSDB_BLOCK_DIST_STEP_ROWS != 0) {
++maxSteps; ++maxSteps;
...@@ -4223,7 +4223,7 @@ void blockinfo_func_finalizer(SQLFunctionCtx* pCtx) { ...@@ -4223,7 +4223,7 @@ void blockinfo_func_finalizer(SQLFunctionCtx* pCtx) {
taosArrayDestroy(pDist->dataBlockInfos); taosArrayDestroy(pDist->dataBlockInfos);
pDist->dataBlockInfos = NULL; pDist->dataBlockInfos = NULL;
} }
// cannot set the numOfIteratedElems again since it is set during previous iteration // cannot set the numOfIteratedElems again since it is set during previous iteration
pResInfo->numOfRes = 1; pResInfo->numOfRes = 1;
pResInfo->hasResult = DATA_SET_FLAG; pResInfo->hasResult = DATA_SET_FLAG;
......
...@@ -7449,10 +7449,12 @@ int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SQueryParam* param) { ...@@ -7449,10 +7449,12 @@ int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SQueryParam* param) {
pQueryMsg->numOfOutput = htons(pQueryMsg->numOfOutput); pQueryMsg->numOfOutput = htons(pQueryMsg->numOfOutput);
pQueryMsg->numOfGroupCols = htons(pQueryMsg->numOfGroupCols); pQueryMsg->numOfGroupCols = htons(pQueryMsg->numOfGroupCols);
pQueryMsg->tagCondLen = htonl(pQueryMsg->tagCondLen); pQueryMsg->tagCondLen = htonl(pQueryMsg->tagCondLen);
pQueryMsg->tsBuf.tsOffset = htonl(pQueryMsg->tsBuf.tsOffset); pQueryMsg->tsBuf.tsOffset = htonl(pQueryMsg->tsBuf.tsOffset);
pQueryMsg->tsBuf.tsLen = htonl(pQueryMsg->tsBuf.tsLen); pQueryMsg->tsBuf.tsLen = htonl(pQueryMsg->tsBuf.tsLen);
pQueryMsg->tsBuf.tsNumOfBlocks = htonl(pQueryMsg->tsBuf.tsNumOfBlocks); pQueryMsg->tsBuf.tsNumOfBlocks = htonl(pQueryMsg->tsBuf.tsNumOfBlocks);
pQueryMsg->tsBuf.tsOrder = htonl(pQueryMsg->tsBuf.tsOrder); pQueryMsg->tsBuf.tsOrder = htonl(pQueryMsg->tsBuf.tsOrder);
pQueryMsg->numOfTags = htonl(pQueryMsg->numOfTags); pQueryMsg->numOfTags = htonl(pQueryMsg->numOfTags);
pQueryMsg->tbnameCondLen = htonl(pQueryMsg->tbnameCondLen); pQueryMsg->tbnameCondLen = htonl(pQueryMsg->tbnameCondLen);
pQueryMsg->secondStageOutput = htonl(pQueryMsg->secondStageOutput); pQueryMsg->secondStageOutput = htonl(pQueryMsg->secondStageOutput);
......
...@@ -1572,7 +1572,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity, ...@@ -1572,7 +1572,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
int32_t numOfColsOfRow1 = 0; int32_t numOfColsOfRow1 = 0;
if (pSchema1 == NULL) { if (pSchema1 == NULL) {
pSchema1 = tsdbGetTableSchemaByVersion(pTable, dataRowVersion(row1)); pSchema1 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row1));
} }
if(isRow1DataRow) { if(isRow1DataRow) {
numOfColsOfRow1 = schemaNCols(pSchema1); numOfColsOfRow1 = schemaNCols(pSchema1);
...@@ -1584,7 +1584,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity, ...@@ -1584,7 +1584,7 @@ static void mergeTwoRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
if(row2) { if(row2) {
isRow2DataRow = isDataRow(row2); isRow2DataRow = isDataRow(row2);
if (pSchema2 == NULL) { if (pSchema2 == NULL) {
pSchema2 = tsdbGetTableSchemaByVersion(pTable, dataRowVersion(row2)); pSchema2 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row2));
} }
if(isRow2DataRow) { if(isRow2DataRow) {
numOfColsOfRow2 = schemaNCols(pSchema2); numOfColsOfRow2 = schemaNCols(pSchema2);
...@@ -2460,7 +2460,7 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist ...@@ -2460,7 +2460,7 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist
// current file are not overlapped with query time window, ignore remain files // current file are not overlapped with query time window, ignore remain files
if ((ASCENDING_TRAVERSE(pQueryHandle->order) && win.skey > pQueryHandle->window.ekey) || if ((ASCENDING_TRAVERSE(pQueryHandle->order) && win.skey > pQueryHandle->window.ekey) ||
(!ASCENDING_TRAVERSE(pQueryHandle->order) && win.ekey < pQueryHandle->window.ekey)) { (!ASCENDING_TRAVERSE(pQueryHandle->order) && win.ekey < pQueryHandle->window.ekey)) {
tsdbUnLockFS(REPO_FS(pQueryHandle->pTsdb)); tsdbUnLockFS(REPO_FS(pQueryHandle->pTsdb));
tsdbDebug("%p remain files are not qualified for qrange:%" PRId64 "-%" PRId64 ", ignore, 0x%"PRIx64, pQueryHandle, tsdbDebug("%p remain files are not qualified for qrange:%" PRId64 "-%" PRId64 ", ignore, 0x%"PRIx64, pQueryHandle,
pQueryHandle->window.skey, pQueryHandle->window.ekey, pQueryHandle->qId); pQueryHandle->window.skey, pQueryHandle->window.ekey, pQueryHandle->qId);
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
extern "C" { extern "C" {
#endif #endif
void taosNetTest(char *role, char *host, int port, int pkgLen); void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen, int32_t pkgNum, char *pkgType);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
#include "syncMsg.h" #include "syncMsg.h"
#define MAX_PKG_LEN (64 * 1000) #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) #define BUFFER_SIZE (MAX_PKG_LEN + 1024)
extern int32_t tsRpcMaxUdpSize; extern int32_t tsRpcMaxUdpSize;
...@@ -466,6 +470,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) { ...@@ -466,6 +470,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen = pkgLen; sendpkgLen = pkgLen;
} }
tsRpcForceTcp = 1;
int32_t ret = taosNetCheckRpc(host, port, sendpkgLen, spi, NULL); int32_t ret = taosNetCheckRpc(host, port, sendpkgLen, spi, NULL);
if (ret < 0) { if (ret < 0) {
printf("failed to test TCP port:%d\n", port); printf("failed to test TCP port:%d\n", port);
...@@ -479,6 +484,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) { ...@@ -479,6 +484,7 @@ static void taosNetTestRpc(char *host, int32_t startPort, int32_t pkgLen) {
sendpkgLen = pkgLen; sendpkgLen = pkgLen;
} }
tsRpcForceTcp = 0;
ret = taosNetCheckRpc(host, port, pkgLen, spi, NULL); ret = taosNetCheckRpc(host, port, pkgLen, spi, NULL);
if (ret < 0) { if (ret < 0) {
printf("failed to test UDP port:%d\n", port); printf("failed to test UDP port:%d\n", port);
...@@ -542,12 +548,110 @@ static void taosNetTestServer(char *host, int32_t startPort, int32_t pkgLen) { ...@@ -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\tcost: %" 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\tstatus:%d\tcost:%8.2lf ms\tspeed:%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("\ntotal succ:%5d/%d\tcost:%8.2lf ms\tspeed:%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; tscEmbedded = 1;
if (host == NULL) host = tsLocalFqdn; if (host == NULL) host = tsLocalFqdn;
if (port == 0) port = tsServerPort; if (port == 0) port = tsServerPort;
if (pkgLen <= 10) pkgLen = 1000; if (0 == strcmp("speed", role)){
if (pkgLen > MAX_PKG_LEN) pkgLen = MAX_PKG_LEN; 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)) { if (0 == strcmp("client", role)) {
taosNetTestClient(host, port, pkgLen); taosNetTestClient(host, port, pkgLen);
...@@ -560,6 +664,12 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) { ...@@ -560,6 +664,12 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
taosNetCheckSync(host, port); taosNetCheckSync(host, port);
} else if (0 == strcmp("startup", role)) { } else if (0 == strcmp("startup", role)) {
taosNetTestStartup(host, port); 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 { } else {
taosNetTestStartup(host, port); taosNetTestStartup(host, port);
} }
......
#!/bin/bash
taos -n fqdn
#!/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.
先完成此消息的编辑!
想要评论请 注册