vnode.h 7.1 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"
S
Shengliang Guan 已提交
20
#include "tmsgcb.h"
L
Liu Jicong 已提交
21 22
#include "tqueue.h"
#include "trpc.h"
H
refact  
Hongze Cheng 已提交
23

H
Hongze Cheng 已提交
24
#include "sync.h"
H
refact  
Hongze Cheng 已提交
25
#include "tarray.h"
S
Shengliang Guan 已提交
26
#include "tfs.h"
H
refact  
Hongze Cheng 已提交
27
#include "wal.h"
S
Shengliang Guan 已提交
28

H
Hongze Cheng 已提交
29 30
#include "tcommon.h"
#include "tfs.h"
H
Hongze Cheng 已提交
31 32 33 34
#include "tmallocator.h"
#include "tmsg.h"
#include "trow.h"

H
Hongze Cheng 已提交
35
#include "tdb.h"
H
Hongze Cheng 已提交
36

S
Shengliang Guan 已提交
37 38 39
#ifdef __cplusplus
extern "C" {
#endif
C
Cary Xu 已提交
40
#define TSDB_VNODE_SMA_DEBUG  // TODO: evaluate to remove the macro and the relative codes
H
Hongze Cheng 已提交
41
// vnode
H
Hongze Cheng 已提交
42 43 44 45
typedef struct SVnode    SVnode;
typedef struct STsdbCfg  STsdbCfg;  // todo: remove
typedef struct SVnodeCfg SVnodeCfg;

H
Hongze Cheng 已提交
46 47
extern const SVnodeCfg vnodeCfgDefault;

H
more  
Hongze Cheng 已提交
48
int     vnodeInit(int nthreads);
H
Hongze Cheng 已提交
49
void    vnodeCleanup();
H
Hongze Cheng 已提交
50
int     vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs);
H
refact  
Hongze Cheng 已提交
51
void    vnodeDestroy(const char *path, STfs *pTfs);
H
Hongze Cheng 已提交
52
SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb);
H
Hongze Cheng 已提交
53
void    vnodeClose(SVnode *pVnode);
H
Hongze Cheng 已提交
54
int     vnodePreprocessWriteReqs(SVnode *pVnode, SArray *pMsgs, int64_t *version);
H
Hongze Cheng 已提交
55
int     vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg *pRsp);
H
Hongze Cheng 已提交
56 57 58 59 60
int     vnodeProcessCMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
int     vnodeProcessSyncReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
int     vnodeProcessQueryMsg(SVnode *pVnode, SRpcMsg *pMsg);
int     vnodeProcessFetchMsg(SVnode *pVnode, SRpcMsg *pMsg, SQueueInfo *pInfo);
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad);
H
Hongze Cheng 已提交
61
int     vnodeValidateTableHash(SVnode *pVnode, char *tableFName);
H
Hongze Cheng 已提交
62

63 64 65
int32_t vnodeStart(SVnode *pVnode);
void    vnodeStop(SVnode *pVnode);

H
Hongze Cheng 已提交
66
int64_t vnodeGetSyncHandle(SVnode *pVnode);
H
Hongze Cheng 已提交
67
void    vnodeGetSnapshot(SVnode *pVnode, SSnapshot *pSnapshot);
68
void    vnodeGetInfo(SVnode *pVnode, const char **dbname, int32_t *vgId);
H
Hongze Cheng 已提交
69

H
Hongze Cheng 已提交
70
// meta
H
Hongze Cheng 已提交
71 72 73 74
typedef struct SMeta       SMeta;  // todo: remove
typedef struct SMetaReader SMetaReader;
typedef struct SMetaEntry  SMetaEntry;

H
Hongze Cheng 已提交
75
void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags);
H
Hongze Cheng 已提交
76
void metaReaderClear(SMetaReader *pReader);
H
Hongze Cheng 已提交
77
int  metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid);
H
Hongze Cheng 已提交
78
int  metaReadNext(SMetaReader *pReader);
H
Hongze Cheng 已提交
79

H
Hongze Cheng 已提交
80
#if 1  // refact APIs below (TODO)
H
Hongze Cheng 已提交
81 82 83
typedef SVCreateTbReq   STbCfg;
typedef SVCreateTSmaReq SSmaCfg;

