From b6ed305614209ea9d823c847ecea41a32f63c35c Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 10 Dec 2021 11:42:03 +0800 Subject: [PATCH] TD-10431 update sdb for stable --- include/common/taosmsg.h | 2 +- source/dnode/mnode/impl/inc/mndDef.h | 2 +- source/dnode/mnode/impl/src/mndShow.c | 2 +- source/dnode/mnode/impl/src/mndStable.c | 60 +++++++++++++++++-------- source/dnode/mnode/impl/src/mndVgroup.c | 4 +- source/libs/parser/inc/sql.y | 4 +- 6 files changed, 48 insertions(+), 26 deletions(-) diff --git a/include/common/taosmsg.h b/include/common/taosmsg.h index 94924e6c04..3f9dd48ef4 100644 --- a/include/common/taosmsg.h +++ b/include/common/taosmsg.h @@ -159,7 +159,7 @@ typedef enum _mgmt_table { TSDB_MGMT_TABLE_DNODE, TSDB_MGMT_TABLE_MNODE, TSDB_MGMT_TABLE_VGROUP, - TSDB_MGMT_TABLE_METRIC, + TSDB_MGMT_TABLE_STABLE, TSDB_MGMT_TABLE_MODULE, TSDB_MGMT_TABLE_QUERIES, TSDB_MGMT_TABLE_STREAMS, diff --git a/source/dnode/mnode/impl/inc/mndDef.h b/source/dnode/mnode/impl/inc/mndDef.h index 452385a8bf..b9bafddc1c 100644 --- a/source/dnode/mnode/impl/inc/mndDef.h +++ b/source/dnode/mnode/impl/inc/mndDef.h @@ -251,9 +251,9 @@ typedef struct SStableObj { int32_t version; int16_t numOfFields; int16_t numOfTags; + SRWLatch lock; SSchema *fieldSchema; SSchema *tagSchema; - char pCont[]; } SStableObj; typedef struct SFuncObj { diff --git a/source/dnode/mnode/impl/src/mndShow.c b/source/dnode/mnode/impl/src/mndShow.c index ac33d89517..cfecaf2775 100644 --- a/source/dnode/mnode/impl/src/mndShow.c +++ b/source/dnode/mnode/impl/src/mndShow.c @@ -270,7 +270,7 @@ char *mndShowStr(int32_t showType) { return "show mnodes"; case TSDB_MGMT_TABLE_VGROUP: return "show vgroups"; - case TSDB_MGMT_TABLE_METRIC: + case TSDB_MGMT_TABLE_STABLE: return "show stables"; case TSDB_MGMT_TABLE_MODULE: return "show modules"; diff --git a/source/dnode/mnode/impl/src/mndStable.c b/source/dnode/mnode/impl/src/mndStable.c index 3aafe86a6d..a2a10a0752 100644 --- a/source/dnode/mnode/impl/src/mndStable.c +++ b/source/dnode/mnode/impl/src/mndStable.c @@ -33,6 +33,10 @@ static int32_t mndStableActionUpdate(SSdb *pSdb, SStableObj *pOldStable, SStabl static int32_t mndProcessCreateStableMsg(SMnodeMsg *pMsg); static int32_t mndProcessAlterStableMsg(SMnodeMsg *pMsg); static int32_t mndProcessDropStableMsg(SMnodeMsg *pMsg); +static int32_t mndProcessCreateStableInRsp(SMnodeMsg *pMsg); +static int32_t mndProcessAlterStableInRsp(SMnodeMsg *pMsg); +static int32_t mndProcessDropStableInRsp(SMnodeMsg *pMsg); +static int32_t mndProcessStableMetaMsg(SMnodeMsg *pMsg); static int32_t mndGetStableMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pMeta); static int32_t mndRetrieveStables(SMnodeMsg *pMsg, SShowObj *pShow, char *data, int32_t rows); static void mndCancelGetNextStable(SMnode *pMnode, void *pIter); @@ -46,13 +50,17 @@ int32_t mndInitStable(SMnode *pMnode) { .updateFp = (SdbUpdateFp)mndStableActionUpdate, .deleteFp = (SdbDeleteFp)mndStableActionDelete}; - mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_CREATE_DB, mndProcessCreateStableMsg); - mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_ALTER_DB, mndProcessAlterStableMsg); - mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_DROP_DB, mndProcessDropStableMsg); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_CREATE_STABLE, mndProcessCreateStableMsg); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_ALTER_STABLE, mndProcessAlterStableMsg); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_DROP_STABLE, mndProcessDropStableMsg); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_CREATE_STABLE_IN_RSP, mndProcessCreateStableInRsp); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_ALTER_STABLE_IN_RSP, mndProcessAlterStableInRsp); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_DROP_STABLE_IN_RSP, mndProcessDropStableInRsp); + mndSetMsgHandle(pMnode, TSDB_MSG_TYPE_TABLE_META, mndProcessStableMetaMsg); - mndAddShowMetaHandle(pMnode, TSDB_MGMT_TABLE_DB, mndGetStableMeta); - mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_DB, mndRetrieveStables); - mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_DB, mndCancelGetNextStable); + mndAddShowMetaHandle(pMnode, TSDB_MGMT_TABLE_STABLE, mndGetStableMeta); + mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_STABLE, mndRetrieveStables); + mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_STABLE, mndCancelGetNextStable); return sdbSetTable(pMnode->pSdb, table); } @@ -119,8 +127,8 @@ static SSdbRow *mndStableActionDecode(SSdbRaw *pRaw) { SDB_GET_INT16(pRaw, pRow, dataPos, &pStable->numOfFields) SDB_GET_INT16(pRaw, pRow, dataPos, &pStable->numOfTags) - pStable->fieldSchema = (SSchema *)pStable->pCont; - pStable->tagSchema = (SSchema *)(pStable->pCont + pStable->numOfFields * sizeof(SSchema)); + pStable->fieldSchema = calloc(pStable->numOfFields, sizeof(SSchema)); + pStable->tagSchema = calloc(pStable->numOfTags, sizeof(SSchema)); for (int32_t i = 0; i < pStable->numOfFields; ++i) { SSchema *pSchema = &pStable->fieldSchema[i]; @@ -155,28 +163,42 @@ static int32_t mndStableActionDelete(SSdb *pSdb, SStableObj *pStable) { static int32_t mndStableActionUpdate(SSdb *pSdb, SStableObj *pOldStable, SStableObj *pNewStable) { mTrace("stable:%s, perform update action", pOldStable->name); - memcpy(pOldStable->name, pNewStable->name, TSDB_TABLE_NAME_LEN); - pOldStable->createdTime = pNewStable->createdTime; - pOldStable->updateTime = pNewStable->updateTime; - pOldStable->uid = pNewStable->uid; - pOldStable->version = pNewStable->version; - pOldStable->numOfFields = pNewStable->numOfFields; - pOldStable->numOfTags = pNewStable->numOfTags; - pOldStable->createdTime = pNewStable->createdTime; + atomic_exchange_32(&pOldStable->updateTime, pNewStable->updateTime); + atomic_exchange_32(&pOldStable->version, pNewStable->version); - memcpy(pOldStable->pCont, pNewStable, sizeof(SDbObj)); - // pStable->fieldSchema = pStable->pCont; - // pStable->tagSchema = pStable->pCont + pStable->numOfFields * sizeof(SSchema); + taosWLockLatch(&pOldStable->lock); + int16_t numOfTags = pNewStable->numOfTags; + int32_t tagSize = numOfTags * sizeof(SSchema); + int16_t numOfFields = pNewStable->numOfFields; + int32_t fieldSize = numOfFields * sizeof(SSchema); + if (pOldStable->numOfTags < numOfTags) { + pOldStable->tagSchema = malloc(tagSize); + } + if (pOldStable->numOfFields < numOfFields) { + pOldStable->fieldSchema = malloc(fieldSize); + } + + memcpy(pOldStable->tagSchema, pNewStable->tagSchema, tagSize); + memcpy(pOldStable->fieldSchema, pNewStable->fieldSchema, fieldSize); + taosWUnLockLatch(&pOldStable->lock); return 0; } static int32_t mndProcessCreateStableMsg(SMnodeMsg *pMsg) { return 0; } +static int32_t mndProcessCreateStableInRsp(SMnodeMsg *pMsg) { return 0; } + static int32_t mndProcessAlterStableMsg(SMnodeMsg *pMsg) { return 0; } +static int32_t mndProcessAlterStableInRsp(SMnodeMsg *pMsg) { return 0; } + static int32_t mndProcessDropStableMsg(SMnodeMsg *pMsg) { return 0; } +static int32_t mndProcessDropStableInRsp(SMnodeMsg *pMsg) { return 0; } + +static int32_t mndProcessStableMetaMsg(SMnodeMsg *pMsg) { return 0; } + static int32_t mndGetNumOfStables(SMnode *pMnode, char *dbName, int32_t *pNumOfStables) { SSdb *pSdb = pMnode->pSdb; diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c index 805748f1df..7bc4ce0816 100644 --- a/source/dnode/mnode/impl/src/mndVgroup.c +++ b/source/dnode/mnode/impl/src/mndVgroup.c @@ -277,9 +277,9 @@ static int32_t mndRetrieveVgroups(SMnodeMsg *pMsg, SShowObj *pShow, char *data, } pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - *(int8_t *)pWrite = pVgroup->compact; + *(int8_t *)pWrite = pVgroup->compact; cols++; - + sdbRelease(pSdb, pVgroup); numOfRows++; } diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 04fb3beb54..ca281c9f1c 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -112,13 +112,13 @@ cmd ::= SHOW dbPrefix(X) TABLES LIKE ids(Y). { } cmd ::= SHOW dbPrefix(X) STABLES. { - setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &X, 0); + setShowOptions(pInfo, TSDB_MGMT_TABLE_STABLE, &X, 0); } cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). { SToken token; tSetDbName(&token, &X); - setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &Y); + setShowOptions(pInfo, TSDB_MGMT_TABLE_STABLE, &token, &Y); } cmd ::= SHOW dbPrefix(X) VGROUPS. {