From 3279770f504c41209d6f9afc82ccf90443adf842 Mon Sep 17 00:00:00 2001 From: lichuang Date: Sat, 9 Oct 2021 16:25:58 +0800 Subject: [PATCH] [feature][TD-10557]add raft interface --- src/raft/inc/raft.h | 157 -------------------------------------------- 1 file changed, 157 deletions(-) delete mode 100644 src/raft/inc/raft.h diff --git a/src/raft/inc/raft.h b/src/raft/inc/raft.h deleted file mode 100644 index 222d8fe69d..0000000000 --- a/src/raft/inc/raft.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#ifndef TD_RAFT_H -#define TD_RAFT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "taosdef.h" - -typedef unsigned int RaftId; -typedef unsigned int RaftGroupId; - -// buffer holding data -typedef struct RaftBuffer { - void* data; - size_t len; -} RaftBuffer; - -// a single server information in a cluster -typedef struct RaftServer { - RaftId id; - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; -} RaftServer; - -// all servers in a cluster -typedef struct RaftConfiguration { - RaftServer *servers; - int nServer; -} RaftConfiguration; - -// raft lib module -struct Raft; -typedef struct Raft Raft; - -struct RaftNode; -typedef struct RaftNode RaftNode; - -// raft state machine -struct RaftFSM; -typedef struct RaftFSM { - // statemachine user data - void *data; - - // apply buffer data, bufs will be free by raft module - int (*apply)(struct RaftFSM *fsm, const RaftBuffer *bufs[], int nBufs); - - // fsm return snapshot in ppBuf, bufs will be free by raft module - // TODO: getSnapshot SHOULD be async? - int (*getSnapshot)(struct RaftFSM *fsm, RaftBuffer **ppBuf); - - // fsm restore with pBuf data - int (*restore)(struct RaftFSM *fsm, RaftBuffer *pBuf); - - // fsm send data in buf to server,buf will be free by raft module - int (*send)(struct RaftFSM* fsm, const RaftServer* server, const RaftBuffer *buf); -} RaftFSM; - -typedef struct RaftNodeOptions { - // user define state machine - RaftFSM* pFSM; - - // election timeout(in ms) - // by default: 150 - int electionTimeoutMS; - - // heart timeout(in ms) - // by default: 50 - int heartbeatTimeoutMS; - - // install snapshot timeout(in ms) - int installSnapshotTimeoutMS; - - /** - * number of log entries before starting a new snapshot. - * by default: 1024 - */ - int snapshotThreshold; - - /** - * Number of log entries to keep in the log after a snapshot has - * been taken. - * by default: 128. - */ - int snapshotTrailing; - - /** - * Enable or disable pre-vote support. - * by default: false - */ - bool preVote; - -} RaftNodeOptions; - -int RaftCreate(Raft** ppRaft); - -int RaftDestroy(Raft* pRaft); - -// start a raft node with options and cluster configuration -int RaftStart(Raft* pRaft, - RaftId selfId, - RaftGroupId selfGroupId, - const RaftNodeOptions* options, - const RaftConfiguration* cluster - RaftNode **ppNode); - -// stop a raft node -int RaftStop(RaftNode* pNode); - -// client apply a cmd in buf -typedef void (*RaftApplyFp)(const RaftBuffer *pBuf, int result); - -int RaftApply(RaftNode *pNode, - const RaftBuffer *pBuf, - RaftApplyFp applyCb); - -// recv data from other servers in cluster,buf will be free in raft -int RaftRecv(RaftNode *pNode, const RaftBuffer* pBuf); - -// change cluster servers API -typedef void (*RaftChangeFp)(const RaftServer* pServer, int result); - -int RaftAddServer(RaftNode *pNode, - const RaftServer* pServer, - RaftChangeFp changeCb); - -int RaftRemoveServer(RaftNode *pNode, - const RaftServer* pServer, - RaftChangeFp changeCb); - -// transfer leader to id -typedef void (*RaftTransferFp)(RaftId id, int result); -int RaftTransfer(RaftNode *pNode, - RaftId id, - RaftTransferFp transferCb); - -#ifdef __cplusplus -} -#endif - -#endif /* TD_RAFT_H */ \ No newline at end of file