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
more  
Hongze Cheng 已提交
133
/* ------------------------ REQUESTS ------------------------ */
H
more  
Hongze Cheng 已提交
134 135 136 137 138
typedef struct {
  uint64_t ver;
  char     req[];
} SVnodeReq;

H
more  
Hongze Cheng 已提交
139 140 141
typedef struct {
  int  err;
  char info[];
H
refact  
Hongze Cheng 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
} SVnodeRsp;

/// Create table request
typedef STbCfg SVCreateTableReq;
/// Drop table request
typedef struct {
  tb_uid_t uid;
} SVDropTableReq;
/// Alter table request
typedef struct {
  // TODO
} SVAlterTableReq;

int vnodeCreateTable(SVnode *pVnode, SVCreateTableReq *pReq, SVnodeRsp *pRsp);
int vnodeDropTable(SVnode *pVnode, SVDropTableReq *pReq, SVnodeRsp *pRsp);
int vnodeAlterTable(SVnode *pVnode, SVAlterTableReq *pReq, SVnodeRsp *pRsp);
H
more  
Hongze Cheng 已提交
158

H
refact  
Hongze Cheng 已提交
159 160
/* ------------------------ FOR COMPILE ------------------------ */

H
save  
Hongze Cheng 已提交
161 162
#if 1

H
Hongze Cheng 已提交
163
#include "taosmsg.h"
H
save  
Hongze Cheng 已提交
164
#include "trpc.h"
S
Shengliang Guan 已提交
165

H
refact  
Hongze Cheng 已提交
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
// 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 已提交
187

S
Shengliang Guan 已提交
188 189 190 191 192 193
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 已提交
194
} EVnMsgType;
S
Shengliang Guan 已提交
195

S
Shengliang Guan 已提交
196
typedef struct {
S
Shengliang Guan 已提交
197 198 199
  int32_t curNum;
  int32_t allocNum;
  SRpcMsg rpcMsg[];
S
Shengliang Guan 已提交
200
} SVnodeMsg;
S
Shengliang Guan 已提交
201

S
Shengliang Guan 已提交
202 203 204
int32_t vnodeAlter(SVnode *pVnode, const SVnodeCfg *pCfg);
int32_t vnodeCompact(SVnode *pVnode);
int32_t vnodeSync(SVnode *pVnode);
S
Shengliang Guan 已提交
205
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad);
S
Shengliang Guan 已提交
206 207 208 209

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

H
save  
Hongze Cheng 已提交
212 213
#endif

S
Shengliang Guan 已提交
214 215 216 217
#ifdef __cplusplus
}
#endif

218
#endif /*_TD_VNODE_H_*/