vnode.h 5.0 KB
Newer Older
H
refact  
Hongze Cheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
/*
 * 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 已提交
14 15 16 17 18
 */

#ifndef _TD_VNODE_H_
#define _TD_VNODE_H_

H
refact  
Hongze Cheng 已提交
19
#include "os.h"
H
refact  
Hongze Cheng 已提交
20
#include "trpc.h"
H
refact  
Hongze Cheng 已提交
21 22

#include "meta.h"
H
refact  
Hongze Cheng 已提交
23
#include "tarray.h"
H
refact  
Hongze Cheng 已提交
24 25
#include "tq.h"
#include "tsdb.h"
H
refact  
Hongze Cheng 已提交
26
#include "wal.h"
S
Shengliang Guan 已提交
27

S
Shengliang Guan 已提交
28 29 30 31
#ifdef __cplusplus
extern "C" {
#endif

H
save  
Hongze Cheng 已提交
32
/* ------------------------ TYPES EXPOSED ------------------------ */
H
more  
Hongze Cheng 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
typedef struct SVnode SVnode;
typedef struct SVnodeCfg {
  /** vnode buffer pool options */
  struct {
    /** write buffer size */
    uint64_t wsize;
    /** use heap allocator or arena allocator */
    bool isHeapAllocator;
  };

  /** time to live of tables in this vnode */
  uint32_t ttl;

  /** data to keep in this vnode */
  uint32_t keep;

  /** if TS data is eventually consistency */
  bool isWeak;

  /** TSDB config */
  STsdbCfg tsdbCfg;

  /** META config */
  SMetaCfg metaCfg;

  /** TQ config */
  STqCfg tqCfg;

  /** WAL config */
  SWalCfg walCfg;
} SVnodeCfg;
H
save  
Hongze Cheng 已提交
64 65

/* ------------------------ SVnode ------------------------ */
H
refact  
Hongze Cheng 已提交
66 67 68 69
/**
 * @brief Open a VNODE.
 *
 * @param path path of the vnode
H
refact  
Hongze Cheng 已提交
70
 * @param pVnodeCfg options of the vnode
H
refact  
Hongze Cheng 已提交
71 72
 * @return SVnode* The vnode object
 */
H
refact  
Hongze Cheng 已提交
73
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg);
H
refact  
Hongze Cheng 已提交
74 75 76 77

/**
 * @brief Close a VNODE
 *
H
more  
Hongze Cheng 已提交
78
 * @param pVnode The vnode object to close
H
refact  
Hongze Cheng 已提交
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
 */
void vnodeClose(SVnode *pVnode);

/**
 * @brief Destroy a VNODE.
 *
 * @param path Path of the VNODE.
 */
void vnodeDestroy(const char *path);

/**
 * @brief Process an array of write messages.
 *
 * @param pVnode The vnode object.
 * @param pMsgs The array of SRpcMsg
 * @return int 0 for success, -1 for failure
 */
int vnodeProcessWMsgs(SVnode *pVnode, SArray *pMsgs);

/**
 * @brief Apply a write request message.
 *
 * @param pVnode The vnode object.
 * @param pMsg The request message
H
more  
Hongze Cheng 已提交
103
 * @param pRsp The response message
H
refact  
Hongze Cheng 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116
 * @return int 0 for success, -1 for failure
 */
int vnodeApplyWMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);

/**
 * @brief Process the sync request
 *
 * @param pVnode
 * @param pMsg
 * @param pRsp
 * @return int
 */
int vnodeProcessSyncReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
H
save  
Hongze Cheng 已提交
117

H
refact  
Hongze Cheng 已提交
118
/* ------------------------ SVnodeCfg ------------------------ */
H
refact  
Hongze Cheng 已提交
119 120 121 122 123
/**
 * @brief Initialize VNODE options.
 *
 * @param pOptions The options object to be initialized. It should not be NULL.
 */
H
refact  
Hongze Cheng 已提交
124
void vnodeOptionsInit(SVnodeCfg *pOptions);
H
refact  
Hongze Cheng 已提交
125 126 127 128 129 130

/**
 * @brief Clear VNODE options.
 *
 * @param pOptions Options to clear.
 */
H
refact  
Hongze Cheng 已提交
131
void vnodeOptionsClear(SVnodeCfg *pOptions);
H
save  
Hongze Cheng 已提交
132

H
refact  
Hongze Cheng 已提交
133 134
/* ------------------------ FOR COMPILE ------------------------ */

H
save  
Hongze Cheng 已提交
135 136
#if 1

