[TD-1827]<enhance>: force version check for client messages
This commit is contained in:
parent
6895dae5fb
commit
9e5f835ac7
|
@ -214,7 +214,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
|||
STscObj* pObj = pSql->pTscObj;
|
||||
SSqlCmd* pCmd = &pSql->cmd;
|
||||
|
||||
char *pMsg = rpcMallocCont(pCmd->payloadLen);
|
||||
char *pMsg = rpcMallocCont(sizeof(SMsgVersion) + pCmd->payloadLen);
|
||||
if (NULL == pMsg) {
|
||||
tscError("%p msg:%s malloc failed", pSql, taosMsg[pSql->cmd.msgType]);
|
||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
|
@ -225,7 +225,8 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
|||
tscDumpMgmtEpSet(pSql);
|
||||
}
|
||||
|
||||
memcpy(pMsg, pSql->cmd.payload, pSql->cmd.payloadLen);
|
||||
tstrncpy(pMsg, version, sizeof(SMsgVersion));
|
||||
memcpy(pMsg + sizeof(SMsgVersion), pSql->cmd.payload, pSql->cmd.payloadLen);
|
||||
|
||||
SRpcMsg rpcMsg = {
|
||||
.msgType = pSql->cmd.msgType,
|
||||
|
|
|
@ -124,8 +124,6 @@ void dnodeDispatchToMReadQueue(SRpcMsg *pMsg) {
|
|||
SMnodeMsg *pRead = mnodeCreateMsg(pMsg);
|
||||
taosWriteQitem(tsMReadQueue, TAOS_QTYPE_RPC, pRead);
|
||||
}
|
||||
|
||||
rpcFreeCont(pMsg->pCont);
|
||||
}
|
||||
|
||||
static void dnodeFreeMReadMsg(SMnodeMsg *pRead) {
|
||||
|
|
|
@ -125,8 +125,6 @@ void dnodeDispatchToMWriteQueue(SRpcMsg *pMsg) {
|
|||
taosMsg[pWrite->rpcMsg.msgType], tsMWriteQueue);
|
||||
taosWriteQitem(tsMWriteQueue, TAOS_QTYPE_RPC, pWrite);
|
||||
}
|
||||
|
||||
rpcFreeCont(pMsg->pCont);
|
||||
}
|
||||
|
||||
static void dnodeFreeMWriteMsg(SMnodeMsg *pWrite) {
|
||||
|
|
|
@ -127,7 +127,18 @@ static void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
|||
} else {}
|
||||
|
||||
if ( dnodeProcessShellMsgFp[pMsg->msgType] ) {
|
||||
SMsgVersion *pMsgVersion = pMsg->pCont;
|
||||
if (taosCheckVersion(pMsgVersion->clientVersion, version, 3) != TSDB_CODE_SUCCESS) {
|
||||
rpcMsg.code = TSDB_CODE_TSC_INVALID_VERSION;
|
||||
rpcSendResponse(&rpcMsg);
|
||||
rpcFreeCont(pMsg->pCont);
|
||||
return; // todo change the error code
|
||||
}
|
||||
pMsg->pCont += sizeof(*pMsgVersion);
|
||||
|
||||
(*dnodeProcessShellMsgFp[pMsg->msgType])(pMsg);
|
||||
|
||||
rpcFreeCont(pMsg->pCont - sizeof(*pMsgVersion));
|
||||
} else {
|
||||
dError("RPC %p, shell msg:%s is not processed", pMsg->handle, taosMsg[pMsg->msgType]);
|
||||
rpcMsg.code = TSDB_CODE_DND_MSG_NOT_PROCESSED;
|
||||
|
|
|
@ -77,8 +77,6 @@ void dnodeDispatchToVReadQueue(SRpcMsg *pMsg) {
|
|||
SRpcMsg rpcRsp = {.handle = pMsg->handle, .code = TSDB_CODE_VND_INVALID_VGROUP_ID};
|
||||
rpcSendResponse(&rpcRsp);
|
||||
}
|
||||
|
||||
rpcFreeCont(pMsg->pCont);
|
||||
}
|
||||
|
||||
void *dnodeAllocVQueryQueue(void *pVnode) {
|
||||
|
|
|
@ -102,7 +102,6 @@ void dnodeDispatchToVWriteQueue(SRpcMsg *pRpcMsg) {
|
|||
}
|
||||
|
||||
vnodeRelease(pVnode);
|
||||
rpcFreeCont(pRpcMsg->pCont);
|
||||
}
|
||||
|
||||
void *dnodeAllocVWriteQueue(void *pVnode) {
|
||||
|
|
|
@ -198,6 +198,10 @@ typedef struct {
|
|||
int32_t numOfVnodes;
|
||||
} SMsgDesc;
|
||||
|
||||
typedef struct SMsgVersion {
|
||||
char clientVersion[TSDB_VERSION_LEN];
|
||||
} SMsgVersion;
|
||||
|
||||
typedef struct SMsgHead {
|
||||
int32_t contLen;
|
||||
int32_t vgId;
|
||||
|
|
Loading…
Reference in New Issue