enh: show the restore status of vnode when show vgroups
This commit is contained in:
parent
706682ea5c
commit
39e303b79b
|
@ -1074,7 +1074,8 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
int32_t vgId;
|
||||
int32_t syncState;
|
||||
int8_t syncState;
|
||||
int8_t syncRestore;
|
||||
int64_t cacheUsage;
|
||||
int64_t numOfTables;
|
||||
int64_t numOfTimeSeries;
|
||||
|
@ -1089,7 +1090,8 @@ typedef struct {
|
|||
} SVnodeLoad;
|
||||
|
||||
typedef struct {
|
||||
int32_t syncState;
|
||||
int8_t syncState;
|
||||
int8_t syncRestore;
|
||||
} SMnodeLoad;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -993,7 +993,8 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
|||
for (int32_t i = 0; i < vlen; ++i) {
|
||||
SVnodeLoad *pload = taosArrayGet(pReq->pVloads, i);
|
||||
if (tEncodeI32(&encoder, pload->vgId) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pload->syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pload->syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pload->syncRestore) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pload->cacheUsage) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pload->numOfTables) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pload->numOfTimeSeries) < 0) return -1;
|
||||
|
@ -1003,7 +1004,8 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
|||
}
|
||||
|
||||
// mnode loads
|
||||
if (tEncodeI32(&encoder, pReq->mload.syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->mload.syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->mload.syncRestore) < 0) return -1;
|
||||
|
||||
if (tEncodeI32(&encoder, pReq->qload.dnodeId) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pReq->qload.numOfProcessedQuery) < 0) return -1;
|
||||
|
@ -1063,7 +1065,8 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
|||
for (int32_t i = 0; i < vlen; ++i) {
|
||||
SVnodeLoad vload = {0};
|
||||
if (tDecodeI32(&decoder, &vload.vgId) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &vload.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &vload.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &vload.syncRestore) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &vload.cacheUsage) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &vload.numOfTables) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &vload.numOfTimeSeries) < 0) return -1;
|
||||
|
@ -1076,7 +1079,8 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
|||
}
|
||||
}
|
||||
|
||||
if (tDecodeI32(&decoder, &pReq->mload.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->mload.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->mload.syncRestore) < 0) return -1;
|
||||
|
||||
if (tDecodeI32(&decoder, &pReq->qload.dnodeId) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &pReq->qload.numOfProcessedQuery) < 0) return -1;
|
||||
|
|
|
@ -204,7 +204,8 @@ typedef struct {
|
|||
int32_t id;
|
||||
int64_t createdTime;
|
||||
int64_t updateTime;
|
||||
ESyncState state;
|
||||
ESyncState syncState;
|
||||
bool syncRestore;
|
||||
int64_t stateStartTime;
|
||||
SDnodeObj* pDnode;
|
||||
} SMnodeObj;
|
||||
|
@ -324,7 +325,8 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
int32_t dnodeId;
|
||||
ESyncState role;
|
||||
ESyncState syncState;
|
||||
bool syncRestore;
|
||||
} SVnodeGid;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -1157,7 +1157,7 @@ static void mndBuildDBVgroupInfo(SDbObj *pDb, SMnode *pMnode, SArray *pVgList) {
|
|||
pEp->port = pDnode->port;
|
||||
}
|
||||
mndReleaseDnode(pMnode, pDnode);
|
||||
if (pVgid->role == TAOS_SYNC_STATE_LEADER) {
|
||||
if (pVgid->syncState == TAOS_SYNC_STATE_LEADER) {
|
||||
vgInfo.epSet.inUse = gid;
|
||||
}
|
||||
}
|
||||
|
@ -1553,7 +1553,7 @@ bool mndIsDbReady(SMnode *pMnode, SDbObj *pDb) {
|
|||
if (pVgroup->dbUid == pDb->uid && pVgroup->replica > 1) {
|
||||
bool hasLeader = false;
|
||||
for (int32_t i = 0; i < pVgroup->replica; ++i) {
|
||||
if (pVgroup->vnodeGid[i].role == TAOS_SYNC_STATE_LEADER) {
|
||||
if (pVgroup->vnodeGid[i].syncState == TAOS_SYNC_STATE_LEADER) {
|
||||
hasLeader = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -361,10 +361,12 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
|||
bool roleChanged = false;
|
||||
for (int32_t vg = 0; vg < pVgroup->replica; ++vg) {
|
||||
if (pVgroup->vnodeGid[vg].dnodeId == statusReq.dnodeId) {
|
||||
if (pVgroup->vnodeGid[vg].role != pVload->syncState) {
|
||||
if (pVgroup->vnodeGid[vg].syncState != pVload->syncState ||
|
||||
pVgroup->vnodeGid[vg].syncRestore != pVload->syncRestore) {
|
||||
pVgroup->vnodeGid[vg].syncState = pVload->syncState;
|
||||
pVgroup->vnodeGid[vg].syncRestore = pVload->syncRestore;
|
||||
roleChanged = true;
|
||||
}
|
||||
pVgroup->vnodeGid[vg].role = pVload->syncState;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -378,10 +380,11 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
|||
|
||||
SMnodeObj *pObj = mndAcquireMnode(pMnode, pDnode->id);
|
||||
if (pObj != NULL) {
|
||||
if (pObj->state != statusReq.mload.syncState) {
|
||||
mInfo("dnode:%d, mnode syncstate from %s to %s", pObj->id, syncStr(pObj->state),
|
||||
syncStr(statusReq.mload.syncState));
|
||||
pObj->state = statusReq.mload.syncState;
|
||||
if (pObj->syncState != statusReq.mload.syncState || pObj->syncRestore != statusReq.mload.syncRestore) {
|
||||
mInfo("dnode:%d, mnode syncState from %s to %s, restoreState from %d to %d", pObj->id, syncStr(pObj->syncState),
|
||||
syncStr(statusReq.mload.syncState), pObj->syncRestore, statusReq.mload.syncRestore);
|
||||
pObj->syncState = statusReq.mload.syncState;
|
||||
pObj->syncRestore = statusReq.mload.syncRestore;
|
||||
pObj->stateStartTime = taosGetTimestampMs();
|
||||
}
|
||||
mndReleaseMnode(pMnode, pObj);
|
||||
|
|
|
@ -765,7 +765,7 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr
|
|||
// pClusterInfo->master_uptime = (ms - pObj->stateStartTime) / (86400000.0f);
|
||||
tstrncpy(desc.role, syncStr(TAOS_SYNC_STATE_LEADER), sizeof(desc.role));
|
||||
} else {
|
||||
tstrncpy(desc.role, syncStr(pObj->state), sizeof(desc.role));
|
||||
tstrncpy(desc.role, syncStr(pObj->syncState), sizeof(desc.role));
|
||||
}
|
||||
taosArrayPush(pClusterInfo->mnodes, &desc);
|
||||
sdbRelease(pSdb, pObj);
|
||||
|
@ -795,12 +795,12 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr
|
|||
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
||||
SMonVnodeDesc *pVnDesc = &desc.vnodes[i];
|
||||
pVnDesc->dnode_id = pVgid->dnodeId;
|
||||
tstrncpy(pVnDesc->vnode_role, syncStr(pVgid->role), sizeof(pVnDesc->vnode_role));
|
||||
if (pVgid->role == TAOS_SYNC_STATE_LEADER) {
|
||||
tstrncpy(pVnDesc->vnode_role, syncStr(pVgid->syncState), sizeof(pVnDesc->vnode_role));
|
||||
if (pVgid->syncState == TAOS_SYNC_STATE_LEADER) {
|
||||
tstrncpy(desc.status, "ready", sizeof(desc.status));
|
||||
pClusterInfo->vgroups_alive++;
|
||||
}
|
||||
if (pVgid->role != TAOS_SYNC_STATE_ERROR) {
|
||||
if (pVgid->syncState != TAOS_SYNC_STATE_ERROR) {
|
||||
pClusterInfo->vnodes_alive++;
|
||||
}
|
||||
pClusterInfo->vnodes_total++;
|
||||
|
@ -845,7 +845,8 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr
|
|||
|
||||
int32_t mndGetLoad(SMnode *pMnode, SMnodeLoad *pLoad) {
|
||||
pLoad->syncState = syncGetMyRole(pMnode->syncMgmt.sync);
|
||||
mTrace("mnode current syncstate is %s", syncStr(pLoad->syncState));
|
||||
pLoad->syncRestore = pMnode->restored;
|
||||
mTrace("mnode current syncState is %s, syncRestore:%d", syncStr(pLoad->syncState), pLoad->syncRestore);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ static int32_t mndMnodeActionInsert(SSdb *pSdb, SMnodeObj *pObj) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
pObj->state = TAOS_SYNC_STATE_ERROR;
|
||||
pObj->syncState = TAOS_SYNC_STATE_ERROR;
|
||||
mndReloadSyncConfig(pSdb->pMnode);
|
||||
return 0;
|
||||
}
|
||||
|
@ -604,19 +604,19 @@ static int32_t mndRetrieveMnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB
|
|||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, b1, false);
|
||||
|
||||
const char *roles = "offline";
|
||||
char role[20] = "offline";
|
||||
if (pObj->id == pMnode->selfDnodeId) {
|
||||
roles = syncStr(TAOS_SYNC_STATE_LEADER);
|
||||
snprintf(role, sizeof(role), "%s%s", syncStr(TAOS_SYNC_STATE_LEADER), pMnode->restored ? "" : "*");
|
||||
}
|
||||
if (mndIsDnodeOnline(pObj->pDnode, curMs)) {
|
||||
roles = syncStr(pObj->state);
|
||||
if (pObj->state == TAOS_SYNC_STATE_LEADER && pObj->id != pMnode->selfDnodeId) {
|
||||
roles = syncStr(TAOS_SYNC_STATE_ERROR);
|
||||
tstrncpy(role, syncStr(pObj->syncState), sizeof(role));
|
||||
if (pObj->syncState == TAOS_SYNC_STATE_LEADER && pObj->id != pMnode->selfDnodeId) {
|
||||
tstrncpy(role, syncStr(TAOS_SYNC_STATE_ERROR), sizeof(role));
|
||||
mError("mnode:%d, is leader too", pObj->id);
|
||||
}
|
||||
}
|
||||
char b2[12 + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(b2, roles, pShow->pMeta->pSchemas[cols].bytes);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(b2, role, pShow->pMeta->pSchemas[cols].bytes);
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)b2, false);
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ SSdbRow *mndVgroupActionDecode(SSdbRaw *pRaw) {
|
|||
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
||||
SDB_GET_INT32(pRaw, dataPos, &pVgid->dnodeId, _OVER)
|
||||
if (pVgroup->replica == 1) {
|
||||
pVgid->role = TAOS_SYNC_STATE_LEADER;
|
||||
pVgid->syncState = TAOS_SYNC_STATE_LEADER;
|
||||
}
|
||||
}
|
||||
SDB_GET_RESERVE(pRaw, dataPos, VGROUP_RESERVE_SIZE, _OVER)
|
||||
|
@ -485,9 +485,9 @@ static int32_t mndGetAvailableDnode(SMnode *pMnode, SDbObj *pDb, SVgObj *pVgroup
|
|||
|
||||
pVgid->dnodeId = pDnode->id;
|
||||
if (pVgroup->replica == 1) {
|
||||
pVgid->role = TAOS_SYNC_STATE_LEADER;
|
||||
pVgid->syncState = TAOS_SYNC_STATE_LEADER;
|
||||
} else {
|
||||
pVgid->role = TAOS_SYNC_STATE_FOLLOWER;
|
||||
pVgid->syncState = TAOS_SYNC_STATE_FOLLOWER;
|
||||
}
|
||||
|
||||
mInfo("db:%s, vgId:%d, vn:%d is alloced, memory:%" PRId64 ", dnode:%d avail:%" PRId64 " used:%" PRId64,
|
||||
|
@ -587,7 +587,7 @@ SEpSet mndGetVgroupEpset(SMnode *pMnode, const SVgObj *pVgroup) {
|
|||
SDnodeObj *pDnode = mndAcquireDnode(pMnode, pVgid->dnodeId);
|
||||
if (pDnode == NULL) continue;
|
||||
|
||||
if (pVgid->role == TAOS_SYNC_STATE_LEADER) {
|
||||
if (pVgid->syncState == TAOS_SYNC_STATE_LEADER) {
|
||||
epset.inUse = epset.numOfEps;
|
||||
}
|
||||
|
||||
|
@ -682,7 +682,11 @@ static int32_t mndRetrieveVgroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p
|
|||
}
|
||||
|
||||
char buf1[20] = {0};
|
||||
const char *role = online ? syncStr(pVgroup->vnodeGid[i].role) : "offline";
|
||||
char role[20] = "offline";
|
||||
if (online) {
|
||||
bool show = (pVgroup->vnodeGid[i].syncState == TAOS_SYNC_STATE_LEADER && !pVgroup->vnodeGid[i].syncRestore);
|
||||
snprintf(role, sizeof(role), "%s%s", syncStr(pVgroup->vnodeGid[i].syncState), show ? "*" : "");
|
||||
}
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(buf1, role, pShow->pMeta->pSchemas[cols].bytes);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
|
@ -809,7 +813,7 @@ static int32_t mndRetrieveVnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB
|
|||
colDataAppend(pColInfo, numOfRows, (const char *)&pVgroup->replica, false);
|
||||
|
||||
char buf[20] = {0};
|
||||
STR_TO_VARSTR(buf, syncStr(pVgid->role));
|
||||
STR_TO_VARSTR(buf, syncStr(pVgid->syncState));
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)buf, false);
|
||||
|
||||
|
@ -887,7 +891,7 @@ int32_t mndAddVnodeToVgroup(SMnode *pMnode, SVgObj *pVgroup, SArray *pArray) {
|
|||
}
|
||||
|
||||
pVgid->dnodeId = pDnode->id;
|
||||
pVgid->role = TAOS_SYNC_STATE_ERROR;
|
||||
pVgid->syncState = TAOS_SYNC_STATE_ERROR;
|
||||
mInfo("db:%s, vgId:%d, vn:%d is added, memory:%" PRId64 ", dnode:%d avail:%" PRId64 " used:%" PRId64,
|
||||
pVgroup->dbName, pVgroup->vgId, pVgroup->replica, vgMem, pVgid->dnodeId, pDnode->memAvail, pDnode->memUsed);
|
||||
|
||||
|
@ -1179,7 +1183,7 @@ static int32_t mndAddIncVgroupReplicaToTrans(SMnode *pMnode, STrans *pTrans, SDb
|
|||
SVnodeGid *pGid = &pVgroup->vnodeGid[pVgroup->replica];
|
||||
pVgroup->replica++;
|
||||
pGid->dnodeId = newDnodeId;
|
||||
pGid->role = TAOS_SYNC_STATE_ERROR;
|
||||
pGid->syncState = TAOS_SYNC_STATE_ERROR;
|
||||
|
||||
if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, pVgroup, pGid, true) != 0) return -1;
|
||||
if (mndAddAlterVnodeAction(pMnode, pTrans, pDb, pVgroup, TDMT_VND_ALTER_REPLICA) != 0) return -1;
|
||||
|
@ -1233,7 +1237,7 @@ static int32_t mndRedistributeVgroup(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb,
|
|||
mInfo("vgId:%d, vgroup info before redistribute, replica:%d", newVg.vgId, newVg.replica);
|
||||
for (int32_t i = 0; i < newVg.replica; ++i) {
|
||||
mInfo("vgId:%d, vnode:%d dnode:%d role:%s", newVg.vgId, i, newVg.vnodeGid[i].dnodeId,
|
||||
syncStr(newVg.vnodeGid[i].role));
|
||||
syncStr(newVg.vnodeGid[i].syncState));
|
||||
}
|
||||
|
||||
if (pNew1 != NULL && pOld1 != NULL) {
|
||||
|
|
|
@ -385,6 +385,7 @@ _exit:
|
|||
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad) {
|
||||
pLoad->vgId = TD_VID(pVnode);
|
||||
pLoad->syncState = syncGetMyRole(pVnode->sync);
|
||||
pLoad->syncRestore = pVnode->restored;
|
||||
pLoad->cacheUsage = tsdbCacheGetUsage(pVnode);
|
||||
pLoad->numOfTables = metaGetTbNum(pVnode->pMeta);
|
||||
pLoad->numOfTimeSeries = metaGetTimeSeriesNum(pVnode->pMeta);
|
||||
|
|
|
@ -509,7 +509,8 @@ int32_t tSerializeSMonVloadInfo(void *buf, int32_t bufLen, SMonVloadInfo *pInfo)
|
|||
for (int32_t i = 0; i < taosArrayGetSize(pInfo->pVloads); ++i) {
|
||||
SVnodeLoad *pLoad = taosArrayGet(pInfo->pVloads, i);
|
||||
if (tEncodeI32(&encoder, pLoad->vgId) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pLoad->syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pLoad->syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pLoad->syncRestore) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pLoad->cacheUsage) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pLoad->numOfTables) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pLoad->numOfTimeSeries) < 0) return -1;
|
||||
|
@ -544,7 +545,8 @@ int32_t tDeserializeSMonVloadInfo(void *buf, int32_t bufLen, SMonVloadInfo *pInf
|
|||
for (int32_t i = 0; i < arraySize; ++i) {
|
||||
SVnodeLoad load = {0};
|
||||
if (tDecodeI32(&decoder, &load.vgId) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &load.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &load.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &load.syncRestore) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &load.cacheUsage) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &load.numOfTables) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &load.numOfTimeSeries) < 0) return -1;
|
||||
|
@ -575,7 +577,8 @@ int32_t tSerializeSMonMloadInfo(void *buf, int32_t bufLen, SMonMloadInfo *pInfo)
|
|||
|
||||
if (tStartEncode(&encoder) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pInfo->isMnode) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pInfo->load.syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pInfo->load.syncState) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pInfo->load.syncRestore) < 0) return -1;
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -589,7 +592,8 @@ int32_t tDeserializeSMonMloadInfo(void *buf, int32_t bufLen, SMonMloadInfo *pInf
|
|||
|
||||
if (tStartDecode(&decoder) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pInfo->isMnode) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &pInfo->load.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pInfo->load.syncState) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pInfo->load.syncRestore) < 0) return -1;
|
||||
tEndDecode(&decoder);
|
||||
|
||||
tDecoderClear(&decoder);
|
||||
|
|
Loading…
Reference in New Issue