vnode.h 6.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
typedef struct SVnode    SVnode;
typedef struct STsdbCfg  STsdbCfg;  // todo: remove
typedef struct SVnodeCfg SVnodeCfg;

H
Hongze Cheng 已提交
43 44
extern const SVnodeCfg vnodeCfgDefault;

H
more  
Hongze Cheng 已提交
45
int     vnodeInit(int nthreads);
H
Hongze Cheng 已提交
46
void    vnodeCleanup();
H
Hongze Cheng 已提交
47
int     vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs);
H
refact  
Hongze Cheng 已提交
48
void    vnodeDestroy(const char *path, STfs *pTfs);
H
Hongze Cheng 已提交
49
SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb);
H
Hongze Cheng 已提交
50
void    vnodeClose(SVnode *pVnode);
H
Hongze Cheng 已提交
51
int     vnodePreprocessWriteReqs(SVnode *pVnode, SArray *pMsgs, int64_t *version);
H
Hongze Cheng 已提交
52
int     vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg *pRsp);
H
Hongze Cheng 已提交
53 54 55 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 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 已提交
61
int     vnodeValidateTableHash(SVnode *pVnode, char *tableFName);
H
Hongze Cheng 已提交
62

H
Hongze Cheng 已提交
63
// meta
H
Hongze Cheng 已提交
64 65 66 67 68 69 70 71
typedef struct SMeta       SMeta;  // todo: remove
typedef struct SMetaReader SMetaReader;
typedef struct SMetaEntry  SMetaEntry;

void              metaReaderInit(SMetaReader *pReader, SVnode *pVnode, int32_t flags);
void              metaReaderClear(SMetaReader *pReader);
int               metaReadNext(SMetaReader *pReader);
const SMetaEntry *metaReaderGetEntry(SMetaReader *pReader);
H
Hongze Cheng 已提交
72 73 74 75

typedef SVCreateTbReq   STbCfg;
typedef SVCreateTSmaReq SSmaCfg;

H
Hongze Cheng 已提交
76 77 78
#if 1
typedef struct SMTbCursor SMTbCursor;

H
Hongze Cheng 已提交
79 80 81
SMTbCursor *metaOpenTbCursor(SMeta *pMeta);
void        metaCloseTbCursor(SMTbCursor *pTbCur);
char       *metaTbCursorNext(SMTbCursor *pTbCur);
H
Hongze Cheng 已提交
82
#endif
H
Hongze Cheng 已提交
83

H
Hongze Cheng 已提交
84
// tsdb
H
Hongze Cheng 已提交
85 86 87 88 89 90 91
typedef struct STsdb          STsdb;
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
H
Hongze Cheng 已提交
92

H
Hongze Cheng 已提交
93 94 95 96 97 98 99 100 101 102 103 104
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);
105
int32_t      tsdbRetrieveDataBlockStatisInfo(tsdbReaderT *pTsdbReadHandle, SColumnDataAgg **pBlockStatis);
H
Hongze Cheng 已提交
106 107 108 109 110 111
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);

// tq
H
Hongze Cheng 已提交
112 113 114 115 116 117 118 119 120 121

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

H
Hongze Cheng 已提交
125
// need to reposition
H
Hongze Cheng 已提交
126

H
Hongze Cheng 已提交
127 128 129 130
// structs
struct SMetaCfg {
  uint64_t lruSize;
};
H
Hongze Cheng 已提交
131

H
Hongze Cheng 已提交
132
struct STsdbCfg {
H
Hongze Cheng 已提交
133 134 135
  int8_t   precision;
  int8_t   update;
  int8_t   compression;
H
Hongze Cheng 已提交
136
  int8_t   slLevel;
H
refact  
Hongze Cheng 已提交
137 138 139
  int32_t  days;
  int32_t  minRows;
  int32_t  maxRows;
H
Hongze Cheng 已提交
140
  int32_t  keep2;
H
Hongze Cheng 已提交
141 142
  int32_t  keep0;
  int32_t  keep1;
H
Hongze Cheng 已提交
143 144
  uint64_t lruCacheSize;
  SArray  *retentions;
H
Hongze Cheng 已提交
145
};
H
Hongze Cheng 已提交
146

H
Hongze Cheng 已提交
147
struct SVnodeCfg {
H
Hongze Cheng 已提交
148
  int32_t  vgId;
H
Hongze Cheng 已提交
149
  char     dbname[TSDB_DB_NAME_LEN];
D
dapan1121 已提交
150
  uint64_t dbId;
H
Hongze Cheng 已提交
151 152
  int32_t  szPage;
  int32_t  szCache;
H
Hongze Cheng 已提交
153 154
  uint64_t szBuf;
  bool     isHeap;
H
more  
Hongze Cheng 已提交
155 156
  uint32_t ttl;
  uint32_t keep;
L
Liu Jicong 已提交
157
  int8_t   streamMode;
H
Hongze Cheng 已提交
158
  bool     isWeak;
H
more  
Hongze Cheng 已提交
159
  STsdbCfg tsdbCfg;
H
Hongze Cheng 已提交
160
  SWalCfg  walCfg;
D
dapan1121 已提交
161 162
  uint32_t hashBegin;
  uint32_t hashEnd;
L
Liu Jicong 已提交
163
  int8_t   hashMethod;
H
Hongze Cheng 已提交
164
};
H
save  
Hongze Cheng 已提交
165

H
Hongze Cheng 已提交
166 167 168 169 170 171 172 173
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 已提交
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;
};

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

217
#endif /*_TD_VNODE_H_*/