diff --git a/src/mnode/src/mgmtDb.c b/src/mnode/src/mgmtDb.c index 089bf494e7b26c4613da5d6b47ac84bca21edc23..c38fe8af3e5c0d1a5a8ef2ea7247d55c3ae4d42b 100644 --- a/src/mnode/src/mgmtDb.c +++ b/src/mnode/src/mgmtDb.c @@ -83,6 +83,12 @@ static int32_t mgmtDbActionDelete(SSdbOperDesc *pOper) { } static int32_t mgmtDbActionUpdate(SSdbOperDesc *pOper) { + SDbObj *pDb = pOper->pObj; + SDbObj *pSaved = mgmtGetDb(pDb->name); + if (pDb != pSaved) { + memcpy(pSaved, pDb, pOper->rowSize); + free(pDb); + } return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mgmtSdb.c b/src/mnode/src/mgmtSdb.c index 70e2be5f4c8b643bc199a056796f56d126134ac0..12fab5587550159d8095dd4d94b765b47105fac2 100644 --- a/src/mnode/src/mgmtSdb.c +++ b/src/mnode/src/mgmtSdb.c @@ -335,25 +335,19 @@ static int32_t sdbProcessWriteFromWal(SSdbTable *pTable, SWalHead *pHead, int32_ SRowMeta *rowMeta = sdbGetRowMeta(pTable, pHead->cont); assert(rowMeta != NULL && rowMeta->row != NULL); - SSdbOperDesc oper1 = { - .table = pTable, - .pObj = rowMeta->row, - }; - sdbDeleteLocal(pTable, &oper1); - - SSdbOperDesc oper2 = { + SSdbOperDesc oper = { .rowSize = pHead->len, .rowData = pHead->cont, .table = pTable, }; - code = (*pTable->decodeFp)(&oper2); + code = (*pTable->decodeFp)(&oper); if (code < 0) { sdbTrace("table:%s, failed to decode %s record:%s from file, version:%" PRId64, pTable->tableName, sdbGetActionStr(action), sdbGetkeyStr(pTable, pHead->cont), pHead->version); pthread_mutex_unlock(&tsSdbObj->mutex); return code; } - code = sdbInsertLocal(pTable, &oper2); + code = sdbUpdateLocal(pTable, &oper); } pthread_mutex_unlock(&tsSdbObj->mutex); diff --git a/src/mnode/src/mgmtTable.c b/src/mnode/src/mgmtTable.c index 1c384fdfdf94c3911403411a0cdabd8bd6f13dbc..37083a00c8e4a23b96213b4bd466a0ae2ab09e32 100644 --- a/src/mnode/src/mgmtTable.c +++ b/src/mnode/src/mgmtTable.c @@ -165,6 +165,19 @@ static int32_t mgmtChildTableActionDelete(SSdbOperDesc *pOper) { } static int32_t mgmtChildTableActionUpdate(SSdbOperDesc *pOper) { + SChildTableObj *pNew = pOper->pObj; + SChildTableObj *pTable = mgmtGetChildTable(pNew->info.tableId); + if (pTable != pNew) { + void *oldSql = pTable->sql; + void *oldSchema = pTable->schema; + memcpy(pTable, pNew, pOper->rowSize); + pTable->sql = pNew->sql; + pTable->schema = pNew->schema; + free(pNew); + free(oldSql); + free(oldSchema); + } + return TSDB_CODE_SUCCESS; } @@ -371,6 +384,16 @@ static int32_t mgmtSuperTableActionDelete(SSdbOperDesc *pOper) { } static int32_t mgmtSuperTableActionUpdate(SSdbOperDesc *pOper) { + SChildTableObj *pNew = pOper->pObj; + SChildTableObj *pTable = mgmtGetChildTable(pNew->info.tableId); + if (pTable != pNew) { + void *oldSchema = pTable->schema; + memcpy(pTable, pNew, pOper->rowSize); + pTable->schema = pNew->schema; + free(pNew); + free(oldSchema); + } + return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mgmtUser.c b/src/mnode/src/mgmtUser.c index 7fa1a13bfd728c2b63dcd7673225396958349b14..931272fb580a205d6bf3f6319fb6412edfa38bdd 100644 --- a/src/mnode/src/mgmtUser.c +++ b/src/mnode/src/mgmtUser.c @@ -65,6 +65,12 @@ static int32_t mgmtUserActionDelete(SSdbOperDesc *pOper) { } static int32_t mgmtUserActionUpdate(SSdbOperDesc *pOper) { + SUserObj *pUser = pOper->pObj; + SUserObj *pSaved = mgmtGetUser(pUser->user); + if (pUser != pSaved) { + memcpy(pSaved, pUser, pOper->rowSize); + free(pUser); + } return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mgmtVgroup.c b/src/mnode/src/mgmtVgroup.c index cc8dba52dd48a91faf91014960552ddbcdcf75db..98d9b22d8e87918236144f8bd1c9d99904162da6 100644 --- a/src/mnode/src/mgmtVgroup.c +++ b/src/mnode/src/mgmtVgroup.c @@ -53,14 +53,6 @@ static int32_t mgmtVgroupActionDestroy(SSdbOperDesc *pOper) { tfree(pVgroup->tableList); } - for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) { - SDnodeObj *pDnode = clusterGetDnode(pVgroup->vnodeGid[i].dnodeId); - if (pDnode) { - atomic_sub_fetch_32(&pDnode->openVnodes, 1); - } - clusterReleaseDnode(pDnode); - } - tfree(pOper->pObj); return TSDB_CODE_SUCCESS; } @@ -115,13 +107,27 @@ static int32_t mgmtVgroupActionDelete(SSdbOperDesc *pOper) { } mgmtReleaseDb(pVgroup->pDb); + + for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) { + SDnodeObj *pDnode = clusterGetDnode(pVgroup->vnodeGid[i].dnodeId); + if (pDnode) { + atomic_sub_fetch_32(&pDnode->openVnodes, 1); + } + clusterReleaseDnode(pDnode); + } + return TSDB_CODE_SUCCESS; } static int32_t mgmtVgroupActionUpdate(SSdbOperDesc *pOper) { - SVgObj *pVgroup = pOper->pObj; - int32_t oldTables = taosIdPoolMaxSize(pVgroup->idPool); + SVgObj *pNew = pOper->pObj; + SVgObj *pVgroup = mgmtGetVgroup(pNew->vgId); + if (pVgroup != pNew) { + memcpy(pVgroup, pNew, pOper->rowSize); + free(pNew); + } + int32_t oldTables = taosIdPoolMaxSize(pVgroup->idPool); SDbObj *pDb = pVgroup->pDb; if (pDb != NULL) { if (pDb->cfg.maxSessions != oldTables) {