feat: support uniq grant
This commit is contained in:
parent
5d189f69ec
commit
1daa224651
|
@ -54,6 +54,7 @@ extern "C" {
|
|||
#define TSDB_INS_TABLE_COMPACT_DETAILS "ins_compact_details"
|
||||
#define TSDB_INS_TABLE_GRANTS_FULL "ins_grants_full"
|
||||
#define TSDB_INS_TABLE_GRANTS_LOG "ins_grants_log"
|
||||
#define TSDB_INS_TABLE_MACHINES "ins_machines"
|
||||
|
||||
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
|
||||
#define TSDB_PERFS_TABLE_SMAS "perf_smas"
|
||||
|
|
|
@ -149,6 +149,7 @@ typedef enum _mgmt_table {
|
|||
TSDB_MGMT_TABLE_COMPACT_DETAIL,
|
||||
TSDB_MGMT_TABLE_GRANTS_FULL,
|
||||
TSDB_MGMT_TABLE_GRANTS_LOG,
|
||||
TSDB_MGMT_TABLE_MACHINES,
|
||||
TSDB_MGMT_TABLE_MAX,
|
||||
} EShowType;
|
||||
|
||||
|
@ -364,6 +365,7 @@ typedef enum ENodeType {
|
|||
QUERY_NODE_SHOW_COMPACT_DETAILS_STMT,
|
||||
QUERY_NODE_SHOW_GRANTS_FULL_STMT,
|
||||
QUERY_NODE_SHOW_GRANTS_LOG_STMT,
|
||||
QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT,
|
||||
|
||||
// logic plan node
|
||||
QUERY_NODE_LOGIC_PLAN_SCAN = 1000,
|
||||
|
@ -2031,7 +2033,7 @@ void tFreeSExplainRsp(SExplainRsp* pRsp);
|
|||
|
||||
typedef struct {
|
||||
char config[TSDB_DNODE_CONFIG_LEN];
|
||||
char value[TSDB_DNODE_VALUE_LEN];
|
||||
char value[TSDB_CLUSTER_VALUE_LEN];
|
||||
int32_t sqlLen;
|
||||
char* sql;
|
||||
} SMCfgClusterReq;
|
||||
|
|
|
@ -177,194 +177,195 @@
|
|||
#define TK_GRANTS 158
|
||||
#define TK_FULL 159
|
||||
#define TK_LOG 160
|
||||
#define TK_QUERIES 161
|
||||
#define TK_SCORES 162
|
||||
#define TK_TOPICS 163
|
||||
#define TK_VARIABLES 164
|
||||
#define TK_BNODES 165
|
||||
#define TK_SNODES 166
|
||||
#define TK_TRANSACTIONS 167
|
||||
#define TK_DISTRIBUTED 168
|
||||
#define TK_CONSUMERS 169
|
||||
#define TK_SUBSCRIPTIONS 170
|
||||
#define TK_VNODES 171
|
||||
#define TK_ALIVE 172
|
||||
#define TK_VIEWS 173
|
||||
#define TK_VIEW 174
|
||||
#define TK_COMPACTS 175
|
||||
#define TK_NORMAL 176
|
||||
#define TK_CHILD 177
|
||||
#define TK_LIKE 178
|
||||
#define TK_TBNAME 179
|
||||
#define TK_QTAGS 180
|
||||
#define TK_AS 181
|
||||
#define TK_SYSTEM 182
|
||||
#define TK_INDEX 183
|
||||
#define TK_FUNCTION 184
|
||||
#define TK_INTERVAL 185
|
||||
#define TK_COUNT 186
|
||||
#define TK_LAST_ROW 187
|
||||
#define TK_META 188
|
||||
#define TK_ONLY 189
|
||||
#define TK_TOPIC 190
|
||||
#define TK_CONSUMER 191
|
||||
#define TK_GROUP 192
|
||||
#define TK_DESC 193
|
||||
#define TK_DESCRIBE 194
|
||||
#define TK_RESET 195
|
||||
#define TK_QUERY 196
|
||||
#define TK_CACHE 197
|
||||
#define TK_EXPLAIN 198
|
||||
#define TK_ANALYZE 199
|
||||
#define TK_VERBOSE 200
|
||||
#define TK_NK_BOOL 201
|
||||
#define TK_RATIO 202
|
||||
#define TK_NK_FLOAT 203
|
||||
#define TK_OUTPUTTYPE 204
|
||||
#define TK_AGGREGATE 205
|
||||
#define TK_BUFSIZE 206
|
||||
#define TK_LANGUAGE 207
|
||||
#define TK_REPLACE 208
|
||||
#define TK_STREAM 209
|
||||
#define TK_INTO 210
|
||||
#define TK_PAUSE 211
|
||||
#define TK_RESUME 212
|
||||
#define TK_TRIGGER 213
|
||||
#define TK_AT_ONCE 214
|
||||
#define TK_WINDOW_CLOSE 215
|
||||
#define TK_IGNORE 216
|
||||
#define TK_EXPIRED 217
|
||||
#define TK_FILL_HISTORY 218
|
||||
#define TK_UPDATE 219
|
||||
#define TK_SUBTABLE 220
|
||||
#define TK_UNTREATED 221
|
||||
#define TK_KILL 222
|
||||
#define TK_CONNECTION 223
|
||||
#define TK_TRANSACTION 224
|
||||
#define TK_BALANCE 225
|
||||
#define TK_VGROUP 226
|
||||
#define TK_LEADER 227
|
||||
#define TK_MERGE 228
|
||||
#define TK_REDISTRIBUTE 229
|
||||
#define TK_SPLIT 230
|
||||
#define TK_DELETE 231
|
||||
#define TK_INSERT 232
|
||||
#define TK_NULL 233
|
||||
#define TK_NK_QUESTION 234
|
||||
#define TK_NK_ALIAS 235
|
||||
#define TK_NK_ARROW 236
|
||||
#define TK_ROWTS 237
|
||||
#define TK_QSTART 238
|
||||
#define TK_QEND 239
|
||||
#define TK_QDURATION 240
|
||||
#define TK_WSTART 241
|
||||
#define TK_WEND 242
|
||||
#define TK_WDURATION 243
|
||||
#define TK_IROWTS 244
|
||||
#define TK_ISFILLED 245
|
||||
#define TK_CAST 246
|
||||
#define TK_NOW 247
|
||||
#define TK_TODAY 248
|
||||
#define TK_TIMEZONE 249
|
||||
#define TK_CLIENT_VERSION 250
|
||||
#define TK_SERVER_VERSION 251
|
||||
#define TK_SERVER_STATUS 252
|
||||
#define TK_CURRENT_USER 253
|
||||
#define TK_CASE 254
|
||||
#define TK_WHEN 255
|
||||
#define TK_THEN 256
|
||||
#define TK_ELSE 257
|
||||
#define TK_BETWEEN 258
|
||||
#define TK_IS 259
|
||||
#define TK_NK_LT 260
|
||||
#define TK_NK_GT 261
|
||||
#define TK_NK_LE 262
|
||||
#define TK_NK_GE 263
|
||||
#define TK_NK_NE 264
|
||||
#define TK_MATCH 265
|
||||
#define TK_NMATCH 266
|
||||
#define TK_CONTAINS 267
|
||||
#define TK_IN 268
|
||||
#define TK_JOIN 269
|
||||
#define TK_INNER 270
|
||||
#define TK_SELECT 271
|
||||
#define TK_NK_HINT 272
|
||||
#define TK_DISTINCT 273
|
||||
#define TK_WHERE 274
|
||||
#define TK_PARTITION 275
|
||||
#define TK_BY 276
|
||||
#define TK_SESSION 277
|
||||
#define TK_STATE_WINDOW 278
|
||||
#define TK_EVENT_WINDOW 279
|
||||
#define TK_SLIDING 280
|
||||
#define TK_FILL 281
|
||||
#define TK_VALUE 282
|
||||
#define TK_VALUE_F 283
|
||||
#define TK_NONE 284
|
||||
#define TK_PREV 285
|
||||
#define TK_NULL_F 286
|
||||
#define TK_LINEAR 287
|
||||
#define TK_NEXT 288
|
||||
#define TK_HAVING 289
|
||||
#define TK_RANGE 290
|
||||
#define TK_EVERY 291
|
||||
#define TK_ORDER 292
|
||||
#define TK_SLIMIT 293
|
||||
#define TK_SOFFSET 294
|
||||
#define TK_LIMIT 295
|
||||
#define TK_OFFSET 296
|
||||
#define TK_ASC 297
|
||||
#define TK_NULLS 298
|
||||
#define TK_ABORT 299
|
||||
#define TK_AFTER 300
|
||||
#define TK_ATTACH 301
|
||||
#define TK_BEFORE 302
|
||||
#define TK_BEGIN 303
|
||||
#define TK_BITAND 304
|
||||
#define TK_BITNOT 305
|
||||
#define TK_BITOR 306
|
||||
#define TK_BLOCKS 307
|
||||
#define TK_CHANGE 308
|
||||
#define TK_COMMA 309
|
||||
#define TK_CONCAT 310
|
||||
#define TK_CONFLICT 311
|
||||
#define TK_COPY 312
|
||||
#define TK_DEFERRED 313
|
||||
#define TK_DELIMITERS 314
|
||||
#define TK_DETACH 315
|
||||
#define TK_DIVIDE 316
|
||||
#define TK_DOT 317
|
||||
#define TK_EACH 318
|
||||
#define TK_FAIL 319
|
||||
#define TK_FILE 320
|
||||
#define TK_FOR 321
|
||||
#define TK_GLOB 322
|
||||
#define TK_ID 323
|
||||
#define TK_IMMEDIATE 324
|
||||
#define TK_IMPORT 325
|
||||
#define TK_INITIALLY 326
|
||||
#define TK_INSTEAD 327
|
||||
#define TK_ISNULL 328
|
||||
#define TK_KEY 329
|
||||
#define TK_MODULES 330
|
||||
#define TK_NK_BITNOT 331
|
||||
#define TK_NK_SEMI 332
|
||||
#define TK_NOTNULL 333
|
||||
#define TK_OF 334
|
||||
#define TK_PLUS 335
|
||||
#define TK_PRIVILEGE 336
|
||||
#define TK_RAISE 337
|
||||
#define TK_RESTRICT 338
|
||||
#define TK_ROW 339
|
||||
#define TK_SEMI 340
|
||||
#define TK_STAR 341
|
||||
#define TK_STATEMENT 342
|
||||
#define TK_STRICT 343
|
||||
#define TK_STRING 344
|
||||
#define TK_TIMES 345
|
||||
#define TK_VALUES 346
|
||||
#define TK_VARIABLE 347
|
||||
#define TK_WAL 348
|
||||
#define TK_MACHINES 161
|
||||
#define TK_QUERIES 162
|
||||
#define TK_SCORES 163
|
||||
#define TK_TOPICS 164
|
||||
#define TK_VARIABLES 165
|
||||
#define TK_BNODES 166
|
||||
#define TK_SNODES 167
|
||||
#define TK_TRANSACTIONS 168
|
||||
#define TK_DISTRIBUTED 169
|
||||
#define TK_CONSUMERS 170
|
||||
#define TK_SUBSCRIPTIONS 171
|
||||
#define TK_VNODES 172
|
||||
#define TK_ALIVE 173
|
||||
#define TK_VIEWS 174
|
||||
#define TK_VIEW 175
|
||||
#define TK_COMPACTS 176
|
||||
#define TK_NORMAL 177
|
||||
#define TK_CHILD 178
|
||||
#define TK_LIKE 179
|
||||
#define TK_TBNAME 180
|
||||
#define TK_QTAGS 181
|
||||
#define TK_AS 182
|
||||
#define TK_SYSTEM 183
|
||||
#define TK_INDEX 184
|
||||
#define TK_FUNCTION 185
|
||||
#define TK_INTERVAL 186
|
||||
#define TK_COUNT 187
|
||||
#define TK_LAST_ROW 188
|
||||
#define TK_META 189
|
||||
#define TK_ONLY 190
|
||||
#define TK_TOPIC 191
|
||||
#define TK_CONSUMER 192
|
||||
#define TK_GROUP 193
|
||||
#define TK_DESC 194
|
||||
#define TK_DESCRIBE 195
|
||||
#define TK_RESET 196
|
||||
#define TK_QUERY 197
|
||||
#define TK_CACHE 198
|
||||
#define TK_EXPLAIN 199
|
||||
#define TK_ANALYZE 200
|
||||
#define TK_VERBOSE 201
|
||||
#define TK_NK_BOOL 202
|
||||
#define TK_RATIO 203
|
||||
#define TK_NK_FLOAT 204
|
||||
#define TK_OUTPUTTYPE 205
|
||||
#define TK_AGGREGATE 206
|
||||
#define TK_BUFSIZE 207
|
||||
#define TK_LANGUAGE 208
|
||||
#define TK_REPLACE 209
|
||||
#define TK_STREAM 210
|
||||
#define TK_INTO 211
|
||||
#define TK_PAUSE 212
|
||||
#define TK_RESUME 213
|
||||
#define TK_TRIGGER 214
|
||||
#define TK_AT_ONCE 215
|
||||
#define TK_WINDOW_CLOSE 216
|
||||
#define TK_IGNORE 217
|
||||
#define TK_EXPIRED 218
|
||||
#define TK_FILL_HISTORY 219
|
||||
#define TK_UPDATE 220
|
||||
#define TK_SUBTABLE 221
|
||||
#define TK_UNTREATED 222
|
||||
#define TK_KILL 223
|
||||
#define TK_CONNECTION 224
|
||||
#define TK_TRANSACTION 225
|
||||
#define TK_BALANCE 226
|
||||
#define TK_VGROUP 227
|
||||
#define TK_LEADER 228
|
||||
#define TK_MERGE 229
|
||||
#define TK_REDISTRIBUTE 230
|
||||
#define TK_SPLIT 231
|
||||
#define TK_DELETE 232
|
||||
#define TK_INSERT 233
|
||||
#define TK_NULL 234
|
||||
#define TK_NK_QUESTION 235
|
||||
#define TK_NK_ALIAS 236
|
||||
#define TK_NK_ARROW 237
|
||||
#define TK_ROWTS 238
|
||||
#define TK_QSTART 239
|
||||
#define TK_QEND 240
|
||||
#define TK_QDURATION 241
|
||||
#define TK_WSTART 242
|
||||
#define TK_WEND 243
|
||||
#define TK_WDURATION 244
|
||||
#define TK_IROWTS 245
|
||||
#define TK_ISFILLED 246
|
||||
#define TK_CAST 247
|
||||
#define TK_NOW 248
|
||||
#define TK_TODAY 249
|
||||
#define TK_TIMEZONE 250
|
||||
#define TK_CLIENT_VERSION 251
|
||||
#define TK_SERVER_VERSION 252
|
||||
#define TK_SERVER_STATUS 253
|
||||
#define TK_CURRENT_USER 254
|
||||
#define TK_CASE 255
|
||||
#define TK_WHEN 256
|
||||
#define TK_THEN 257
|
||||
#define TK_ELSE 258
|
||||
#define TK_BETWEEN 259
|
||||
#define TK_IS 260
|
||||
#define TK_NK_LT 261
|
||||
#define TK_NK_GT 262
|
||||
#define TK_NK_LE 263
|
||||
#define TK_NK_GE 264
|
||||
#define TK_NK_NE 265
|
||||
#define TK_MATCH 266
|
||||
#define TK_NMATCH 267
|
||||
#define TK_CONTAINS 268
|
||||
#define TK_IN 269
|
||||
#define TK_JOIN 270
|
||||
#define TK_INNER 271
|
||||
#define TK_SELECT 272
|
||||
#define TK_NK_HINT 273
|
||||
#define TK_DISTINCT 274
|
||||
#define TK_WHERE 275
|
||||
#define TK_PARTITION 276
|
||||
#define TK_BY 277
|
||||
#define TK_SESSION 278
|
||||
#define TK_STATE_WINDOW 279
|
||||
#define TK_EVENT_WINDOW 280
|
||||
#define TK_SLIDING 281
|
||||
#define TK_FILL 282
|
||||
#define TK_VALUE 283
|
||||
#define TK_VALUE_F 284
|
||||
#define TK_NONE 285
|
||||
#define TK_PREV 286
|
||||
#define TK_NULL_F 287
|
||||
#define TK_LINEAR 288
|
||||
#define TK_NEXT 289
|
||||
#define TK_HAVING 290
|
||||
#define TK_RANGE 291
|
||||
#define TK_EVERY 292
|
||||
#define TK_ORDER 293
|
||||
#define TK_SLIMIT 294
|
||||
#define TK_SOFFSET 295
|
||||
#define TK_LIMIT 296
|
||||
#define TK_OFFSET 297
|
||||
#define TK_ASC 298
|
||||
#define TK_NULLS 299
|
||||
#define TK_ABORT 300
|
||||
#define TK_AFTER 301
|
||||
#define TK_ATTACH 302
|
||||
#define TK_BEFORE 303
|
||||
#define TK_BEGIN 304
|
||||
#define TK_BITAND 305
|
||||
#define TK_BITNOT 306
|
||||
#define TK_BITOR 307
|
||||
#define TK_BLOCKS 308
|
||||
#define TK_CHANGE 309
|
||||
#define TK_COMMA 310
|
||||
#define TK_CONCAT 311
|
||||
#define TK_CONFLICT 312
|
||||
#define TK_COPY 313
|
||||
#define TK_DEFERRED 314
|
||||
#define TK_DELIMITERS 315
|
||||
#define TK_DETACH 316
|
||||
#define TK_DIVIDE 317
|
||||
#define TK_DOT 318
|
||||
#define TK_EACH 319
|
||||
#define TK_FAIL 320
|
||||
#define TK_FILE 321
|
||||
#define TK_FOR 322
|
||||
#define TK_GLOB 323
|
||||
#define TK_ID 324
|
||||
#define TK_IMMEDIATE 325
|
||||
#define TK_IMPORT 326
|
||||
#define TK_INITIALLY 327
|
||||
#define TK_INSTEAD 328
|
||||
#define TK_ISNULL 329
|
||||
#define TK_KEY 330
|
||||
#define TK_MODULES 331
|
||||
#define TK_NK_BITNOT 332
|
||||
#define TK_NK_SEMI 333
|
||||
#define TK_NOTNULL 334
|
||||
#define TK_OF 335
|
||||
#define TK_PLUS 336
|
||||
#define TK_PRIVILEGE 337
|
||||
#define TK_RAISE 338
|
||||
#define TK_RESTRICT 339
|
||||
#define TK_ROW 340
|
||||
#define TK_SEMI 341
|
||||
#define TK_STAR 342
|
||||
#define TK_STATEMENT 343
|
||||
#define TK_STRICT 344
|
||||
#define TK_STRING 345
|
||||
#define TK_TIMES 346
|
||||
#define TK_VALUES 347
|
||||
#define TK_VARIABLE 348
|
||||
#define TK_WAL 349
|
||||
|
||||
#define TK_NK_SPACE 600
|
||||
#define TK_NK_COMMENT 601
|
||||
|
|
|
@ -423,7 +423,7 @@ typedef struct SDropCGroupStmt {
|
|||
typedef struct SAlterClusterStmt {
|
||||
ENodeType type;
|
||||
char config[TSDB_DNODE_CONFIG_LEN];
|
||||
char value[TSDB_DNODE_VALUE_LEN];
|
||||
char value[TSDB_CLUSTER_VALUE_LEN];
|
||||
} SAlterClusterStmt;
|
||||
|
||||
typedef struct SAlterLocalStmt {
|
||||
|
|
|
@ -286,6 +286,8 @@ typedef enum ELogicConditionType {
|
|||
#define TSDB_DNODE_CONFIG_LEN 128
|
||||
#define TSDB_DNODE_VALUE_LEN 256
|
||||
|
||||
#define TSDB_CLUSTER_VALUE_LEN 1024
|
||||
|
||||
#define TSDB_ACTIVE_KEY_LEN 109
|
||||
#define TSDB_CONN_ACTIVE_KEY_LEN 255
|
||||
#define TSDB_UNIQ_ACTIVE_KEY_LEN 249
|
||||
|
|
|
@ -365,6 +365,11 @@ static const SSysDbTableSchema useGrantsLogSchema[] = {
|
|||
{.name = "machine", .bytes = 6016 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema useMachinesSchema[] = {
|
||||
{.name = "id", .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
|
||||
{.name = "machine", .bytes = 6016 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||
};
|
||||
|
||||
static const SSysTableMeta infosMeta[] = {
|
||||
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
||||
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
||||
|
@ -396,6 +401,7 @@ static const SSysTableMeta infosMeta[] = {
|
|||
{TSDB_INS_TABLE_COMPACT_DETAILS, userCompactsDetailSchema, tListLen(userCompactsDetailSchema), false},
|
||||
{TSDB_INS_TABLE_GRANTS_FULL, useGrantsFullSchema, tListLen(useGrantsFullSchema), false},
|
||||
{TSDB_INS_TABLE_GRANTS_LOG, useGrantsLogSchema, tListLen(useGrantsLogSchema), false},
|
||||
{TSDB_INS_TABLE_MACHINES, useMachinesSchema, tListLen(useMachinesSchema), false},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema connectionsSchema[] = {
|
||||
|
|
|
@ -830,7 +830,8 @@ typedef struct {
|
|||
int64_t updateTime;
|
||||
SGrantState state[GRANT_STATE_NUM];
|
||||
SGrantActive active[GRANT_ACTIVE_NUM];
|
||||
SArray *pMachines; // SGrantMachines
|
||||
char* pActive;
|
||||
SArray* pMachines; // SGrantMachines
|
||||
SRWLatch lock;
|
||||
} SGrantObj;
|
||||
|
||||
|
|
|
@ -29,13 +29,10 @@
|
|||
void grantAdd(EGrantType grant, uint64_t value);
|
||||
void grantRestore(EGrantType grant, uint64_t value);
|
||||
|
||||
|
||||
#ifdef TD_ENTERPRISE
|
||||
|
||||
// void initDynGrantVersion(void);
|
||||
|
||||
SGrantObj *mndAcquireGrant(SMnode * pMnode, int32_t id);
|
||||
void mndReleaseGrant(SMnode * pMnode, SGrantObj *pGrant);
|
||||
void mndReleaseGrant(SMnode * pMnode, SGrantObj * pGrant);
|
||||
|
||||
SSdbRaw *mndGrantActionEncode(SGrantObj * pGrant);
|
||||
SSdbRow *mndGrantActionDecode(SSdbRaw * pRaw);
|
||||
|
@ -48,6 +45,9 @@
|
|||
int32_t mndProcessUpdActiveReqImpl(void *pActive, SRpcMsg *pReq);
|
||||
int32_t mndRetrieveGrantImpl(SRpcMsg * pReq, SShowObj * pShow, SSDataBlock * pBlock, int32_t rows);
|
||||
|
||||
int32_t mndProcessConfigClusterReq(SRpcMsg * pReq);
|
||||
int32_t mndProcessConfigClusterRsp(SRpcMsg * pReq);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -33,8 +33,6 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode);
|
|||
static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextCluster(SMnode *pMnode, void *pIter);
|
||||
static int32_t mndProcessUptimeTimer(SRpcMsg *pReq);
|
||||
static int32_t mndProcessConfigClusterReq(SRpcMsg *pReq);
|
||||
static int32_t mndProcessConfigClusterRsp(SRpcMsg *pReq);
|
||||
|
||||
int32_t mndInitCluster(SMnode *pMnode) {
|
||||
SSdbTable table = {
|
||||
|
@ -49,8 +47,6 @@ int32_t mndInitCluster(SMnode *pMnode) {
|
|||
};
|
||||
|
||||
mndSetMsgHandle(pMnode, TDMT_MND_UPTIME_TIMER, mndProcessUptimeTimer);
|
||||
mndSetMsgHandle(pMnode, TDMT_MND_CONFIG_CLUSTER, mndProcessConfigClusterReq);
|
||||
mndSetMsgHandle(pMnode, TDMT_MND_CONFIG_CLUSTER_RSP, mndProcessConfigClusterRsp);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndRetrieveClusters);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndCancelGetNextCluster);
|
||||
|
||||
|
@ -407,89 +403,3 @@ static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) {
|
|||
mndTransDrop(pTrans);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndProcessConfigClusterReq(SRpcMsg *pReq) {
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
SMCfgClusterReq cfgReq = {0};
|
||||
if (tDeserializeSMCfgClusterReq(pReq->pCont, pReq->contLen, &cfgReq) != 0) {
|
||||
terrno = TSDB_CODE_INVALID_MSG;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int32_t code = 0;
|
||||
mInfo("cluster: start to config, option:%s, value:%s", cfgReq.config, cfgReq.value);
|
||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CONFIG_CLUSTER) != 0) {
|
||||
code = terrno != 0 ? terrno : TSDB_CODE_MND_NO_RIGHTS;
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
SClusterObj clusterObj = {0};
|
||||
void *pIter = NULL;
|
||||
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||
if (!pCluster || pCluster->id <= 0) {
|
||||
code = TSDB_CODE_APP_IS_STARTING;
|
||||
if (pCluster) mndReleaseCluster(pMnode, pCluster, pIter);
|
||||
goto _exit;
|
||||
}
|
||||
memcpy(&clusterObj, pCluster, sizeof(SClusterObj));
|
||||
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||
|
||||
if (strncmp(cfgReq.config, GRANT_ACTIVE_CODE, 11) == 0) {
|
||||
#ifdef TD_ENTERPRISE
|
||||
if (strlen(cfgReq.config) >= TSDB_DNODE_CONFIG_LEN) {
|
||||
code = TSDB_CODE_INVALID_CFG;
|
||||
goto _exit;
|
||||
}
|
||||
if (strlen(cfgReq.value) >= TSDB_DNODE_VALUE_LEN) {
|
||||
code = TSDB_CODE_INVALID_CFG_VALUE;
|
||||
goto _exit;
|
||||
}
|
||||
char *newActive = NULL;
|
||||
if ((code = grantAlterActiveCode(cfgReq.value, &newActive)) != 0) {
|
||||
goto _exit;
|
||||
}
|
||||
#else
|
||||
code = TSDB_CODE_OPS_NOT_SUPPORT;
|
||||
goto _exit;
|
||||
#endif
|
||||
}
|
||||
|
||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "update-cluster");
|
||||
if (pTrans == NULL) return -1;
|
||||
|
||||
SSdbRaw *pCommitRaw = mndClusterActionEncode(&clusterObj);
|
||||
if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) {
|
||||
mError("trans:%d, failed to append commit log since %s", pTrans->id, terrstr());
|
||||
mndTransDrop(pTrans);
|
||||
code = terrno;
|
||||
goto _exit;
|
||||
}
|
||||
(void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY);
|
||||
|
||||
if (mndTransPrepare(pMnode, pTrans) != 0) {
|
||||
mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr());
|
||||
mndTransDrop(pTrans);
|
||||
code = terrno;
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
mndTransDrop(pTrans);
|
||||
|
||||
{ // audit
|
||||
auditRecord(pReq, pMnode->clusterId, "alterCluster", "", "", cfgReq.sql, cfgReq.sqlLen);
|
||||
}
|
||||
_exit:
|
||||
tFreeSMCfgClusterReq(&cfgReq);
|
||||
if (code != 0) {
|
||||
terrno = code;
|
||||
mError("cluster: failed to config:%s %s since %s", cfgReq.config, cfgReq.value, terrstr());
|
||||
} else {
|
||||
mInfo("cluster: success to config:%s %s", cfgReq.config, cfgReq.value);
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
static int32_t mndProcessConfigClusterRsp(SRpcMsg *pRsp) {
|
||||
mInfo("config rsp from cluster");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl
|
|||
|
||||
static int32_t mndRetrieveGrantFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||
static int32_t mndRetrieveGrantLog(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||
static int32_t mndRetrieveMachines(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||
|
||||
static int32_t mndProcessGrantHB(SRpcMsg *pReq) { return TSDB_CODE_SUCCESS; }
|
||||
|
||||
|
@ -64,6 +65,7 @@ int32_t mndInitGrant(SMnode *pMnode) {
|
|||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS, mndRetrieveGrant);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS_FULL, mndRetrieveGrantFull);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS_LOG, mndRetrieveGrantLog);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_MACHINES, mndRetrieveMachines);
|
||||
mndSetMsgHandle(pMnode, TDMT_MND_GRANT_HB_TIMER, mndProcessGrantHB);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -127,6 +127,8 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
|||
type = TSDB_MGMT_TABLE_GRANTS_FULL;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_GRANTS_LOG, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_GRANTS_LOG;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_MACHINES, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_MACHINES;
|
||||
} else {
|
||||
mError("invalid show name:%s len:%d", name, len);
|
||||
}
|
||||
|
|
|
@ -269,6 +269,8 @@ const char* nodesNodeName(ENodeType type) {
|
|||
return "ShowGrantsFullStmt";
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
return "ShowGrantsLogStmt";
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return "ShowClusterMachinesStmt";
|
||||
case QUERY_NODE_DELETE_STMT:
|
||||
return "DeleteStmt";
|
||||
case QUERY_NODE_INSERT_STMT:
|
||||
|
@ -6585,8 +6587,12 @@ static int32_t jsonToShowGrantsFullStmt(const SJson* pJson, void* pObj) { return
|
|||
|
||||
static int32_t showGrantsLogStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
|
||||
|
||||
static int32_t showClusterMachinesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
|
||||
|
||||
static int32_t jsonToShowGrantsLogStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||
|
||||
static int32_t jsonToShowClusterMachinesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||
|
||||
static const char* jkShowDnodeVariablesStmtDnodeId = "DnodeId";
|
||||
static const char* jkShowDnodeVariablesStmtLikePattern = "LikePattern";
|
||||
|
||||
|
@ -7078,6 +7084,8 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
|||
return showGrantsFullStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
return showGrantsLogStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return showClusterMachinesStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||
return showDnodeVariablesStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||
|
@ -7407,6 +7415,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
|||
return jsonToShowGrantsFullStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
return jsonToShowGrantsLogStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return jsonToShowClusterMachinesStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||
return jsonToShowDnodeVariablesStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||
|
|
|
@ -443,6 +443,7 @@ SNode* nodesMakeNode(ENodeType type) {
|
|||
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return makeNode(type, sizeof(SShowStmt));
|
||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
||||
return makeNode(type, sizeof(SShowTableTagsStmt));
|
||||
|
@ -1083,7 +1084,8 @@ void nodesDestroyNode(SNode* pNode) {
|
|||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT: {
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT: {
|
||||
SShowStmt* pStmt = (SShowStmt*)pNode;
|
||||
nodesDestroyNode(pStmt->pDbName);
|
||||
nodesDestroyNode(pStmt->pTbName);
|
||||
|
|
|
@ -489,6 +489,7 @@ cmd ::= SHOW LICENCES.
|
|||
cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
|
||||
cmd ::= SHOW GRANTS FULL. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
|
||||
cmd ::= SHOW GRANTS LOG. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOG_STMT); }
|
||||
cmd ::= SHOW CLUSTER MACHINES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
|
||||
cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
|
||||
cmd ::= SHOW CREATE TABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
|
||||
cmd ::= SHOW CREATE STABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, A); }
|
||||
|
|
|
@ -629,6 +629,11 @@ static int32_t collectMetaKeyFromShowGrantsLog(SCollectMetaKeyCxt* pCxt, SShowSt
|
|||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowClusterMachines(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MACHINES,
|
||||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
||||
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
||||
}
|
||||
|
@ -853,6 +858,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
|||
return collectMetaKeyFromShowGrantsFull(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
return collectMetaKeyFromShowGrantsLog(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return collectMetaKeyFromShowClusterMachines(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
||||
|
|
|
@ -351,6 +351,7 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
|
|||
case QUERY_NODE_SHOW_SCORES_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
return !pCxt->pParseCxt->enableSysInfo ? TSDB_CODE_PAR_PERMISSION_DENIED : TSDB_CODE_SUCCESS;
|
||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_STABLES_STMT:
|
||||
|
|
|
@ -111,6 +111,7 @@ static SKeyword keywordTable[] = {
|
|||
{"GRANTS", TK_GRANTS},
|
||||
{"FULL", TK_FULL},
|
||||
{"LOG", TK_LOG},
|
||||
{"MACHINES", TK_MACHINES},
|
||||
{"GROUP", TK_GROUP},
|
||||
{"HAVING", TK_HAVING},
|
||||
{"HOST", TK_HOST},
|
||||
|
|
|
@ -275,12 +275,18 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
|||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{ .showType = QUERY_NODE_SHOW_GRANTS_FULL_STMT,
|
||||
{ .showType = QUERY_NODE_SHOW_GRANTS_LOG_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
.pTableName = TSDB_INS_TABLE_GRANTS_LOG,
|
||||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{ .showType = QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
.pTableName = TSDB_INS_TABLE_MACHINES,
|
||||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -10650,6 +10656,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
|||
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOG_STMT:
|
||||
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||
code = rewriteShow(pCxt, pQuery);
|
||||
break;
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue