diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index a421b01d7a04f049472e9a8c8486fbd89eea67e0..a30b359970adb40f8fce1777d9a96fed10dcf6ce 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -185,7 +185,9 @@ static int32_t mnodeChildTableActionUpdate(SSdbOper *pOper) { void *oldTableId = pTable->info.tableId; void *oldSql = pTable->sql; void *oldSchema = pTable->schema; + int32_t oldRefCount = pTable->refCount; memcpy(pTable, pNew, sizeof(SChildTableObj)); + pTable->refCount = oldRefCount; pTable->sql = pNew->sql; pTable->schema = pNew->schema; free(pNew); @@ -375,7 +377,7 @@ static void mnodeAddTableIntoStable(SSuperTableObj *pStable, SChildTableObj *pCt pStable->numOfTables++; if (pStable->vgHash == NULL) { - pStable->vgHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false); + pStable->vgHash = taosHashInit(100000, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false); } if (pStable->vgHash != NULL) { @@ -439,9 +441,14 @@ static int32_t mnodeSuperTableActionUpdate(SSdbOper *pOper) { if (pTable != pNew) { void *oldTableId = pTable->info.tableId; void *oldSchema = pTable->schema; + void *oldVgHash = pTable->vgHash; + int32_t oldRefCount = pTable->refCount; + memcpy(pTable, pNew, sizeof(SSuperTableObj)); + + pTable->vgHash = oldVgHash; + pTable->refCount = oldRefCount; pTable->schema = pNew->schema; - free(pNew->vgHash); free(pNew); free(oldTableId); free(oldSchema); diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index 0475a48ce2c9da6c4c6ab15772a8e31880529f7f..efa823d5311eb0272076f98a719b2baf12b86e68 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -149,9 +149,17 @@ static int32_t mnodeVgroupActionUpdate(SSdbOper *pOper) { } } + void *idPool = pVgroup->idPool; + void *tableList = pVgroup->tableList; + int32_t oldRefCount = pVgroup->refCount; + memcpy(pVgroup, pNew, sizeof(SVgObj)); + free(pNew); - + pVgroup->refCount = oldRefCount; + pVgroup->idPool = idPool; + pVgroup->tableList = tableList; + for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) { SDnodeObj *pDnode = mnodeGetDnode(pVgroup->vnodeGid[i].dnodeId); pVgroup->vnodeGid[i].pDnode = pDnode;