tsync.h 4.1 KB
Newer Older
J
Jeff Tao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

#ifndef TDENGINE_SYNC_H
#define TDENGINE_SYNC_H

#ifdef __cplusplus
extern "C" {
#endif

#define TAOS_SYNC_MAX_REPLICA 5
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
24
#define TAOS_SYNC_MAX_INDEX   0x7FFFFFFF
J
Jeff Tao 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

typedef enum _TAOS_SYNC_ROLE {
  TAOS_SYNC_ROLE_OFFLINE,
  TAOS_SYNC_ROLE_UNSYNCED,
  TAOS_SYNC_ROLE_SLAVE,
  TAOS_SYNC_ROLE_MASTER,
} ESyncRole;

typedef enum _TAOS_SYNC_STATUS {
  TAOS_SYNC_STATUS_INIT,
  TAOS_SYNC_STATUS_START,
  TAOS_SYNC_STATUS_FILE,
  TAOS_SYNC_STATUS_CACHE,
} ESyncStatus;

typedef struct {
  uint32_t  nodeId;    // node ID assigned by TDengine
J
jtao1735 已提交
42 43
  uint16_t  nodePort;  // node sync Port
  char      nodeFqdn[TSDB_FQDN_LEN]; // node FQDN  
J
Jeff Tao 已提交
44 45 46 47 48 49 50
} SNodeInfo;

typedef struct {
  int8_t     quorum;    // number of confirms required, >=1 
  int8_t     replica;   // number of replications, >=1
  SNodeInfo  nodeInfo[TAOS_SYNC_MAX_REPLICA];
} SSyncCfg;
J
Jeff Tao 已提交
51 52 53 54 55 56

typedef struct {
  int       selfIndex;
  uint32_t  nodeId[TAOS_SYNC_MAX_REPLICA];
  int       role[TAOS_SYNC_MAX_REPLICA];  
} SNodesRole;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
57 58 59 60 61 62 63 64 65 66

/* 
  if name is empty(name[0] is zero), get the file from index or after, but not larger than eindex. If a file
  is found between index and eindex, index shall be updated, name shall be set, size shall be set to 
  file size, and file magic number shall be returned. 

  if name is provided(name[0] is not zero), get the named file at the specified index. If not there, return
  zero. If it is there, set the size to file size, and return file magic number. Index shall not be updated.
*/
typedef uint32_t (*FGetFileInfo)(void *ahandle, char *name, uint32_t *index, uint32_t eindex, int32_t *size, uint64_t *fversion); 
J
Jeff Tao 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80

// get the wal file from index or after
// return value, -1: error, 1:more wal files, 0:last WAL. if name[0]==0, no WAL file
typedef int      (*FGetWalInfo)(void *ahandle, char *name, uint32_t *index); 
 
// when a forward pkt is received, call this to handle data 
typedef int      (*FWriteToCache)(void *ahandle, void *pHead, int type);

// when forward is confirmed by peer, master call this API to notify app
typedef void     (*FConfirmForward)(void *ahandle, void *mhandle, int32_t code);

// when role is changed, call this to notify app
typedef void     (*FNotifyRole)(void *ahandle, int8_t role);

81
// when data file is synced successfully, notity app
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
82
typedef void     (*FNotifyFileSynced)(void *ahandle, uint64_t fversion);
83

J
Jeff Tao 已提交
84 85 86
typedef struct {
  int32_t    vgId;      // vgroup ID
  uint64_t   version;   // initial version
87 88
  SSyncCfg   syncCfg;   // configuration from mgmt
  char       path[128]; // path to the file
J
Jeff Tao 已提交
89
 
90
  void      *ahandle;   // handle provided by APP 
J
Jeff Tao 已提交
91 92 93 94 95
  FGetFileInfo    getFileInfo;
  FGetWalInfo     getWalInfo;
  FWriteToCache   writeToCache;
  FConfirmForward confirmForward;
  FNotifyRole     notifyRole;
96
  FNotifyFileSynced notifyFileSynced;
J
Jeff Tao 已提交
97 98 99 100
} SSyncInfo;

typedef void* tsync_h;

J
Jeff Tao 已提交
101
tsync_h syncStart(const SSyncInfo *);
J
Jeff Tao 已提交
102
void    syncStop(tsync_h shandle);
103 104
int32_t syncReconfig(tsync_h shandle, const SSyncCfg *);
int32_t syncForwardToPeer(tsync_h shandle, void *pHead, void *mhandle, int qtype);
J
Jeff Tao 已提交
105 106 107 108 109 110
void    syncConfirmForward(tsync_h shandle, uint64_t version, int32_t code);
void    syncRecover(tsync_h shandle);      // recover from other nodes:
int     syncGetNodesRole(tsync_h shandle, SNodesRole *);

extern  char *syncRole[];

J
Jeff Tao 已提交
111
//global configurable parameters
J
Jeff Tao 已提交
112 113 114
extern  int   tsMaxSyncNum;
extern  int   tsSyncTcpThreads;
extern  int   tsMaxWatchFiles;
J
Jeff Tao 已提交
115
extern  int   tsSyncTimer;
J
Jeff Tao 已提交
116
extern  int   tsMaxFwdInfo; 
J
Jeff Tao 已提交
117
extern  int   sDebugFlag;
J
jtao1735 已提交
118
extern  char  tsArbitrator[];
S
slguan 已提交
119
extern  uint16_t tsSyncPort;
J
Jeff Tao 已提交
120 121 122 123 124 125

#ifdef __cplusplus
}
#endif

#endif  // TDENGINE_SYNC_H