H
Hongze Cheng 已提交
137
#include "taosmsg.h"
H
save  
Hongze Cheng 已提交
138
#include "trpc.h"
S
Shengliang Guan 已提交
139

H
refact  
Hongze Cheng 已提交
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
// typedef struct {
//   char     db[TSDB_FULL_DB_NAME_LEN];
//   int32_t  cacheBlockSize;  // MB
//   int32_t  totalBlocks;
//   int32_t  daysPerFile;
//   int32_t  daysToKeep0;
//   int32_t  daysToKeep1;
//   int32_t  daysToKeep2;
//   int32_t  minRowsPerFileBlock;
//   int32_t  maxRowsPerFileBlock;
//   int8_t   precision;  // time resolution
//   int8_t   compression;
//   int8_t   cacheLastRow;
//   int8_t   update;
//   int8_t   quorum;
//   int8_t   replica;
//   int8_t   selfIndex;
//   int8_t   walLevel;
//   int32_t  fsyncPeriod;  // millisecond
//   SReplica replicas[TSDB_MAX_REPLICA];
// } SVnodeCfg;
S
Shengliang Guan 已提交
161

S
Shengliang Guan 已提交
162 163 164 165 166 167
typedef enum {
  VN_MSG_TYPE_WRITE = 1,
  VN_MSG_TYPE_APPLY,
  VN_MSG_TYPE_SYNC,
  VN_MSG_TYPE_QUERY,
  VN_MSG_TYPE_FETCH
S
Shengliang Guan 已提交
168
} EVnMsgType;
S
Shengliang Guan 已提交
169

S
Shengliang Guan 已提交
170
typedef struct {
S
Shengliang Guan 已提交
171 172 173
  int32_t curNum;
  int32_t allocNum;
  SRpcMsg rpcMsg[];
S
Shengliang Guan 已提交
174
} SVnodeMsg;
S
Shengliang Guan 已提交
175

S
Shengliang Guan 已提交
176
typedef struct SDnode SDnode;
S
Shengliang Guan 已提交
177 178 179 180
typedef void (*SendMsgToDnodeFp)(SDnode *pDnd, struct SEpSet *epSet, struct SRpcMsg *rpcMsg);
typedef void (*SendMsgToMnodeFp)(SDnode *pDnd, struct SRpcMsg *rpcMsg);
typedef void (*SendRedirectMsgFp)(SDnode *pDnd, struct SRpcMsg *rpcMsg, bool forShell);
typedef int32_t (*PutMsgToVnodeQFp)(SDnode *pDnd, int32_t vgId, SVnodeMsg *pMsg);
S
Shengliang Guan 已提交
181

S
Shengliang Guan 已提交
182
typedef struct {
S
Shengliang Guan 已提交
183 184 185
  PutMsgToVnodeQFp putMsgToApplyQueueFp;
  SendMsgToDnodeFp sendMsgToDnodeFp;
  SendMsgToMnodeFp sendMsgToMnodeFp;
S
Shengliang Guan 已提交
186 187 188
} SVnodePara;

int32_t vnodeInit(SVnodePara);
S
Shengliang Guan 已提交
189
void    vnodeCleanup();
190

S
Shengliang Guan 已提交
191 192
int32_t vnodeAlter(SVnode *pVnode, const SVnodeCfg *pCfg);
SVnode *vnodeCreate(int32_t vgId, const char *path, const SVnodeCfg *pCfg);
S
Shengliang Guan 已提交
193
void    vnodeDrop(SVnode *pVnode);
S
Shengliang Guan 已提交
194 195
int32_t vnodeCompact(SVnode *pVnode);
int32_t vnodeSync(SVnode *pVnode);
S
Shengliang Guan 已提交
196

S
Shengliang Guan 已提交
197
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad);
S
Shengliang Guan 已提交
198 199 200 201

SVnodeMsg *vnodeInitMsg(int32_t msgNum);
int32_t    vnodeAppendMsg(SVnodeMsg *pMsg, SRpcMsg *pRpcMsg);
void       vnodeCleanupMsg(SVnodeMsg *pMsg);
S
Shengliang Guan 已提交
202
void       vnodeProcessMsg(SVnode *pVnode, SVnodeMsg *pMsg, EVnMsgType msgType);
S
Shengliang Guan 已提交
203

H
save  
Hongze Cheng 已提交
204 205
#endif

S
Shengliang Guan 已提交
206 207 208 209
#ifdef __cplusplus
}
#endif

210
#endif /*_TD_VNODE_H_*/