tsdb.h 10.2 KB
Newer Older
H
more  
hzcheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * 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/>.
 */
H
hzcheng 已提交
15
#ifndef _TD_TSDB_H_
H
Hongze Cheng 已提交
16 17 18 19 20 21
#define _TD_TSDB_H_

#include <pthread.h>
#include <stdbool.h>
#include <stdint.h>

H
hzcheng 已提交
22
#include "taosdef.h"
H
hzcheng 已提交
23
#include "taosmsg.h"
H
hjxilinx 已提交
24
#include "tarray.h"
H
Hongze Cheng 已提交
25 26
#include "tdataformat.h"
#include "tname.h"
H
Haojun Liao 已提交
27
#include "hash.h"
H
Hongze Cheng 已提交
28

H
more  
hzcheng 已提交
29 30 31 32
#ifdef __cplusplus
extern "C" {
#endif

H
Hongze Cheng 已提交
33 34 35
#define TSDB_VERSION_MAJOR 1
#define TSDB_VERSION_MINOR 0

H
hzcheng 已提交
36 37
#define TSDB_INVALID_SUPER_TABLE_ID -1

38
#define TSDB_STATUS_COMMIT_START 1
H
Hongze Cheng 已提交
39
#define TSDB_STATUS_COMMIT_OVER 2
40

H
TD-1027  
Hongze Cheng 已提交
41 42 43 44
// TSDB STATE DEFINITION
#define TSDB_STATE_OK 0x0
#define TSDB_STATE_BAD_FILE 0x1

H
hzcheng 已提交
45 46 47
// --------- TSDB APPLICATION HANDLE DEFINITION
typedef struct {
  void *appH;
J
jtao1735 已提交
48
  void *cqH;
49
  int (*notifyStatus)(void *, int status, int eno);
H
hzcheng 已提交
50
  int (*eventCallBack)(void *);
B
Bomin Zhang 已提交
51
  void *(*cqCreateFunc)(void *handle, uint64_t uid, int sid, char *sqlStr, STSchema *pSchema);
H
TD-354  
Hongze Cheng 已提交
52
  void (*cqDropFunc)(void *handle);
H
hzcheng 已提交
53 54
} STsdbAppH;

H
hzcheng 已提交
55 56 57
// --------- TSDB REPOSITORY CONFIGURATION DEFINITION
typedef struct {
  int32_t tsdbId;
S
slguan 已提交
58 59
  int32_t cacheBlockSize;
  int32_t totalBlocks;
H
Hongze Cheng 已提交
60 61
  int32_t daysPerFile;  // day per file sharding policy
  int32_t keep;         // day of data to keep
S
slguan 已提交
62 63
  int32_t keep1;
  int32_t keep2;
H
hzcheng 已提交
64 65
  int32_t minRowsPerFileBlock;  // minimum rows per file block
  int32_t maxRowsPerFileBlock;  // maximum rows per file block
S
slguan 已提交
66 67
  int8_t  precision;
  int8_t  compression;
H
TD-1438  
Hongze Cheng 已提交
68
  int8_t  update;
H
hzcheng 已提交
69 70
} STsdbCfg;

T
Tao Liu 已提交
71 72
// --------- TSDB REPOSITORY USAGE STATISTICS
typedef struct {
73 74 75 76
  int64_t totalStorage;  // total bytes occupie
  int64_t compStorage;
  int64_t pointsWritten;  // total data points written
} STsdbStat;
T
Tao Liu 已提交
77

H
TD-353  
Hongze Cheng 已提交
78
typedef void TSDB_REPO_T;  // use void to hide implementation details from outside
79

H
TD-353  
Hongze Cheng 已提交
80
STsdbCfg *tsdbGetCfg(const TSDB_REPO_T *repo);
H
hzcheng 已提交
81 82

// --------- TSDB REPOSITORY DEFINITION
H
TD-353  
Hongze Cheng 已提交
83
int          tsdbCreateRepo(char *rootDir, STsdbCfg *pCfg);
H
TD-353  
Hongze Cheng 已提交
84
int32_t      tsdbDropRepo(char *rootDir);
H
TD-353  
Hongze Cheng 已提交
85
TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH);
H
Hongze Cheng 已提交
86
int          tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit);
H
Hongze Cheng 已提交
87
int32_t      tsdbConfigRepo(TSDB_REPO_T *repo, STsdbCfg *pCfg);
H
TD-1027  
Hongze Cheng 已提交
88
int          tsdbGetState(TSDB_REPO_T *repo);
H
hzcheng 已提交
89 90

// --------- TSDB TABLE DEFINITION
H
more  
hzcheng 已提交
91
typedef struct {
92 93
  uint64_t uid;  // the unique table ID
  int32_t  tid;  // the table ID in the repository.
H
more  
hzcheng 已提交
94 95
} STableId;

H
hzcheng 已提交
96 97
// --------- TSDB TABLE configuration
typedef struct {
H
hzcheng 已提交
98 99 100 101 102
  ETableType type;
  char *     name;
  STableId   tableId;
  int32_t    sversion;
  char *     sname;  // super table name
103
  uint64_t   superUid;
H
hzcheng 已提交
104 105 106
  STSchema * schema;
  STSchema * tagSchema;
  SDataRow   tagValues;
H
TD-354  
Hongze Cheng 已提交
107
  char *     sql;
H
hzcheng 已提交
108 109 110 111
} STableCfg;

void tsdbClearTableCfg(STableCfg *config);

112 113
void* tsdbGetTableTagVal(const void* pTable, int32_t colId, int16_t type, int16_t bytes);
char* tsdbGetTableName(void *pTable);
H
Haojun Liao 已提交
114 115 116

#define TSDB_TABLEID(_table) ((STableId*) (_table))

H
Hongze Cheng 已提交
117
STableCfg *tsdbCreateTableCfgFromMsg(SMDCreateTableMsg *pMsg);
118

H
TD-353  
Hongze Cheng 已提交
119 120
int   tsdbCreateTable(TSDB_REPO_T *repo, STableCfg *pCfg);
int   tsdbDropTable(TSDB_REPO_T *pRepo, STableId tableId);
H
Hongze Cheng 已提交
121
int   tsdbUpdateTableTagValue(TSDB_REPO_T *repo, SUpdateTableTagValMsg *pMsg);
H
TD-353  
Hongze Cheng 已提交
122
TSKEY tsdbGetTableLastKey(TSDB_REPO_T *repo, uint64_t uid);
H
hzcheng 已提交
123

124
uint32_t tsdbGetFileInfo(TSDB_REPO_T *repo, char *name, uint32_t *index, uint32_t eindex, int64_t *size);
125

H
Hongze Cheng 已提交
126
// the TSDB repository info
H
more  
hzcheng 已提交
127
typedef struct STsdbRepoInfo {
H
more  
hzcheng 已提交
128
  STsdbCfg tsdbCfg;
S
TD-1919  
Shengliang Guan 已提交
129
  uint64_t version;            // version of the repository
H
Hongze Cheng 已提交
130 131 132
  int64_t  tsdbTotalDataSize;  // the original inserted data size
  int64_t  tsdbTotalDiskSize;  // the total disk size taken by this TSDB repository
  // TODO: Other informations to add
H
more  
hzcheng 已提交
133
} STsdbRepoInfo;
H
TD-353  
Hongze Cheng 已提交
134
STsdbRepoInfo *tsdbGetStatus(TSDB_REPO_T *pRepo);
H
hzcheng 已提交
135

H
Hongze Cheng 已提交
136 137 138
// the meter information report structure
typedef struct {
  STableCfg tableCfg;
S
TD-1919  
Shengliang Guan 已提交
139
  uint64_t  version;
H
more  
hzcheng 已提交
140 141
  int64_t   tableTotalDataSize;  // In bytes
  int64_t   tableTotalDiskSize;  // In bytes
H
Hongze Cheng 已提交
142
} STableInfo;
H
TD-353  
Hongze Cheng 已提交
143
STableInfo *tsdbGetTableInfo(TSDB_REPO_T *pRepo, STableId tid);
H
Hongze Cheng 已提交
144 145 146 147 148 149 150 151 152

// -- FOR INSERT DATA
/**
 * Insert data to a table in a repository
 * @param pRepo the TSDB repository handle
 * @param pData the data to insert (will give a more specific description)
 *
 * @return the number of points inserted, -1 for failure and the error number is set
 */
H
Hongze Cheng 已提交
153
int32_t tsdbInsertData(TSDB_REPO_T *repo, SSubmitMsg *pMsg, SShellSubmitRspMsg *pRsp);
H
Hongze Cheng 已提交
154 155 156

// -- FOR QUERY TIME SERIES DATA

H
hzcheng 已提交
157
typedef void *TsdbQueryHandleT;  // Use void to hide implementation details
H
Hongze Cheng 已提交
158 159

// query condition to build vnode iterator
H
hjxilinx 已提交
160
typedef struct STsdbQueryCond {
H
Hongze Cheng 已提交
161 162 163 164
  STimeWindow  twindow;
  int32_t      order;  // desc|asc order to iterate the data block
  int32_t      numOfCols;
  SColumnInfo *colList;
H
hjxilinx 已提交
165
} STsdbQueryCond;
H
Hongze Cheng 已提交
166

H
Haojun Liao 已提交
167 168 169 170 171 172
typedef struct SMemRef {
  int32_t  ref;
  void    *mem;
  void    *imem;
} SMemRef;

H
hjxilinx 已提交
173 174
typedef struct SDataBlockInfo {
  STimeWindow window;
175
  int32_t     rows;
H
hjxilinx 已提交
176 177
  int32_t     numOfCols;
  int64_t     uid;
H
hjxilinx 已提交
178
  int32_t     tid;
H
hjxilinx 已提交
179
} SDataBlockInfo;
H
Hongze Cheng 已提交
180

181
typedef struct {
H
Haojun Liao 已提交
182 183 184 185 186 187
  void  *pTable;
  TSKEY  lastKey;
} STableKeyInfo;

typedef struct {
  size_t    numOfTables;
H
Haojun Liao 已提交
188
  SArray   *pGroupList;
H
Haojun Liao 已提交
189
  SHashObj *map;         // speedup acquire the tableQueryInfo by table uid
190 191
} STableGroupInfo;

H
Hongze Cheng 已提交
192 193
/**
 * Get the data block iterator, starting from position according to the query condition
H
hjxilinx 已提交
194 195 196
 *
 * @param tsdb       tsdb handle
 * @param pCond      query condition, including time window, result set order, and basic required columns for each block
H
Haojun Liao 已提交
197 198
 * @param tableInfoGroup  table object list in the form of set, grouped into different sets according to the
 *                        group by condition
H
Haojun Liao 已提交
199
 * @param qinfo      query info handle from query processor
H
Hongze Cheng 已提交
200 201
 * @return
 */
H
Haojun Liao 已提交
202
TsdbQueryHandleT *tsdbQueryTables(TSDB_REPO_T *tsdb, STsdbQueryCond *pCond, STableGroupInfo *tableInfoGroup, void *qinfo, SMemRef* pRef);
H
Hongze Cheng 已提交
203 204

/**
H
hjxilinx 已提交
205 206 207 208
 * Get the last row of the given query time window for all the tables in STableGroupInfo object.
 * Note that only one data block with only row will be returned while invoking retrieve data block function for
 * all tables in this group.
 *
H
Haojun Liao 已提交
209 210 211
 * @param tsdb   tsdb handle
 * @param pCond  query condition, including time window, result set order, and basic required columns for each block
 * @param tableInfo  table list.
H
hjxilinx 已提交
212 213
 * @return
 */
H
Haojun Liao 已提交
214
TsdbQueryHandleT tsdbQueryLastRow(TSDB_REPO_T *tsdb, STsdbQueryCond *pCond, STableGroupInfo *tableInfo, void *qinfo, SMemRef* pRef);
H
hjxilinx 已提交
215

216 217 218 219 220 221
/**
 * get the queried table object list
 * @param pHandle
 * @return
 */
SArray* tsdbGetQueriedTableList(TsdbQueryHandleT *pHandle);
222

223 224 225 226 227 228 229 230
/**
 * get the group list according to table id from client
 * @param tsdb
 * @param pCond
 * @param groupList
 * @param qinfo
 * @return
 */
H
Hongze Cheng 已提交
231
TsdbQueryHandleT tsdbQueryRowsInExternalWindow(TSDB_REPO_T *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupList,
H
Haojun Liao 已提交
232
                                               void *qinfo, SMemRef* pRef);
233

H
hjxilinx 已提交
234 235 236
/**
 * move to next block if exists
 *
H
hjxilinx 已提交
237
 * @param pQueryHandle
H
Hongze Cheng 已提交
238 239
 * @return
 */
H
hzcheng 已提交
240
bool tsdbNextDataBlock(TsdbQueryHandleT *pQueryHandle);
H
Hongze Cheng 已提交
241 242

/**
H
hjxilinx 已提交
243
 * Get current data block information
H
Hongze Cheng 已提交
244 245
 *
 * @param pQueryHandle
H
Haojun Liao 已提交
246
 * @param pBlockInfo
H
Hongze Cheng 已提交
247 248
 * @return
 */
H
Haojun Liao 已提交
249
void tsdbRetrieveDataBlockInfo(TsdbQueryHandleT *pQueryHandle, SDataBlockInfo* pBlockInfo);
H
Hongze Cheng 已提交
250 251

/**
H
hjxilinx 已提交
252 253 254 255 256 257 258
 *
 * Get the pre-calculated information w.r.t. current data block.
 *
 * In case of data block in cache, the pBlockStatis will always be NULL.
 * If a block is not completed loaded from disk, the pBlockStatis will be NULL.

 * @pBlockStatis the pre-calculated value for current data blocks. if the block is a cache block, always return 0
H
Hongze Cheng 已提交
259 260
 * @return
 */
H
hzcheng 已提交
261
int32_t tsdbRetrieveDataBlockStatisInfo(TsdbQueryHandleT *pQueryHandle, SDataStatis **pBlockStatis);
H
Hongze Cheng 已提交
262 263

/**
H
hjxilinx 已提交
264
 *
H
hjxilinx 已提交
265 266 267
 * The query condition with primary timestamp is passed to iterator during its constructor function,
 * the returned data block must be satisfied with the time window condition in any cases,
 * which means the SData data block is not actually the completed disk data blocks.
H
Hongze Cheng 已提交
268
 *
H
hjxilinx 已提交
269 270
 * @param pQueryHandle      query handle
 * @param pColumnIdList     required data columns id list
H
Hongze Cheng 已提交
271 272
 * @return
 */
H
hjxilinx 已提交
273
SArray *tsdbRetrieveDataBlock(TsdbQueryHandleT *pQueryHandle, SArray *pColumnIdList);
H
Hongze Cheng 已提交
274 275

/**
276
 * Get the qualified table id for a super table according to the tag query expression.
H
Hongze Cheng 已提交
277 278 279
 * @param stableid. super table sid
 * @param pTagCond. tag query condition
 */
H
Haojun Liao 已提交
280
int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T *tsdb, uint64_t uid, TSKEY key, const char *pTagCond, size_t len,
H
Hongze Cheng 已提交
281 282
                                 int16_t tagNameRelType, const char *tbnameCond, STableGroupInfo *pGroupList,
                                 SColIndex *pColIndex, int32_t numOfCols);
H
hjxilinx 已提交
283

284 285 286 287
/**
 * destory the created table group list, which is generated by tag query
 * @param pGroupList
 */
H
Haojun Liao 已提交
288
void tsdbDestroyTableGroup(STableGroupInfo *pGroupList);
289

H
hjxilinx 已提交
290 291 292 293 294 295 296 297
/**
 * create the table group result including only one table, used to handle the normal table query
 *
 * @param tsdb        tsdbHandle
 * @param uid         table uid
 * @param pGroupInfo  the generated result
 * @return
 */
H
Haojun Liao 已提交
298
int32_t tsdbGetOneTableGroup(TSDB_REPO_T *tsdb, uint64_t uid, TSKEY startKey, STableGroupInfo *pGroupInfo);
H
Hongze Cheng 已提交
299

300 301 302 303 304 305 306 307 308
/**
 *
 * @param tsdb
 * @param pTableIdList
 * @param pGroupInfo
 * @return
 */
int32_t tsdbGetTableGroupFromIdList(TSDB_REPO_T* tsdb, SArray* pTableIdList, STableGroupInfo* pGroupInfo);

309 310 311 312
/**
 * clean up the query handle
 * @param queryHandle
 */
H
hzcheng 已提交
313
void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle);
314

T
Tao Liu 已提交
315 316 317 318 319 320 321 322 323
/**
 * get the statistics of repo usage
 * @param repo. point to the tsdbrepo
 * @param totalPoints. total data point written
 * @param totalStorage. total bytes took by the tsdb
 * @param compStorage. total bytes took by the tsdb after compressed
 */
void tsdbReportStat(void *repo, int64_t *totalPoints, int64_t *totalStorage, int64_t *compStorage);

H
Hongze Cheng 已提交
324 325
int  tsdbInitCommitQueue(int nthreads);
void tsdbDestroyCommitQueue();
H
Hongze Cheng 已提交
326
int  tsdbSyncCommit(TSDB_REPO_T *repo);
S
TD-2072  
Shengliang Guan 已提交
327
void tsdbIncCommitRef(int vgId);
S
TD-2072  
Shengliang Guan 已提交
328
void tsdbDecCommitRef(int vgId);
H
Hongze Cheng 已提交
329

H
more  
hzcheng 已提交
330 331 332 333
#ifdef __cplusplus
}
#endif

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
334
#endif  // _TD_TSDB_H_