add prepare func.

This commit is contained in:
xiao-77 2024-11-15 14:39:10 +08:00
parent cc3f4504bf
commit 4a03483683
7 changed files with 85 additions and 43 deletions

View File

@ -45,10 +45,6 @@ static int32_t mmRequire(const SMgmtInputOpt *pInput, bool *required) {
return code; return code;
} }
static void mmBuildConfigForDeploy(SMnodeMgmt *pMgmt) {
persistGlobalConfig(getGlobalCfg(tsCfg), pMgmt->path, tsmmConfigVersion);
}
static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, const SMgmtInputOpt *pInput, SMnodeOpt *pOption) { static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, const SMgmtInputOpt *pInput, SMnodeOpt *pOption) {
pOption->deploy = true; pOption->deploy = true;
pOption->msgCb = pMgmt->msgCb; pOption->msgCb = pMgmt->msgCb;
@ -124,7 +120,6 @@ static int32_t mmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) {
dInfo("mnode start to deploy"); dInfo("mnode start to deploy");
pMgmt->pData->dnodeId = 1; pMgmt->pData->dnodeId = 1;
mmBuildOptionForDeploy(pMgmt, pInput, &option); mmBuildOptionForDeploy(pMgmt, pInput, &option);
mmBuildConfigForDeploy(pMgmt);
} else { } else {
dInfo("mnode start to open"); dInfo("mnode start to open");
mmBuildOptionForOpen(pMgmt, &option); mmBuildOptionForOpen(pMgmt, &option);

View File

@ -22,11 +22,14 @@
extern "C" { extern "C" {
#endif #endif
int32_t mndInitConfig(SMnode *pMnode); int32_t mndInitConfig(SMnode *pMnode);
SSdbRaw *mnCfgActionEncode(SConfigItem *pCfg); SSdbRaw *mnCfgActionEncode(SConfigItem *pCfg);
SSdbRow *mndCfgActionDecode(SSdbRaw *pRaw); SSdbRow *mndCfgActionDecode(SSdbRaw *pRaw);
static int32_t mndCfgActionInsert(SSdb *pSdb, SConfigItem *item); static int32_t mndCfgActionInsert(SSdb *pSdb, SConfigItem *item);
static int32_t mndCfgActionDelete(SSdb *pSdb, SConfigItem *item); static int32_t mndCfgActionDelete(SSdb *pSdb, SConfigItem *item);
static int32_t mndCfgActionUpdate(SSdb *pSdb, SConfigItem *oldItem, SConfigItem *newItem); static int32_t mndCfgActionUpdate(SSdb *pSdb, SConfigItem *oldItem, SConfigItem *newItem);
static int32_t mndCfgActionDeploy(SMnode *pMnode);
static int32_t mndCfgActionPrepare(SMnode *pMnode);
static int32_t mndProcessConfigReq(SRpcMsg *pReq); static int32_t mndProcessConfigReq(SRpcMsg *pReq);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -29,28 +29,22 @@ int32_t mndSetCreateConfigCommitLogs(STrans *pTrans, SConfigItem *item);
int32_t mndInitConfig(SMnode *pMnode) { int32_t mndInitConfig(SMnode *pMnode) {
int32_t code = 0; int32_t code = 0;
SSdbTable table = { SSdbTable table = {.sdbType = SDB_CFG,
.sdbType = SDB_CFG, .keyType = SDB_KEY_BINARY,
.keyType = SDB_KEY_INT32,
.encodeFp = (SdbEncodeFp)mnCfgActionEncode, .encodeFp = (SdbEncodeFp)mnCfgActionEncode,
.decodeFp = (SdbDecodeFp)mndCfgActionDecode, .decodeFp = (SdbDecodeFp)mndCfgActionDecode,
.insertFp = (SdbInsertFp)mndCfgActionInsert, .insertFp = (SdbInsertFp)mndCfgActionInsert,
.updateFp = (SdbUpdateFp)mndCfgActionUpdate, .updateFp = (SdbUpdateFp)mndCfgActionUpdate,
.deleteFp = (SdbDeleteFp)mndCfgActionDelete, .deleteFp = (SdbDeleteFp)mndCfgActionDelete,
}; .deployFp = (SdbDeployFp)mndCfgActionDeploy,
.prepareFp = (SdbPrepareFp)mndCfgActionPrepare};
if (pMnode->deploy) {
mndInitWriteCfg(pMnode);
} else {
mndInitReadCfg(pMnode);
}
mndSetMsgHandle(pMnode, TDMT_MND_CONFIG, mndProcessConfigReq); mndSetMsgHandle(pMnode, TDMT_MND_CONFIG, mndProcessConfigReq);
return sdbSetTable(pMnode->pSdb, table); return sdbSetTable(pMnode->pSdb, table);
} }
SSdbRaw *mnCfgActionEncode(SConfigItem *pCfg) { SSdbRaw *mnCfgActionEncode(SConfigItem *pItem) {
int32_t code = 0; int32_t code = 0;
int32_t lino = 0; int32_t lino = 0;
terrno = TSDB_CODE_OUT_OF_MEMORY; terrno = TSDB_CODE_OUT_OF_MEMORY;
@ -61,25 +55,24 @@ SSdbRaw *mnCfgActionEncode(SConfigItem *pCfg) {
if (pRaw == NULL) goto _OVER; if (pRaw == NULL) goto _OVER;
int32_t dataPos = 0; int32_t dataPos = 0;
SConfigItem *item = NULL; SDB_SET_INT32(pRaw, dataPos, strlen(pItem->name), _OVER)
SDB_SET_INT32(pRaw, dataPos, strlen(item->name), _OVER) SDB_SET_BINARY(pRaw, dataPos, pItem->name, strlen(pItem->name), _OVER)
SDB_SET_BINARY(pRaw, dataPos, item->name, strlen(item->name), _OVER) SDB_SET_INT32(pRaw, dataPos, pItem->dtype, _OVER)
SDB_SET_INT32(pRaw, dataPos, item->dtype, _OVER) switch (pItem->dtype) {
switch (item->dtype) {
case CFG_DTYPE_NONE: case CFG_DTYPE_NONE:
break; break;
case CFG_DTYPE_BOOL: case CFG_DTYPE_BOOL:
SDB_SET_BOOL(pRaw, dataPos, item->bval, _OVER) SDB_SET_BOOL(pRaw, dataPos, pItem->bval, _OVER)
break; break;
case CFG_DTYPE_INT32: case CFG_DTYPE_INT32:
SDB_SET_INT32(pRaw, dataPos, item->i32, _OVER); SDB_SET_INT32(pRaw, dataPos, pItem->i32, _OVER);
break; break;
case CFG_DTYPE_INT64: case CFG_DTYPE_INT64:
SDB_SET_INT64(pRaw, dataPos, item->i64, _OVER); SDB_SET_INT64(pRaw, dataPos, pItem->i64, _OVER);
break; break;
case CFG_DTYPE_FLOAT: case CFG_DTYPE_FLOAT:
case CFG_DTYPE_DOUBLE: case CFG_DTYPE_DOUBLE:
(void)sprintf(buf, "%f", item->fval); (void)sprintf(buf, "%f", pItem->fval);
SDB_SET_INT32(pRaw, dataPos, strlen(buf), _OVER) SDB_SET_INT32(pRaw, dataPos, strlen(buf), _OVER)
SDB_SET_BINARY(pRaw, dataPos, buf, strlen(buf), _OVER) SDB_SET_BINARY(pRaw, dataPos, buf, strlen(buf), _OVER)
break; break;
@ -88,8 +81,8 @@ SSdbRaw *mnCfgActionEncode(SConfigItem *pCfg) {
case CFG_DTYPE_LOCALE: case CFG_DTYPE_LOCALE:
case CFG_DTYPE_CHARSET: case CFG_DTYPE_CHARSET:
case CFG_DTYPE_TIMEZONE: case CFG_DTYPE_TIMEZONE:
SDB_SET_INT32(pRaw, dataPos, strlen(item->str), _OVER) SDB_SET_INT32(pRaw, dataPos, strlen(pItem->str), _OVER)
SDB_SET_BINARY(pRaw, dataPos, item->str, strlen(item->str), _OVER) SDB_SET_BINARY(pRaw, dataPos, pItem->str, strlen(pItem->str), _OVER)
break; break;
} }
@ -101,7 +94,7 @@ _OVER:
sdbFreeRaw(pRaw); sdbFreeRaw(pRaw);
return NULL; return NULL;
} }
mTrace("cfg encode to raw:%p, row:%p", pRaw, pCfg); mTrace("cfg encode to raw:%p, row:%p", pRaw, pItem);
return pRaw; return pRaw;
} }
@ -121,7 +114,7 @@ SSdbRow *mndCfgActionDecode(SSdbRaw *pRaw) {
goto _OVER; goto _OVER;
} }
pRow = sdbAllocRow(sizeof(SSdbRaw)); pRow = sdbAllocRow(sizeof(SConfigItem));
if (pRow == NULL) goto _OVER; if (pRow == NULL) goto _OVER;
item = sdbGetRowObj(pRow); item = sdbGetRowObj(pRow);
@ -184,6 +177,10 @@ static int32_t mndCfgActionUpdate(SSdb *pSdb, SConfigItem *pOld, SConfigItem *pN
return 0; return 0;
} }
static int32_t mndCfgActionDeploy(SMnode *pMnode) { return mndInitWriteCfg(pMnode); }
static int32_t mndCfgActionPrepare(SMnode *pMnode) { return mndInitConfig(pMnode); }
static int32_t mndProcessConfigReq(SRpcMsg *pReq) { static int32_t mndProcessConfigReq(SRpcMsg *pReq) {
SMnode *pMnode = pReq->info.node; SMnode *pMnode = pReq->info.node;
SConfigReq configReq = {0}; SConfigReq configReq = {0};

View File

@ -604,7 +604,6 @@ static int32_t mndAllocStep(SMnode *pMnode, char *name, MndInitFp initFp, MndCle
static int32_t mndInitSteps(SMnode *pMnode) { static int32_t mndInitSteps(SMnode *pMnode) {
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-wal", mndInitWal, mndCloseWal)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-wal", mndInitWal, mndCloseWal));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-config", mndInitConfig, mndCleanupArbGroup));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sdb", mndInitSdb, mndCleanupSdb)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sdb", mndInitSdb, mndCleanupSdb));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-trans", mndInitTrans, mndCleanupTrans)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-trans", mndInitTrans, mndCleanupTrans));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-cluster", mndInitCluster, mndCleanupCluster)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-cluster", mndInitCluster, mndCleanupCluster));
@ -639,7 +638,7 @@ static int32_t mndInitSteps(SMnode *pMnode) {
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-query", mndInitQuery, mndCleanupQuery)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-query", mndInitQuery, mndCleanupQuery));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sync", mndInitSync, mndCleanupSync)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sync", mndInitSync, mndCleanupSync));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-telem", mndInitTelem, mndCleanupTelem)); TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-telem", mndInitTelem, mndCleanupTelem));
TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-config", mndInitConfig, mndCleanupArbGroup));
return 0; return 0;
} }
@ -798,6 +797,12 @@ int32_t mndStart(SMnode *pMnode) {
return -1; return -1;
} }
mndSetRestored(pMnode, true); mndSetRestored(pMnode, true);
} else {
if (sdbPrepare(pMnode->pSdb) != 0) {
mError("failed to prepare sdb while start mnode");
return -1;
}
mndSetRestored(pMnode, true);
} }
grantReset(pMnode, TSDB_GRANT_ALL, 0); grantReset(pMnode, TSDB_GRANT_ALL, 0);

View File

@ -115,6 +115,7 @@ typedef int32_t (*SdbInsertFp)(SSdb *pSdb, void *pObj);
typedef int32_t (*SdbUpdateFp)(SSdb *pSdb, void *pSrcObj, void *pDstObj); typedef int32_t (*SdbUpdateFp)(SSdb *pSdb, void *pSrcObj, void *pDstObj);
typedef int32_t (*SdbDeleteFp)(SSdb *pSdb, void *pObj, bool callFunc); typedef int32_t (*SdbDeleteFp)(SSdb *pSdb, void *pObj, bool callFunc);
typedef int32_t (*SdbDeployFp)(SMnode *pMnode); typedef int32_t (*SdbDeployFp)(SMnode *pMnode);
typedef int32_t (*SdbPrepareFp)(SMnode *pMnode);
typedef int32_t (*SdbValidateFp)(SMnode *pMnode, void *pTrans, SSdbRaw *pRaw); typedef int32_t (*SdbValidateFp)(SMnode *pMnode, void *pTrans, SSdbRaw *pRaw);
typedef SSdbRow *(*SdbDecodeFp)(SSdbRaw *pRaw); typedef SSdbRow *(*SdbDecodeFp)(SSdbRaw *pRaw);
typedef SSdbRaw *(*SdbEncodeFp)(void *pObj); typedef SSdbRaw *(*SdbEncodeFp)(void *pObj);
@ -164,8 +165,8 @@ typedef enum {
SDB_GRANT = 26, // grant log SDB_GRANT = 26, // grant log
SDB_ARBGROUP = 27, SDB_ARBGROUP = 27,
SDB_ANODE = 28, SDB_ANODE = 28,
SDB_MAX = 29, SDB_CFG = 29,
SDB_CFG = 30 SDB_MAX = 30
} ESdbType; } ESdbType;
typedef struct SSdbRaw { typedef struct SSdbRaw {
@ -205,6 +206,7 @@ typedef struct SSdb {
SdbUpdateFp updateFps[SDB_MAX]; SdbUpdateFp updateFps[SDB_MAX];
SdbDeleteFp deleteFps[SDB_MAX]; SdbDeleteFp deleteFps[SDB_MAX];
SdbDeployFp deployFps[SDB_MAX]; SdbDeployFp deployFps[SDB_MAX];
SdbPrepareFp prepareFps[SDB_MAX];
SdbEncodeFp encodeFps[SDB_MAX]; SdbEncodeFp encodeFps[SDB_MAX];
SdbDecodeFp decodeFps[SDB_MAX]; SdbDecodeFp decodeFps[SDB_MAX];
SdbValidateFp validateFps[SDB_MAX]; SdbValidateFp validateFps[SDB_MAX];
@ -221,6 +223,7 @@ typedef struct {
ESdbType sdbType; ESdbType sdbType;
EKeyType keyType; EKeyType keyType;
SdbDeployFp deployFp; SdbDeployFp deployFp;
SdbPrepareFp prepareFp;
SdbEncodeFp encodeFp; SdbEncodeFp encodeFp;
SdbDecodeFp decodeFp; SdbDecodeFp decodeFp;
SdbInsertFp insertFp; SdbInsertFp insertFp;
@ -268,6 +271,14 @@ int32_t sdbSetTable(SSdb *pSdb, SSdbTable table);
*/ */
int32_t sdbDeploy(SSdb *pSdb); int32_t sdbDeploy(SSdb *pSdb);
/**
* @brief prepare the initial rows of sdb.
*
* @param pSdb The sdb object.
* @return int32_t 0 for success, -1 for failure.
*/
int32_t sdbPrepare(SSdb *pSdb);
/** /**
* @brief Load sdb from file. * @brief Load sdb from file.
* *

View File

@ -48,6 +48,26 @@ static int32_t sdbDeployData(SSdb *pSdb) {
return 0; return 0;
} }
static int32_t sdbPrepareData(SSdb *pSdb) {
int32_t code = 0;
mInfo("start to prepare sdb");
for (int32_t i = SDB_MAX - 1; i >= 0; --i) {
SdbDeployFp fp = pSdb->prepareFps[i];
if (fp == NULL) continue;
mInfo("start to prepare sdb:%s", sdbTableName(i));
code = (*fp)(pSdb->pMnode);
if (code != 0) {
mError("failed to prepare sdb:%s since %s", sdbTableName(i), tstrerror(code));
return -1;
}
}
mInfo("sdb prepare success");
return 0;
}
static void sdbResetData(SSdb *pSdb) { static void sdbResetData(SSdb *pSdb) {
mInfo("start to reset sdb"); mInfo("start to reset sdb");
@ -641,6 +661,15 @@ int32_t sdbDeploy(SSdb *pSdb) {
return 0; return 0;
} }
int32_t sdbPrepare(SSdb *pSdb) {
int32_t code = 0;
code = sdbPrepareData(pSdb);
if (code != 0) {
TAOS_RETURN(code);
}
return 0;
}
static SSdbIter *sdbCreateIter(SSdb *pSdb) { static SSdbIter *sdbCreateIter(SSdb *pSdb) {
SSdbIter *pIter = taosMemoryCalloc(1, sizeof(SSdbIter)); SSdbIter *pIter = taosMemoryCalloc(1, sizeof(SSdbIter));
if (pIter == NULL) { if (pIter == NULL) {

View File

@ -76,6 +76,8 @@ const char *sdbTableName(ESdbType type) {
return "arb_group"; return "arb_group";
case SDB_ANODE: case SDB_ANODE:
return "anode"; return "anode";
case SDB_CFG:
return "config";
default: default:
return "undefine"; return "undefine";
} }