dnd.h 5.6 KB
Newer Older
S
Shengliang Guan 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * 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/>.
 */

S
Shengliang Guan 已提交
16 17
#ifndef _TD_DND_INT_H_
#define _TD_DND_INT_H_
S
Shengliang Guan 已提交
18 19

#include "os.h"
S
Shengliang Guan 已提交
20 21

#include "cJSON.h"
H
Haojun Liao 已提交
22
#include "monitor.h"
S
Shengliang Guan 已提交
23 24
#include "tcache.h"
#include "tcrc32c.h"
H
Haojun Liao 已提交
25 26
#include "tdatablock.h"
#include "tglobal.h"
S
Shengliang Guan 已提交
27
#include "thash.h"
S
Shengliang Guan 已提交
28
#include "tlockfree.h"
S
Shengliang Guan 已提交
29
#include "tlog.h"
S
Shengliang Guan 已提交
30
#include "tmsg.h"
S
shm  
Shengliang Guan 已提交
31
#include "tprocess.h"
S
Shengliang Guan 已提交
32
#include "tqueue.h"
S
Shengliang Guan 已提交
33 34 35
#include "trpc.h"
#include "tthread.h"
#include "ttime.h"
S
Shengliang Guan 已提交
36
#include "tworker.h"
S
Shengliang Guan 已提交
37 38

#include "dnode.h"
S
Shengliang Guan 已提交
39 40

#include "bnode.h"
S
Shengliang Guan 已提交
41
#include "mnode.h"
S
Shengliang Guan 已提交
42 43
#include "qnode.h"
#include "snode.h"
S
Shengliang Guan 已提交
44
#include "tfs.h"
S
shm  
Shengliang Guan 已提交
45
#include "vnode.h"
S
shm  
Shengliang Guan 已提交
46 47 48 49

#ifdef __cplusplus
extern "C" {
#endif
S
shm  
Shengliang Guan 已提交
50

51 52 53 54 55 56
#define dFatal(...) { if (dDebugFlag & DEBUG_FATAL) { taosPrintLog("DND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define dError(...) { if (dDebugFlag & DEBUG_ERROR) { taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define dWarn(...)  { if (dDebugFlag & DEBUG_WARN)  { taosPrintLog("DND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define dInfo(...)  { if (dDebugFlag & DEBUG_INFO)  { taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
S
Shengliang Guan 已提交
57

S
shm  
Shengliang Guan 已提交
58
typedef enum { DNODE, VNODES, QNODE, SNODE, MNODE, BNODE, NODE_MAX } ENodeType;
S
shm  
Shengliang Guan 已提交
59
typedef enum { DND_STAT_INIT, DND_STAT_RUNNING, DND_STAT_STOPPED } EDndStatus;
S
shm  
Shengliang Guan 已提交
60
typedef enum { DND_ENV_INIT, DND_ENV_READY, DND_ENV_CLEANUP } EEnvStatus;
S
Shengliang Guan 已提交
61
typedef enum { DND_WORKER_SINGLE, DND_WORKER_MULTI } EWorkerType;
S
shm  
Shengliang Guan 已提交
62
typedef enum { PROC_SINGLE, PROC_CHILD, PROC_PARENT } EProcType;
S
Shengliang Guan 已提交
63

S
shm  
Shengliang Guan 已提交
64 65
typedef struct SMgmtFp      SMgmtFp;
typedef struct SMgmtWrapper SMgmtWrapper;
S
shm  
Shengliang Guan 已提交
66
typedef struct SMsgHandle   SMsgHandle;
S
shm  
Shengliang Guan 已提交
67 68 69 70 71 72
typedef struct SDnodeMgmt   SDnodeMgmt;
typedef struct SVnodesMgmt  SVnodesMgmt;
typedef struct SMnodeMgmt   SMnodeMgmt;
typedef struct SQnodeMgmt   SQnodeMgmt;
typedef struct SSnodeMgmt   SSnodeMgmt;
typedef struct SBnodeMgmt   SBnodeMgmt;
S
shm  
Shengliang Guan 已提交
73

S
shm  
Shengliang Guan 已提交
74
typedef int32_t (*NodeMsgFp)(void *pMgmt, SNodeMsg *pMsg);
S
shm  
Shengliang Guan 已提交
75
typedef int32_t (*OpenNodeFp)(SMgmtWrapper *pWrapper);
S
shm  
Shengliang Guan 已提交
76
typedef void (*CloseNodeFp)(SMgmtWrapper *pWrapper);
S
shm  
Shengliang Guan 已提交
77
typedef bool (*RequireNodeFp)(SMgmtWrapper *pWrapper);
S
shm  
Shengliang Guan 已提交
78

S
shm  
Shengliang Guan 已提交
79 80 81 82 83 84
typedef struct {
  EWorkerType type;
  const char *name;
  int32_t     minNum;
  int32_t     maxNum;
  void       *queueFp;
S
shm  
Shengliang Guan 已提交
85
  void       *param;
S
shm  
Shengliang Guan 已提交
86 87 88 89 90 91 92
  STaosQueue *queue;
  union {
    SQWorkerPool pool;
    SWWorkerPool mpool;
  };
} SDnodeWorker;

S
shm  
Shengliang Guan 已提交
93
typedef struct SMsgHandle {
S
shm  
Shengliang Guan 已提交
94
  NodeMsgFp     msgFp;
S
shm  
Shengliang Guan 已提交
95 96
  SMgmtWrapper *pWrapper;
} SMsgHandle;
S
shm  
Shengliang Guan 已提交
97 98

typedef struct SMgmtFp {
S
shm  
Shengliang Guan 已提交
99 100 101
  OpenNodeFp    openFp;
  CloseNodeFp   closeFp;
  RequireNodeFp requiredFp;
S
shm  
Shengliang Guan 已提交
102 103 104 105 106 107 108 109 110
} SMgmtFp;

typedef struct SMgmtWrapper {
  const char *name;
  char       *path;
  bool        required;
  EProcType   procType;
  SProcObj   *pProc;
  void       *pMgmt;
S
Shengliang Guan 已提交
111
  SDnode     *pDnode;
S
shm  
Shengliang Guan 已提交
112
  NodeMsgFp   msgFps[TDMT_MAX];
S
shm  
Shengliang Guan 已提交
113
  SMgmtFp     fp;
S
shm  
Shengliang Guan 已提交
114
} SMgmtWrapper;
S
Shengliang Guan 已提交
115

S
shm  
Shengliang Guan 已提交
116 117 118 119 120 121
typedef struct {
  void      *serverRpc;
  void      *clientRpc;
  SMsgHandle msgHandles[TDMT_MAX];
} STransMgmt;

S
Shengliang Guan 已提交
122
typedef struct SDnode {
S
shm  
Shengliang Guan 已提交
123 124 125
  int64_t      clusterId;
  int32_t      dnodeId;
  int32_t      numOfSupportVnodes;
S
shm  
Shengliang Guan 已提交
126
  int64_t      rebootTime;
S
shm  
Shengliang Guan 已提交
127 128 129 130 131 132 133 134 135
  char        *localEp;
  char        *localFqdn;
  char        *firstEp;
  char        *secondEp;
  char        *dataDir;
  SDiskCfg    *pDisks;
  int32_t      numOfDisks;
  uint16_t     serverPort;
  bool         dropped;
S
Shengliang Guan 已提交
136
  EDndStatus   status;
S
shm  
Shengliang Guan 已提交
137 138 139
  EDndEvent    event;
  EProcType    procType;
  SStartupReq  startup;
S
Shengliang Guan 已提交
140
  TdFilePtr    pLockFile;
S
shm  
Shengliang Guan 已提交
141
  STransMgmt   trans;
S
shm  
Shengliang Guan 已提交
142
  SMgmtWrapper wrappers[NODE_MAX];
S
Shengliang Guan 已提交
143 144
} SDnode;

S
shm  
Shengliang Guan 已提交
145 146 147 148 149 150 151 152 153 154
// dndInt.h
int32_t       dndInit();
void          dndCleanup();
EDndStatus    dndGetStatus(SDnode *pDnode);
void          dndSetStatus(SDnode *pDnode, EDndStatus stat);
const char   *dndStatStr(EDndStatus stat);
void          dndReportStartup(SDnode *pDnode, char *pName, char *pDesc);
void          dndGetStartup(SDnode *pDnode, SStartupReq *pStartup);
TdFilePtr     dndCheckRunning(char *dataDir);
SMgmtWrapper *dndGetWrapper(SDnode *pDnode, ENodeType nodeType);
S
shm  
Shengliang Guan 已提交
155
void          dndSetMsgHandle(SMgmtWrapper *pWrapper, int32_t msgType, NodeMsgFp nodeMsgFp);
S
shm  
Shengliang Guan 已提交
156
void          dndProcessStartupReq(SDnode *pDnode, SRpcMsg *pMsg);
S
shm  
Shengliang Guan 已提交
157 158 159 160 161

// dndMonitor.h
void dndSendMonitorReport(SDnode *pDnode);

// dndNode.h
S
shm  
Shengliang Guan 已提交
162
SDnode *dndCreate(const SDnodeOpt *pOption);
S
shm  
Shengliang Guan 已提交
163 164
void    dndClose(SDnode *pDnode);
int32_t dndRun(SDnode *pDnode);
S
shm  
Shengliang Guan 已提交
165
void    dndHandleEvent(SDnode *pDnode, EDndEvent event);
S
shm  
Shengliang Guan 已提交
166
void    dndSendRsp(SMgmtWrapper *pWrapper, SRpcMsg *pRsp);
S
shm  
Shengliang Guan 已提交
167
void    dndSendRedirectRsp(SMgmtWrapper *pWrapper, SRpcMsg *pRsp);
S
shm  
Shengliang Guan 已提交
168 169

// dndTransport.h
S
shm  
Shengliang Guan 已提交
170 171
int32_t dndSendReqToMnode(void *pWrapper, SRpcMsg *pMsg);
int32_t dndSendReqToDnode(void *pWrapper, SEpSet *pEpSet, SRpcMsg *pMsg);
S
shm  
Shengliang Guan 已提交
172 173

// dndWorker.h
S
shm  
Shengliang Guan 已提交
174
int32_t dndInitWorker(void *param, SDnodeWorker *pWorker, EWorkerType type, const char *name, int32_t minNum,
S
shm  
Shengliang Guan 已提交
175 176 177
                      int32_t maxNum, void *queueFp);
void    dndCleanupWorker(SDnodeWorker *pWorker);
int32_t dndWriteMsgToWorker(SDnodeWorker *pWorker, void *pCont, int32_t contLen);
S
shm  
Shengliang Guan 已提交
178

S
Shengliang Guan 已提交
179 180 181 182
#ifdef __cplusplus
}
#endif

S
Shengliang Guan 已提交
183
#endif /*_TD_DND_INT_H_*/