tq data structure defined
This commit is contained in:
parent
dd9ac9bbb9
commit
a1fbaf30ab
|
@ -1,4 +1,6 @@
|
|||
build/
|
||||
compile_commands.json
|
||||
.cache
|
||||
.ycm_extra_conf.py
|
||||
.vscode/
|
||||
.idea/
|
||||
|
@ -96,4 +98,4 @@ tramp
|
|||
TAGS
|
||||
|
||||
deps/*
|
||||
!deps/CMakeLists.txt
|
||||
!deps/CMakeLists.txt
|
||||
|
|
|
@ -22,8 +22,26 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct STQ STQ;
|
||||
typedef struct tqTopicVhandle {
|
||||
//name
|
||||
//
|
||||
//executor for filter
|
||||
//
|
||||
//callback for mnode
|
||||
//
|
||||
} tqTopic;
|
||||
|
||||
typedef struct STQ {
|
||||
//the set for topics
|
||||
//key=topicName: str
|
||||
//value=tqTopicVhandle
|
||||
|
||||
//a map
|
||||
//key=<topic: str, cgId: int64_t>
|
||||
//value=consumeOffset: int64_t
|
||||
} STQ;
|
||||
|
||||
//init in each vnode
|
||||
STQ* tqInit(void* ref_func(void*), void* unref_func(void*));
|
||||
void tqCleanUp(STQ*);
|
||||
|
||||
|
|
|
@ -18,23 +18,38 @@
|
|||
|
||||
#include "tq.h"
|
||||
|
||||
#define TQ_BUFFER_SIZE 8
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//implement the array index
|
||||
//implement the ring buffer
|
||||
typedef struct tqBufferItem {
|
||||
int64_t offset;
|
||||
void *content;
|
||||
} tqBufferItem;
|
||||
|
||||
|
||||
typedef struct tqGroupHandle {
|
||||
char* topic;
|
||||
void* ahandle;
|
||||
int64_t cgId;
|
||||
int64_t consumeOffset;
|
||||
int32_t head;
|
||||
int32_t tail;
|
||||
tqBufferItem buffer[TQ_BUFFER_SIZE];
|
||||
} tqGroupHandle;
|
||||
|
||||
//create persistent storage for meta info such as consuming offset
|
||||
//return value > 0: cgId
|
||||
//return value <= 0: error code
|
||||
int tqCreateGroup(STQ*);
|
||||
int tqCreateTCGroup(STQ*, const char* topic, int cgId, tqGroupHandle** handle);
|
||||
//create ring buffer in memory and load consuming offset
|
||||
int tqOpenGroup(STQ*, int cgId);
|
||||
int tqOpenTCGroup(STQ*, const char* topic, int cgId);
|
||||
//destroy ring buffer and persist consuming offset
|
||||
int tqCloseGroup(STQ*, int cgId);
|
||||
int tqCloseTCGroup(STQ*, const char* topic, int cgId);
|
||||
//delete persistent storage for meta info
|
||||
int tqDropGroup(STQ*, int cgId);
|
||||
int tqDropTCGroup(STQ*, const char* topic, int cgId);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -22,12 +22,65 @@
|
|||
//
|
||||
//handle management message
|
||||
|
||||
static tqGroupHandle* tqLookupGroupHandle(STQ *pTq, const char* topic, int cgId) {
|
||||
//look in memory
|
||||
//
|
||||
//not found, try to restore from disk
|
||||
//
|
||||
//still not found
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int tqCommitTCGroup(tqGroupHandle* handle) {
|
||||
//persist into disk
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqCreateTCGroup(STQ *pTq, const char* topic, int cgId, tqGroupHandle** handle) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqOpenTGroup(STQ* pTq, const char* topic, int cgId) {
|
||||
int code;
|
||||
tqGroupHandle* handle = tqLookupGroupHandle(pTq, topic, cgId);
|
||||
if(handle == NULL) {
|
||||
code = tqCreateTCGroup(pTq, topic, cgId, &handle);
|
||||
if(code != 0) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
ASSERT(handle != NULL);
|
||||
|
||||
//put into STQ
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqCloseTCGroup(STQ* pTq, const char* topic, int cgId) {
|
||||
tqGroupHandle* handle = tqLookupGroupHandle(pTq, topic, cgId);
|
||||
return tqCommitTCGroup(handle);
|
||||
}
|
||||
|
||||
int tqDropTCGroup(STQ* pTq, const char* topic, int cgId) {
|
||||
//delete from disk
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqPushMsg(STQ* pTq , void* p, int64_t version) {
|
||||
//add reference
|
||||
//
|
||||
//judge and launch new query
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqCommit(STQ* pTq) {
|
||||
//do nothing
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tqHandleMsg(STQ* pTq, void*msg) {
|
||||
//parse msg and extract topic and cgId
|
||||
//lookup handle
|
||||
//confirm message and send to consumer
|
||||
//judge and launch new query
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue