vnode.h 5.5 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
more  
Hongze Cheng 已提交
66 67
/**
 * @brief Initialize the vnode module
H
more  
Hongze Cheng 已提交
68
 *
H
more  
Hongze Cheng 已提交
69 70 71 72 73 74
 * @return int 0 for success and -1 for failure
 */
int vnodeInit();

/**
 * @brief clear a vnode
H
more  
Hongze Cheng 已提交
75
 *
H
more  
Hongze Cheng 已提交
76 77 78
 */
void vnodeClear();

H
refact  
Hongze Cheng 已提交
79 80 81 82
/**
 * @brief Open a VNODE.
 *
 * @param path path of the vnode
H
refact  
Hongze Cheng 已提交
83
 * @param pVnodeCfg options of the vnode
H
refact  
Hongze Cheng 已提交
84 85
 * @return SVnode* The vnode object
 */
H
refact  
Hongze Cheng 已提交
86
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg);
H
refact  
Hongze Cheng 已提交
87 88 89 90

/**
 * @brief Close a VNODE
 *
H
more  
Hongze Cheng 已提交
91
 * @param pVnode The vnode object to close
H
refact  
Hongze Cheng 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
 */
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 已提交
116
 * @param pRsp The response message
H
refact  
Hongze Cheng 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129
 * @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 已提交
130

H
refact  
Hongze Cheng 已提交
131
/* ------------------------ SVnodeCfg ------------------------ */
H
refact  
Hongze Cheng 已提交
132 133 134 135 136
/**
 * @brief Initialize VNODE options.
 *
 * @param pOptions The options object to be initialized. It should not be NULL.
 */
H
refact  
Hongze Cheng 已提交
137
void vnodeOptionsInit(SVnodeCfg *pOptions);
H
refact  
Hongze Cheng 已提交
138 139 140 141 142 143

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

H
more  
Hongze Cheng 已提交
146
/* ------------------------ REQUESTS ------------------------ */
H
more  
Hongze Cheng 已提交
147 148 149 150 151
typedef STbCfg SVCreateTableReq;
typedef struct {
  tb_uid_t uid;
} SVDropTableReq;

H
more  
Hongze Cheng 已提交
152 153 154 155
typedef struct {
  // TODO
} SVSubmitReq;

H
more  
Hongze Cheng 已提交
156 157
typedef struct {
  uint64_t ver;
H
more  
Hongze Cheng 已提交
158 159 160 161
  union {
    SVCreateTableReq ctReq;
    SVDropTableReq   dtReq;
  };
H
more  
Hongze Cheng 已提交
162 163
} SVnodeReq;

H
more  
Hongze Cheng 已提交
164 165 166
typedef struct {
  int  err;
  char info[];
H
refact  
Hongze Cheng 已提交
167 168
} SVnodeRsp;

H
more  
Hongze Cheng 已提交
169 170
#define VNODE_INIT_CREATE_STB_REQ(NAME, TTL, KEEP, SUID, PSCHEMA, PTAGSCHEMA) \
  { .ver = 0, .ctReq = META_INIT_STB_CFG(NAME, TTL, KEEP, SUID, PSCHEMA, PTAGSCHEMA) }
H
more  
Hongze Cheng 已提交
171

H
more  
Hongze Cheng 已提交
172 173
#define VNODE_INIT_CREATE_CTB_REQ(NAME, TTL, KEEP, SUID, PTAG) \
  { .ver = 0, .ctReq = META_INIT_CTB_CFG(NAME, TTL, KEEP, SUID, PTAG) }
H
more  
Hongze Cheng 已提交
174

H
more  
Hongze Cheng 已提交
175 176
#define VNODE_INIT_CREATE_NTB_REQ(NAME, TTL, KEEP, SUID, PSCHEMA) \
  { .ver = 0, .ctReq = META_INIT_NTB_CFG(NAME, TTL, KEEP, SUID, PSCHEMA) }
H
more  
Hongze Cheng 已提交
177 178 179

int   vnodeBuildReq(void **buf, const SVnodeReq *pReq, uint8_t type);
void *vnodeParseReq(void *buf, SVnodeReq *pReq, uint8_t type);
H
refact  
Hongze Cheng 已提交
180

H
refact  
Hongze Cheng 已提交
181 182
/* ------------------------ FOR COMPILE ------------------------ */

H
save  
Hongze Cheng 已提交
183 184
#if 1

H
Hongze Cheng 已提交
185
#include "taosmsg.h"
H
save  
Hongze Cheng 已提交
186
#include "trpc.h"
S
Shengliang Guan 已提交
187

H
refact  
Hongze Cheng 已提交
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
// 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 已提交
209

S
Shengliang Guan 已提交
210 211 212 213 214 215
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 已提交
216
} EVnMsgType;
S
Shengliang Guan 已提交
217

S
Shengliang Guan 已提交
218
typedef struct {
S
Shengliang Guan 已提交
219 220 221
  int32_t curNum;
  int32_t allocNum;
  SRpcMsg rpcMsg[];
S
Shengliang Guan 已提交
222
} SVnodeMsg;
S
Shengliang Guan 已提交
223

S
Shengliang Guan 已提交
224 225 226
int32_t vnodeAlter(SVnode *pVnode, const SVnodeCfg *pCfg);
int32_t vnodeCompact(SVnode *pVnode);
int32_t vnodeSync(SVnode *pVnode);
S
Shengliang Guan 已提交
227
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad);
S
Shengliang Guan 已提交
228 229 230 231

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

H
save  
Hongze Cheng 已提交
234 235
#endif

S
Shengliang Guan 已提交
236 237 238 239
#ifdef __cplusplus
}
#endif

240
#endif /*_TD_VNODE_H_*/