catalog.h 10.1 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
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
dapan 已提交
43 44 45 46 47
typedef enum {
  AUTH_TYPE_READ = 1,
  AUTH_TYPE_WRITE,
  AUTH_TYPE_OTHER,
} AUTH_TYPE;
D
dapan1121 已提交
48

D
dapan1121 已提交
49 50 51 52 53 54
typedef struct SUserAuthInfo {
  char user[TSDB_USER_LEN]; 
  char dbFName[TSDB_DB_FNAME_LEN]; 
  AUTH_TYPE type;
} SUserAuthInfo;

D
dapan1121 已提交
55 56 57 58 59 60
typedef struct SDbInfo {
  int32_t vgVer;
  int32_t tbNum;
  int64_t dbId;
} SDbInfo;

D
dapan1121 已提交
61
typedef struct SCatalogReq {
D
dapan1121 已提交
62
  SArray *pDbVgroup;      // element is db full name
D
dapan1121 已提交
63 64 65
  SArray *pDbCfg;         // element is db full name
  SArray *pDbInfo;        // element is db full name
  SArray *pTableMeta;     // element is SNAME
D
dapan1121 已提交
66 67 68 69
  SArray *pTableHash;     // element is SNAME
  SArray *pUdf;           // element is udf name
  SArray *pIndex;         // element is index name
  SArray *pUser;          // element is SUserAuthInfo
D
dapan1121 已提交
70
  SArray *pTableIndex;    // element is SNAME
D
dapan 已提交
71
  bool    qNodeRequired;  // valid qnode
D
dapan1121 已提交
72
  bool    forceUpdate;    
D
dapan1121 已提交
73
} SCatalogReq;
H
Haojun Liao 已提交
74

D
dapan1121 已提交
75 76 77 78 79
typedef struct SMetaRes {
  int32_t code;
  void*   pRes;
} SMetaRes;

H
Haojun Liao 已提交
80
typedef struct SMetaData {
D
dapan1121 已提交
81 82 83 84 85
  SArray    *pDbVgroup;   // pRes = SArray<SVgroupInfo>*
  SArray    *pDbCfg;      // pRes = SDbCfgInfo*
  SArray    *pDbInfo;     // pRes = SDbInfo*
  SArray    *pTableMeta;  // pRes = STableMeta*
  SArray    *pTableHash;  // pRes = SVgroupInfo*
D
dapan1121 已提交
86
  SArray    *pTableIndex; // pRes = SArray<STableIndexInfo>*
D
dapan1121 已提交
87 88 89 90
  SArray    *pUdfList;    // pRes = SFuncInfo*
  SArray    *pIndex;      // pRes = SIndexInfo*
  SArray    *pUser;       // pRes = bool*
  SArray    *pQnodeList;  // pRes = SQueryNodeAddr*
H
Haojun Liao 已提交
91 92
} SMetaData;

D
dapan1121 已提交
93
typedef struct SCatalogCfg {
D
dapan1121 已提交
94 95
  uint32_t maxTblCacheNum;
  uint32_t maxDBCacheNum;
D
dapan 已提交
96
  uint32_t maxUserCacheNum;
D
dapan1121 已提交
97
  uint32_t dbRentSec;
D
dapan1121 已提交
98
  uint32_t stbRentSec;
D
dapan1121 已提交
99 100
} SCatalogCfg;

D
dapan1121 已提交
101
typedef struct SSTableMetaVersion {
D
dapan 已提交
102 103
  char     dbFName[TSDB_DB_FNAME_LEN];
  char     stbName[TSDB_TABLE_NAME_LEN];
D
dapan1121 已提交
104
  uint64_t dbId;
D
dapan1121 已提交
105 106 107 108 109 110
  uint64_t suid;
  int16_t  sversion;
  int16_t  tversion;  
} SSTableMetaVersion;

typedef struct SDbVgVersion {
D
dapan 已提交
111
  char    dbFName[TSDB_DB_FNAME_LEN];
D
dapan1121 已提交
112 113
  int64_t dbId;
  int32_t vgVersion;
D
dapan1121 已提交
114
  int32_t numOfTable; // unit is TSDB_TABLE_NUM_UNIT
D
dapan1121 已提交
115 116
} SDbVgVersion;

D
dapan1121 已提交
117 118 119
typedef struct STbSVersion {
  char* tbFName;
  int32_t sver;
D
dapan1121 已提交
120
  int32_t tver;
D
dapan1121 已提交
121 122
} STbSVersion;

D
dapan 已提交
123 124 125 126 127
typedef struct SUserAuthVersion {
  char    user[TSDB_USER_LEN];
  int32_t version;
} SUserAuthVersion;

