Merge pull request #14681 from taosdata/fix/tsim
refactor: delete redundant files
This commit is contained in:
commit
7c39d6076c
|
@ -1,14 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
|
@ -1,18 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
|
||||||
#define TSDB_SQL_C
|
|
||||||
#include "tmsgtype.h"
|
|
|
@ -9,7 +9,6 @@ target_sources(
|
||||||
"src/vnd/vnodeCfg.c"
|
"src/vnd/vnodeCfg.c"
|
||||||
"src/vnd/vnodeCommit.c"
|
"src/vnd/vnodeCommit.c"
|
||||||
"src/vnd/vnodeQuery.c"
|
"src/vnd/vnodeQuery.c"
|
||||||
"src/vnd/vnodeStateMgr.c"
|
|
||||||
"src/vnd/vnodeModule.c"
|
"src/vnd/vnodeModule.c"
|
||||||
"src/vnd/vnodeSvr.c"
|
"src/vnd/vnodeSvr.c"
|
||||||
"src/vnd/vnodeSync.c"
|
"src/vnd/vnodeSync.c"
|
||||||
|
@ -32,7 +31,6 @@ target_sources(
|
||||||
"src/sma/smaUtil.c"
|
"src/sma/smaUtil.c"
|
||||||
"src/sma/smaOpen.c"
|
"src/sma/smaOpen.c"
|
||||||
"src/sma/smaCommit.c"
|
"src/sma/smaCommit.c"
|
||||||
"src/sma/smaSnapshot.c"
|
|
||||||
"src/sma/smaRollup.c"
|
"src/sma/smaRollup.c"
|
||||||
"src/sma/smaTimeRange.c"
|
"src/sma/smaTimeRange.c"
|
||||||
|
|
||||||
|
@ -43,7 +41,6 @@ target_sources(
|
||||||
"src/tsdb/tsdbOpen.c"
|
"src/tsdb/tsdbOpen.c"
|
||||||
"src/tsdb/tsdbMemTable.c"
|
"src/tsdb/tsdbMemTable.c"
|
||||||
"src/tsdb/tsdbRead.c"
|
"src/tsdb/tsdbRead.c"
|
||||||
"src/tsdb/tsdbReadImpl.c"
|
|
||||||
"src/tsdb/tsdbCache.c"
|
"src/tsdb/tsdbCache.c"
|
||||||
"src/tsdb/tsdbWrite.c"
|
"src/tsdb/tsdbWrite.c"
|
||||||
"src/tsdb/tsdbReaderWriter.c"
|
"src/tsdb/tsdbReaderWriter.c"
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sma.h"
|
|
|
@ -1,16 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "tsdb.h"
|
|
|
@ -1,14 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
|
@ -1,30 +1,16 @@
|
||||||
add_executable(transportTest "")
|
add_executable(transportTest "")
|
||||||
add_executable(client "")
|
|
||||||
add_executable(server "")
|
|
||||||
add_executable(transUT "")
|
add_executable(transUT "")
|
||||||
add_executable(syncClient "")
|
|
||||||
add_executable(pushServer "")
|
add_executable(pushServer "")
|
||||||
|
|
||||||
target_sources(transUT
|
target_sources(transUT
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"transUT.cpp"
|
"transUT.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_sources(transportTest
|
target_sources(transportTest
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"transportTests.cpp"
|
"transportTests.cpp"
|
||||||
)
|
)
|
||||||
target_sources (client
|
|
||||||
PRIVATE
|
|
||||||
"rclient.c"
|
|
||||||
)
|
|
||||||
target_sources (server
|
|
||||||
PRIVATE
|
|
||||||
"rserver.c"
|
|
||||||
)
|
|
||||||
target_sources (syncClient
|
|
||||||
PRIVATE
|
|
||||||
"syncClient.c"
|
|
||||||
)
|
|
||||||
|
|
||||||
target_sources(pushServer
|
target_sources(pushServer
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
@ -35,7 +21,7 @@ target_include_directories(transportTest
|
||||||
PUBLIC
|
PUBLIC
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
"${TD_SOURCE_DIR}/include/libs/transport"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries (transportTest
|
target_link_libraries (transportTest
|
||||||
os
|
os
|
||||||
|
@ -44,6 +30,7 @@ target_link_libraries (transportTest
|
||||||
gtest_main
|
gtest_main
|
||||||
transport
|
transport
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries (transUT
|
target_link_libraries (transUT
|
||||||
os
|
os
|
||||||
util
|
util
|
||||||
|
@ -52,56 +39,18 @@ target_link_libraries (transUT
|
||||||
transport
|
transport
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(client
|
|
||||||
PUBLIC
|
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries (client
|
|
||||||
os
|
|
||||||
util
|
|
||||||
common
|
|
||||||
gtest_main
|
|
||||||
transport
|
|
||||||
)
|
|
||||||
target_include_directories(server
|
|
||||||
PUBLIC
|
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(transUT
|
target_include_directories(transUT
|
||||||
PUBLIC
|
PUBLIC
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
"${TD_SOURCE_DIR}/include/libs/transport"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries (server
|
|
||||||
os
|
|
||||||
util
|
|
||||||
common
|
|
||||||
gtest_main
|
|
||||||
transport
|
|
||||||
)
|
|
||||||
target_include_directories(syncClient
|
|
||||||
PUBLIC
|
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
|
||||||
)
|
|
||||||
target_link_libraries (syncClient
|
|
||||||
os
|
|
||||||
util
|
|
||||||
common
|
|
||||||
gtest_main
|
|
||||||
transport
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(pushServer
|
target_include_directories(pushServer
|
||||||
PUBLIC
|
PUBLIC
|
||||||
"${TD_SOURCE_DIR}/include/libs/transport"
|
"${TD_SOURCE_DIR}/include/libs/transport"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
"${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries (pushServer
|
target_link_libraries (pushServer
|
||||||
os
|
os
|
||||||
util
|
util
|
||||||
|
@ -110,7 +59,6 @@ target_link_libraries (pushServer
|
||||||
transport
|
transport
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME transUT
|
NAME transUT
|
||||||
COMMAND transUT
|
COMMAND transUT
|
||||||
|
|
|
@ -1,216 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include <tdatablock.h>
|
|
||||||
#include "os.h"
|
|
||||||
#include "taoserror.h"
|
|
||||||
#include "tglobal.h"
|
|
||||||
#include "transLog.h"
|
|
||||||
#include "trpc.h"
|
|
||||||
#include "tutil.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int index;
|
|
||||||
SEpSet epSet;
|
|
||||||
int num;
|
|
||||||
int numOfReqs;
|
|
||||||
int msgSize;
|
|
||||||
tsem_t rspSem;
|
|
||||||
tsem_t * pOverSem;
|
|
||||||
TdThread thread;
|
|
||||||
void * pRpc;
|
|
||||||
} SInfo;
|
|
||||||
static void processResponse(void *pParent, SRpcMsg *pMsg, SEpSet *pEpSet) {
|
|
||||||
SInfo *pInfo = (SInfo *)pMsg->info.ahandle;
|
|
||||||
// tError("thread:%d, response is received, type:%d contLen:%d code:0x%x", pInfo->index, pMsg->msgType, pMsg->contLen,
|
|
||||||
// pMsg->code);
|
|
||||||
|
|
||||||
if (pEpSet) pInfo->epSet = *pEpSet;
|
|
||||||
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
|
||||||
// tsem_post(&pInfo->rspSem);
|
|
||||||
tsem_post(&pInfo->rspSem);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tcount = 0;
|
|
||||||
|
|
||||||
static void *sendRequest(void *param) {
|
|
||||||
SInfo * pInfo = (SInfo *)param;
|
|
||||||
SRpcMsg rpcMsg = {0};
|
|
||||||
|
|
||||||
tError("thread:%d, start to send request", pInfo->index);
|
|
||||||
|
|
||||||
tError("thread:%d, reqs: %d", pInfo->index, pInfo->numOfReqs);
|
|
||||||
int u100 = 0;
|
|
||||||
int u500 = 0;
|
|
||||||
int u1000 = 0;
|
|
||||||
int u10000 = 0;
|
|
||||||
|
|
||||||
while (pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
|
||||||
pInfo->num++;
|
|
||||||
rpcMsg.pCont = rpcMallocCont(pInfo->msgSize);
|
|
||||||
rpcMsg.contLen = pInfo->msgSize;
|
|
||||||
rpcMsg.info.ahandle = pInfo;
|
|
||||||
rpcMsg.msgType = 1;
|
|
||||||
// tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
|
||||||
int64_t start = taosGetTimestampUs();
|
|
||||||
rpcSendRequest(pInfo->pRpc, &pInfo->epSet, &rpcMsg, NULL);
|
|
||||||
if (pInfo->num % 20000 == 0) tError("thread:%d, %d requests have been sent", pInfo->index, pInfo->num);
|
|
||||||
// tsem_wait(&pInfo->rspSem);
|
|
||||||
tsem_wait(&pInfo->rspSem);
|
|
||||||
int64_t end = taosGetTimestampUs() - start;
|
|
||||||
if (end <= 100) {
|
|
||||||
u100++;
|
|
||||||
} else if (end > 100 && end <= 500) {
|
|
||||||
u500++;
|
|
||||||
} else if (end > 500 && end < 1000) {
|
|
||||||
u1000++;
|
|
||||||
} else {
|
|
||||||
u10000++;
|
|
||||||
}
|
|
||||||
|
|
||||||
tDebug("recv response succefully");
|
|
||||||
|
|
||||||
// taosSsleep(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
tError("send and recv sum: %d, %d, %d, %d", u100, u500, u1000, u10000);
|
|
||||||
tError("thread:%d, it is over", pInfo->index);
|
|
||||||
tcount++;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
SRpcInit rpcInit;
|
|
||||||
SEpSet epSet = {0};
|
|
||||||
int msgSize = 128;
|
|
||||||
int numOfReqs = 0;
|
|
||||||
int appThreads = 1;
|
|
||||||
char serverIp[40] = "127.0.0.1";
|
|
||||||
char secret[20] = "mypassword";
|
|
||||||
struct timeval systemTime;
|
|
||||||
int64_t startTime, endTime;
|
|
||||||
TdThreadAttr thattr;
|
|
||||||
|
|
||||||
// server info
|
|
||||||
epSet.inUse = 0;
|
|
||||||
addEpIntoEpSet(&epSet, serverIp, 7000);
|
|
||||||
addEpIntoEpSet(&epSet, "192.168.0.1", 7000);
|
|
||||||
|
|
||||||
// client info
|
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
|
||||||
rpcInit.localPort = 0;
|
|
||||||
rpcInit.label = "APP";
|
|
||||||
rpcInit.numOfThreads = 1;
|
|
||||||
rpcInit.cfp = processResponse;
|
|
||||||
rpcInit.sessions = 100;
|
|
||||||
rpcInit.idleTime = 100;
|
|
||||||
rpcInit.user = "michael";
|
|
||||||
rpcInit.connType = TAOS_CONN_CLIENT;
|
|
||||||
rpcDebugFlag = 131;
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i) {
|
|
||||||
if (strcmp(argv[i], "-p") == 0 && i < argc - 1) {
|
|
||||||
epSet.eps[0].port = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-i") == 0 && i < argc - 1) {
|
|
||||||
tstrncpy(epSet.eps[0].fqdn, argv[++i], sizeof(epSet.eps[0].fqdn));
|
|
||||||
} else if (strcmp(argv[i], "-t") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-m") == 0 && i < argc - 1) {
|
|
||||||
msgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-s") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.sessions = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-n") == 0 && i < argc - 1) {
|
|
||||||
numOfReqs = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-a") == 0 && i < argc - 1) {
|
|
||||||
appThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-o") == 0 && i < argc - 1) {
|
|
||||||
tsCompressMsgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-u") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.user = argv[++i];
|
|
||||||
} else if (strcmp(argv[i], "-k") == 0 && i < argc - 1) {
|
|
||||||
} else if (strcmp(argv[i], "-spi") == 0 && i < argc - 1) {
|
|
||||||
} else if (strcmp(argv[i], "-d") == 0 && i < argc - 1) {
|
|
||||||
rpcDebugFlag = atoi(argv[++i]);
|
|
||||||
} else {
|
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
|
||||||
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
|
||||||
printf(" [-p port]: server port number, default is:%d\n", epSet.eps[0].port);
|
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
|
||||||
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
|
||||||
printf(" [-a threads]: number of app threads, default is:%d\n", appThreads);
|
|
||||||
printf(" [-n requests]: number of requests per thread, default is:%d\n", numOfReqs);
|
|
||||||
printf(" [-o compSize]: compression message size, default is:%d\n", tsCompressMsgSize);
|
|
||||||
printf(" [-u user]: user name for the connection, default is:%s\n", rpcInit.user);
|
|
||||||
printf(" [-d debugFlag]: debug flag, default:%d\n", rpcDebugFlag);
|
|
||||||
printf(" [-h help]: print out this help\n\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *path = TD_TMP_DIR_PATH "transport/client";
|
|
||||||
taosRemoveDir(path);
|
|
||||||
taosMkDir(path);
|
|
||||||
tstrncpy(tsLogDir, path, PATH_MAX);
|
|
||||||
taosInitLog("client.log", 10);
|
|
||||||
|
|
||||||
void *pRpc = rpcOpen(&rpcInit);
|
|
||||||
if (pRpc == NULL) {
|
|
||||||
tError("failed to initialize RPC");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tError("client is initialized");
|
|
||||||
tError("threads:%d msgSize:%d requests:%d", appThreads, msgSize, numOfReqs);
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
startTime = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
|
|
||||||
|
|
||||||
SInfo *pInfo = (SInfo *)taosMemoryCalloc(1, sizeof(SInfo) * appThreads);
|
|
||||||
|
|
||||||
taosThreadAttrInit(&thattr);
|
|
||||||
taosThreadAttrSetDetachState(&thattr, PTHREAD_CREATE_JOINABLE);
|
|
||||||
|
|
||||||
for (int i = 0; i < appThreads; ++i) {
|
|
||||||
pInfo->index = i;
|
|
||||||
pInfo->epSet = epSet;
|
|
||||||
pInfo->numOfReqs = numOfReqs;
|
|
||||||
pInfo->msgSize = msgSize;
|
|
||||||
tsem_init(&pInfo->rspSem, 0, 0);
|
|
||||||
pInfo->pRpc = pRpc;
|
|
||||||
taosThreadCreate(&pInfo->thread, &thattr, sendRequest, pInfo);
|
|
||||||
pInfo++;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
taosUsleep(1);
|
|
||||||
} while (tcount < appThreads);
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
endTime = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
|
|
||||||
float usedTime = (endTime - startTime) / 1000.0f; // mseconds
|
|
||||||
|
|
||||||
tError("it takes %.3f mseconds to send %d requests to server", usedTime, numOfReqs * appThreads);
|
|
||||||
tError("Performance: %.3f requests per second, msgSize:%d bytes", 1000.0 * numOfReqs * appThreads / usedTime,
|
|
||||||
msgSize);
|
|
||||||
|
|
||||||
int ch = getchar();
|
|
||||||
UNUSED(ch);
|
|
||||||
|
|
||||||
taosCloseLog();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,196 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "os.h"
|
|
||||||
#include "tutil.h"
|
|
||||||
#include "tglobal.h"
|
|
||||||
#include "rpcLog.h"
|
|
||||||
#include "trpc.h"
|
|
||||||
#include "taoserror.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int index;
|
|
||||||
SRpcEpSet epSet;
|
|
||||||
int num;
|
|
||||||
int numOfReqs;
|
|
||||||
int msgSize;
|
|
||||||
tsem_t rspSem;
|
|
||||||
tsem_t *pOverSem;
|
|
||||||
TdThread thread;
|
|
||||||
void *pRpc;
|
|
||||||
} SInfo;
|
|
||||||
|
|
||||||
|
|
||||||
static int tcount = 0;
|
|
||||||
static int terror = 0;
|
|
||||||
|
|
||||||
static void *sendRequest(void *param) {
|
|
||||||
SInfo *pInfo = (SInfo *)param;
|
|
||||||
SRpcMsg rpcMsg, rspMsg;
|
|
||||||
|
|
||||||
tDebug("thread:%d, start to send request", pInfo->index);
|
|
||||||
|
|
||||||
while ( pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
|
||||||
pInfo->num++;
|
|
||||||
rpcMsg.pCont = rpcMallocCont(pInfo->msgSize);
|
|
||||||
rpcMsg.contLen = pInfo->msgSize;
|
|
||||||
rpcMsg.handle = pInfo;
|
|
||||||
rpcMsg.msgType = 1;
|
|
||||||
tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
|
||||||
|
|
||||||
rpcSendRecv(pInfo->pRpc, &pInfo->epSet, &rpcMsg, &rspMsg);
|
|
||||||
|
|
||||||
// handle response
|
|
||||||
if (rspMsg.code != 0) terror++;
|
|
||||||
|
|
||||||
tDebug("thread:%d, rspLen:%d code:%d", pInfo->index, rspMsg.contLen, rspMsg.code);
|
|
||||||
|
|
||||||
rpcFreeCont(rspMsg.pCont);
|
|
||||||
|
|
||||||
if ( pInfo->num % 20000 == 0 )
|
|
||||||
tInfo("thread:%d, %d requests have been sent", pInfo->index, pInfo->num);
|
|
||||||
}
|
|
||||||
|
|
||||||
tDebug("thread:%d, it is over", pInfo->index);
|
|
||||||
tcount++;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
SRpcInit rpcInit;
|
|
||||||
SRpcEpSet epSet;
|
|
||||||
int msgSize = 128;
|
|
||||||
int numOfReqs = 0;
|
|
||||||
int appThreads = 1;
|
|
||||||
char serverIp[40] = "127.0.0.1";
|
|
||||||
char secret[TSDB_KEY_LEN] = "mypassword";
|
|
||||||
struct timeval systemTime;
|
|
||||||
int64_t startTime, endTime;
|
|
||||||
TdThreadAttr thattr;
|
|
||||||
|
|
||||||
// server info
|
|
||||||
epSet.numOfEps = 1;
|
|
||||||
epSet.inUse = 0;
|
|
||||||
epSet.port[0] = 7000;
|
|
||||||
epSet.port[1] = 7000;
|
|
||||||
strcpy(epSet.fqdn[0], serverIp);
|
|
||||||
strcpy(epSet.fqdn[1], "192.168.0.1");
|
|
||||||
|
|
||||||
// client info
|
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
|
||||||
//rpcInit.localIp = "0.0.0.0";
|
|
||||||
rpcInit.localPort = 0;
|
|
||||||
rpcInit.label = "APP";
|
|
||||||
rpcInit.numOfThreads = 1;
|
|
||||||
rpcInit.sessions = 100;
|
|
||||||
rpcInit.idleTime = 3000; //tsShellActivityTimer*1000;
|
|
||||||
rpcInit.user = "michael";
|
|
||||||
rpcInit.secret = secret;
|
|
||||||
rpcInit.ckey = "key";
|
|
||||||
rpcInit.spi = 1;
|
|
||||||
rpcInit.connType = TAOS_CONN_CLIENT;
|
|
||||||
|
|
||||||
for (int i=1; i<argc; ++i) {
|
|
||||||
if (strcmp(argv[i], "-p")==0 && i < argc-1) {
|
|
||||||
epSet.port[0] = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-i") ==0 && i < argc-1) {
|
|
||||||
tstrncpy(epSet.fqdn[0], argv[++i], sizeof(epSet.fqdn[0]));
|
|
||||||
} else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
|
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
|
|
||||||
msgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-s")==0 && i < argc-1) {
|
|
||||||
rpcInit.sessions = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-n")==0 && i < argc-1) {
|
|
||||||
numOfReqs = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-a")==0 && i < argc-1) {
|
|
||||||
appThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-o")==0 && i < argc-1) {
|
|
||||||
tsCompressMsgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-u")==0 && i < argc-1) {
|
|
||||||
rpcInit.user = argv[++i];
|
|
||||||
} else if (strcmp(argv[i], "-k")==0 && i < argc-1) {
|
|
||||||
rpcInit.secret = argv[++i];
|
|
||||||
} else if (strcmp(argv[i], "-spi")==0 && i < argc-1) {
|
|
||||||
rpcInit.spi = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-d")==0 && i < argc-1) {
|
|
||||||
rpcDebugFlag = atoi(argv[++i]);
|
|
||||||
} else {
|
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
|
||||||
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
|
||||||
printf(" [-p port]: server port number, default is:%d\n", epSet.port[0]);
|
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
|
||||||
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
|
||||||
printf(" [-a threads]: number of app threads, default is:%d\n", appThreads);
|
|
||||||
printf(" [-n requests]: number of requests per thread, default is:%d\n", numOfReqs);
|
|
||||||
printf(" [-o compSize]: compression message size, default is:%d\n", tsCompressMsgSize);
|
|
||||||
printf(" [-u user]: user name for the connection, default is:%s\n", rpcInit.user);
|
|
||||||
printf(" [-k secret]: password for the connection, default is:%s\n", rpcInit.secret);
|
|
||||||
printf(" [-spi SPI]: security parameter index, default is:%d\n", rpcInit.spi);
|
|
||||||
printf(" [-d debugFlag]: debug flag, default:%d\n", rpcDebugFlag);
|
|
||||||
printf(" [-h help]: print out this help\n\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taosInitLog("client.log", 10);
|
|
||||||
|
|
||||||
void *pRpc = rpcOpen(&rpcInit);
|
|
||||||
if (pRpc == NULL) {
|
|
||||||
tError("failed to initialize RPC");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tInfo("client is initialized");
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
startTime = systemTime.tv_sec*1000000 + systemTime.tv_usec;
|
|
||||||
|
|
||||||
SInfo *pInfo = (SInfo *)taosMemoryCalloc(1, sizeof(SInfo)*appThreads);
|
|
||||||
|
|
||||||
taosThreadAttrInit(&thattr);
|
|
||||||
taosThreadAttrSetDetachState(&thattr, PTHREAD_CREATE_JOINABLE);
|
|
||||||
|
|
||||||
for (int i=0; i<appThreads; ++i) {
|
|
||||||
pInfo->index = i;
|
|
||||||
pInfo->epSet = epSet;
|
|
||||||
pInfo->numOfReqs = numOfReqs;
|
|
||||||
pInfo->msgSize = msgSize;
|
|
||||||
tsem_init(&pInfo->rspSem, 0, 0);
|
|
||||||
pInfo->pRpc = pRpc;
|
|
||||||
taosThreadCreate(&pInfo->thread, &thattr, sendRequest, pInfo);
|
|
||||||
pInfo++;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
taosUsleep(1);
|
|
||||||
} while ( tcount < appThreads);
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
endTime = systemTime.tv_sec*1000000 + systemTime.tv_usec;
|
|
||||||
float usedTime = (endTime - startTime)/1000.0; // mseconds
|
|
||||||
|
|
||||||
tInfo("it takes %.3f mseconds to send %d requests to server, error num:%d", usedTime, numOfReqs*appThreads, terror);
|
|
||||||
tInfo("Performance: %.3f requests per second, msgSize:%d bytes", 1000.0*numOfReqs*appThreads/usedTime, msgSize);
|
|
||||||
|
|
||||||
taosCloseLog();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,194 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//#define _DEFAULT_SOURCE
|
|
||||||
#include "os.h"
|
|
||||||
#include "tglobal.h"
|
|
||||||
#include "tqueue.h"
|
|
||||||
#include "transLog.h"
|
|
||||||
#include "trpc.h"
|
|
||||||
|
|
||||||
int msgSize = 128;
|
|
||||||
int commit = 0;
|
|
||||||
TdFilePtr pDataFile = NULL;
|
|
||||||
STaosQueue *qhandle = NULL;
|
|
||||||
STaosQset * qset = NULL;
|
|
||||||
|
|
||||||
void processShellMsg() {
|
|
||||||
static int num = 0;
|
|
||||||
STaosQall *qall;
|
|
||||||
SRpcMsg * pRpcMsg, rpcMsg;
|
|
||||||
int type;
|
|
||||||
void * pvnode;
|
|
||||||
|
|
||||||
qall = taosAllocateQall();
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int numOfMsgs = taosReadAllQitemsFromQset(qset, qall, &pvnode, NULL);
|
|
||||||
tDebug("%d shell msgs are received", numOfMsgs);
|
|
||||||
if (numOfMsgs <= 0) break;
|
|
||||||
|
|
||||||
for (int i = 0; i < numOfMsgs; ++i) {
|
|
||||||
taosGetQitem(qall, (void **)&pRpcMsg);
|
|
||||||
|
|
||||||
if (pDataFile != NULL) {
|
|
||||||
if (taosWriteFile(pDataFile, pRpcMsg->pCont, pRpcMsg->contLen) < 0) {
|
|
||||||
tInfo("failed to write data file, reason:%s", strerror(errno));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (commit >= 2) {
|
|
||||||
num += numOfMsgs;
|
|
||||||
// if (taosFsync(pDataFile) < 0) {
|
|
||||||
// tInfo("failed to flush data to file, reason:%s", strerror(errno));
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (num % 10000 == 0) {
|
|
||||||
tInfo("%d request have been written into disk", num);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taosResetQitems(qall);
|
|
||||||
for (int i = 0; i < numOfMsgs; ++i) {
|
|
||||||
taosGetQitem(qall, (void **)&pRpcMsg);
|
|
||||||
rpcFreeCont(pRpcMsg->pCont);
|
|
||||||
|
|
||||||
memset(&rpcMsg, 0, sizeof(rpcMsg));
|
|
||||||
rpcMsg.pCont = rpcMallocCont(msgSize);
|
|
||||||
rpcMsg.contLen = msgSize;
|
|
||||||
rpcMsg.info = pRpcMsg->info;
|
|
||||||
rpcMsg.code = 0;
|
|
||||||
rpcSendResponse(&rpcMsg);
|
|
||||||
|
|
||||||
taosFreeQitem(pRpcMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taosFreeQall(qall);
|
|
||||||
}
|
|
||||||
|
|
||||||
int retrieveAuthInfo(void *parent, char *meterId, char *spi, char *encrypt, char *secret, char *ckey) {
|
|
||||||
// app shall retrieve the auth info based on meterID from DB or a data file
|
|
||||||
// demo code here only for simple demo
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (strcmp(meterId, "michael") == 0) {
|
|
||||||
*spi = 1;
|
|
||||||
*encrypt = 0;
|
|
||||||
strcpy(secret, "mypassword");
|
|
||||||
strcpy(ckey, "key");
|
|
||||||
} else if (strcmp(meterId, "jeff") == 0) {
|
|
||||||
*spi = 0;
|
|
||||||
*encrypt = 0;
|
|
||||||
} else {
|
|
||||||
ret = -1; // user not there
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void processRequestMsg(void *pParent, SRpcMsg *pMsg, SEpSet *pEpSet) {
|
|
||||||
SRpcMsg *pTemp;
|
|
||||||
|
|
||||||
pTemp = taosAllocateQitem(sizeof(SRpcMsg), DEF_QITEM);
|
|
||||||
memcpy(pTemp, pMsg, sizeof(SRpcMsg));
|
|
||||||
|
|
||||||
tDebug("request is received, type:%d, contLen:%d, item:%p", pMsg->msgType, pMsg->contLen, pTemp);
|
|
||||||
taosWriteQitem(qhandle, pTemp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
SRpcInit rpcInit;
|
|
||||||
char dataName[20] = "server.data";
|
|
||||||
|
|
||||||
taosBlockSIGPIPE();
|
|
||||||
|
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
|
||||||
rpcInit.localPort = 7000;
|
|
||||||
rpcInit.label = "SER";
|
|
||||||
rpcInit.numOfThreads = 1;
|
|
||||||
rpcInit.cfp = processRequestMsg;
|
|
||||||
rpcInit.sessions = 1000;
|
|
||||||
rpcInit.idleTime = 2 * 1500;
|
|
||||||
|
|
||||||
rpcDebugFlag = 131;
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i) {
|
|
||||||
if (strcmp(argv[i], "-p") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.localPort = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-t") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-m") == 0 && i < argc - 1) {
|
|
||||||
msgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-s") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.sessions = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-o") == 0 && i < argc - 1) {
|
|
||||||
tsCompressMsgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-w") == 0 && i < argc - 1) {
|
|
||||||
commit = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-d") == 0 && i < argc - 1) {
|
|
||||||
rpcDebugFlag = atoi(argv[++i]);
|
|
||||||
dDebugFlag = rpcDebugFlag;
|
|
||||||
uDebugFlag = rpcDebugFlag;
|
|
||||||
} else {
|
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
|
||||||
printf(" [-p port]: server port number, default is:%d\n", rpcInit.localPort);
|
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
|
||||||
printf(" [-s sessions]: number of sessions, default is:%d\n", rpcInit.sessions);
|
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
|
||||||
printf(" [-o compSize]: compression message size, default is:%d\n", tsCompressMsgSize);
|
|
||||||
printf(" [-w write]: write received data to file(0, 1, 2), default is:%d\n", commit);
|
|
||||||
printf(" [-d debugFlag]: debug flag, default:%d\n", rpcDebugFlag);
|
|
||||||
printf(" [-h help]: print out this help\n\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tsAsyncLog = 0;
|
|
||||||
rpcInit.connType = TAOS_CONN_SERVER;
|
|
||||||
|
|
||||||
const char *path = TD_TMP_DIR_PATH "transport/server";
|
|
||||||
taosRemoveDir(path);
|
|
||||||
taosMkDir(path);
|
|
||||||
tstrncpy(tsLogDir, path, PATH_MAX);
|
|
||||||
taosInitLog("server.log", 10);
|
|
||||||
|
|
||||||
void *pRpc = rpcOpen(&rpcInit);
|
|
||||||
if (pRpc == NULL) {
|
|
||||||
tError("failed to start RPC server");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
// sleep(5);
|
|
||||||
|
|
||||||
tInfo("RPC server is running, ctrl-c to exit");
|
|
||||||
|
|
||||||
if (commit) {
|
|
||||||
pDataFile = taosOpenFile(dataName, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND);
|
|
||||||
if (pDataFile == NULL) tInfo("failed to open data file, reason:%s", strerror(errno));
|
|
||||||
}
|
|
||||||
qhandle = taosOpenQueue();
|
|
||||||
qset = taosOpenQset();
|
|
||||||
taosAddIntoQset(qset, qhandle, NULL);
|
|
||||||
|
|
||||||
processShellMsg();
|
|
||||||
|
|
||||||
if (pDataFile != NULL) {
|
|
||||||
taosCloseFile(&pDataFile);
|
|
||||||
taosRemoveFile(dataName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,211 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include <tdatablock.h>
|
|
||||||
#include "os.h"
|
|
||||||
#include "taoserror.h"
|
|
||||||
#include "tglobal.h"
|
|
||||||
#include "transLog.h"
|
|
||||||
#include "trpc.h"
|
|
||||||
#include "tutil.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int index;
|
|
||||||
SEpSet epSet;
|
|
||||||
int num;
|
|
||||||
int numOfReqs;
|
|
||||||
int msgSize;
|
|
||||||
tsem_t rspSem;
|
|
||||||
tsem_t * pOverSem;
|
|
||||||
TdThread thread;
|
|
||||||
void * pRpc;
|
|
||||||
} SInfo;
|
|
||||||
static void processResponse(void *pParent, SRpcMsg *pMsg, SEpSet *pEpSet) {
|
|
||||||
SInfo *pInfo = (SInfo *)pMsg->info.ahandle;
|
|
||||||
tDebug("thread:%d, response is received, type:%d contLen:%d code:0x%x", pInfo->index, pMsg->msgType, pMsg->contLen,
|
|
||||||
pMsg->code);
|
|
||||||
|
|
||||||
if (pEpSet) pInfo->epSet = *pEpSet;
|
|
||||||
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
|
||||||
// tsem_post(&pInfo->rspSem);
|
|
||||||
tsem_post(&pInfo->rspSem);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tcount = 0;
|
|
||||||
|
|
||||||
static void *sendRequest(void *param) {
|
|
||||||
SInfo * pInfo = (SInfo *)param;
|
|
||||||
SRpcMsg rpcMsg = {0};
|
|
||||||
|
|
||||||
tDebug("thread:%d, start to send request", pInfo->index);
|
|
||||||
|
|
||||||
tDebug("thread:%d, reqs: %d", pInfo->index, pInfo->numOfReqs);
|
|
||||||
int u100 = 0;
|
|
||||||
int u500 = 0;
|
|
||||||
int u1000 = 0;
|
|
||||||
int u10000 = 0;
|
|
||||||
SRpcMsg respMsg = {0};
|
|
||||||
while (pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
|
||||||
pInfo->num++;
|
|
||||||
rpcMsg.pCont = rpcMallocCont(pInfo->msgSize);
|
|
||||||
rpcMsg.contLen = pInfo->msgSize;
|
|
||||||
rpcMsg.info.ahandle = pInfo;
|
|
||||||
rpcMsg.msgType = 1;
|
|
||||||
// tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
|
||||||
int64_t start = taosGetTimestampUs();
|
|
||||||
rpcSendRecv(pInfo->pRpc, &pInfo->epSet, &rpcMsg, &respMsg);
|
|
||||||
// rpcSendRequest(pInfo->pRpc, &pInfo->epSet, &rpcMsg, NULL);
|
|
||||||
if (pInfo->num % 20000 == 0) tInfo("thread:%d, %d requests have been sent", pInfo->index, pInfo->num);
|
|
||||||
// tsem_wait(&pInfo->rspSem);
|
|
||||||
// wtsem_wait(&pInfo->rspSem);
|
|
||||||
int64_t end = taosGetTimestampUs() - start;
|
|
||||||
if (end <= 100) {
|
|
||||||
u100++;
|
|
||||||
} else if (end > 100 && end <= 500) {
|
|
||||||
u500++;
|
|
||||||
} else if (end > 500 && end < 1000) {
|
|
||||||
u1000++;
|
|
||||||
} else {
|
|
||||||
u10000++;
|
|
||||||
}
|
|
||||||
|
|
||||||
tDebug("recv response succefully");
|
|
||||||
|
|
||||||
// taosSsleep(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
tError("send and recv sum: %d, %d, %d, %d", u100, u500, u1000, u10000);
|
|
||||||
tDebug("thread:%d, it is over", pInfo->index);
|
|
||||||
tcount++;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
SRpcInit rpcInit;
|
|
||||||
SEpSet epSet = {0};
|
|
||||||
int msgSize = 128;
|
|
||||||
int numOfReqs = 0;
|
|
||||||
int appThreads = 1;
|
|
||||||
char serverIp[40] = "127.0.0.1";
|
|
||||||
char secret[20] = "mypassword";
|
|
||||||
struct timeval systemTime;
|
|
||||||
int64_t startTime, endTime;
|
|
||||||
TdThreadAttr thattr;
|
|
||||||
|
|
||||||
// server info
|
|
||||||
epSet.inUse = 0;
|
|
||||||
addEpIntoEpSet(&epSet, serverIp, 7000);
|
|
||||||
addEpIntoEpSet(&epSet, "192.168.0.1", 7000);
|
|
||||||
|
|
||||||
// client info
|
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
|
||||||
rpcInit.localPort = 0;
|
|
||||||
rpcInit.label = "APP";
|
|
||||||
rpcInit.numOfThreads = 1;
|
|
||||||
rpcInit.cfp = processResponse;
|
|
||||||
rpcInit.sessions = 100;
|
|
||||||
rpcInit.idleTime = 100;
|
|
||||||
rpcInit.user = "michael";
|
|
||||||
rpcInit.connType = TAOS_CONN_CLIENT;
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i) {
|
|
||||||
if (strcmp(argv[i], "-p") == 0 && i < argc - 1) {
|
|
||||||
epSet.eps[0].port = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-i") == 0 && i < argc - 1) {
|
|
||||||
tstrncpy(epSet.eps[0].fqdn, argv[++i], sizeof(epSet.eps[0].fqdn));
|
|
||||||
} else if (strcmp(argv[i], "-t") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-m") == 0 && i < argc - 1) {
|
|
||||||
msgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-s") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.sessions = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-n") == 0 && i < argc - 1) {
|
|
||||||
numOfReqs = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-a") == 0 && i < argc - 1) {
|
|
||||||
appThreads = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-o") == 0 && i < argc - 1) {
|
|
||||||
tsCompressMsgSize = atoi(argv[++i]);
|
|
||||||
} else if (strcmp(argv[i], "-u") == 0 && i < argc - 1) {
|
|
||||||
rpcInit.user = argv[++i];
|
|
||||||
} else if (strcmp(argv[i], "-k") == 0 && i < argc - 1) {
|
|
||||||
} else if (strcmp(argv[i], "-spi") == 0 && i < argc - 1) {
|
|
||||||
} else if (strcmp(argv[i], "-d") == 0 && i < argc - 1) {
|
|
||||||
rpcDebugFlag = atoi(argv[++i]);
|
|
||||||
} else {
|
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
|
||||||
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
|
||||||
printf(" [-p port]: server port number, default is:%d\n", epSet.eps[0].port);
|
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
|
||||||
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
|
||||||
printf(" [-a threads]: number of app threads, default is:%d\n", appThreads);
|
|
||||||
printf(" [-n requests]: number of requests per thread, default is:%d\n", numOfReqs);
|
|
||||||
printf(" [-o compSize]: compression message size, default is:%d\n", tsCompressMsgSize);
|
|
||||||
printf(" [-u user]: user name for the connection, default is:%s\n", rpcInit.user);
|
|
||||||
printf(" [-d debugFlag]: debug flag, default:%d\n", rpcDebugFlag);
|
|
||||||
printf(" [-h help]: print out this help\n\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taosInitLog("client.log", 10);
|
|
||||||
|
|
||||||
void *pRpc = rpcOpen(&rpcInit);
|
|
||||||
if (pRpc == NULL) {
|
|
||||||
tError("failed to initialize RPC");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tInfo("client is initialized");
|
|
||||||
tInfo("threads:%d msgSize:%d requests:%d", appThreads, msgSize, numOfReqs);
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
startTime = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
|
|
||||||
|
|
||||||
SInfo *pInfo = (SInfo *)taosMemoryCalloc(1, sizeof(SInfo) * appThreads);
|
|
||||||
|
|
||||||
taosThreadAttrInit(&thattr);
|
|
||||||
taosThreadAttrSetDetachState(&thattr, PTHREAD_CREATE_JOINABLE);
|
|
||||||
|
|
||||||
for (int i = 0; i < appThreads; ++i) {
|
|
||||||
pInfo->index = i;
|
|
||||||
pInfo->epSet = epSet;
|
|
||||||
pInfo->numOfReqs = numOfReqs;
|
|
||||||
pInfo->msgSize = msgSize;
|
|
||||||
tsem_init(&pInfo->rspSem, 0, 0);
|
|
||||||
pInfo->pRpc = pRpc;
|
|
||||||
taosThreadCreate(&pInfo->thread, &thattr, sendRequest, pInfo);
|
|
||||||
pInfo++;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
taosUsleep(1);
|
|
||||||
} while (tcount < appThreads);
|
|
||||||
|
|
||||||
taosGetTimeOfDay(&systemTime);
|
|
||||||
endTime = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
|
|
||||||
float usedTime = (endTime - startTime) / 1000.0f; // mseconds
|
|
||||||
|
|
||||||
tInfo("it takes %.3f mseconds to send %d requests to server", usedTime, numOfReqs * appThreads);
|
|
||||||
tInfo("Performance: %.3f requests per second, msgSize:%d bytes", 1000.0 * numOfReqs * appThreads / usedTime, msgSize);
|
|
||||||
|
|
||||||
int ch = getchar();
|
|
||||||
UNUSED(ch);
|
|
||||||
|
|
||||||
taosCloseLog();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,405 +0,0 @@
|
||||||
/* $Id$ */
|
|
||||||
/* $NetBSD: strptime.c,v 1.18 1999/04/29 02:58:30 tv Exp $ */
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This code was contributed to The NetBSD Foundation by Klaus Klein.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* This product includes software developed by the NetBSD
|
|
||||||
* Foundation, Inc. and its contributors.
|
|
||||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived
|
|
||||||
* from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
||||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
||||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
//
|
|
||||||
//#include "lukemftp.h"
|
|
||||||
|
|
||||||
// #ifdef WINDOWS
|
|
||||||
|
|
||||||
// #include <time.h>
|
|
||||||
// #include <stdlib.h>
|
|
||||||
// #include <string.h>
|
|
||||||
// #include <winsock2.h>
|
|
||||||
// //#define TM_YEAR_BASE 1970 //origin
|
|
||||||
// #define TM_YEAR_BASE 1900 //slguan
|
|
||||||
// /*
|
|
||||||
// * We do not implement alternate representations. However, we always
|
|
||||||
// * check whether a given modifier is allowed for a certain conversion.
|
|
||||||
// */
|
|
||||||
// #define ALT_E 0x01
|
|
||||||
// #define ALT_O 0x02
|
|
||||||
// #define LEGAL_ALT(x) { if (alt_format & ~(x)) return (0); }
|
|
||||||
|
|
||||||
|
|
||||||
// static int conv_num(const char **buf, int *dest, int llim, int ulim)
|
|
||||||
// {
|
|
||||||
// int result = 0;
|
|
||||||
|
|
||||||
// /* The limit also determines the number of valid digits. */
|
|
||||||
// int rulim = ulim;
|
|
||||||
|
|
||||||
// if (**buf < '0' || **buf > '9')
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// do {
|
|
||||||
// result *= 10;
|
|
||||||
// result += *(*buf)++ - '0';
|
|
||||||
// rulim /= 10;
|
|
||||||
// } while ((result * 10 <= ulim) && rulim && **buf >= '0' && **buf <= '9');
|
|
||||||
|
|
||||||
// if (result < llim || result > ulim)
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// *dest = result;
|
|
||||||
// return (1);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// static const char *day[7] = {
|
|
||||||
// "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
|
|
||||||
// "Friday", "Saturday"
|
|
||||||
// };
|
|
||||||
// static const char *abday[7] = {
|
|
||||||
// "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
|
|
||||||
// };
|
|
||||||
// static const char *mon[12] = {
|
|
||||||
// "January", "February", "March", "April", "May", "June", "July",
|
|
||||||
// "August", "September", "October", "November", "December"
|
|
||||||
// };
|
|
||||||
// static const char *abmon[12] = {
|
|
||||||
// "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
|
||||||
// "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
|
||||||
// };
|
|
||||||
// static const char *am_pm[2] = {
|
|
||||||
// "AM", "PM"
|
|
||||||
// };
|
|
||||||
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// char *taosStrpTime(const char *buf, const char *fmt, struct tm *tm) {
|
|
||||||
// #ifdef WINDOWS
|
|
||||||
// char c;
|
|
||||||
// const char *bp;
|
|
||||||
// size_t len = 0;
|
|
||||||
// int alt_format, i, split_year = 0;
|
|
||||||
|
|
||||||
// bp = buf;
|
|
||||||
|
|
||||||
// while ((c = *fmt) != '\0') {
|
|
||||||
// /* Clear `alternate' modifier prior to new conversion. */
|
|
||||||
// alt_format = 0;
|
|
||||||
|
|
||||||
// /* Eat up white-space. */
|
|
||||||
// if (isspace(c)) {
|
|
||||||
// while (isspace(*bp))
|
|
||||||
// bp++;
|
|
||||||
|
|
||||||
// fmt++;
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if ((c = *fmt++) != '%')
|
|
||||||
// goto literal;
|
|
||||||
|
|
||||||
|
|
||||||
// again: switch (c = *fmt++) {
|
|
||||||
// case '%': /* "%%" is converted to "%". */
|
|
||||||
// literal :
|
|
||||||
// if (c != *bp++)
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// /*
|
|
||||||
// * "Alternative" modifiers. Just set the appropriate flag
|
|
||||||
// * and start over again.
|
|
||||||
// */
|
|
||||||
// case 'E': /* "%E?" alternative conversion modifier. */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// alt_format |= ALT_E;
|
|
||||||
// goto again;
|
|
||||||
|
|
||||||
// case 'O': /* "%O?" alternative conversion modifier. */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// alt_format |= ALT_O;
|
|
||||||
// goto again;
|
|
||||||
|
|
||||||
// /*
|
|
||||||
// * "Complex" conversion rules, implemented through recursion.
|
|
||||||
// */
|
|
||||||
// case 'c': /* Date and time, using the locale's format. */
|
|
||||||
// LEGAL_ALT(ALT_E);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%x %X", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'D': /* The date as "%m/%d/%y". */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%m/%d/%y", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'R': /* The time as "%H:%M". */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%H:%M", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'r': /* The time in 12-hour clock representation. */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%I:%M:%S %p", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'T': /* The time as "%H:%M:%S". */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%H:%M:%S", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'X': /* The time, using the locale's format. */
|
|
||||||
// LEGAL_ALT(ALT_E);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%H:%M:%S", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'x': /* The date, using the locale's format. */
|
|
||||||
// LEGAL_ALT(ALT_E);
|
|
||||||
// if (!(bp = taosStrpTime(bp, "%m/%d/%y", tm)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// /*
|
|
||||||
// * "Elementary" conversion rules.
|
|
||||||
// */
|
|
||||||
// case 'A': /* The day of week, using the locale's form. */
|
|
||||||
// case 'a':
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// for (i = 0; i < 7; i++) {
|
|
||||||
// /* Full name. */
|
|
||||||
// len = strlen(day[i]);
|
|
||||||
// if (strncmp(day[i], bp, len) == 0)
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// /* Abbreviated name. */
|
|
||||||
// len = strlen(abday[i]);
|
|
||||||
// if (strncmp(abday[i], bp, len) == 0)
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* Nothing matched. */
|
|
||||||
// if (i == 7)
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// tm->tm_wday = i;
|
|
||||||
// bp += len;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'B': /* The month, using the locale's form. */
|
|
||||||
// case 'b':
|
|
||||||
// case 'h':
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// for (i = 0; i < 12; i++) {
|
|
||||||
// /* Full name. */
|
|
||||||
// len = strlen(mon[i]);
|
|
||||||
// if (strncmp(mon[i], bp, len) == 0)
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// /* Abbreviated name. */
|
|
||||||
// len = strlen(abmon[i]);
|
|
||||||
// if (strncmp(abmon[i], bp, len) == 0)
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* Nothing matched. */
|
|
||||||
// if (i == 12)
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// tm->tm_mon = i;
|
|
||||||
// bp += len;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'C': /* The century number. */
|
|
||||||
// LEGAL_ALT(ALT_E);
|
|
||||||
// if (!(conv_num(&bp, &i, 0, 99)))
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// if (split_year) {
|
|
||||||
// tm->tm_year = (tm->tm_year % 100) + (i * 100);
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// tm->tm_year = i * 100;
|
|
||||||
// split_year = 1;
|
|
||||||
// }
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'd': /* The day of month. */
|
|
||||||
// case 'e':
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_mday, 1, 31)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'k': /* The hour (24-hour clock representation). */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// /* FALLTHROUGH */
|
|
||||||
// case 'H':
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_hour, 0, 23)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'l': /* The hour (12-hour clock representation). */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// /* FALLTHROUGH */
|
|
||||||
// case 'I':
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_hour, 1, 12)))
|
|
||||||
// return (0);
|
|
||||||
// if (tm->tm_hour == 12)
|
|
||||||
// tm->tm_hour = 0;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'j': /* The day of year. */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// if (!(conv_num(&bp, &i, 1, 366)))
|
|
||||||
// return (0);
|
|
||||||
// tm->tm_yday = i - 1;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'M': /* The minute. */
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_min, 0, 59)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'm': /* The month. */
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &i, 1, 12)))
|
|
||||||
// return (0);
|
|
||||||
// tm->tm_mon = i - 1;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'p': /* The locale's equivalent of AM/PM. */
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// /* AM? */
|
|
||||||
// if (strcmp(am_pm[0], bp) == 0) {
|
|
||||||
// if (tm->tm_hour > 11)
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// bp += strlen(am_pm[0]);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// /* PM? */
|
|
||||||
// else if (strcmp(am_pm[1], bp) == 0) {
|
|
||||||
// if (tm->tm_hour > 11)
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// tm->tm_hour += 12;
|
|
||||||
// bp += strlen(am_pm[1]);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* Nothing matched. */
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// case 'S': /* The seconds. */
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_sec, 0, 61)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'U': /* The week of year, beginning on sunday. */
|
|
||||||
// case 'W': /* The week of year, beginning on monday. */
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// /*
|
|
||||||
// * XXX This is bogus, as we can not assume any valid
|
|
||||||
// * information present in the tm structure at this
|
|
||||||
// * point to calculate a real value, so just check the
|
|
||||||
// * range for now.
|
|
||||||
// */
|
|
||||||
// if (!(conv_num(&bp, &i, 0, 53)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'w': /* The day of week, beginning on sunday. */
|
|
||||||
// LEGAL_ALT(ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &tm->tm_wday, 0, 6)))
|
|
||||||
// return (0);
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'Y': /* The year. */
|
|
||||||
// LEGAL_ALT(ALT_E);
|
|
||||||
// if (!(conv_num(&bp, &i, 0, 9999)))
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// tm->tm_year = i - TM_YEAR_BASE;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// case 'y': /* The year within 100 years of the epoch. */
|
|
||||||
// LEGAL_ALT(ALT_E | ALT_O);
|
|
||||||
// if (!(conv_num(&bp, &i, 0, 99)))
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
// if (split_year) {
|
|
||||||
// tm->tm_year = ((tm->tm_year / 100) * 100) + i;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// split_year = 1;
|
|
||||||
// if (i <= 68)
|
|
||||||
// tm->tm_year = i + 2000 - TM_YEAR_BASE;
|
|
||||||
// else
|
|
||||||
// tm->tm_year = i + 1900 - TM_YEAR_BASE;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// /*
|
|
||||||
// * Miscellaneous conversions.
|
|
||||||
// */
|
|
||||||
// case 'n': /* Any kind of white-space. */
|
|
||||||
// case 't':
|
|
||||||
// LEGAL_ALT(0);
|
|
||||||
// while (isspace(*bp))
|
|
||||||
// bp++;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
|
|
||||||
// default: /* Unknown/unsupported conversion. */
|
|
||||||
// return (0);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* LINTED functional specification */
|
|
||||||
// return ((char *)bp);
|
|
||||||
// #elif defined(_TD_DARWIN_64)
|
|
||||||
// return strptime(buf, fmt, tm);
|
|
||||||
// #else
|
|
||||||
// return strptime(buf, fmt, tm);
|
|
||||||
// #endif
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "ttrace.h"
|
|
||||||
#include "taos.h"
|
|
||||||
#include "thash.h"
|
|
||||||
#include "tuuid.h"
|
|
||||||
|
|
||||||
// clang-format off
|
|
||||||
//static TdThreadOnce init = PTHREAD_ONCE_INIT;
|
|
||||||
//static void * ids = NULL;
|
|
||||||
//static TdThreadMutex mtx;
|
|
||||||
//
|
|
||||||
//void traceInit() {
|
|
||||||
// ids = taosHashInit(4096, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_ENTRY_LOCK);
|
|
||||||
// taosThreadMutexInit(&mtx, NULL);
|
|
||||||
//}
|
|
||||||
//void traceCreateEnv() {
|
|
||||||
// taosThreadOnce(&init, traceInit);
|
|
||||||
//}
|
|
||||||
//void traceDestroyEnv() {
|
|
||||||
// taosThreadMutexDestroy(&mtx);
|
|
||||||
// taosHashCleanup(ids);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//STraceId traceInitId(STraceSubId *h, STraceSubId *l) {
|
|
||||||
// STraceId id = *h;
|
|
||||||
// id = ((id << 32) & 0xFFFFFFFF) | ((*l) & 0xFFFFFFFF);
|
|
||||||
// return id;
|
|
||||||
//}
|
|
||||||
//void traceId2Str(STraceId *id, char *buf) {
|
|
||||||
// int32_t f = (*id >> 32) & 0xFFFFFFFF;
|
|
||||||
// int32_t s = (*id) & 0xFFFFFFFF;
|
|
||||||
// sprintf(buf, "%d:%d", f, s);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//void traceSetSubId(STraceId *id, STraceSubId *subId) {
|
|
||||||
// int32_t parent = ((*id >> 32) & 0xFFFFFFFF);
|
|
||||||
// taosThreadMutexLock(&mtx);
|
|
||||||
// taosHashPut(ids, subId, sizeof(*subId), &parent, sizeof(parent));
|
|
||||||
// taosThreadMutexUnlock(&mtx);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//STraceSubId traceGetParentId(STraceId *id) {
|
|
||||||
// int32_t parent = ((*id >> 32) & 0xFFFFFFFF);
|
|
||||||
// taosThreadMutexLock(&mtx);
|
|
||||||
// STraceSubId *p = taosHashGet(ids, (void *)&parent, sizeof(parent));
|
|
||||||
// parent = *p;
|
|
||||||
// taosThreadMutexUnlock(&mtx);
|
|
||||||
//
|
|
||||||
// return parent;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//STraceSubId traceGenSubId() {
|
|
||||||
// return tGenIdPI32();
|
|
||||||
//}
|
|
||||||
//void traceSetRootId(STraceId *traceid, int64_t rootId) {
|
|
||||||
// traceId->rootId = rootId;
|
|
||||||
//}
|
|
||||||
//int64_t traceGetRootId(STraceId *traceId);
|
|
||||||
//
|
|
||||||
//void traceSetMsgId(STraceId *traceid, int64_t msgId);
|
|
||||||
//int64_t traceGetMsgId(STraceId *traceid);
|
|
||||||
//
|
|
||||||
//char *trace2Str(STraceId *id);
|
|
||||||
//
|
|
||||||
//void traceSetSubId(STraceId *id, int32_t *subId);
|
|
||||||
// clang-format on
|
|
Loading…
Reference in New Issue