H
Hongze Cheng 已提交
84 85
typedef struct SMTbCursor SMTbCursor;

H
Hongze Cheng 已提交
86 87
SMTbCursor *metaOpenTbCursor(SMeta *pMeta);
void        metaCloseTbCursor(SMTbCursor *pTbCur);
H
Hongze Cheng 已提交
88
int         metaTbCursorNext(SMTbCursor *pTbCur);
H
Hongze Cheng 已提交
89
#endif
H
Hongze Cheng 已提交
90

H
Hongze Cheng 已提交
91
// tsdb
92
// typedef struct STsdb STsdb;
H
Hongze Cheng 已提交
93
typedef void        *tsdbReaderT;
H
Hongze Cheng 已提交
94 95 96 97

#define BLOCK_LOAD_OFFSET_SEQ_ORDER 1
#define BLOCK_LOAD_TABLE_SEQ_ORDER  2
#define BLOCK_LOAD_TABLE_RR_ORDER   3
H
Hongze Cheng 已提交
98

99
tsdbReaderT *tsdbQueryTables(SVnode *pVnode, SQueryTableDataCond *pCond, STableGroupInfo *tableInfoGroup, uint64_t qId,
H
Hongze Cheng 已提交
100
                             uint64_t taskId);
101
tsdbReaderT  tsdbQueryCacheLast(SVnode *pVnode, SQueryTableDataCond *pCond, STableGroupInfo *groupList, uint64_t qId,
H
Hongze Cheng 已提交
102 103 104 105 106 107 108 109 110
                                void *pMemRef);
int32_t      tsdbGetFileBlocksDistInfo(tsdbReaderT *pReader, STableBlockDistInfo *pTableBlockInfo);
bool         isTsdbCacheLastRow(tsdbReaderT *pReader);
int32_t      tsdbQuerySTableByTagCond(void *pMeta, uint64_t uid, TSKEY skey, const char *pTagCond, size_t len,
                                      int16_t tagNameRelType, const char *tbnameCond, STableGroupInfo *pGroupInfo,
                                      SColIndex *pColIndex, int32_t numOfCols, uint64_t reqId, uint64_t taskId);
int64_t      tsdbGetNumOfRowsInMemTable(tsdbReaderT *pHandle);
bool         tsdbNextDataBlock(tsdbReaderT pTsdbReadHandle);
void         tsdbRetrieveDataBlockInfo(tsdbReaderT *pTsdbReadHandle, SDataBlockInfo *pBlockInfo);
111
int32_t      tsdbRetrieveDataBlockStatisInfo(tsdbReaderT *pTsdbReadHandle, SColumnDataAgg ***pBlockStatis, bool* allHave);
H
Hongze Cheng 已提交
112
SArray      *tsdbRetrieveDataBlock(tsdbReaderT *pTsdbReadHandle, SArray *pColumnIdList);
H
Hongze Cheng 已提交
113
void         tsdbResetReadHandle(tsdbReaderT queryHandle, SQueryTableDataCond *pCond);
H
Hongze Cheng 已提交
114 115
void         tsdbDestroyTableGroup(STableGroupInfo *pGroupList);
int32_t      tsdbGetOneTableGroup(void *pMeta, uint64_t uid, TSKEY startKey, STableGroupInfo *pGroupInfo);
116
int32_t      tsdbGetTableGroupFromIdList(SVnode *pVnode, SArray *pTableIdList, STableGroupInfo *pGroupInfo);
H
Hongze Cheng 已提交
117 118

// tq
H
Hongze Cheng 已提交
119 120 121 122 123 124 125 126 127 128

typedef struct STqReadHandle STqReadHandle;

STqReadHandle *tqInitSubmitMsgScanner(SMeta *pMeta);

void    tqReadHandleSetColIdList(STqReadHandle *pReadHandle, SArray *pColIdList);
int     tqReadHandleSetTbUidList(STqReadHandle *pHandle, const SArray *tbUidList);
int     tqReadHandleAddTbUidList(STqReadHandle *pHandle, const SArray *tbUidList);
int32_t tqReadHandleSetMsg(STqReadHandle *pHandle, SSubmitReq *pMsg, int64_t ver);
bool    tqNextDataBlock(STqReadHandle *pHandle);
L
Liu Jicong 已提交
129
int32_t tqRetrieveDataBlock(SArray **ppCols, STqReadHandle *pHandle, uint64_t *pGroupId, int32_t *pNumOfRows,
L
Liu Jicong 已提交
130
                            int16_t *pNumOfCols);
H
Hongze Cheng 已提交
131

H
Hongze Cheng 已提交
132
// need to reposition
H
Hongze Cheng 已提交
133

H
Hongze Cheng 已提交
134 135
// structs
struct STsdbCfg {
H
Hongze Cheng 已提交
136 137 138 139 140 141 142 143 144 145
  int8_t  precision;
  int8_t  update;
  int8_t  compression;
  int8_t  slLevel;
  int32_t days;
  int32_t minRows;
  int32_t maxRows;
  int32_t keep0;
  int32_t keep1;
  int32_t keep2;
C
Cary Xu 已提交
146 147 148
  // TODO: save to tsdb cfg file
  int8_t     type;  // ETsdbType
  SRetention retentions[TSDB_RSMA_RETENTION_MAX];
H
Hongze Cheng 已提交
149
};
H
Hongze Cheng 已提交
150

C
Cary Xu 已提交
151 152 153 154 155 156 157 158
typedef enum {
  TSDB_TYPE_TSDB = 0,     // TSDB
  TSDB_TYPE_TSMA = 1,     // TSMA
  TSDB_TYPE_RSMA_L0 = 2,  // RSMA Level 0
  TSDB_TYPE_RSMA_L1 = 3,  // RSMA Level 1
  TSDB_TYPE_RSMA_L2 = 4,  // RSMA Level 2
} ETsdbType;

H
Hongze Cheng 已提交
159
struct SVnodeCfg {
H
Hongze Cheng 已提交
160
  int32_t  vgId;
H
Hongze Cheng 已提交
161
  char     dbname[TSDB_DB_NAME_LEN];
D
dapan1121 已提交
162
  uint64_t dbId;
H
Hongze Cheng 已提交
163 164
  int32_t  szPage;
  int32_t  szCache;
H
Hongze Cheng 已提交
165 166
  uint64_t szBuf;
  bool     isHeap;
H
Hongze Cheng 已提交
167
  bool     isWeak;
H
more  
Hongze Cheng 已提交
168
  STsdbCfg tsdbCfg;
H
Hongze Cheng 已提交
169
  SWalCfg  walCfg;
H
Hongze Cheng 已提交
170
  SSyncCfg syncCfg;  // sync integration
D
dapan1121 已提交
171 172
  uint32_t hashBegin;
  uint32_t hashEnd;
L
Liu Jicong 已提交
173
  int8_t   hashMethod;
H
Hongze Cheng 已提交
174
};
H
save  
Hongze Cheng 已提交
175

H
Hongze Cheng 已提交
176 177 178 179
typedef struct {
  TSKEY    lastKey;
  uint64_t uid;
} STableKeyInfo;
180

H
Hongze Cheng 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
struct SMetaEntry {
  int64_t     version;
  int8_t      type;
  tb_uid_t    uid;
  const char *name;
  union {
    struct {
      SSchemaWrapper schema;
      SSchemaWrapper schemaTag;
    } stbEntry;
    struct {
      int64_t     ctime;
      int32_t     ttlDays;
      tb_uid_t    suid;
      const void *pTags;
    } ctbEntry;
    struct {
      int64_t        ctime;
      int32_t        ttlDays;
      SSchemaWrapper schema;
    } ntbEntry;
  };
};

struct SMetaReader {
  int32_t    flags;
  SMeta     *pMeta;
  SCoder     coder;
  SMetaEntry me;
  void      *pBuf;
  int        szBuf;
};

H
Hongze Cheng 已提交
214 215 216 217 218 219 220 221 222
struct SMTbCursor {
  TDBC       *pDbc;
  void       *pKey;
  void       *pVal;
  int         kLen;
  int         vLen;
  SMetaReader mr;
};

S
Shengliang Guan 已提交
223 224 225 226
#ifdef __cplusplus
}
#endif

227
#endif /*_TD_VNODE_H_*/