vnode.h 8.7 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
refact  
Hongze Cheng 已提交
24
#include "tarray.h"
S
Shengliang Guan 已提交
25
#include "tfs.h"
H
refact  
Hongze Cheng 已提交
26
#include "wal.h"
S
Shengliang Guan 已提交
27

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

S
Shengliang Guan 已提交
34 35 36 37
#ifdef __cplusplus
extern "C" {
#endif

H
Hongze Cheng 已提交
38
// vnode
H
Hongze Cheng 已提交
39 40 41 42 43 44
typedef struct SVnode    SVnode;
typedef struct SMetaCfg  SMetaCfg;  // todo: remove
typedef struct STsdbCfg  STsdbCfg;  // todo: remove
typedef struct STqCfg    STqCfg;    // todo: remove
typedef struct SVnodeCfg SVnodeCfg;

H
Hongze Cheng 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
int     vnodeInit();
void    vnodeCleanup();
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg);
void    vnodeClose(SVnode *pVnode);
void    vnodeDestroy(const char *path);
void    vnodeProcessWMsgs(SVnode *pVnode, SArray *pMsgs);
int     vnodeApplyWMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
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 vnodeAlter(SVnode *pVnode, const SVnodeCfg *pCfg);
int32_t vnodeCompact(SVnode *pVnode);
int32_t vnodeSync(SVnode *pVnode);
int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad);
H
Hongze Cheng 已提交
60
int     vnodeValidateTableHash(SVnodeCfg *pVnodeOptions, char *tableFName);
H
Hongze Cheng 已提交
61

H
Hongze Cheng 已提交
62
// meta
H
Hongze Cheng 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
typedef struct SMeta       SMeta;        // todo: remove
typedef struct SMTbCursor  SMTbCursor;   // todo: remove
typedef struct SMCtbCursor SMCtbCursor;  // todo: remove
typedef struct SMSmaCursor SMSmaCursor;  // todo: remove

#define META_SUPER_TABLE  TD_SUPER_TABLE
#define META_CHILD_TABLE  TD_CHILD_TABLE
#define META_NORMAL_TABLE TD_NORMAL_TABLE

typedef SVCreateTbReq   STbCfg;
typedef SVCreateTSmaReq SSmaCfg;

SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, bool isinline);
STSchema       *metaGetTbTSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver);
void           *metaGetSmaInfoByIndex(SMeta *pMeta, int64_t indexUid, bool isDecode);
STSmaWrapper   *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid);
SArray         *metaGetSmaTbUids(SMeta *pMeta, bool isDup);
int             metaGetTbNum(SMeta *pMeta);
SMTbCursor     *metaOpenTbCursor(SMeta *pMeta);
void            metaCloseTbCursor(SMTbCursor *pTbCur);
char           *metaTbCursorNext(SMTbCursor *pTbCur);
SMCtbCursor    *metaOpenCtbCursor(SMeta *pMeta, tb_uid_t uid);
void            metaCloseCtbCurosr(SMCtbCursor *pCtbCur);
tb_uid_t        metaCtbCursorNext(SMCtbCursor *pCtbCur);

SMSmaCursor *metaOpenSmaCursor(SMeta *pMeta, tb_uid_t uid);
void         metaCloseSmaCursor(SMSmaCursor *pSmaCur);
int64_t      metaSmaCursorNext(SMSmaCursor *pSmaCur);
H
Hongze Cheng 已提交
91

H
Hongze Cheng 已提交
92
// tsdb
H
Hongze Cheng 已提交
93 94 95 96 97 98 99 100 101 102
typedef struct STsdb          STsdb;
typedef struct SDataStatis    SDataStatis;
typedef struct STsdbQueryCond STsdbQueryCond;
typedef void                 *tsdbReaderT;

#define BLOCK_LOAD_OFFSET_SEQ_ORDER 1
#define BLOCK_LOAD_TABLE_SEQ_ORDER  2
#define BLOCK_LOAD_TABLE_RR_ORDER   3
#define TABLE_TID(t)                (t)->tid
#define TABLE_UID(t)                (t)->uid
H
Hongze Cheng 已提交
103 104 105 106 107 108 109 110 111 112
STsdb  *tsdbOpen(const char *path, int32_t vgId, const STsdbCfg *pTsdbCfg, SMemAllocatorFactory *pMAF, SMeta *pMeta,
                 STfs *pTfs);
void    tsdbClose(STsdb *);
void    tsdbRemove(const char *path);
int     tsdbInsertData(STsdb *pTsdb, SSubmitReq *pMsg, SSubmitRsp *pRsp);
int     tsdbPrepareCommit(STsdb *pTsdb);
int     tsdbCommit(STsdb *pTsdb);
int32_t tsdbInitSma(STsdb *pTsdb);
int32_t tsdbCreateTSma(STsdb *pTsdb, char *pMsg);
int32_t tsdbDropTSma(STsdb *pTsdb, char *pMsg);
H
Hongze Cheng 已提交
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
tsdbReaderT *tsdbQueryTables(STsdb *tsdb, STsdbQueryCond *pCond, STableGroupInfo *tableInfoGroup, uint64_t qId,
                             uint64_t taskId);
tsdbReaderT  tsdbQueryCacheLast(STsdb *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupList, uint64_t qId,
                                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);
int32_t      tsdbRetrieveDataBlockStatisInfo(tsdbReaderT *pTsdbReadHandle, SDataStatis **pBlockStatis);
SArray      *tsdbRetrieveDataBlock(tsdbReaderT *pTsdbReadHandle, SArray *pColumnIdList);
void         tsdbDestroyTableGroup(STableGroupInfo *pGroupList);
int32_t      tsdbGetOneTableGroup(void *pMeta, uint64_t uid, TSKEY startKey, STableGroupInfo *pGroupInfo);
int32_t      tsdbGetTableGroupFromIdList(STsdb *tsdb, SArray *pTableIdList, STableGroupInfo *pGroupInfo);
void         tsdbCleanupReadHandle(tsdbReaderT queryHandle);
H
Hongze Cheng 已提交
131 132 133 134
int32_t      tsdbUpdateSmaWindow(STsdb *pTsdb, SSubmitReq *pMsg, int64_t version);
int32_t      tsdbInsertTSmaData(STsdb *pTsdb, int64_t indexUid, const char *msg);
int32_t      tsdbDropTSmaData(STsdb *pTsdb, int64_t indexUid);
int32_t      tsdbInsertRSmaData(STsdb *pTsdb, char *msg);
H
Hongze Cheng 已提交
135 136

// tq
H
Hongze Cheng 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
enum {
  TQ_STREAM_TOKEN__DATA = 1,
  TQ_STREAM_TOKEN__WATERMARK,
  TQ_STREAM_TOKEN__CHECKPOINT,
};

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);
int     tqRetrieveDataBlockInfo(STqReadHandle *pHandle, SDataBlockInfo *pBlockInfo);
SArray *tqRetrieveDataBlock(STqReadHandle *pHandle);
H
Hongze Cheng 已提交
154

H
Hongze Cheng 已提交
155 156 157
// need to reposition
typedef struct SMgmtWrapper SMgmtWrapper;

H
Hongze Cheng 已提交
158
int32_t tdScanAndConvertSubmitMsg(SSubmitReq *pMsg);
H
Hongze Cheng 已提交
159

H
Hongze Cheng 已提交
160 161 162 163
// structs
struct SMetaCfg {
  uint64_t lruSize;
};
H
Hongze Cheng 已提交
164

H
Hongze Cheng 已提交
165
struct STsdbCfg {
H
Hongze Cheng 已提交
166 167 168 169 170 171 172 173 174 175 176
  int8_t   precision;
  int8_t   update;
  int8_t   compression;
  int32_t  daysPerFile;
  int32_t  minRowsPerFileBlock;
  int32_t  maxRowsPerFileBlock;
  int32_t  keep;
  int32_t  keep1;
  int32_t  keep2;
  uint64_t lruCacheSize;
  SArray  *retentions;
H
Hongze Cheng 已提交
177
};
H
Hongze Cheng 已提交
178

H
Hongze Cheng 已提交
179
struct STqCfg {
L
Liu Jicong 已提交
180
  int32_t reserved;
H
Hongze Cheng 已提交
181
};
L
Liu Jicong 已提交
182

H
Hongze Cheng 已提交
183
struct SVnodeCfg {
H
Hongze Cheng 已提交
184
  int32_t  vgId;
D
dapan1121 已提交
185
  uint64_t dbId;
S
Shengliang Guan 已提交
186
  STfs    *pTfs;
H
Hongze Cheng 已提交
187 188 189 190
  uint64_t wsize;
  uint64_t ssize;
  uint64_t lsize;
  bool     isHeapAllocator;
H
more  
Hongze Cheng 已提交
191 192
  uint32_t ttl;
  uint32_t keep;
L
Liu Jicong 已提交
193
  int8_t   streamMode;
H
Hongze Cheng 已提交
194
  bool     isWeak;
H
more  
Hongze Cheng 已提交
195 196
  STsdbCfg tsdbCfg;
  SMetaCfg metaCfg;
H
Hongze Cheng 已提交
197 198
  STqCfg   tqCfg;
  SWalCfg  walCfg;
S
Shengliang Guan 已提交
199
  SMsgCb   msgCb;
D
dapan1121 已提交
200 201
  uint32_t hashBegin;
  uint32_t hashEnd;
L
Liu Jicong 已提交
202
  int8_t   hashMethod;
H
Hongze Cheng 已提交
203
};
H
save  
Hongze Cheng 已提交
204

H
Hongze Cheng 已提交
205
struct STqReadHandle {
206
  int64_t           ver;
L
Liu Jicong 已提交
207
  int64_t           tbUid;
208
  SHashObj         *tbIdHash;
S
Shengliang Guan 已提交
209
  const SSubmitReq *pMsg;
210 211 212 213 214 215 216 217
  SSubmitBlk       *pBlock;
  SSubmitMsgIter    msgIter;
  SSubmitBlkIter    blkIter;
  SMeta            *pVnodeMeta;
  SArray           *pColIdList;  // SArray<int32_t>
  int32_t           sver;
  SSchemaWrapper   *pSchemaWrapper;
  STSchema         *pSchema;
H
Hongze Cheng 已提交
218
};
H
refact  
Hongze Cheng 已提交
219

H
Hongze Cheng 已提交
220
struct SDataStatis {
H
Hongze Cheng 已提交
221 222 223 224 225 226 227
  int16_t colId;
  int16_t maxIndex;
  int16_t minIndex;
  int16_t numOfNull;
  int64_t sum;
  int64_t max;
  int64_t min;
H
Hongze Cheng 已提交
228
};
L
Liu Jicong 已提交
229

H
Hongze Cheng 已提交
230 231 232 233 234 235 236 237
struct STsdbQueryCond {
  STimeWindow  twindow;
  int32_t      order;  // desc|asc order to iterate the data block
  int32_t      numOfCols;
  SColumnInfo *colList;
  bool         loadExternalRows;  // load external rows or not
  int32_t      type;              // data block load type:
};
H
save  
Hongze Cheng 已提交
238

H
Hongze Cheng 已提交
239 240 241 242
typedef struct {
  TSKEY    lastKey;
  uint64_t uid;
} STableKeyInfo;
243

H
Hongze Cheng 已提交
244 245 246 247 248
typedef struct STable {
  uint64_t  tid;
  uint64_t  uid;
  STSchema *pSchema;
} STable;
249

L
Liu Jicong 已提交
250 251 252 253 254 255 256 257 258 259
typedef struct {
  int8_t type;
  int8_t reserved[7];
  union {
    void   *data;
    int64_t wmTs;
    int64_t checkpointId;
  };
} STqStreamToken;

S
Shengliang Guan 已提交
260 261 262 263
#ifdef __cplusplus
}
#endif

264
#endif /*_TD_VNODE_H_*/