enhance: add hb whitelist version and notify taosadapter
This commit is contained in:
parent
4d16cfac05
commit
64caae83fd
|
@ -125,6 +125,7 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TAOS_NOTIFY_PASSVER = 0,
|
TAOS_NOTIFY_PASSVER = 0,
|
||||||
|
TAOS_NOTIFY_WHITELIST_VER = 1
|
||||||
} TAOS_NOTIFY_TYPE;
|
} TAOS_NOTIFY_TYPE;
|
||||||
|
|
||||||
#define RET_MSG_LENGTH 1024
|
#define RET_MSG_LENGTH 1024
|
||||||
|
|
|
@ -849,6 +849,7 @@ typedef struct {
|
||||||
int32_t authVer;
|
int32_t authVer;
|
||||||
char sVer[TSDB_VERSION_LEN];
|
char sVer[TSDB_VERSION_LEN];
|
||||||
char sDetailVer[128];
|
char sDetailVer[128];
|
||||||
|
int64_t whiteListVer;
|
||||||
} SConnectRsp;
|
} SConnectRsp;
|
||||||
|
|
||||||
int32_t tSerializeSConnectRsp(void* buf, int32_t bufLen, SConnectRsp* pRsp);
|
int32_t tSerializeSConnectRsp(void* buf, int32_t bufLen, SConnectRsp* pRsp);
|
||||||
|
@ -965,6 +966,7 @@ typedef struct {
|
||||||
SHashObj* readTbs;
|
SHashObj* readTbs;
|
||||||
SHashObj* writeTbs;
|
SHashObj* writeTbs;
|
||||||
SHashObj* useDbs;
|
SHashObj* useDbs;
|
||||||
|
int64_t whiteListVer;
|
||||||
} SGetUserAuthRsp;
|
} SGetUserAuthRsp;
|
||||||
|
|
||||||
int32_t tSerializeSGetUserAuthRsp(void* buf, int32_t bufLen, SGetUserAuthRsp* pRsp);
|
int32_t tSerializeSGetUserAuthRsp(void* buf, int32_t bufLen, SGetUserAuthRsp* pRsp);
|
||||||
|
|
|
@ -135,6 +135,12 @@ typedef struct {
|
||||||
__taos_notify_fn_t fp;
|
__taos_notify_fn_t fp;
|
||||||
} SPassInfo;
|
} SPassInfo;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t ver;
|
||||||
|
void* param;
|
||||||
|
__taos_notify_fn_t fp;
|
||||||
|
} SWhiteListInfo;
|
||||||
|
|
||||||
typedef struct STscObj {
|
typedef struct STscObj {
|
||||||
char user[TSDB_USER_LEN];
|
char user[TSDB_USER_LEN];
|
||||||
char pass[TSDB_PASSWORD_LEN];
|
char pass[TSDB_PASSWORD_LEN];
|
||||||
|
@ -152,6 +158,7 @@ typedef struct STscObj {
|
||||||
SAppInstInfo* pAppInfo;
|
SAppInstInfo* pAppInfo;
|
||||||
SHashObj* pRequests;
|
SHashObj* pRequests;
|
||||||
SPassInfo passInfo;
|
SPassInfo passInfo;
|
||||||
|
SWhiteListInfo whiteListInfo;
|
||||||
} STscObj;
|
} STscObj;
|
||||||
|
|
||||||
typedef struct STscDbg {
|
typedef struct STscDbg {
|
||||||
|
|
|
@ -116,6 +116,19 @@ static int32_t hbUpdateUserAuthInfo(SAppHbMgr *pAppHbMgr, SUserAuthBatchRsp *bat
|
||||||
atomic_load_32(&passInfo->ver), pTscObj->id);
|
atomic_load_32(&passInfo->ver), pTscObj->id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pTscObj->whiteListInfo.fp) {
|
||||||
|
SWhiteListInfo *whiteListInfo = &pTscObj->whiteListInfo;
|
||||||
|
int64_t oldVer = atomic_load_64(&whiteListInfo->ver);
|
||||||
|
if (oldVer < pRsp->whiteListVer) {
|
||||||
|
atomic_store_64(&whiteListInfo->ver, pRsp->whiteListVer);
|
||||||
|
if (whiteListInfo->fp) {
|
||||||
|
(*whiteListInfo->fp)(whiteListInfo->param, &pRsp->whiteListVer, TAOS_NOTIFY_WHITELIST_VER);
|
||||||
|
}
|
||||||
|
tscDebug("update whitelist version of user %s from %"PRId64" to %"PRId64", tscRid:%" PRIi64, pRsp->user, oldVer,
|
||||||
|
atomic_load_64(&whiteListInfo->ver), pTscObj->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
releaseTscObj(pReq->connKey.tscRid);
|
releaseTscObj(pReq->connKey.tscRid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,6 +139,7 @@ int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
pTscObj->connType = connectRsp.connType;
|
pTscObj->connType = connectRsp.connType;
|
||||||
pTscObj->passInfo.ver = connectRsp.passVer;
|
pTscObj->passInfo.ver = connectRsp.passVer;
|
||||||
pTscObj->authVer = connectRsp.authVer;
|
pTscObj->authVer = connectRsp.authVer;
|
||||||
|
pTscObj->whiteListInfo.ver = connectRsp.whiteListVer;
|
||||||
|
|
||||||
hbRegisterConn(pTscObj->pAppInfo->pAppHbMgr, pTscObj->id, connectRsp.clusterId, connectRsp.connType);
|
hbRegisterConn(pTscObj->pAppInfo->pAppHbMgr, pTscObj->id, connectRsp.clusterId, connectRsp.connType);
|
||||||
|
|
||||||
|
|
|
@ -1730,7 +1730,7 @@ int32_t tSerializeSGetUserAuthRspImpl(SEncoder *pEncoder, SGetUserAuthRsp *pRsp)
|
||||||
|
|
||||||
// since 3.0.7.0
|
// since 3.0.7.0
|
||||||
if (tEncodeI32(pEncoder, pRsp->passVer) < 0) return -1;
|
if (tEncodeI32(pEncoder, pRsp->passVer) < 0) return -1;
|
||||||
|
if (tEncodeI64(pEncoder, pRsp->whiteListVer) < 0) return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1862,6 +1862,11 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs
|
||||||
} else {
|
} else {
|
||||||
pRsp->passVer = 0;
|
pRsp->passVer = 0;
|
||||||
}
|
}
|
||||||
|
if (!tDecodeIsEnd(pDecoder)) {
|
||||||
|
if (tDecodeI64(pDecoder, &pRsp->whiteListVer) < 0) goto _err;
|
||||||
|
} else {
|
||||||
|
pRsp->whiteListVer = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
_err:
|
_err:
|
||||||
|
@ -4366,6 +4371,7 @@ int32_t tSerializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
|
||||||
if (tEncodeCStr(&encoder, pRsp->sDetailVer) < 0) return -1;
|
if (tEncodeCStr(&encoder, pRsp->sDetailVer) < 0) return -1;
|
||||||
if (tEncodeI32(&encoder, pRsp->passVer) < 0) return -1;
|
if (tEncodeI32(&encoder, pRsp->passVer) < 0) return -1;
|
||||||
if (tEncodeI32(&encoder, pRsp->authVer) < 0) return -1;
|
if (tEncodeI32(&encoder, pRsp->authVer) < 0) return -1;
|
||||||
|
if (tEncodeI64(&encoder, pRsp->whiteListVer) < 0) return -1;
|
||||||
tEndEncode(&encoder);
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
int32_t tlen = encoder.pos;
|
int32_t tlen = encoder.pos;
|
||||||
|
@ -4402,6 +4408,11 @@ int32_t tDeserializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
|
||||||
pRsp->authVer = 0;
|
pRsp->authVer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tDecodeIsEnd(&decoder)) {
|
||||||
|
if (tDecodeI64(&decoder, &pRsp->whiteListVer) < 0) return -1;
|
||||||
|
} else {
|
||||||
|
pRsp->whiteListVer = 0;
|
||||||
|
}
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
|
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
|
|
|
@ -40,6 +40,8 @@ int32_t mndSetUserAuthRsp(SMnode *pMnode, SUserObj *pUser, SGetUserAuthRsp *pRsp
|
||||||
pRsp->sysInfo = pUser->sysInfo;
|
pRsp->sysInfo = pUser->sysInfo;
|
||||||
pRsp->version = pUser->authVersion;
|
pRsp->version = pUser->authVersion;
|
||||||
pRsp->passVer = pUser->passVersion;
|
pRsp->passVer = pUser->passVersion;
|
||||||
|
pRsp->whiteListVer = mndGetIpWhiteVer(pMnode);
|
||||||
|
//TODO: mndSetUserAuthRsp in enterprise version
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -290,6 +290,7 @@ _CONNECT:
|
||||||
connectRsp.svrTimestamp = taosGetTimestampSec();
|
connectRsp.svrTimestamp = taosGetTimestampSec();
|
||||||
connectRsp.passVer = pUser->passVersion;
|
connectRsp.passVer = pUser->passVersion;
|
||||||
connectRsp.authVer = pUser->authVersion;
|
connectRsp.authVer = pUser->authVersion;
|
||||||
|
connectRsp.whiteListVer = mndGetIpWhiteVer(pMnode);
|
||||||
|
|
||||||
strcpy(connectRsp.sVer, version);
|
strcpy(connectRsp.sVer, version);
|
||||||
snprintf(connectRsp.sDetailVer, sizeof(connectRsp.sDetailVer), "ver:%s\nbuild:%s\ngitinfo:%s", version, buildinfo,
|
snprintf(connectRsp.sDetailVer, sizeof(connectRsp.sDetailVer), "ver:%s\nbuild:%s\ngitinfo:%s", version, buildinfo,
|
||||||
|
|
Loading…
Reference in New Issue