D
dapan1121 已提交
128
typedef SDbCfgRsp SDbCfgInfo;
D
dapan1121 已提交
129
typedef SUserIndexRsp SIndexInfo;
D
dapan1121 已提交
130

D
dapan1121 已提交
131 132
typedef void (*catalogCallback)(SMetaData* pResult, void* param, int32_t code);

D
dapan1121 已提交
133
int32_t catalogInit(SCatalogCfg *cfg);
D
dapan1121 已提交
134

H
Haojun Liao 已提交
135
/**
136
 * Get a cluster's catalog handle for all later operations. 
137
 * @param clusterId
138 139
 * @param catalogHandle (output, NO need to free it)
 * @return error code
H
Haojun Liao 已提交
140
 */
D
dapan1121 已提交
141
int32_t catalogGetHandle(uint64_t clusterId, SCatalog** catalogHandle);
D
dapan1121 已提交
142

D
dapan1121 已提交
143 144 145 146 147 148
/**
 * 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 已提交
149
void catalogFreeHandle(SCatalog* pCatalog);
D
dapan1121 已提交
150

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

D
dapan1121 已提交
153 154 155
/**
 * Get a DB's all vgroup info.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
156
 * @param pTransporter (input, rpc object)
D
dapan1121 已提交
157 158 159 160 161
 * @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 已提交
162
int32_t catalogGetDBVgInfo(SCatalog* pCatalog, SRequestConnInfo* pConn, const char* pDBName, SArray** pVgroupList);
D
dapan1121 已提交
163

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

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

D
dapan1121 已提交
168
int32_t catalogRemoveTableMeta(SCatalog* pCtg, SName* pTableName);
D
dapan 已提交
169

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

172 173 174
/**
 * Get a table's meta data. 
 * @param pCatalog (input, got with catalogGetHandle)
175
 * @param pTransporter (input, rpc object)
176
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
177
 * @param pTableName (input, table name)
178 179 180
 * @param pTableMeta(output, table meta data, NEED to free it by calller)
 * @return error code
 */
D
dapan1121 已提交
181
int32_t catalogGetTableMeta(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pTableName, STableMeta** pTableMeta);
182

D
dapan1121 已提交
183 184 185 186 187
/**
 * 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 已提交
188
 * @param pTableName (input, table name)
D
dapan1121 已提交
189 190 191
 * @param pTableMeta(output, table meta data, NEED to free it by calller)
 * @return error code
 */
D
dapan1121 已提交
192
int32_t catalogGetSTableMeta(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pTableName, STableMeta** pTableMeta);
D
dapan1121 已提交
193

D
dapan1121 已提交
194
int32_t catalogUpdateTableMeta(SCatalog* pCatalog, STableMetaRsp *rspMsg);
D
dapan1121 已提交
195

D
dapan1121 已提交
196

D
dapan1121 已提交
197 198 199 200 201 202 203 204
/**
 * 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
 */
D
dapan1121 已提交
205
int32_t catalogRefreshDBVgInfo(SCatalog* pCtg, SRequestConnInfo* pConn, const char* dbFName);
D
dapan1121 已提交
206

D
dapan1121 已提交
207
int32_t catalogChkTbMetaVersion(SCatalog* pCtg, SRequestConnInfo* pConn, SArray* pTables);
D
dapan1121 已提交
208

209
/**
D
dapan1121 已提交
210
 * Force refresh a table's local cached meta data. 
211
 * @param pCatalog (input, got with catalogGetHandle)
212
 * @param pTransporter (input, rpc object)
213
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
214
 * @param pTableName (input, table name)
D
dapan1121 已提交
215
 * @param isSTable (input, is super table or not, 1:supposed to be stable, 0: supposed not to be stable, -1:not sure) 
216 217
 * @return error code
 */
D
dapan1121 已提交
218
int32_t catalogRefreshTableMeta(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pTableName, int32_t isSTable);
219 220

/**
D
dapan1121 已提交
221
 * Force refresh a table's local cached meta data and get the new one. 
222
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
223
 * @param pTransporter (input, rpc object)
224
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
225
 * @param pTableName (input, table name)
226
 * @param pTableMeta(output, table meta data, NEED to free it by calller) 
D
dapan1121 已提交
227
 * @param isSTable (input, is super table or not, 1:supposed to be stable, 0: supposed not to be stable, -1:not sure) 
228 229
 * @return error code
 */
D
dapan1121 已提交
230
int32_t catalogRefreshGetTableMeta(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pTableName, STableMeta** pTableMeta, int32_t isSTable);
D
dapan1121 已提交
231

H
Haojun Liao 已提交
232

D
dapan1121 已提交
233 234

/**
235 236
 * Get a table's actual vgroup, for stable it's all possible vgroup list.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
237
 * @param pTransporter (input, rpc object)
238
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
239
 * @param pTableName (input, table name)
240 241
 * @param pVgroupList (output, vgroup info list, element is SVgroupInfo, NEED to simply free the array by caller)
 * @return error code
D
dapan1121 已提交
242
 */
D
dapan1121 已提交
243
int32_t catalogGetTableDistVgInfo(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pTableName, SArray** pVgroupList);
D
dapan1121 已提交
244 245

/**
246 247
 * Get a table's vgroup from its name's hash value.
 * @param pCatalog (input, got with catalogGetHandle)
248
 * @param pTransporter (input, rpc object)
249
 * @param pMgmtEps (input, mnode EPs)
D
dapan1121 已提交
250
 * @param pTableName (input, table name)
251 252
 * @param vgInfo (output, vgroup info)
 * @return error code
D
dapan1121 已提交
253
 */
D
dapan1121 已提交
254
int32_t catalogGetTableHashVgroup(SCatalog* pCatalog, SRequestConnInfo* pConn, const SName* pName, SVgroupInfo* vgInfo);
D
dapan 已提交
255 256


H
Haojun Liao 已提交
257
/**
258 259
 * Get all meta data required in pReq.
 * @param pCatalog (input, got with catalogGetHandle)
H
Haojun Liao 已提交
260
 * @param pTransporter (input, rpc object)
261 262 263 264
 * @param pMgmtEps (input, mnode EPs)
 * @param pReq (input, reqest info)
 * @param pRsp (output, response data)
 * @return error code 
H
Haojun Liao 已提交
265
 */
D
dapan1121 已提交
266
int32_t catalogGetAllMeta(SCatalog* pCatalog, SRequestConnInfo* pConn, const SCatalogReq* pReq, SMetaData* pRsp);
D
dapan1121 已提交
267

D
dapan1121 已提交
268
int32_t catalogAsyncGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, uint64_t reqId, const SCatalogReq* pReq, catalogCallback fp, void* param, int64_t* jobId);
D
dapan1121 已提交
269

D
dapan1121 已提交
270
int32_t catalogGetQnodeList(SCatalog* pCatalog, SRequestConnInfo* pConn, SArray* pQnodeList);
D
dapan 已提交
271

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

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

D
dapan 已提交
276 277
int32_t catalogGetExpiredUsers(SCatalog* pCtg, SUserAuthVersion **users, uint32_t *num);

D
dapan1121 已提交
278
int32_t catalogGetDBCfg(SCatalog* pCtg, SRequestConnInfo* pConn, const char* dbFName, SDbCfgInfo* pDbCfg);
D
dapan1121 已提交
279

D
dapan1121 已提交
280
int32_t catalogGetIndexMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const char* indexName, SIndexInfo* pInfo);
D
dapan1121 已提交
281

D
dapan1121 已提交
282
int32_t catalogGetTableIndex(SCatalog* pCtg, SRequestConnInfo* pConn, const SName* pTableName, SArray** pRes);
D
dapan1121 已提交
283

D
dapan1121 已提交
284
int32_t catalogGetUdfInfo(SCatalog* pCtg, SRequestConnInfo* pConn, const char* funcName, SFuncInfo* pInfo);
D
dapan1121 已提交
285

D
dapan1121 已提交
286
int32_t catalogChkAuth(SCatalog* pCtg, SRequestConnInfo* pConn, const char* user, const char* dbFName, AUTH_TYPE type, bool *pass);
D
dapan 已提交
287 288

int32_t catalogUpdateUserAuthInfo(SCatalog* pCtg, SGetUserAuthRsp* pAuth);
D
dapan 已提交
289

D
dapan1121 已提交
290 291
int32_t catalogUpdateVgEpSet(SCatalog* pCtg, const char* dbFName, int32_t vgId, SEpSet *epSet);

D
dapan1121 已提交
292
int32_t ctgdLaunchAsyncCall(SCatalog* pCtg, SRequestConnInfo* pConn, uint64_t reqId, bool forceUpdate);
D
dapan1121 已提交
293 294


H
Haojun Liao 已提交
295
/**
D
dapan1121 已提交
296
 * Destroy catalog and relase all resources
H
Haojun Liao 已提交
297
 */
D
dapan1121 已提交
298
void catalogDestroy(void);
H
Haojun Liao 已提交
299

H
Hongze Cheng 已提交
300 301 302 303
#ifdef __cplusplus
}
#endif

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