Merge pull request #4715 from taosdata/feature/TD-2502-v3
[TD-2502]<feature>: [v3] force version checking with rpc request messages
This commit is contained in:
commit
163e3123ad
|
@ -164,7 +164,7 @@ extern float tsMinimalLogDirGB;
|
||||||
extern float tsReservedTmpDirectorySpace;
|
extern float tsReservedTmpDirectorySpace;
|
||||||
extern float tsMinimalDataDirGB;
|
extern float tsMinimalDataDirGB;
|
||||||
extern int32_t tsTotalMemoryMB;
|
extern int32_t tsTotalMemoryMB;
|
||||||
extern int32_t tsVersion;
|
extern uint32_t tsVersion;
|
||||||
|
|
||||||
// build info
|
// build info
|
||||||
extern char version[];
|
extern char version[];
|
||||||
|
|
|
@ -204,7 +204,7 @@ float tsAvailDataDirGB = 0;
|
||||||
float tsReservedTmpDirectorySpace = 1.0f;
|
float tsReservedTmpDirectorySpace = 1.0f;
|
||||||
float tsMinimalDataDirGB = 1.0f;
|
float tsMinimalDataDirGB = 1.0f;
|
||||||
int32_t tsTotalMemoryMB = 0;
|
int32_t tsTotalMemoryMB = 0;
|
||||||
int32_t tsVersion = 0;
|
uint32_t tsVersion = 0;
|
||||||
|
|
||||||
// log
|
// log
|
||||||
int32_t tsNumOfLogLines = 10000000;
|
int32_t tsNumOfLogLines = 10000000;
|
||||||
|
@ -1478,15 +1478,20 @@ int32_t taosCheckGlobalCfg() {
|
||||||
|
|
||||||
// todo refactor
|
// todo refactor
|
||||||
tsVersion = 0;
|
tsVersion = 0;
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int ver = 0, i = 0; i < TSDB_VERSION_LEN; ++i) {
|
||||||
if (version[i] >= '0' && version[i] <= '9') {
|
if (version[i] >= '0' && version[i] <= '9') {
|
||||||
tsVersion = tsVersion * 10 + (version[i] - '0');
|
ver = ver * 10 + (version[i] - '0');
|
||||||
|
} else if (version[i] == '.') {
|
||||||
|
tsVersion |= ver & 0xFF;
|
||||||
|
tsVersion <<= 8;
|
||||||
|
|
||||||
|
ver = 0;
|
||||||
} else if (version[i] == 0) {
|
} else if (version[i] == 0) {
|
||||||
|
tsVersion |= ver & 0xFF;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tsVersion = 10 * tsVersion;
|
|
||||||
|
|
||||||
tsDnodeShellPort = tsServerPort + TSDB_PORT_DNODESHELL; // udp[6035-6039] tcp[6035]
|
tsDnodeShellPort = tsServerPort + TSDB_PORT_DNODESHELL; // udp[6035-6039] tcp[6035]
|
||||||
tsDnodeDnodePort = tsServerPort + TSDB_PORT_DNODEDNODE; // udp/tcp
|
tsDnodeDnodePort = tsServerPort + TSDB_PORT_DNODEDNODE; // udp/tcp
|
||||||
|
|
|
@ -67,6 +67,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_RPC_INVALID_RESPONSE_TYPE, 0, 0x0012, "Invalid re
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_RPC_INVALID_TIME_STAMP, 0, 0x0013, "Client and server's time is not synchronized")
|
TAOS_DEFINE_ERROR(TSDB_CODE_RPC_INVALID_TIME_STAMP, 0, 0x0013, "Client and server's time is not synchronized")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_APP_NOT_READY, 0, 0x0014, "Database not ready")
|
TAOS_DEFINE_ERROR(TSDB_CODE_APP_NOT_READY, 0, 0x0014, "Database not ready")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_RPC_FQDN_ERROR, 0, 0x0015, "Unable to resolve FQDN")
|
TAOS_DEFINE_ERROR(TSDB_CODE_RPC_FQDN_ERROR, 0, 0x0015, "Unable to resolve FQDN")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_RPC_INVALID_VERSION, 0, 0x0016, "Invalid app version")
|
||||||
|
|
||||||
//common & util
|
//common & util
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_COM_OPS_NOT_SUPPORT, 0, 0x0100, "Operation not supported")
|
TAOS_DEFINE_ERROR(TSDB_CODE_COM_OPS_NOT_SUPPORT, 0, 0x0100, "Operation not supported")
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RPC_CONN_UDPS 0
|
|
||||||
#define RPC_CONN_UDPC 1
|
|
||||||
#define RPC_CONN_TCPS 2
|
|
||||||
#define RPC_CONN_TCPC 3
|
|
||||||
#define RPC_CONN_TCP 2
|
#define RPC_CONN_TCP 2
|
||||||
|
|
||||||
extern int tsRpcOverhead;
|
extern int tsRpcOverhead;
|
||||||
|
@ -58,6 +54,7 @@ typedef struct {
|
||||||
char empty[1]; // reserved
|
char empty[1]; // reserved
|
||||||
uint8_t msgType; // message type
|
uint8_t msgType; // message type
|
||||||
int32_t msgLen; // message length including the header iteslf
|
int32_t msgLen; // message length including the header iteslf
|
||||||
|
uint32_t msgVer;
|
||||||
int32_t code; // code in response message
|
int32_t code; // code in response message
|
||||||
uint8_t content[0]; // message body starts from here
|
uint8_t content[0]; // message body starts from here
|
||||||
} SRpcHead;
|
} SRpcHead;
|
||||||
|
|
|
@ -142,7 +142,6 @@ static int32_t tsRpcNum = 0;
|
||||||
#define RPC_CONN_UDPC 1
|
#define RPC_CONN_UDPC 1
|
||||||
#define RPC_CONN_TCPS 2
|
#define RPC_CONN_TCPS 2
|
||||||
#define RPC_CONN_TCPC 3
|
#define RPC_CONN_TCPC 3
|
||||||
#define RPC_CONN_TCP 2
|
|
||||||
|
|
||||||
void *(*taosInitConn[])(uint32_t ip, uint16_t port, char *label, int threads, void *fp, void *shandle) = {
|
void *(*taosInitConn[])(uint32_t ip, uint16_t port, char *label, int threads, void *fp, void *shandle) = {
|
||||||
taosInitUdpConnection,
|
taosInitUdpConnection,
|
||||||
|
@ -959,6 +958,11 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv, SRpcReqCont
|
||||||
terrno = TSDB_CODE_RPC_INVALID_SESSION_ID; return NULL;
|
terrno = TSDB_CODE_RPC_INVALID_SESSION_ID; return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rpcIsReq(pHead->msgType) && htonl(pHead->msgVer) != tsVersion >> 8) {
|
||||||
|
tDebug("%s sid:%d, invalid client version:%x/%x %s", pRpc->label, sid, htonl(pHead->msgVer), tsVersion, taosMsg[pHead->msgType]);
|
||||||
|
terrno = TSDB_CODE_RPC_INVALID_VERSION; return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
pConn = rpcGetConnObj(pRpc, sid, pRecv);
|
pConn = rpcGetConnObj(pRpc, sid, pRecv);
|
||||||
if (pConn == NULL) {
|
if (pConn == NULL) {
|
||||||
tDebug("%s %p, failed to get connection obj(%s)", pRpc->label, (void *)pHead->ahandle, tstrerror(terrno));
|
tDebug("%s %p, failed to get connection obj(%s)", pRpc->label, (void *)pHead->ahandle, tstrerror(terrno));
|
||||||
|
@ -1212,6 +1216,7 @@ static void rpcSendReqHead(SRpcConn *pConn) {
|
||||||
pHead = (SRpcHead *)msg;
|
pHead = (SRpcHead *)msg;
|
||||||
pHead->version = 1;
|
pHead->version = 1;
|
||||||
pHead->msgType = pConn->outType;
|
pHead->msgType = pConn->outType;
|
||||||
|
pHead->msgVer = htonl(tsVersion >> 8);
|
||||||
pHead->spi = pConn->spi;
|
pHead->spi = pConn->spi;
|
||||||
pHead->encrypt = 0;
|
pHead->encrypt = 0;
|
||||||
pHead->tranId = pConn->outTranId;
|
pHead->tranId = pConn->outTranId;
|
||||||
|
@ -1282,6 +1287,7 @@ static void rpcSendReqToServer(SRpcInfo *pRpc, SRpcReqContext *pContext) {
|
||||||
|
|
||||||
// set the message header
|
// set the message header
|
||||||
pHead->version = 1;
|
pHead->version = 1;
|
||||||
|
pHead->msgVer = htonl(tsVersion >> 8);
|
||||||
pHead->msgType = msgType;
|
pHead->msgType = msgType;
|
||||||
pHead->encrypt = 0;
|
pHead->encrypt = 0;
|
||||||
pConn->tranId++;
|
pConn->tranId++;
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#ifndef _TS_BUILD_H_
|
|
||||||
#define _TS_BUILD_H_
|
|
||||||
|
|
||||||
extern const char tsVersion[];
|
|
||||||
extern const char tsBuildInfo[];
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue