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