diff --git a/source/server/vnode/tq/inc/tqMetaStore.h b/source/server/vnode/tq/inc/tqMetaStore.h index 6319b32a10c42f5c87692e42c36973f9b485c57a..066e76028d43d0fdacf3971863ba0b83a04d119b 100644 --- a/source/server/vnode/tq/inc/tqMetaStore.h +++ b/source/server/vnode/tq/inc/tqMetaStore.h @@ -43,35 +43,33 @@ typedef struct TqMetaList { typedef struct TqMetaStore { TqMetaList* inUse[TQ_INUSE_SIZE]; + //a table head, key is empty TqMetaList* unpersistHead; - //deserializer - //serializer - //deleter + int fileFd; //TODO:temporaral use + int idxFd; //TODO:temporaral use + void* (*serializer)(void*); + void* (*deserializer)(void*); + void (*deleter)(void*); } TqMetaStore; -typedef struct TqMetaPageBuf { - int16_t offset; - char buffer[TQ_PAGE_SIZE]; -} TqMetaPageBuf; +TqMetaStore* tqStoreOpen(const char* path, void* serializer(void* ), void* deserializer(void*), void deleter(void*)); +int32_t tqStoreClose(TqMetaStore*); +int32_t tqStoreDelete(TqMetaStore*); +//int32_t TqStoreCommitAll(TqMetaStore*); +int32_t tqStorePersist(TqMetaStore*); -TqMetaStore* TqStoreOpen(const char* path, void* serializer(void* ), void* deserializer(void*)); -int32_t TqStoreClose(TqMetaStore*); -int32_t TqStoreDelete(TqMetaStore*); -int32_t TqStoreCommitAll(TqMetaStore*); -int32_t TqStorePersist(TqMetaStore*); - -TqMetaHandle* TqHandleGetInUse(TqMetaStore*, int64_t key); -int32_t TqHandlePutInUse(TqMetaStore*, TqMetaHandle* handle); -TqMetaHandle* TqHandleGetInTxn(TqMetaStore*, int64_t key); -int32_t TqHandlePutInTxn(TqMetaStore*, TqMetaHandle* handle); +TqMetaHandle* tqHandleGetInUse(TqMetaStore*, int64_t key); +int32_t tqHandlePutInUse(TqMetaStore*, TqMetaHandle* handle); +TqMetaHandle* tqHandleGetInTxn(TqMetaStore*, int64_t key); +int32_t tqHandlePutInTxn(TqMetaStore*, TqMetaHandle* handle); //delete in-use-handle, make in-txn-handle in use -int32_t TqHandleCommit(TqMetaStore*, int64_t key); +int32_t tqHandleCommit(TqMetaStore*, int64_t key); //delete in-txn-handle -int32_t TqHandleAbort(TqMetaStore*, int64_t key); +int32_t tqHandleAbort(TqMetaStore*, int64_t key); //delete in-use-handle -int32_t TqHandleDel(TqMetaStore*, int64_t key); +int32_t tqHandleDel(TqMetaStore*, int64_t key); //delete in-use-handle and in-txn-handle -int32_t TqHandleClear(TqMetaStore*, int64_t key); +int32_t tqHandleClear(TqMetaStore*, int64_t key); #ifdef __cplusplus } diff --git a/source/server/vnode/tq/src/tqMetaStore.c b/source/server/vnode/tq/src/tqMetaStore.c index f2f48bbc8a69a022d0fc6b8a88c5a9a55d0b4ad6..d652058c7452b92b3a0f803221f4782d56671fa6 100644 --- a/source/server/vnode/tq/src/tqMetaStore.c +++ b/source/server/vnode/tq/src/tqMetaStore.c @@ -12,3 +12,101 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +#include "tqMetaStore.h" +//TODO:replace by a abstract file layer +#include +#include + +typedef struct TqMetaPageBuf { + int16_t offset; + char buffer[TQ_PAGE_SIZE]; +} TqMetaPageBuf; + +TqMetaStore* tqStoreOpen(const char* path, void* serializer(void*), + void* deserializer(void*), void deleter(void*)) { + //concat data file name and index file name + int fileFd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0755); + if(fileFd < 0) return NULL; + TqMetaStore* pMeta = malloc(sizeof(TqMetaStore)); + if(pMeta == NULL) { + //close + return NULL; + } + memset(pMeta, 0, sizeof(TqMetaStore)); + pMeta->fileFd = fileFd; + + int idxFd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0755); + if(idxFd < 0) { + //close file + //free memory + return NULL; + } + pMeta->idxFd = idxFd; + pMeta->unpersistHead = malloc(sizeof(TqMetaList)); + if(pMeta->unpersistHead == NULL) { + //close file + //free memory + return NULL; + } + pMeta->serializer = serializer; + pMeta->deserializer = deserializer; + pMeta->deleter = deleter; + return pMeta; +} + +int32_t tqStoreClose(TqMetaStore* pMeta) { + //commit data and idx + //close file + //free memory + return 0; +} + +int32_t tqStoreDelete(TqMetaStore* pMeta) { + //close file + //delete file + //free memory + return 0; +} + +int32_t tqStorePersist(TqMetaStore* pMeta) { + TqMetaList *node = pMeta->unpersistHead; + while(node->unpersistNext) { + //serialize + //append data + //write offset and idx + //remove from unpersist list + } + return 0; +} + +int32_t tqHandlePutInUse(TqMetaStore* pMeta, TqMetaHandle* handle) { + return 0; +} + +TqMetaHandle* tqHandleGetInUse(TqMetaStore* pMeta, int64_t key) { + return NULL; +} + +int32_t tqHandlePutInTxn(TqMetaStore* pMeta, TqMetaHandle* handle) { + return 0; +} + +TqMetaHandle* tqHandleGetInTxn(TqMetaStore* pMeta, int64_t key) { + return NULL; +} + +int32_t tqHandleCommit(TqMetaStore* pMeta, int64_t key) { + return 0; +} + +int32_t tqHandleAbort(TqMetaStore* pMeta, int64_t key) { + return 0; +} + +int32_t tqHandleDel(TqMetaStore* pMeta, int64_t key) { + return 0; +} + +int32_t tqHandleClear(TqMetaStore* pMeta, int64_t key) { + return 0; +}