diff --git a/include/common/tgrant.h b/include/common/tgrant.h index 38978aebce21c2516893ab8df8b7092b68e1ab8a..80b0ee2147acc761d2e614fced297c8433a0d073 100644 --- a/include/common/tgrant.h +++ b/include/common/tgrant.h @@ -26,7 +26,9 @@ extern "C" { #include "tgrantCfg.h" #endif +#ifndef GRANTS_COL_MAX_LEN #define GRANTS_COL_MAX_LEN 128 +#endif typedef enum { TSDB_GRANT_ALL, diff --git a/include/common/tmsg.h b/include/common/tmsg.h index f377ad0d63e140a8e5e4e7c46130b473d8bd684e..82f43a6179a03ff9dedd02b3876221efec368354 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1232,6 +1232,13 @@ typedef struct { SEp ep; } SDnodeEp; +typedef struct { + int32_t id; + SEp ep; + char active[TSDB_ACTIVE_KEY_LEN]; + char connActive[TSDB_CONN_ACTIVE_KEY_LEN]; +} SDnodeInfo; + typedef struct { int64_t dnodeVer; SDnodeCfg dnodeCfg; diff --git a/include/util/tdef.h b/include/util/tdef.h index ead649a51c4b4c2cc688ba5bc8dc234aa25b50ce..1e00dfa76d14dbb6fe6c6c2bf6cf1dedff69ddd9 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -267,6 +267,9 @@ typedef enum ELogicConditionType { #define TSDB_DNODE_CONFIG_LEN 128 #define TSDB_DNODE_VALUE_LEN 256 +#define TSDB_ACTIVE_KEY_LEN 109 +#define TSDB_CONN_ACTIVE_KEY_LEN 109 + #define TSDB_DEFAULT_PKT_SIZE 65480 // same as RPC_MAX_UDP_SIZE #define TSDB_PAYLOAD_SIZE TSDB_DEFAULT_PKT_SIZE diff --git a/source/common/src/systable.c b/source/common/src/systable.c index cd3dd63ef04b56ca1ea933bbb8c3053da8917f4f..831cb14501cec254c9c38d7a55b068d0134ee999 100644 --- a/source/common/src/systable.c +++ b/source/common/src/systable.c @@ -35,6 +35,8 @@ static const SSysDbTableSchema dnodesSchema[] = { {.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true}, {.name = "reboot_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true}, {.name = "note", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, + {.name = "active_code", .bytes = 108 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, + {.name = "c_active_code", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, }; static const SSysDbTableSchema mnodesSchema[] = { diff --git a/source/dnode/mnode/impl/inc/mndDef.h b/source/dnode/mnode/impl/inc/mndDef.h index fbdfc4b3604d742756738d4e81552c48d9e2cb6b..8d1a811f142976cfb375a78518dfc6d8430c9d68 100644 --- a/source/dnode/mnode/impl/inc/mndDef.h +++ b/source/dnode/mnode/impl/inc/mndDef.h @@ -206,6 +206,8 @@ typedef struct { uint16_t port; char fqdn[TSDB_FQDN_LEN]; char ep[TSDB_EP_LEN]; + char active[TSDB_ACTIVE_KEY_LEN]; + char connActive[TSDB_CONN_ACTIVE_KEY_LEN]; } SDnodeObj; typedef struct { diff --git a/source/dnode/mnode/impl/inc/mndDnode.h b/source/dnode/mnode/impl/inc/mndDnode.h index ebbabdfa33021b3e4ee5776d7de12d9e88f93655..83c2277612cbf25ac3d1f388be097adf094373eb 100644 --- a/source/dnode/mnode/impl/inc/mndDnode.h +++ b/source/dnode/mnode/impl/inc/mndDnode.h @@ -29,7 +29,7 @@ void mndReleaseDnode(SMnode *pMnode, SDnodeObj *pDnode); SEpSet mndGetDnodeEpset(SDnodeObj *pDnode); int32_t mndGetDnodeSize(SMnode *pMnode); bool mndIsDnodeOnline(SDnodeObj *pDnode, int64_t curMs); -void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeEps); +void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 1f58ae97a3c7034eda9ef8385e1e057cf0c510d2..748eeb5a0670e6084c074de0226cb607931c7fc1 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -27,7 +27,7 @@ #include "tmisce.h" #include "mndCluster.h" -#define TSDB_DNODE_VER_NUMBER 1 +#define TSDB_DNODE_VER_NUMBER 2 #define TSDB_DNODE_RESERVE_SIZE 64 static const char *offlineReason[] = { @@ -138,6 +138,10 @@ static SSdbRaw *mndDnodeActionEncode(SDnodeObj *pDnode) { SDB_SET_INT64(pRaw, dataPos, pDnode->updateTime, _OVER) SDB_SET_INT16(pRaw, dataPos, pDnode->port, _OVER) SDB_SET_BINARY(pRaw, dataPos, pDnode->fqdn, TSDB_FQDN_LEN, _OVER) + + SDB_SET_BINARY(pRaw, dataPos, pDnode->active, TSDB_ACTIVE_KEY_LEN, _OVER) + SDB_SET_BINARY(pRaw, dataPos, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN, _OVER) + SDB_SET_RESERVE(pRaw, dataPos, TSDB_DNODE_RESERVE_SIZE, _OVER) SDB_SET_DATALEN(pRaw, dataPos, _OVER); @@ -161,7 +165,7 @@ static SSdbRow *mndDnodeActionDecode(SSdbRaw *pRaw) { int8_t sver = 0; if (sdbGetRawSoftVer(pRaw, &sver) != 0) goto _OVER; - if (sver != TSDB_DNODE_VER_NUMBER) { + if (sver < 1 || sver > TSDB_DNODE_VER_NUMBER) { terrno = TSDB_CODE_SDB_INVALID_DATA_VER; goto _OVER; } @@ -178,6 +182,10 @@ static SSdbRow *mndDnodeActionDecode(SSdbRaw *pRaw) { SDB_GET_INT64(pRaw, dataPos, &pDnode->updateTime, _OVER) SDB_GET_INT16(pRaw, dataPos, &pDnode->port, _OVER) SDB_GET_BINARY(pRaw, dataPos, pDnode->fqdn, TSDB_FQDN_LEN, _OVER) + if(sver > 1) { + SDB_GET_BINARY(pRaw, dataPos, pDnode->active, TSDB_ACTIVE_KEY_LEN, _OVER) + SDB_GET_BINARY(pRaw, dataPos, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN, _OVER) + } SDB_GET_RESERVE(pRaw, dataPos, TSDB_DNODE_RESERVE_SIZE, _OVER) terrno = 0; @@ -305,7 +313,7 @@ bool mndIsDnodeOnline(SDnodeObj *pDnode, int64_t curMs) { return true; } -void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeEps) { +static void mndGetDnodeEps(SMnode *pMnode, SArray *pDnodeEps) { SSdb *pSdb = pMnode->pSdb; int32_t numOfEps = 0; @@ -330,6 +338,29 @@ void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeEps) { } } +void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) { + SSdb *pSdb = pMnode->pSdb; + + int32_t numOfEps = 0; + void *pIter = NULL; + while (1) { + SDnodeObj *pDnode = NULL; + ESdbStatus objStatus = 0; + pIter = sdbFetchAll(pSdb, SDB_DNODE, pIter, (void **)&pDnode, &objStatus, true); + if (pIter == NULL) break; + + SDnodeInfo dInfo; + dInfo.id = pDnode->id; + dInfo.ep.port = pDnode->port; + tstrncpy(dInfo.ep.fqdn, pDnode->fqdn, TSDB_FQDN_LEN); + tstrncpy(dInfo.active, pDnode->active, TSDB_ACTIVE_KEY_LEN); + tstrncpy(dInfo.connActive, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN); + sdbRelease(pSdb, pDnode); + + taosArrayPush(pDnodeInfo, &dInfo); + } +} + static int32_t mndCheckClusterCfgPara(SMnode *pMnode, SDnodeObj *pDnode, const SClusterCfg *pCfg) { if (pCfg->statusInterval != tsStatusInterval) { mError("dnode:%d, statusInterval:%d inconsistent with cluster:%d", pDnode->id, pCfg->statusInterval, @@ -536,7 +567,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { goto _OVER; } - mndGetDnodeData(pMnode, statusRsp.pDnodeEps); + mndGetDnodeEps(pMnode, statusRsp.pDnodeEps); int32_t contLen = tSerializeSStatusRsp(NULL, 0, &statusRsp); void *pHead = rpcMallocCont(contLen); @@ -1077,7 +1108,7 @@ static int32_t mndRetrieveDnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB status = "offline"; } - char b1[16] = {0}; + char b1[TSDB_CONN_ACTIVE_KEY_LEN + 2] = {0}; STR_TO_VARSTR(b1, status); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, b1, false); @@ -1095,6 +1126,14 @@ static int32_t mndRetrieveDnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB colDataSetVal(pColInfo, numOfRows, b, false); taosMemoryFreeClear(b); + STR_TO_VARSTR(b1, pDnode->active); + pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); + colDataSetVal(pColInfo, numOfRows, b1, false); + + STR_TO_VARSTR(b1, pDnode->connActive); + pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); + colDataSetVal(pColInfo, numOfRows, b1, false); + numOfRows++; sdbRelease(pSdb, pDnode); }