refact meta more
This commit is contained in:
parent
0c1cde9cfc
commit
159f3acd3c
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,6 +150,7 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid) {
|
|||
}
|
||||
|
||||
static int metaSaveToTbDb(SMeta *pMeta, int64_t version, const SMetaEntry *pME) {
|
||||
STbDbKey tbDbKey;
|
||||
void *pKey = NULL;
|
||||
void *pVal = NULL;
|
||||
int kLen = 0;
|
||||
|
@ -156,8 +158,11 @@ static int metaSaveToTbDb(SMeta *pMeta, int64_t version, const SMetaEntry *pME)
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue