From 82f898753451e8feeacac99af4d0e1a056c55eef Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Wed, 22 Dec 2021 17:45:52 +0800 Subject: [PATCH] add raftServer code --- contrib/test/craft/raftMain.c | 107 ++++++++++++++++++++++++++++++++ contrib/test/craft/raftServer.c | 20 ++++++ contrib/test/craft/raftServer.h | 42 +++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 contrib/test/craft/raftMain.c create mode 100644 contrib/test/craft/raftServer.c create mode 100644 contrib/test/craft/raftServer.h diff --git a/contrib/test/craft/raftMain.c b/contrib/test/craft/raftMain.c new file mode 100644 index 0000000000..6e9f3b5dfb --- /dev/null +++ b/contrib/test/craft/raftMain.c @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "raftServer.h" + +#define COMMAND_LEN 128 + +const char *exe_name; + +void *startServerFunc(void *param) { + SRaftServer *pServer = (SRaftServer*)param; + int32_t r = raftServerStart(pServer); + assert(r == 0); + + return NULL; +} + +// Console --------------------------------- +void console(SRaftServer *pRaftServer) { + while (1) { + char cmd_buf[COMMAND_LEN]; + memset(cmd_buf, 0, sizeof(cmd_buf)); + char *ret = fgets(cmd_buf, COMMAND_LEN, stdin); + if (!ret) { + exit(-1); + } + + int pos = strlen(cmd_buf); + if(cmd_buf[pos - 1] == '\n') { + cmd_buf[pos - 1] = '\0'; + } + + if (strncmp(cmd_buf, "", COMMAND_LEN) == 0) { + continue; + } + + printf("cmd_buf: [%s] \n", cmd_buf); + } +} + +void *startConsoleFunc(void *param) { + SRaftServer *pServer = (SRaftServer*)param; + console(pServer); + return NULL; +} + +// Config --------------------------------- +#define DIR_LEN 128 +#define HOST_LEN 128 +typedef struct SRaftServerConfig { + char host[HOST_LEN]; + uint32_t port; + char dir[DIR_LEN]; +} SRaftServerConfig; + +void parseConf(int argc, char **argv, SRaftServerConfig *pConf) { + snprintf(pConf->dir, sizeof(pConf->dir), "%s", argv[1]); + sscanf(argv[2], "%u", &pConf->port); + snprintf(pConf->dir, sizeof(pConf->dir), "%s", argv[3]); +} + +// ----------------------------------------- +void usage() { + printf("\n"); + printf("usage: %s host port dir \n", exe_name); + printf("eg : %s 127.0.0.1 10000 ./data \n", exe_name); + printf("\n"); +} + +int main(int argc, char **argv) { + srand(time(NULL)); + int32_t ret; + + exe_name = argv[0]; + if (argc != 4) { + usage(); + exit(-1); + } + + SRaftServerConfig conf; + parseConf(argc, argv, &conf); + + struct raft_fsm fsm; + initFsm(&fsm); + + SRaftServer raftServer; + ret = raftServerInit(&raftServer, &conf, &fsm); + + pthread_t tidRaftServer; + pthread_create(&tidRaftServer, NULL, startServerFunc, &raftServer); + + pthread_t tidConsole; + pthread_create(&tidConsole, NULL, startConsoleFunc, &raftServer); + + while (1) { + sleep(10); + } + + return 0; +} diff --git a/contrib/test/craft/raftServer.c b/contrib/test/craft/raftServer.c new file mode 100644 index 0000000000..5633b211ac --- /dev/null +++ b/contrib/test/craft/raftServer.c @@ -0,0 +1,20 @@ +#include "raftServer.h" + +int32_t raftServerInit(SRaftServer *pRaftServer, struct SRaftServerConfig *pConf, struct raft_fsm *pFsm) { + + return 0; +} + +int32_t raftServerStart(SRaftServer *pRaftServer) { + +} + + +void raftServerClose(SRaftServer *pRaftServer) { + +} + +int32_t initFsm(struct raft_fsm *fsm) { + + return 0; +} diff --git a/contrib/test/craft/raftServer.h b/contrib/test/craft/raftServer.h new file mode 100644 index 0000000000..9a717260de --- /dev/null +++ b/contrib/test/craft/raftServer.h @@ -0,0 +1,42 @@ +#ifndef TDENGINE_RAFT_SERVER_H +#define TDENGINE_RAFT_SERVER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "raft.h" +#include "raft/uv.h" + + + +#define DIR_LEN 128 +#define ADDRESS_LEN 128 +typedef struct { + char dir[DIR_LEN]; /* Data dir of UV I/O backend */ + char address[ADDRESS_LEN]; /* Raft instance address */ + raft_id raftId; /* For vote */ + struct raft_fsm *fsm; /* Sample application FSM */ + + struct raft raft; /* Raft instance */ + struct raft_io io; /* UV I/O backend */ + struct uv_loop_s loop; /* UV loop */ + struct raft_uv_transport transport; /* UV I/O backend transport */ +} SRaftServer; + +struct SRaftServerConfig; +int32_t raftServerInit(SRaftServer *pRaftServer, struct SRaftServerConfig *pConf, struct raft_fsm *pFsm); +int32_t raftServerStart(SRaftServer *pRaftServer); +void raftServerClose(SRaftServer *pRaftServer); + + +int initFsm(struct raft_fsm *fsm); + + + + +#ifdef __cplusplus +} +#endif + +#endif // TDENGINE_RAFT_SERVER_H -- GitLab