add testing files
This commit is contained in:
parent
99849ec745
commit
6fa6a016df
|
@ -68,14 +68,16 @@ typedef struct {
|
||||||
} SRpcInfo;
|
} SRpcInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SRpcIpSet ipSet;
|
|
||||||
void *ahandle; // handle provided by app
|
|
||||||
SRpcInfo *pRpc; // associated SRpcInfo
|
SRpcInfo *pRpc; // associated SRpcInfo
|
||||||
|
SRpcIpSet ipSet; // ip list provided by app
|
||||||
|
void *ahandle; // handle provided by app
|
||||||
char msgType; // message type
|
char msgType; // message type
|
||||||
char *pCont; // content provided by app
|
uint8_t *pCont; // content provided by app
|
||||||
int contLen; // content length
|
int32_t contLen; // content length
|
||||||
int numOfRetry; // number of retry for different servers
|
|
||||||
int32_t code; // error code
|
int32_t code; // error code
|
||||||
|
int16_t numOfTry; // number of try for different servers
|
||||||
|
int8_t oldIndex; // server IP index passed by app
|
||||||
|
int8_t redirect; // flag to indicate redirect
|
||||||
char msg[0]; // RpcHeader starts from here
|
char msg[0]; // RpcHeader starts from here
|
||||||
} SRpcReqContext;
|
} SRpcReqContext;
|
||||||
|
|
||||||
|
@ -131,6 +133,11 @@ typedef struct {
|
||||||
uint8_t content[0]; // message body starts from here
|
uint8_t content[0]; // message body starts from here
|
||||||
} SRpcHeader;
|
} SRpcHeader;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int32_t reserved;
|
||||||
|
int32_t contLen;
|
||||||
|
} SRpcComp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t timeStamp;
|
uint32_t timeStamp;
|
||||||
uint8_t auth[TSDB_AUTH_LEN];
|
uint8_t auth[TSDB_AUTH_LEN];
|
||||||
|
@ -333,6 +340,7 @@ void rpcSendRequest(void *shandle, SRpcIpSet ipSet, char type, void *pCont, int
|
||||||
pContext->contLen = contLen;
|
pContext->contLen = contLen;
|
||||||
pContext->pCont = pCont;
|
pContext->pCont = pCont;
|
||||||
pContext->msgType = type;
|
pContext->msgType = type;
|
||||||
|
pContext->oldIndex = ipSet.index;
|
||||||
|
|
||||||
rpcSendReqToServer(pRpc, pContext);
|
rpcSendReqToServer(pRpc, pContext);
|
||||||
|
|
||||||
|
@ -779,11 +787,15 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHeader *pHeader) {
|
||||||
taosAddConnIntoCache(pRpc->pCache, pConn, pConn->peerIp, pConn->peerPort, pConn->meterId);
|
taosAddConnIntoCache(pRpc->pCache, pConn, pConn->peerIp, pConn->peerPort, pConn->meterId);
|
||||||
|
|
||||||
if (code == TSDB_CODE_REDIRECT) {
|
if (code == TSDB_CODE_REDIRECT) {
|
||||||
|
pContext->redirect = 1;
|
||||||
|
pContext->numOfTry = 0;
|
||||||
memcpy(&pContext->ipSet, pHeader->content, sizeof(pContext->ipSet));
|
memcpy(&pContext->ipSet, pHeader->content, sizeof(pContext->ipSet));
|
||||||
rpcSendReqToServer(pRpc, pContext);
|
rpcSendReqToServer(pRpc, pContext);
|
||||||
} else {
|
} else {
|
||||||
rpcFreeOutMsg(rpcHeaderFromCont(pContext->pCont)); // free the request msg
|
rpcFreeOutMsg(rpcHeaderFromCont(pContext->pCont)); // free the request msg
|
||||||
(*(pRpc->cfp))(pHeader->msgType, pCont, contLen, pContext->ahandle, pContext->ipSet.index);
|
if ( pContext->ipSet.index != pContext->oldIndex || pContext->redirect )
|
||||||
|
(*pRpc->ufp)(pContext->ahandle, pContext->ipSet);
|
||||||
|
(*pRpc->cfp)(pHeader->msgType, pCont, contLen, pContext->ahandle, pContext->ipSet.index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -853,6 +865,7 @@ static void rpcSendReqToServer(SRpcInfo *pRpc, SRpcReqContext *pContext) {
|
||||||
int msgLen = rpcMsgLenFromCont(pContext->contLen);
|
int msgLen = rpcMsgLenFromCont(pContext->contLen);
|
||||||
char msgType = pContext->msgType;
|
char msgType = pContext->msgType;
|
||||||
|
|
||||||
|
pContext->numOfTry++;
|
||||||
SRpcConn *pConn = rpcSetConnToServer(pRpc, pContext->ipSet);
|
SRpcConn *pConn = rpcSetConnToServer(pRpc, pContext->ipSet);
|
||||||
if (pConn == NULL) {
|
if (pConn == NULL) {
|
||||||
pContext->code = terrno;
|
pContext->code = terrno;
|
||||||
|
@ -922,7 +935,7 @@ static void rpcProcessConnError(void *param, void *id) {
|
||||||
SRpcReqContext *pContext = (SRpcReqContext *)param;
|
SRpcReqContext *pContext = (SRpcReqContext *)param;
|
||||||
SRpcInfo *pRpc = pContext->pRpc;
|
SRpcInfo *pRpc = pContext->pRpc;
|
||||||
|
|
||||||
if ( pContext->numOfRetry >= pContext->ipSet.numOfIps ) {
|
if ( pContext->numOfTry >= pContext->ipSet.numOfIps ) {
|
||||||
rpcFreeOutMsg(rpcHeaderFromCont(pContext->pCont)); // free the request msg
|
rpcFreeOutMsg(rpcHeaderFromCont(pContext->pCont)); // free the request msg
|
||||||
(*(pRpc->cfp))(pContext->msgType+1, NULL, 0, pContext->ahandle, pContext->code);
|
(*(pRpc->cfp))(pContext->msgType+1, NULL, 0, pContext->ahandle, pContext->code);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1004,11 +1017,6 @@ static void rpcFreeOutMsg(void *msg) {
|
||||||
free(req);
|
free(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int32_t reserved;
|
|
||||||
int32_t contLen;
|
|
||||||
} SRpcComp;
|
|
||||||
|
|
||||||
static int32_t rpcCompressRpcMsg(char* pCont, int32_t contLen) {
|
static int32_t rpcCompressRpcMsg(char* pCont, int32_t contLen) {
|
||||||
SRpcHeader *pHeader = rpcHeaderFromCont(pCont);
|
SRpcHeader *pHeader = rpcHeaderFromCont(pCont);
|
||||||
int32_t finalLen = 0;
|
int32_t finalLen = 0;
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
#include "trpc.h"
|
#include "trpc.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void processMsg(char type, void *pCont, int contLen, void *ahandle, int32_t code) {
|
||||||
|
dPrint("response is received, type:%d, contLen:%d code:%d, ahandle:%p", type, contLen, code, ahandle);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t main(int32_t argc, char *argv[]) {
|
int32_t main(int32_t argc, char *argv[]) {
|
||||||
dPrint("unit test for rpc module");
|
dPrint("unit test for rpc module");
|
||||||
|
|
||||||
|
@ -28,18 +32,28 @@ int32_t main(int32_t argc, char *argv[]) {
|
||||||
rpcInit.localPort = 7000;
|
rpcInit.localPort = 7000;
|
||||||
rpcInit.label = "unittest";
|
rpcInit.label = "unittest";
|
||||||
rpcInit.numOfThreads = 1;
|
rpcInit.numOfThreads = 1;
|
||||||
rpcInit.fp = NULL;
|
rpcInit.cfp = processMsg;
|
||||||
rpcInit.sessions = 1000;
|
rpcInit.sessions = 1000;
|
||||||
rpcInit.connType = TAOS_CONN_SOCKET_TYPE_S();
|
rpcInit.connType = TAOS_CONN_UDPC;
|
||||||
rpcInit.idleTime = 2000;
|
rpcInit.idleTime = 2000;
|
||||||
|
|
||||||
void *pConn = rpcOpen(&rpcInit);
|
void *pRpc = rpcOpen(&rpcInit);
|
||||||
if (pConn != NULL) {
|
if (pRpc == NULL) {
|
||||||
dPrint("conection is opened");
|
|
||||||
} else {
|
|
||||||
dError("failed to initialize rpc");
|
dError("failed to initialize rpc");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SRpcIpSet ipSet;
|
||||||
|
ipSet.numOfIps = 2;
|
||||||
|
ipSet.index = 0;
|
||||||
|
ipSet.ip[0] = inet_addr("127.0.0.1");
|
||||||
|
ipSet.ip[1] = inet_addr("192.168.0.1");
|
||||||
|
|
||||||
|
void *cont = rpcMallocCont(100);
|
||||||
|
rpcSendRequest(pRpc, ipSet, 1, cont, 100, 1);
|
||||||
|
|
||||||
|
getchar();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* 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 "tlog.h"
|
||||||
|
#include "trpc.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void processMsg(char type, void *pCont, int contLen, void *ahandle, int32_t code) {
|
||||||
|
dPrint("request is received, type:%d, contLen:%d", type, contLen);
|
||||||
|
void *rsp = rpcMallocCont(128);
|
||||||
|
rpcSendResponse(ahandle, 1, rsp, 128);
|
||||||
|
rpcFreeCont(pCont);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t main(int32_t argc, char *argv[]) {
|
||||||
|
dPrint("unit test for rpc module");
|
||||||
|
|
||||||
|
SRpcInit rpcInit;
|
||||||
|
memset(&rpcInit, 0, sizeof(rpcInit));
|
||||||
|
rpcInit.localIp = "0.0.0.0";
|
||||||
|
rpcInit.localPort = 7000;
|
||||||
|
rpcInit.label = "unittest";
|
||||||
|
rpcInit.numOfThreads = 1;
|
||||||
|
rpcInit.cfp = processMsg;
|
||||||
|
rpcInit.sessions = 1000;
|
||||||
|
rpcInit.connType = TAOS_CONN_UDPS;
|
||||||
|
rpcInit.idleTime = 2000;
|
||||||
|
|
||||||
|
void *pRpc = rpcOpen(&rpcInit);
|
||||||
|
if (pRpc == NULL) {
|
||||||
|
dError("failed to initialize rpc");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SRpcIpSet ipSet;
|
||||||
|
ipSet.numOfIps = 2;
|
||||||
|
ipSet.index = 0;
|
||||||
|
ipSet.ip[0] = inet_addr("127.0.0.1");
|
||||||
|
ipSet.ip[1] = inet_addr("192.168.0.1");
|
||||||
|
*/
|
||||||
|
|
||||||
|
dPrint("server is running...");
|
||||||
|
|
||||||
|
getchar();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue