diff --git a/source/dnode/vnode/src/inc/meta.h b/source/dnode/vnode/src/inc/meta.h index 92c89bf1f6e551b192eef53e4858a0c974f1e2e2..d10f4ee848438fec77fd6aa4f69781319d51850a 100644 --- a/source/dnode/vnode/src/inc/meta.h +++ b/source/dnode/vnode/src/inc/meta.h @@ -55,7 +55,7 @@ typedef struct SMetaEntryReader SMetaEntryReader; void metaEntryReaderInit(SMetaEntryReader* pReader); void metaEntryReaderClear(SMetaEntryReader* pReader); -int metaGetTableEntryByVersion(SMeta* pMeta, SMetaEntryReader* pReader, int64_t version); +int metaGetTableEntryByVersion(SMeta* pMeta, SMetaEntryReader* pReader, int64_t version, tb_uid_t uid); int metaGetTableEntryByUid(SMeta* pMeta, SMetaEntryReader* pReader, tb_uid_t uid); int metaGetTableEntryByName(SMeta* pMeta, SMetaEntryReader* pReader, const char* name); @@ -84,6 +84,11 @@ struct SMeta { SMetaIdx* pIdx; }; +typedef struct { + int64_t version; + tb_uid_t uid; +} STbDbKey; + typedef struct __attribute__((__packed__)) { tb_uid_t uid; int32_t sver; diff --git a/source/dnode/vnode/src/meta/metaOpen.c b/source/dnode/vnode/src/meta/metaOpen.c index 1dcd89e59c330654a943ebffe92b21cccbdb0e49..940bf3e440ef63a181740596dc555a7da06521af 100644 --- a/source/dnode/vnode/src/meta/metaOpen.c +++ b/source/dnode/vnode/src/meta/metaOpen.c @@ -52,7 +52,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) { } // open pTbDb - ret = tdbDbOpen("table.db", sizeof(int64_t), -1, tbDbKeyCmpr, pMeta->pEnv, &pMeta->pTbDb); + ret = tdbDbOpen("table.db", sizeof(STbDbKey), -1, tbDbKeyCmpr, pMeta->pEnv, &pMeta->pTbDb); if (ret < 0) { metaError("vgId: %d failed to open meta table db since %s", TD_VID(pVnode), tstrerror(terrno)); goto _err; @@ -143,12 +143,18 @@ int metaClose(SMeta *pMeta) { } static int tbDbKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kLen2) { - int64_t version1 = *(int64_t *)pKey1; - int64_t version2 = *(int64_t *)pKey2; + STbDbKey *pTbDbKey1 = (STbDbKey *)pKey1; + STbDbKey *pTbDbKey2 = (STbDbKey *)pKey2; - if (version1 > version2) { + if (pTbDbKey1->version > pTbDbKey2->version) { return 1; - } else if (version1 < version2) { + } else if (pTbDbKey1->version < pTbDbKey2->version) { + return -1; + } + + if (pTbDbKey1->uid > pTbDbKey2->uid) { + return 1; + } else if (pTbDbKey1->uid < pTbDbKey2->uid) { return -1; } diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index d82ed56bc2628e9881228ac3ff16a582c09a8985..51d71454723e4ec0bad2157c6b067a07ddc711af 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -22,9 +22,11 @@ void metaEntryReaderClear(SMetaEntryReader *pReader) { TDB_FREE(pReader->pBuf); } -int metaGetTableEntryByVersion(SMeta *pMeta, SMetaEntryReader *pReader, int64_t version) { +int metaGetTableEntryByVersion(SMeta *pMeta, SMetaEntryReader *pReader, int64_t version, tb_uid_t uid) { + STbDbKey tbDbKey = {.version = version, .uid = uid}; + // query table.db - if (tdbDbGet(pMeta->pTbDb, &version, sizeof(version), &pReader->pBuf, &pReader->szBuf) < 0) { + if (tdbDbGet(pMeta->pTbDb, &tbDbKey, sizeof(tbDbKey), &pReader->pBuf, &pReader->szBuf) < 0) { goto _err; } @@ -50,7 +52,7 @@ int metaGetTableEntryByUid(SMeta *pMeta, SMetaEntryReader *pReader, tb_uid_t uid } version = *(int64_t *)pReader->pBuf; - return metaGetTableEntryByVersion(pMeta, pReader, version); + return metaGetTableEntryByVersion(pMeta, pReader, version, uid); } int metaGetTableEntryByName(SMeta *pMeta, SMetaEntryReader *pReader, const char *name) { diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index d4f1ac3e99f3d91177d907a0c35505c440927f38..ebb8db996c5278991e91d9f1dc648119c693d8fa 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -55,6 +55,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { if (metaSaveToTbDb(pMeta, version, &me) < 0) goto _err; // save to schema.db (TODO) + // if (metaSaveToSkmDb(pMeta) < 0) goto _err; // update uid idx if (metaUpdateUidIdx(pMeta, me.uid, version) < 0) goto _err; @@ -149,15 +150,19 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid) { } static int metaSaveToTbDb(SMeta *pMeta, int64_t version, const SMetaEntry *pME) { - void *pKey = NULL; - void *pVal = NULL; - int kLen = 0; - int vLen = 0; - SCoder coder = {0}; + STbDbKey tbDbKey; + void *pKey = NULL; + void *pVal = NULL; + int kLen = 0; + int vLen = 0; + SCoder coder = {0}; // set key and value - pKey = &version; - kLen = sizeof(version); + tbDbKey.version = version; + tbDbKey.uid = pME->uid; + + pKey = &tbDbKey; + kLen = sizeof(tbDbKey); if (tEncodeSize(metaEncodeEntry, pME, vLen) < 0) { goto _err;