fix: copy schemaExt in subtable
This commit is contained in:
parent
3b08ee3d16
commit
46edf75ced
|
@ -596,6 +596,7 @@ int32_t ctgCopyTbMeta(SCatalog *pCtg, SCtgTbMetaCtx *ctx, SCtgDBCache **pDb, SCt
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&(*pTableMeta)->sversion, &stbMeta->sversion, metaSize - sizeof(SCTableMeta));
|
memcpy(&(*pTableMeta)->sversion, &stbMeta->sversion, metaSize - sizeof(SCTableMeta));
|
||||||
|
(*pTableMeta)->schemaExt = NULL;
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -2883,14 +2884,25 @@ int32_t ctgGetTbMetasFromCache(SCatalog *pCtg, SRequestConnInfo *pConn, SCtgTbMe
|
||||||
SMetaRes res = {0};
|
SMetaRes res = {0};
|
||||||
STableMeta *pTableMeta = NULL;
|
STableMeta *pTableMeta = NULL;
|
||||||
if (tbMeta->tableType != TSDB_CHILD_TABLE) {
|
if (tbMeta->tableType != TSDB_CHILD_TABLE) {
|
||||||
|
int32_t schemaExtSize = 0;
|
||||||
int32_t metaSize = CTG_META_SIZE(tbMeta);
|
int32_t metaSize = CTG_META_SIZE(tbMeta);
|
||||||
pTableMeta = taosMemoryCalloc(1, metaSize);
|
pTableMeta = taosMemoryCalloc(1, metaSize);
|
||||||
|
if (tbMeta->schemaExt != NULL) {
|
||||||
|
schemaExtSize = tbMeta->tableInfo.numOfColumns * sizeof(SSchemaExt);
|
||||||
|
}
|
||||||
|
pTableMeta = taosMemoryCalloc(1, metaSize + schemaExtSize);
|
||||||
if (NULL == pTableMeta) {
|
if (NULL == pTableMeta) {
|
||||||
ctgReleaseTbMetaToCache(pCtg, dbCache, pCache);
|
ctgReleaseTbMetaToCache(pCtg, dbCache, pCache);
|
||||||
CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
|
CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pTableMeta, tbMeta, metaSize);
|
memcpy(pTableMeta, tbMeta, metaSize);
|
||||||
|
if (tbMeta->schemaExt != NULL) {
|
||||||
|
pTableMeta->schemaExt = (SSchemaExt *)((char *)pTableMeta + metaSize);
|
||||||
|
memcpy(pTableMeta->schemaExt, tbMeta->schemaExt, schemaExtSize);
|
||||||
|
} else {
|
||||||
|
pTableMeta->schemaExt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
CTG_UNLOCK(CTG_READ, &pCache->metaLock);
|
CTG_UNLOCK(CTG_READ, &pCache->metaLock);
|
||||||
taosHashRelease(dbCache->tbCache, pCache);
|
taosHashRelease(dbCache->tbCache, pCache);
|
||||||
|
@ -2999,6 +3011,7 @@ int32_t ctgGetTbMetasFromCache(SCatalog *pCtg, SRequestConnInfo *pConn, SCtgTbMe
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&pTableMeta->sversion, &stbMeta->sversion, metaSize - sizeof(SCTableMeta));
|
memcpy(&pTableMeta->sversion, &stbMeta->sversion, metaSize - sizeof(SCTableMeta));
|
||||||
|
pTableMeta->schemaExt = NULL;
|
||||||
|
|
||||||
CTG_UNLOCK(CTG_READ, &pCache->metaLock);
|
CTG_UNLOCK(CTG_READ, &pCache->metaLock);
|
||||||
taosHashRelease(dbCache->tbCache, pCache);
|
taosHashRelease(dbCache->tbCache, pCache);
|
||||||
|
|
|
@ -315,19 +315,15 @@ STableMeta* tableMetaDup(const STableMeta* pTableMeta) {
|
||||||
size_t schemaExtSize = hasSchemaExt ? pTableMeta->tableInfo.numOfColumns * sizeof(SSchemaExt) : 0;
|
size_t schemaExtSize = hasSchemaExt ? pTableMeta->tableInfo.numOfColumns * sizeof(SSchemaExt) : 0;
|
||||||
|
|
||||||
size_t size = sizeof(STableMeta) + numOfFields * sizeof(SSchema);
|
size_t size = sizeof(STableMeta) + numOfFields * sizeof(SSchema);
|
||||||
int32_t cpSize = sizeof(STableMeta) - sizeof(void*);
|
|
||||||
STableMeta* p = taosMemoryMalloc(size + schemaExtSize);
|
STableMeta* p = taosMemoryMalloc(size + schemaExtSize);
|
||||||
|
|
||||||
if (NULL == p) return NULL;
|
if (NULL == p) return NULL;
|
||||||
|
|
||||||
memcpy(p, pTableMeta, cpSize);
|
memcpy(p, pTableMeta, schemaExtSize+size);
|
||||||
if (hasSchemaExt) {
|
if (hasSchemaExt) {
|
||||||
p->schemaExt = (SSchemaExt*)(((char*)p) + size);
|
p->schemaExt = (SSchemaExt*)(((char*)p) + size);
|
||||||
memcpy(p->schemaExt, pTableMeta->schemaExt, schemaExtSize);
|
|
||||||
} else {
|
} else {
|
||||||
p->schemaExt = NULL;
|
p->schemaExt = NULL;
|
||||||
}
|
}
|
||||||
memcpy(p->schema, pTableMeta->schema, numOfFields * sizeof(SSchema));
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue