vnode.h 6.8 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 36
#include "tdbInt.h"

S
Shengliang Guan 已提交
37 38 39 40
#ifdef __cplusplus
extern "C" {
#endif

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 61 62 63
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 已提交
64
int     vnodeValidateTableHash(SVnode *pVnode, char *tableFName);
H
Hongze Cheng 已提交
65

66 67 68
int32_t vnodeStart(SVnode *pVnode);
void    vnodeStop(SVnode *pVnode);

H
Hongze Cheng 已提交
69
int64_t vnodeGetSyncHandle(SVnode *pVnode);
H
Hongze Cheng 已提交
70
void    vnodeGetSnapshot(SVnode *pVnode, SSnapshot *pSnapshot);
H
Hongze Cheng 已提交
71

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

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

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

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

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

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

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

100
tsdbReaderT *tsdbQueryTables(STsdb *tsdb, SQueryTableDataCond *pCond, STableGroupInfo *tableInfoGroup, uint64_t qId,
H
Hongze Cheng 已提交
101
                             uint64_t taskId);
102
tsdbReaderT  tsdbQueryCacheLast(STsdb *tsdb, SQueryTableDataCond *pCond, STableGroupInfo *groupList, uint64_t qId,
H
Hongze Cheng 已提交
103 104 105 106 107 108 109 110 111
                                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);
112
int32_t      tsdbRetrieveDataBlockStatisInfo(tsdbReaderT *pTsdbReadHandle, SColumnDataAgg **pBlockStatis);
H
Hongze Cheng 已提交
113
SArray      *tsdbRetrieveDataBlock(tsdbReaderT *pTsdbReadHandle, SArray *pColumnIdList);
H
Hongze Cheng 已提交
114
void         tsdbResetReadHandle(tsdbReaderT queryHandle, SQueryTableDataCond *pCond);
H
Hongze Cheng 已提交
115 116 117 118 119
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);

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

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 已提交
130
int32_t tqRetrieveDataBlock(SArray **ppCols, STqReadHandle *pHandle, uint64_t *pGroupId, int32_t *pNumOfRows,
L
Liu Jicong 已提交
131
                            int16_t *pNumOfCols);
H
Hongze Cheng 已提交
132

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

H
Hongze Cheng 已提交
135 136 137 138
// structs
struct SMetaCfg {
  uint64_t lruSize;
};
H
Hongze Cheng 已提交
139

H
Hongze Cheng 已提交
140
struct STsdbCfg {
H
Hongze Cheng 已提交
141 142 143
  int8_t   precision;
  int8_t   update;
  int8_t   compression;
H
Hongze Cheng 已提交
144
  int8_t   slLevel;
H
refact  
Hongze Cheng 已提交
145 146 147
  int32_t  days;
  int32_t  minRows;
  int32_t  maxRows;
H
Hongze Cheng 已提交
148
  int32_t  keep2;
H
Hongze Cheng 已提交
149 150
  int32_t  keep0;
  int32_t  keep1;
H
Hongze Cheng 已提交
151 152
  uint64_t lruCacheSize;
  SArray  *retentions;
H
Hongze Cheng 已提交
153
};
H
Hongze Cheng 已提交
154

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

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

H
Hongze Cheng 已提交
180 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
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 已提交
213 214 215 216 217 218 219 220 221
struct SMTbCursor {
  TDBC       *pDbc;
  void       *pKey;
  void       *pVal;
  int         kLen;
  int         vLen;
  SMetaReader mr;
};

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

226
#endif /*_TD_VNODE_H_*/