提交 159f3acd 编写于 作者: H Hongze Cheng

refact meta more

上级 0c1cde9c
...@@ -55,7 +55,7 @@ typedef struct SMetaEntryReader SMetaEntryReader; ...@@ -55,7 +55,7 @@ typedef struct SMetaEntryReader SMetaEntryReader;
void metaEntryReaderInit(SMetaEntryReader* pReader); void metaEntryReaderInit(SMetaEntryReader* pReader);
void metaEntryReaderClear(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 metaGetTableEntryByUid(SMeta* pMeta, SMetaEntryReader* pReader, tb_uid_t uid);
int metaGetTableEntryByName(SMeta* pMeta, SMetaEntryReader* pReader, const char* name); int metaGetTableEntryByName(SMeta* pMeta, SMetaEntryReader* pReader, const char* name);
...@@ -84,6 +84,11 @@ struct SMeta { ...@@ -84,6 +84,11 @@ struct SMeta {
SMetaIdx* pIdx; SMetaIdx* pIdx;
}; };
typedef struct {
int64_t version;
tb_uid_t uid;
} STbDbKey;
typedef struct __attribute__((__packed__)) { typedef struct __attribute__((__packed__)) {
tb_uid_t uid; tb_uid_t uid;
int32_t sver; int32_t sver;
......
...@@ -52,7 +52,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) { ...@@ -52,7 +52,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
} }
// open pTbDb // 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) { if (ret < 0) {
metaError("vgId: %d failed to open meta table db since %s", TD_VID(pVnode), tstrerror(terrno)); metaError("vgId: %d failed to open meta table db since %s", TD_VID(pVnode), tstrerror(terrno));
goto _err; goto _err;
...@@ -143,12 +143,18 @@ int metaClose(SMeta *pMeta) { ...@@ -143,12 +143,18 @@ int metaClose(SMeta *pMeta) {
} }
static int tbDbKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kLen2) { static int tbDbKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kLen2) {
int64_t version1 = *(int64_t *)pKey1; STbDbKey *pTbDbKey1 = (STbDbKey *)pKey1;
int64_t version2 = *(int64_t *)pKey2; STbDbKey *pTbDbKey2 = (STbDbKey *)pKey2;
if (version1 > version2) { if (pTbDbKey1->version > pTbDbKey2->version) {
return 1; 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; return -1;
} }
......
...@@ -22,9 +22,11 @@ void metaEntryReaderClear(SMetaEntryReader *pReader) { ...@@ -22,9 +22,11 @@ void metaEntryReaderClear(SMetaEntryReader *pReader) {
TDB_FREE(pReader->pBuf); 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 // 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; goto _err;
} }
...@@ -50,7 +52,7 @@ int metaGetTableEntryByUid(SMeta *pMeta, SMetaEntryReader *pReader, tb_uid_t uid ...@@ -50,7 +52,7 @@ int metaGetTableEntryByUid(SMeta *pMeta, SMetaEntryReader *pReader, tb_uid_t uid
} }
version = *(int64_t *)pReader->pBuf; 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) { int metaGetTableEntryByName(SMeta *pMeta, SMetaEntryReader *pReader, const char *name) {
......
...@@ -55,6 +55,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { ...@@ -55,6 +55,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) {
if (metaSaveToTbDb(pMeta, version, &me) < 0) goto _err; if (metaSaveToTbDb(pMeta, version, &me) < 0) goto _err;
// save to schema.db (TODO) // save to schema.db (TODO)
// if (metaSaveToSkmDb(pMeta) < 0) goto _err;
// update uid idx // update uid idx
if (metaUpdateUidIdx(pMeta, me.uid, version) < 0) goto _err; if (metaUpdateUidIdx(pMeta, me.uid, version) < 0) goto _err;
...@@ -149,15 +150,19 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid) { ...@@ -149,15 +150,19 @@ int metaDropTable(SMeta *pMeta, tb_uid_t uid) {
} }
static int metaSaveToTbDb(SMeta *pMeta, int64_t version, const SMetaEntry *pME) { static int metaSaveToTbDb(SMeta *pMeta, int64_t version, const SMetaEntry *pME) {
void *pKey = NULL; STbDbKey tbDbKey;
void *pVal = NULL; void *pKey = NULL;
int kLen = 0; void *pVal = NULL;
int vLen = 0; int kLen = 0;
SCoder coder = {0}; int vLen = 0;
SCoder coder = {0};
// set key and value // set key and value
pKey = &version; tbDbKey.version = version;
kLen = sizeof(version); tbDbKey.uid = pME->uid;
pKey = &tbDbKey;
kLen = sizeof(tbDbKey);
if (tEncodeSize(metaEncodeEntry, pME, vLen) < 0) { if (tEncodeSize(metaEncodeEntry, pME, vLen) < 0) {
goto _err; goto _err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册