catalog.h 8.0 KB
Newer Older
H
Hongze Cheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * 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/>.
 */

#ifndef _TD_CATALOG_H_
#define _TD_CATALOG_H_

#ifdef __cplusplus
extern "C" {
#endif

H
Haojun Liao 已提交
23 24
#include "os.h"
#include "taosdef.h"
H
Haojun Liao 已提交
25 26
#include "query.h"
#include "tname.h"
S
common  
Shengliang Guan 已提交
27
#include "tcommon.h"
H
Haojun Liao 已提交
28 29
#include "tarray.h"
#include "thash.h"
H
Hongze Cheng 已提交
30
#include "tmsg.h"
H
Haojun Liao 已提交
31
#include "transport.h"
H
Haojun Liao 已提交
32

D
dapan1121 已提交
33
typedef struct SCatalog SCatalog;
H
Haojun Liao 已提交
34

D
dapan1121 已提交
35 36 37 38 39 40 41 42 43
enum {
  CTG_DBG_DB_NUM = 1,
  CTG_DBG_META_NUM,
  CTG_DBG_STB_NUM,
  CTG_DBG_DB_RENT_NUM,
  CTG_DBG_STB_RENT_NUM,
};


D
dapan1121 已提交
44
typedef struct SCatalogReq {
45
  SArray *pTableName;     // element is SNAME
H
Haojun Liao 已提交
46
  SArray *pUdf;           // udf name
D
dapan 已提交
47
  bool    qNodeRequired;  // valid qnode
D
dapan1121 已提交
48
} SCatalogReq;
H
Haojun Liao 已提交
49 50

typedef struct SMetaData {
D
dapan1121 已提交
51 52
  SArray    *pTableMeta;  // STableMeta array
  SArray    *pVgroupInfo; // SVgroupInfo list
H
Haojun Liao 已提交
53
  SArray    *pUdfList;    // udf info list
D
dapan1121 已提交
54
  SArray    *pEpSetList;  // qnode epset list, SArray<SEpSet>
H
Haojun Liao 已提交
55 56
} SMetaData;

D
dapan1121 已提交
57
typedef struct SCatalogCfg {
D
dapan1121 已提交
58 59
  uint32_t maxTblCacheNum;
  uint32_t maxDBCacheNum;
D
dapan1121 已提交
60
  uint32_t dbRentSec;
D
dapan1121 已提交
61
  uint32_t stbRentSec;
D
dapan1121 已提交
62 63
} SCatalogCfg;

D
dapan1121 已提交
64
typedef struct SSTableMetaVersion {
D
dapan 已提交
65 66
  char     dbFName[TSDB_DB_FNAME_LEN];
  char     stbName[TSDB_TABLE_NAME_LEN];
D
dapan1121 已提交
67
  uint64_t dbId;
D
dapan1121 已提交
68 69 70 71 72 73
  uint64_t suid;
  int16_t  sversion;
  int16_t  tversion;  
} SSTableMetaVersion;

typedef struct SDbVgVersion {
D
dapan 已提交
74
  char    dbFName[TSDB_DB_FNAME_LEN];
D
dapan1121 已提交
75 76
  int64_t dbId;
  int32_t vgVersion;
D
dapan1121 已提交
77
  int32_t numOfTable; // unit is TSDB_TABLE_NUM_UNIT
D
dapan1121 已提交
78 79
} SDbVgVersion;

D
dapan1121 已提交
80
typedef SDbCfgRsp SDbCfgInfo;
D
dapan1121 已提交
81
typedef SUserIndexRsp SIndexInfo;
D
dapan1121 已提交
82

D
dapan1121 已提交
83
int32_t catalogInit(SCatalogCfg *cfg);
D
dapan1121 已提交
84

H
Haojun Liao 已提交
85
/**
86
 * Get a cluster's catalog handle for all later operations. 
87
 * @param clusterId
88 89
 * @param catalogHandle (output, NO need to free it)
 * @return error code
H
Haojun Liao 已提交
90
 */
D
dapan1121 已提交
91
int32_t catalogGetHandle(uint64_t clusterId, SCatalog** catalogHandle);
D
dapan1121 已提交
92

D
dapan1121 已提交
93 94 95 96 97 98
/**
 * Free a cluster's all catalog info, usually it's not necessary, until the application is closing. 
 * no current or future usage should be guaranteed by application
 * @param pCatalog (input, NO more usage)
 * @return error code
 */
D
dapan1121 已提交
99
void catalogFreeHandle(SCatalog* pCatalog);
D
dapan1121 已提交
100

D
dapan1121 已提交
101
int32_t catalogGetDBVgVersion(SCatalog* pCtg, const char* dbFName, int32_t* version, int64_t* dbId, int32_t *tableNum);
D
dapan1121 已提交
102

D
dapan1121 已提交
103 104 105
/**
 * Get a DB's all vgroup info.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
106
 * @param pTransporter (input, rpc object)
D
dapan1121 已提交
107 108 109 110 111
 * @param pMgmtEps (input, mnode EPs)
 * @param pDBName (input, full db name)
 * @param pVgroupList (output, vgroup info list, element is SVgroupInfo, NEED to simply free the array by caller)
 * @return error code
 */
D
dapan1121 已提交
112
int32_t catalogGetDBVgInfo(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, const char* pDBName, SArray** pVgroupList);
D
dapan1121 已提交
113

D
dapan1121 已提交
114
int32_t catalogUpdateDBVgInfo(SCatalog* pCatalog, const char* dbName, uint64_t dbId, SDBVgInfo* dbInfo);
D
dapan1121 已提交
115

D
dapan1121 已提交
116
int32_t catalogRemoveDB(SCatalog* pCatalog, const char* dbName, uint64_t dbId);
D
dapan1121 已提交
117

D
dapan1121 已提交
118
int32_t catalogRemoveTableMeta(SCatalog* pCtg, const SName* pTableName);
D
dapan 已提交
119

D
dapan1121 已提交
120
int32_t catalogRemoveStbMeta(SCatalog* pCtg, const char* dbFName, uint64_t dbId, const char* stbName, uint64_t suid);
D
dapan 已提交
121

122 123 124
/**
 * Get a table's meta data. 
 * @param pCatalog (input, got with catalogGetHandle)
125
 * @param pTransporter (input, rpc object)
126
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
127
 * @param pTableName (input, table name)
128 129 130
 * @param pTableMeta(output, table meta data, NEED to free it by calller)
 * @return error code
 */
D
dapan1121 已提交
131
int32_t catalogGetTableMeta(SCatalog* pCatalog, void * pTransporter, const SEpSet* pMgmtEps, const SName* pTableName, STableMeta** pTableMeta);
132

D
dapan1121 已提交
133 134 135 136 137
/**
 * Get a super table's meta data. 
 * @param pCatalog (input, got with catalogGetHandle)
 * @param pTransporter (input, rpc object)
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
138
 * @param pTableName (input, table name)
D
dapan1121 已提交
139 140 141
 * @param pTableMeta(output, table meta data, NEED to free it by calller)
 * @return error code
 */
D
dapan1121 已提交
142
int32_t catalogGetSTableMeta(SCatalog* pCatalog, void * pTransporter, const SEpSet* pMgmtEps, const SName* pTableName, STableMeta** pTableMeta);
D
dapan1121 已提交
143

D
dapan1121 已提交
144
int32_t catalogUpdateSTableMeta(SCatalog* pCatalog, STableMetaRsp *rspMsg);
D
dapan1121 已提交
145

D
dapan1121 已提交
146

D
dapan1121 已提交
147 148 149 150 151 152 153 154 155 156
/**
 * Force refresh DB's local cached vgroup info. 
 * @param pCtg (input, got with catalogGetHandle)
 * @param pTrans (input, rpc object)
 * @param pMgmtEps (input, mnode EPs)
 * @param dbFName (input, db full name)
 * @return error code
 */
int32_t catalogRefreshDBVgInfo(SCatalog* pCtg, void *pTrans, const SEpSet* pMgmtEps, const char* dbFName);

157
/**
D
dapan1121 已提交
158
 * Force refresh a table's local cached meta data. 
159
 * @param pCatalog (input, got with catalogGetHandle)
160
 * @param pTransporter (input, rpc object)
161
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
162
 * @param pTableName (input, table name)
D
dapan1121 已提交
163
 * @param isSTable (input, is super table or not, 1:supposed to be stable, 0: supposed not to be stable, -1:not sure) 
164 165
 * @return error code
 */
D
dapan1121 已提交
166
int32_t catalogRefreshTableMeta(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, const SName* pTableName, int32_t isSTable);
167 168

/**
D
dapan1121 已提交
169
 * Force refresh a table's local cached meta data and get the new one. 
170
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
171
 * @param pTransporter (input, rpc object)
172
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
173
 * @param pTableName (input, table name)
174
 * @param pTableMeta(output, table meta data, NEED to free it by calller) 
D
dapan1121 已提交
175
 * @param isSTable (input, is super table or not, 1:supposed to be stable, 0: supposed not to be stable, -1:not sure) 
176 177
 * @return error code
 */
D
dapan1121 已提交
178
int32_t catalogRefreshGetTableMeta(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, const SName* pTableName, STableMeta** pTableMeta, int32_t isSTable);
D
dapan1121 已提交
179

H
Haojun Liao 已提交
180

D
dapan1121 已提交
181 182

/**
183 184
 * Get a table's actual vgroup, for stable it's all possible vgroup list.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
185
 * @param pTransporter (input, rpc object)
186
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
187
 * @param pTableName (input, table name)
188 189
 * @param pVgroupList (output, vgroup info list, element is SVgroupInfo, NEED to simply free the array by caller)
 * @return error code
D
dapan1121 已提交
190
 */
D
dapan1121 已提交
191
int32_t catalogGetTableDistVgInfo(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, const SName* pTableName, SArray** pVgroupList);
D
dapan1121 已提交
192 193

/**
194 195
 * Get a table's vgroup from its name's hash value.
 * @param pCatalog (input, got with catalogGetHandle)
196
 * @param pTransporter (input, rpc object)
197
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
198
 * @param pTableName (input, table name)
199 200
 * @param vgInfo (output, vgroup info)
 * @return error code
D
dapan1121 已提交
201
 */
D
dapan1121 已提交
202
int32_t catalogGetTableHashVgroup(SCatalog* pCatalog, void * pTransporter, const SEpSet* pMgmtEps, const SName* pName, SVgroupInfo* vgInfo);
D
dapan 已提交
203 204


H
Haojun Liao 已提交
205
/**
206 207
 * Get all meta data required in pReq.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
208
 * @param pTransporter (input, rpc object)
209 210 211 212
 * @param pMgmtEps (input, mnode EPs)
 * @param pReq (input, reqest info)
 * @param pRsp (output, response data)
 * @return error code 
H
Haojun Liao 已提交
213
 */
D
dapan1121 已提交
214
int32_t catalogGetAllMeta(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, const SCatalogReq* pReq, SMetaData* pRsp);
D
dapan1121 已提交
215

D
dapan 已提交
216

D
dapan1121 已提交
217
int32_t catalogGetQnodeList(SCatalog* pCatalog, void *pTransporter, const SEpSet* pMgmtEps, SArray* pQnodeList);
D
dapan 已提交
218

D
dapan1121 已提交
219
int32_t catalogGetExpiredSTables(SCatalog* pCatalog, SSTableMetaVersion **stables, uint32_t *num);
D
dapan1121 已提交
220

D
dapan1121 已提交
221
int32_t catalogGetExpiredDBs(SCatalog* pCatalog, SDbVgVersion **dbs, uint32_t *num);
D
dapan1121 已提交
222

D
dapan1121 已提交
223 224
int32_t catalogGetDBCfg(SCatalog* pCtg, void *pRpc, const SEpSet* pMgmtEps, const char* dbFName, SDbCfgInfo* pDbCfg);

D
dapan1121 已提交
225 226
int32_t catalogGetIndexInfo(SCatalog* pCtg, void *pRpc, const SEpSet* pMgmtEps, const char* indexName, SIndexInfo* pInfo);

H
Haojun Liao 已提交
227 228

/**
D
dapan1121 已提交
229
 * Destroy catalog and relase all resources
H
Haojun Liao 已提交
230
 */
D
dapan1121 已提交
231
void catalogDestroy(void);
H
Haojun Liao 已提交
232

H
Hongze Cheng 已提交
233 234 235 236
#ifdef __cplusplus
}
#endif

D
dapan1121 已提交
237
#endif /*_TD_CATALOG_H_*/