refact meta more

This commit is contained in:
Hongze Cheng 2022-04-22 11:55:21 +00:00
parent 0c1cde9cfc
commit 159f3acd3c
4 changed files with 34 additions and 16 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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) {

View File

@ -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;