Merge remote-tracking branch 'origin/3.0' into fix/TD-30672
This commit is contained in:
commit
ac4e804088
|
@ -180,18 +180,20 @@ ELSE ()
|
|||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
|
||||
ENDIF()
|
||||
MESSAGE(STATUS "SIMD instructions (FMA/AVX/AVX2) is ACTIVATED")
|
||||
ENDIF()
|
||||
|
||||
# IF (COMPILER_SUPPORT_AVX512F AND COMPILER_SUPPORT_AVX512BMI)
|
||||
# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512vbmi")
|
||||
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mavx512vbmi")
|
||||
# MESSAGE(STATUS "avx512f/avx512bmi supported by compiler")
|
||||
# ENDIF()
|
||||
#
|
||||
# IF (COMPILER_SUPPORT_AVX512VL)
|
||||
# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vl")
|
||||
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512vl")
|
||||
# MESSAGE(STATUS "avx512vl supported by compiler")
|
||||
# ENDIF()
|
||||
IF ("${SIMD_AVX512_SUPPORT}" MATCHES "true")
|
||||
IF (COMPILER_SUPPORT_AVX512F AND COMPILER_SUPPORT_AVX512BMI)
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512vbmi")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mavx512vbmi")
|
||||
MESSAGE(STATUS "avx512f/avx512bmi enabled by compiler")
|
||||
ENDIF()
|
||||
|
||||
IF (COMPILER_SUPPORT_AVX512VL)
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vl")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512vl")
|
||||
MESSAGE(STATUS "avx512vl enabled by compiler")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# build mode
|
||||
|
|
|
@ -39,10 +39,10 @@ This is an example:
|
|||
|
||||
```sql
|
||||
taos> show users;
|
||||
name | super | enable | sysinfo | create_time |
|
||||
================================================================================
|
||||
test | 0 | 1 | 1 | 2022-08-29 15:10:27.315 |
|
||||
root | 1 | 1 | 1 | 2022-08-29 15:03:34.710 |
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001657s)
|
||||
```
|
||||
|
||||
|
@ -50,10 +50,10 @@ Alternatively, you can get the user information by querying a built-in table, IN
|
|||
|
||||
```sql
|
||||
taos> select * from information_schema.ins_users;
|
||||
name | super | enable | sysinfo | create_time |
|
||||
================================================================================
|
||||
test | 0 | 1 | 1 | 2022-08-29 15:10:27.315 |
|
||||
root | 1 | 1 | 1 | 2022-08-29 15:03:34.710 |
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001953s)
|
||||
```
|
||||
|
||||
|
@ -72,12 +72,14 @@ alter_user_clause: {
|
|||
PASS 'literal'
|
||||
| ENABLE value
|
||||
| SYSINFO value
|
||||
| CREATEDB value
|
||||
}
|
||||
```
|
||||
|
||||
- PASS: Modify the user password.
|
||||
- ENABLE: Specify whether the user is enabled or disabled. 1 indicates enabled and 0 indicates disabled.
|
||||
- SYSINFO: Specify whether the user can query system information. 1 indicates that the user can query system information and 0 indicates that the user cannot query system information.
|
||||
- CREATEDB: Specify whether the user can create databases. 1 indicates that the user can create databases and 0 indicates that the user cannot create databases.
|
||||
|
||||
For example, you can use below command to disable user `test`:
|
||||
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
title: 用户管理
|
||||
sidebar_label: 用户管理
|
||||
description: 本节讲述基本的用户管理功能
|
||||
---
|
||||
|
||||
用户和权限管理是 TDengine 企业版的功能,本节只讲述基本的用户管理部分。要想了解和获取全面的权限管理功能,请联系 TDengine 销售团队。
|
||||
|
||||
## 创建用户
|
||||
|
||||
```sql
|
||||
CREATE USER user_name PASS 'password' [SYSINFO {1|0}];
|
||||
```
|
||||
|
||||
用户名最长不超过 23 个字节。
|
||||
|
||||
密码最长不超过 31 个字节。密码可以包含字母、数字以及除单引号、双引号、反引号、反斜杠和空格以外的特殊字符,密码不能为空字符串。
|
||||
|
||||
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
||||
|
||||
在下面的示例中,我们创建一个密码为 `123456` 且可以查看系统信息的用户。
|
||||
|
||||
```sql
|
||||
taos> create user test pass '123456' sysinfo 1;
|
||||
Query OK, 0 of 0 rows affected (0.001254s)
|
||||
```
|
||||
|
||||
## 查看用户
|
||||
|
||||
可以使用如下命令查看系统中的用户。
|
||||
|
||||
```sql
|
||||
SHOW USERS;
|
||||
```
|
||||
|
||||
以下是示例:
|
||||
|
||||
```sql
|
||||
taos> show users;
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001657s)
|
||||
```
|
||||
|
||||
或者,可以查询内置系统表 INFORMATION_SCHEMA.INS_USERS 来获取用户信息。
|
||||
|
||||
```sql
|
||||
taos> select * from information_schema.ins_users;
|
||||
name | super | enable | sysinfo | createdb | create_time | allowed_host |
|
||||
=========================================================================================================
|
||||
test | 0 | 1 | 1 | 0 |2022-08-29 15:10:27.315 | 127.0.0.1 |
|
||||
root | 1 | 1 | 1 | 1 |2022-08-29 15:03:34.710 | 127.0.0.1 |
|
||||
Query OK, 2 rows in database (0.001953s)
|
||||
```
|
||||
|
||||
## 删除用户
|
||||
|
||||
```sql
|
||||
DROP USER user_name;
|
||||
```
|
||||
|
||||
## 修改用户配置
|
||||
|
||||
```sql
|
||||
ALTER USER user_name alter_user_clause
|
||||
|
||||
alter_user_clause: {
|
||||
PASS 'literal'
|
||||
| ENABLE value
|
||||
| SYSINFO value
|
||||
| CREATEDB value
|
||||
}
|
||||
```
|
||||
|
||||
- PASS: 修改密码,后跟新密码
|
||||
- ENABLE: 启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
||||
- SYSINFO: 允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
||||
- CREATEDB: 允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止
|
||||
|
||||
下面的示例禁用了名为 `test` 的用户:
|
||||
|
||||
```sql
|
||||
taos> alter user test enable 0;
|
||||
Query OK, 0 of 0 rows affected (0.001160s)
|
||||
```
|
||||
|
||||
## 授权管理
|
||||
|
||||
授权管理仅在 TDengine 企业版中可用,请联系 TDengine 销售团队。
|
|
@ -40,6 +40,7 @@ extern "C" {
|
|||
#define TSDB_INS_TABLE_COLS "ins_columns"
|
||||
#define TSDB_INS_TABLE_TABLE_DISTRIBUTED "ins_table_distributed"
|
||||
#define TSDB_INS_TABLE_USERS "ins_users"
|
||||
#define TSDB_INS_TABLE_USERS_FULL "ins_users_full"
|
||||
#define TSDB_INS_TABLE_LICENCES "ins_grants"
|
||||
#define TSDB_INS_TABLE_VGROUPS "ins_vgroups"
|
||||
#define TSDB_INS_TABLE_VNODES "ins_vnodes"
|
||||
|
|
|
@ -158,6 +158,7 @@ typedef enum _mgmt_table {
|
|||
TSDB_MGMT_TABLE_MACHINES,
|
||||
TSDB_MGMT_TABLE_ARBGROUP,
|
||||
TSDB_MGMT_TABLE_ENCRYPTIONS,
|
||||
TSDB_MGMT_TABLE_USER_FULL,
|
||||
TSDB_MGMT_TABLE_MAX,
|
||||
} EShowType;
|
||||
|
||||
|
@ -362,6 +363,7 @@ typedef enum ENodeType {
|
|||
QUERY_NODE_SHOW_TABLES_STMT,
|
||||
QUERY_NODE_SHOW_TAGS_STMT,
|
||||
QUERY_NODE_SHOW_USERS_STMT,
|
||||
QUERY_NODE_SHOW_USERS_FULL_STMT,
|
||||
QUERY_NODE_SHOW_LICENCES_STMT,
|
||||
QUERY_NODE_SHOW_VGROUPS_STMT,
|
||||
QUERY_NODE_SHOW_TOPICS_STMT,
|
||||
|
@ -1017,6 +1019,8 @@ typedef struct {
|
|||
SIpV4Range* pIpRanges;
|
||||
int32_t sqlLen;
|
||||
char* sql;
|
||||
int8_t isImport;
|
||||
int8_t createDb;
|
||||
} SCreateUserReq;
|
||||
|
||||
int32_t tSerializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq);
|
||||
|
@ -2111,6 +2115,7 @@ typedef struct {
|
|||
char filterTb[TSDB_TABLE_NAME_LEN]; // for ins_columns
|
||||
int64_t showId;
|
||||
int64_t compactId; // for compact
|
||||
bool withFull; // for show users full
|
||||
} SRetrieveTableReq;
|
||||
|
||||
typedef struct SSysTableSchema {
|
||||
|
|
|
@ -50,348 +50,349 @@
|
|||
#define TK_STATE 32
|
||||
#define TK_NK_COMMA 33
|
||||
#define TK_HOST 34
|
||||
#define TK_USER 35
|
||||
#define TK_ENABLE 36
|
||||
#define TK_NK_INTEGER 37
|
||||
#define TK_SYSINFO 38
|
||||
#define TK_CREATEDB 39
|
||||
#define TK_ADD 40
|
||||
#define TK_DROP 41
|
||||
#define TK_GRANT 42
|
||||
#define TK_ON 43
|
||||
#define TK_TO 44
|
||||
#define TK_REVOKE 45
|
||||
#define TK_FROM 46
|
||||
#define TK_SUBSCRIBE 47
|
||||
#define TK_READ 48
|
||||
#define TK_WRITE 49
|
||||
#define TK_NK_DOT 50
|
||||
#define TK_WITH 51
|
||||
#define TK_ENCRYPT_KEY 52
|
||||
#define TK_DNODE 53
|
||||
#define TK_PORT 54
|
||||
#define TK_DNODES 55
|
||||
#define TK_RESTORE 56
|
||||
#define TK_NK_IPTOKEN 57
|
||||
#define TK_FORCE 58
|
||||
#define TK_UNSAFE 59
|
||||
#define TK_CLUSTER 60
|
||||
#define TK_LOCAL 61
|
||||
#define TK_QNODE 62
|
||||
#define TK_BNODE 63
|
||||
#define TK_SNODE 64
|
||||
#define TK_MNODE 65
|
||||
#define TK_VNODE 66
|
||||
#define TK_DATABASE 67
|
||||
#define TK_USE 68
|
||||
#define TK_FLUSH 69
|
||||
#define TK_TRIM 70
|
||||
#define TK_S3MIGRATE 71
|
||||
#define TK_COMPACT 72
|
||||
#define TK_IF 73
|
||||
#define TK_NOT 74
|
||||
#define TK_EXISTS 75
|
||||
#define TK_BUFFER 76
|
||||
#define TK_CACHEMODEL 77
|
||||
#define TK_CACHESIZE 78
|
||||
#define TK_COMP 79
|
||||
#define TK_DURATION 80
|
||||
#define TK_NK_VARIABLE 81
|
||||
#define TK_MAXROWS 82
|
||||
#define TK_MINROWS 83
|
||||
#define TK_KEEP 84
|
||||
#define TK_PAGES 85
|
||||
#define TK_PAGESIZE 86
|
||||
#define TK_TSDB_PAGESIZE 87
|
||||
#define TK_PRECISION 88
|
||||
#define TK_REPLICA 89
|
||||
#define TK_VGROUPS 90
|
||||
#define TK_SINGLE_STABLE 91
|
||||
#define TK_RETENTIONS 92
|
||||
#define TK_SCHEMALESS 93
|
||||
#define TK_WAL_LEVEL 94
|
||||
#define TK_WAL_FSYNC_PERIOD 95
|
||||
#define TK_WAL_RETENTION_PERIOD 96
|
||||
#define TK_WAL_RETENTION_SIZE 97
|
||||
#define TK_WAL_ROLL_PERIOD 98
|
||||
#define TK_WAL_SEGMENT_SIZE 99
|
||||
#define TK_STT_TRIGGER 100
|
||||
#define TK_TABLE_PREFIX 101
|
||||
#define TK_TABLE_SUFFIX 102
|
||||
#define TK_S3_CHUNKSIZE 103
|
||||
#define TK_S3_KEEPLOCAL 104
|
||||
#define TK_S3_COMPACT 105
|
||||
#define TK_KEEP_TIME_OFFSET 106
|
||||
#define TK_ENCRYPT_ALGORITHM 107
|
||||
#define TK_NK_COLON 108
|
||||
#define TK_BWLIMIT 109
|
||||
#define TK_START 110
|
||||
#define TK_TIMESTAMP 111
|
||||
#define TK_END 112
|
||||
#define TK_TABLE 113
|
||||
#define TK_NK_LP 114
|
||||
#define TK_NK_RP 115
|
||||
#define TK_STABLE 116
|
||||
#define TK_COLUMN 117
|
||||
#define TK_MODIFY 118
|
||||
#define TK_RENAME 119
|
||||
#define TK_TAG 120
|
||||
#define TK_SET 121
|
||||
#define TK_NK_EQ 122
|
||||
#define TK_USING 123
|
||||
#define TK_TAGS 124
|
||||
#define TK_BOOL 125
|
||||
#define TK_TINYINT 126
|
||||
#define TK_SMALLINT 127
|
||||
#define TK_INT 128
|
||||
#define TK_INTEGER 129
|
||||
#define TK_BIGINT 130
|
||||
#define TK_FLOAT 131
|
||||
#define TK_DOUBLE 132
|
||||
#define TK_BINARY 133
|
||||
#define TK_NCHAR 134
|
||||
#define TK_UNSIGNED 135
|
||||
#define TK_JSON 136
|
||||
#define TK_VARCHAR 137
|
||||
#define TK_MEDIUMBLOB 138
|
||||
#define TK_BLOB 139
|
||||
#define TK_VARBINARY 140
|
||||
#define TK_GEOMETRY 141
|
||||
#define TK_DECIMAL 142
|
||||
#define TK_COMMENT 143
|
||||
#define TK_MAX_DELAY 144
|
||||
#define TK_WATERMARK 145
|
||||
#define TK_ROLLUP 146
|
||||
#define TK_TTL 147
|
||||
#define TK_SMA 148
|
||||
#define TK_DELETE_MARK 149
|
||||
#define TK_FIRST 150
|
||||
#define TK_LAST 151
|
||||
#define TK_SHOW 152
|
||||
#define TK_PRIVILEGES 153
|
||||
#define TK_DATABASES 154
|
||||
#define TK_TABLES 155
|
||||
#define TK_STABLES 156
|
||||
#define TK_MNODES 157
|
||||
#define TK_QNODES 158
|
||||
#define TK_ARBGROUPS 159
|
||||
#define TK_FUNCTIONS 160
|
||||
#define TK_INDEXES 161
|
||||
#define TK_ACCOUNTS 162
|
||||
#define TK_APPS 163
|
||||
#define TK_CONNECTIONS 164
|
||||
#define TK_LICENCES 165
|
||||
#define TK_GRANTS 166
|
||||
#define TK_FULL 167
|
||||
#define TK_LOGS 168
|
||||
#define TK_MACHINES 169
|
||||
#define TK_ENCRYPTIONS 170
|
||||
#define TK_QUERIES 171
|
||||
#define TK_SCORES 172
|
||||
#define TK_TOPICS 173
|
||||
#define TK_VARIABLES 174
|
||||
#define TK_BNODES 175
|
||||
#define TK_SNODES 176
|
||||
#define TK_TRANSACTIONS 177
|
||||
#define TK_DISTRIBUTED 178
|
||||
#define TK_CONSUMERS 179
|
||||
#define TK_SUBSCRIPTIONS 180
|
||||
#define TK_VNODES 181
|
||||
#define TK_ALIVE 182
|
||||
#define TK_VIEWS 183
|
||||
#define TK_VIEW 184
|
||||
#define TK_COMPACTS 185
|
||||
#define TK_NORMAL 186
|
||||
#define TK_CHILD 187
|
||||
#define TK_LIKE 188
|
||||
#define TK_TBNAME 189
|
||||
#define TK_QTAGS 190
|
||||
#define TK_AS 191
|
||||
#define TK_SYSTEM 192
|
||||
#define TK_TSMA 193
|
||||
#define TK_INTERVAL 194
|
||||
#define TK_RECURSIVE 195
|
||||
#define TK_TSMAS 196
|
||||
#define TK_FUNCTION 197
|
||||
#define TK_INDEX 198
|
||||
#define TK_COUNT 199
|
||||
#define TK_LAST_ROW 200
|
||||
#define TK_META 201
|
||||
#define TK_ONLY 202
|
||||
#define TK_TOPIC 203
|
||||
#define TK_CONSUMER 204
|
||||
#define TK_GROUP 205
|
||||
#define TK_DESC 206
|
||||
#define TK_DESCRIBE 207
|
||||
#define TK_RESET 208
|
||||
#define TK_QUERY 209
|
||||
#define TK_CACHE 210
|
||||
#define TK_EXPLAIN 211
|
||||
#define TK_ANALYZE 212
|
||||
#define TK_VERBOSE 213
|
||||
#define TK_NK_BOOL 214
|
||||
#define TK_RATIO 215
|
||||
#define TK_NK_FLOAT 216
|
||||
#define TK_OUTPUTTYPE 217
|
||||
#define TK_AGGREGATE 218
|
||||
#define TK_BUFSIZE 219
|
||||
#define TK_LANGUAGE 220
|
||||
#define TK_REPLACE 221
|
||||
#define TK_STREAM 222
|
||||
#define TK_INTO 223
|
||||
#define TK_PAUSE 224
|
||||
#define TK_RESUME 225
|
||||
#define TK_PRIMARY 226
|
||||
#define TK_KEY 227
|
||||
#define TK_TRIGGER 228
|
||||
#define TK_AT_ONCE 229
|
||||
#define TK_WINDOW_CLOSE 230
|
||||
#define TK_IGNORE 231
|
||||
#define TK_EXPIRED 232
|
||||
#define TK_FILL_HISTORY 233
|
||||
#define TK_UPDATE 234
|
||||
#define TK_SUBTABLE 235
|
||||
#define TK_UNTREATED 236
|
||||
#define TK_KILL 237
|
||||
#define TK_CONNECTION 238
|
||||
#define TK_TRANSACTION 239
|
||||
#define TK_BALANCE 240
|
||||
#define TK_VGROUP 241
|
||||
#define TK_LEADER 242
|
||||
#define TK_MERGE 243
|
||||
#define TK_REDISTRIBUTE 244
|
||||
#define TK_SPLIT 245
|
||||
#define TK_DELETE 246
|
||||
#define TK_INSERT 247
|
||||
#define TK_NK_BIN 248
|
||||
#define TK_NK_HEX 249
|
||||
#define TK_NULL 250
|
||||
#define TK_NK_QUESTION 251
|
||||
#define TK_NK_ALIAS 252
|
||||
#define TK_NK_ARROW 253
|
||||
#define TK_ROWTS 254
|
||||
#define TK_QSTART 255
|
||||
#define TK_QEND 256
|
||||
#define TK_QDURATION 257
|
||||
#define TK_WSTART 258
|
||||
#define TK_WEND 259
|
||||
#define TK_WDURATION 260
|
||||
#define TK_IROWTS 261
|
||||
#define TK_ISFILLED 262
|
||||
#define TK_CAST 263
|
||||
#define TK_NOW 264
|
||||
#define TK_TODAY 265
|
||||
#define TK_TIMEZONE 266
|
||||
#define TK_CLIENT_VERSION 267
|
||||
#define TK_SERVER_VERSION 268
|
||||
#define TK_SERVER_STATUS 269
|
||||
#define TK_CURRENT_USER 270
|
||||
#define TK_CASE 271
|
||||
#define TK_WHEN 272
|
||||
#define TK_THEN 273
|
||||
#define TK_ELSE 274
|
||||
#define TK_BETWEEN 275
|
||||
#define TK_IS 276
|
||||
#define TK_NK_LT 277
|
||||
#define TK_NK_GT 278
|
||||
#define TK_NK_LE 279
|
||||
#define TK_NK_GE 280
|
||||
#define TK_NK_NE 281
|
||||
#define TK_MATCH 282
|
||||
#define TK_NMATCH 283
|
||||
#define TK_CONTAINS 284
|
||||
#define TK_IN 285
|
||||
#define TK_JOIN 286
|
||||
#define TK_INNER 287
|
||||
#define TK_LEFT 288
|
||||
#define TK_RIGHT 289
|
||||
#define TK_OUTER 290
|
||||
#define TK_SEMI 291
|
||||
#define TK_ANTI 292
|
||||
#define TK_ASOF 293
|
||||
#define TK_WINDOW 294
|
||||
#define TK_WINDOW_OFFSET 295
|
||||
#define TK_JLIMIT 296
|
||||
#define TK_SELECT 297
|
||||
#define TK_NK_HINT 298
|
||||
#define TK_DISTINCT 299
|
||||
#define TK_WHERE 300
|
||||
#define TK_PARTITION 301
|
||||
#define TK_BY 302
|
||||
#define TK_SESSION 303
|
||||
#define TK_STATE_WINDOW 304
|
||||
#define TK_EVENT_WINDOW 305
|
||||
#define TK_COUNT_WINDOW 306
|
||||
#define TK_SLIDING 307
|
||||
#define TK_FILL 308
|
||||
#define TK_VALUE 309
|
||||
#define TK_VALUE_F 310
|
||||
#define TK_NONE 311
|
||||
#define TK_PREV 312
|
||||
#define TK_NULL_F 313
|
||||
#define TK_LINEAR 314
|
||||
#define TK_NEXT 315
|
||||
#define TK_HAVING 316
|
||||
#define TK_RANGE 317
|
||||
#define TK_EVERY 318
|
||||
#define TK_ORDER 319
|
||||
#define TK_SLIMIT 320
|
||||
#define TK_SOFFSET 321
|
||||
#define TK_LIMIT 322
|
||||
#define TK_OFFSET 323
|
||||
#define TK_ASC 324
|
||||
#define TK_NULLS 325
|
||||
#define TK_ABORT 326
|
||||
#define TK_AFTER 327
|
||||
#define TK_ATTACH 328
|
||||
#define TK_BEFORE 329
|
||||
#define TK_BEGIN 330
|
||||
#define TK_BITAND 331
|
||||
#define TK_BITNOT 332
|
||||
#define TK_BITOR 333
|
||||
#define TK_BLOCKS 334
|
||||
#define TK_CHANGE 335
|
||||
#define TK_COMMA 336
|
||||
#define TK_CONCAT 337
|
||||
#define TK_CONFLICT 338
|
||||
#define TK_COPY 339
|
||||
#define TK_DEFERRED 340
|
||||
#define TK_DELIMITERS 341
|
||||
#define TK_DETACH 342
|
||||
#define TK_DIVIDE 343
|
||||
#define TK_DOT 344
|
||||
#define TK_EACH 345
|
||||
#define TK_FAIL 346
|
||||
#define TK_FILE 347
|
||||
#define TK_FOR 348
|
||||
#define TK_GLOB 349
|
||||
#define TK_ID 350
|
||||
#define TK_IMMEDIATE 351
|
||||
#define TK_IMPORT 352
|
||||
#define TK_INITIALLY 353
|
||||
#define TK_INSTEAD 354
|
||||
#define TK_ISNULL 355
|
||||
#define TK_MODULES 356
|
||||
#define TK_NK_BITNOT 357
|
||||
#define TK_NK_SEMI 358
|
||||
#define TK_NOTNULL 359
|
||||
#define TK_OF 360
|
||||
#define TK_PLUS 361
|
||||
#define TK_PRIVILEGE 362
|
||||
#define TK_RAISE 363
|
||||
#define TK_RESTRICT 364
|
||||
#define TK_ROW 365
|
||||
#define TK_STAR 366
|
||||
#define TK_STATEMENT 367
|
||||
#define TK_STRICT 368
|
||||
#define TK_STRING 369
|
||||
#define TK_TIMES 370
|
||||
#define TK_VALUES 371
|
||||
#define TK_VARIABLE 372
|
||||
#define TK_WAL 373
|
||||
#define TK_ENCODE 374
|
||||
#define TK_COMPRESS 375
|
||||
#define TK_LEVEL 376
|
||||
#define TK_IS_IMPORT 35
|
||||
#define TK_NK_INTEGER 36
|
||||
#define TK_CREATEDB 37
|
||||
#define TK_USER 38
|
||||
#define TK_ENABLE 39
|
||||
#define TK_SYSINFO 40
|
||||
#define TK_ADD 41
|
||||
#define TK_DROP 42
|
||||
#define TK_GRANT 43
|
||||
#define TK_ON 44
|
||||
#define TK_TO 45
|
||||
#define TK_REVOKE 46
|
||||
#define TK_FROM 47
|
||||
#define TK_SUBSCRIBE 48
|
||||
#define TK_READ 49
|
||||
#define TK_WRITE 50
|
||||
#define TK_NK_DOT 51
|
||||
#define TK_WITH 52
|
||||
#define TK_ENCRYPT_KEY 53
|
||||
#define TK_DNODE 54
|
||||
#define TK_PORT 55
|
||||
#define TK_DNODES 56
|
||||
#define TK_RESTORE 57
|
||||
#define TK_NK_IPTOKEN 58
|
||||
#define TK_FORCE 59
|
||||
#define TK_UNSAFE 60
|
||||
#define TK_CLUSTER 61
|
||||
#define TK_LOCAL 62
|
||||
#define TK_QNODE 63
|
||||
#define TK_BNODE 64
|
||||
#define TK_SNODE 65
|
||||
#define TK_MNODE 66
|
||||
#define TK_VNODE 67
|
||||
#define TK_DATABASE 68
|
||||
#define TK_USE 69
|
||||
#define TK_FLUSH 70
|
||||
#define TK_TRIM 71
|
||||
#define TK_S3MIGRATE 72
|
||||
#define TK_COMPACT 73
|
||||
#define TK_IF 74
|
||||
#define TK_NOT 75
|
||||
#define TK_EXISTS 76
|
||||
#define TK_BUFFER 77
|
||||
#define TK_CACHEMODEL 78
|
||||
#define TK_CACHESIZE 79
|
||||
#define TK_COMP 80
|
||||
#define TK_DURATION 81
|
||||
#define TK_NK_VARIABLE 82
|
||||
#define TK_MAXROWS 83
|
||||
#define TK_MINROWS 84
|
||||
#define TK_KEEP 85
|
||||
#define TK_PAGES 86
|
||||
#define TK_PAGESIZE 87
|
||||
#define TK_TSDB_PAGESIZE 88
|
||||
#define TK_PRECISION 89
|
||||
#define TK_REPLICA 90
|
||||
#define TK_VGROUPS 91
|
||||
#define TK_SINGLE_STABLE 92
|
||||
#define TK_RETENTIONS 93
|
||||
#define TK_SCHEMALESS 94
|
||||
#define TK_WAL_LEVEL 95
|
||||
#define TK_WAL_FSYNC_PERIOD 96
|
||||
#define TK_WAL_RETENTION_PERIOD 97
|
||||
#define TK_WAL_RETENTION_SIZE 98
|
||||
#define TK_WAL_ROLL_PERIOD 99
|
||||
#define TK_WAL_SEGMENT_SIZE 100
|
||||
#define TK_STT_TRIGGER 101
|
||||
#define TK_TABLE_PREFIX 102
|
||||
#define TK_TABLE_SUFFIX 103
|
||||
#define TK_S3_CHUNKSIZE 104
|
||||
#define TK_S3_KEEPLOCAL 105
|
||||
#define TK_S3_COMPACT 106
|
||||
#define TK_KEEP_TIME_OFFSET 107
|
||||
#define TK_ENCRYPT_ALGORITHM 108
|
||||
#define TK_NK_COLON 109
|
||||
#define TK_BWLIMIT 110
|
||||
#define TK_START 111
|
||||
#define TK_TIMESTAMP 112
|
||||
#define TK_END 113
|
||||
#define TK_TABLE 114
|
||||
#define TK_NK_LP 115
|
||||
#define TK_NK_RP 116
|
||||
#define TK_STABLE 117
|
||||
#define TK_COLUMN 118
|
||||
#define TK_MODIFY 119
|
||||
#define TK_RENAME 120
|
||||
#define TK_TAG 121
|
||||
#define TK_SET 122
|
||||
#define TK_NK_EQ 123
|
||||
#define TK_USING 124
|
||||
#define TK_TAGS 125
|
||||
#define TK_BOOL 126
|
||||
#define TK_TINYINT 127
|
||||
#define TK_SMALLINT 128
|
||||
#define TK_INT 129
|
||||
#define TK_INTEGER 130
|
||||
#define TK_BIGINT 131
|
||||
#define TK_FLOAT 132
|
||||
#define TK_DOUBLE 133
|
||||
#define TK_BINARY 134
|
||||
#define TK_NCHAR 135
|
||||
#define TK_UNSIGNED 136
|
||||
#define TK_JSON 137
|
||||
#define TK_VARCHAR 138
|
||||
#define TK_MEDIUMBLOB 139
|
||||
#define TK_BLOB 140
|
||||
#define TK_VARBINARY 141
|
||||
#define TK_GEOMETRY 142
|
||||
#define TK_DECIMAL 143
|
||||
#define TK_COMMENT 144
|
||||
#define TK_MAX_DELAY 145
|
||||
#define TK_WATERMARK 146
|
||||
#define TK_ROLLUP 147
|
||||
#define TK_TTL 148
|
||||
#define TK_SMA 149
|
||||
#define TK_DELETE_MARK 150
|
||||
#define TK_FIRST 151
|
||||
#define TK_LAST 152
|
||||
#define TK_SHOW 153
|
||||
#define TK_FULL 154
|
||||
#define TK_PRIVILEGES 155
|
||||
#define TK_DATABASES 156
|
||||
#define TK_TABLES 157
|
||||
#define TK_STABLES 158
|
||||
#define TK_MNODES 159
|
||||
#define TK_QNODES 160
|
||||
#define TK_ARBGROUPS 161
|
||||
#define TK_FUNCTIONS 162
|
||||
#define TK_INDEXES 163
|
||||
#define TK_ACCOUNTS 164
|
||||
#define TK_APPS 165
|
||||
#define TK_CONNECTIONS 166
|
||||
#define TK_LICENCES 167
|
||||
#define TK_GRANTS 168
|
||||
#define TK_LOGS 169
|
||||
#define TK_MACHINES 170
|
||||
#define TK_ENCRYPTIONS 171
|
||||
#define TK_QUERIES 172
|
||||
#define TK_SCORES 173
|
||||
#define TK_TOPICS 174
|
||||
#define TK_VARIABLES 175
|
||||
#define TK_BNODES 176
|
||||
#define TK_SNODES 177
|
||||
#define TK_TRANSACTIONS 178
|
||||
#define TK_DISTRIBUTED 179
|
||||
#define TK_CONSUMERS 180
|
||||
#define TK_SUBSCRIPTIONS 181
|
||||
#define TK_VNODES 182
|
||||
#define TK_ALIVE 183
|
||||
#define TK_VIEWS 184
|
||||
#define TK_VIEW 185
|
||||
#define TK_COMPACTS 186
|
||||
#define TK_NORMAL 187
|
||||
#define TK_CHILD 188
|
||||
#define TK_LIKE 189
|
||||
#define TK_TBNAME 190
|
||||
#define TK_QTAGS 191
|
||||
#define TK_AS 192
|
||||
#define TK_SYSTEM 193
|
||||
#define TK_TSMA 194
|
||||
#define TK_INTERVAL 195
|
||||
#define TK_RECURSIVE 196
|
||||
#define TK_TSMAS 197
|
||||
#define TK_FUNCTION 198
|
||||
#define TK_INDEX 199
|
||||
#define TK_COUNT 200
|
||||
#define TK_LAST_ROW 201
|
||||
#define TK_META 202
|
||||
#define TK_ONLY 203
|
||||
#define TK_TOPIC 204
|
||||
#define TK_CONSUMER 205
|
||||
#define TK_GROUP 206
|
||||
#define TK_DESC 207
|
||||
#define TK_DESCRIBE 208
|
||||
#define TK_RESET 209
|
||||
#define TK_QUERY 210
|
||||
#define TK_CACHE 211
|
||||
#define TK_EXPLAIN 212
|
||||
#define TK_ANALYZE 213
|
||||
#define TK_VERBOSE 214
|
||||
#define TK_NK_BOOL 215
|
||||
#define TK_RATIO 216
|
||||
#define TK_NK_FLOAT 217
|
||||
#define TK_OUTPUTTYPE 218
|
||||
#define TK_AGGREGATE 219
|
||||
#define TK_BUFSIZE 220
|
||||
#define TK_LANGUAGE 221
|
||||
#define TK_REPLACE 222
|
||||
#define TK_STREAM 223
|
||||
#define TK_INTO 224
|
||||
#define TK_PAUSE 225
|
||||
#define TK_RESUME 226
|
||||
#define TK_PRIMARY 227
|
||||
#define TK_KEY 228
|
||||
#define TK_TRIGGER 229
|
||||
#define TK_AT_ONCE 230
|
||||
#define TK_WINDOW_CLOSE 231
|
||||
#define TK_IGNORE 232
|
||||
#define TK_EXPIRED 233
|
||||
#define TK_FILL_HISTORY 234
|
||||
#define TK_UPDATE 235
|
||||
#define TK_SUBTABLE 236
|
||||
#define TK_UNTREATED 237
|
||||
#define TK_KILL 238
|
||||
#define TK_CONNECTION 239
|
||||
#define TK_TRANSACTION 240
|
||||
#define TK_BALANCE 241
|
||||
#define TK_VGROUP 242
|
||||
#define TK_LEADER 243
|
||||
#define TK_MERGE 244
|
||||
#define TK_REDISTRIBUTE 245
|
||||
#define TK_SPLIT 246
|
||||
#define TK_DELETE 247
|
||||
#define TK_INSERT 248
|
||||
#define TK_NK_BIN 249
|
||||
#define TK_NK_HEX 250
|
||||
#define TK_NULL 251
|
||||
#define TK_NK_QUESTION 252
|
||||
#define TK_NK_ALIAS 253
|
||||
#define TK_NK_ARROW 254
|
||||
#define TK_ROWTS 255
|
||||
#define TK_QSTART 256
|
||||
#define TK_QEND 257
|
||||
#define TK_QDURATION 258
|
||||
#define TK_WSTART 259
|
||||
#define TK_WEND 260
|
||||
#define TK_WDURATION 261
|
||||
#define TK_IROWTS 262
|
||||
#define TK_ISFILLED 263
|
||||
#define TK_CAST 264
|
||||
#define TK_NOW 265
|
||||
#define TK_TODAY 266
|
||||
#define TK_TIMEZONE 267
|
||||
#define TK_CLIENT_VERSION 268
|
||||
#define TK_SERVER_VERSION 269
|
||||
#define TK_SERVER_STATUS 270
|
||||
#define TK_CURRENT_USER 271
|
||||
#define TK_CASE 272
|
||||
#define TK_WHEN 273
|
||||
#define TK_THEN 274
|
||||
#define TK_ELSE 275
|
||||
#define TK_BETWEEN 276
|
||||
#define TK_IS 277
|
||||
#define TK_NK_LT 278
|
||||
#define TK_NK_GT 279
|
||||
#define TK_NK_LE 280
|
||||
#define TK_NK_GE 281
|
||||
#define TK_NK_NE 282
|
||||
#define TK_MATCH 283
|
||||
#define TK_NMATCH 284
|
||||
#define TK_CONTAINS 285
|
||||
#define TK_IN 286
|
||||
#define TK_JOIN 287
|
||||
#define TK_INNER 288
|
||||
#define TK_LEFT 289
|
||||
#define TK_RIGHT 290
|
||||
#define TK_OUTER 291
|
||||
#define TK_SEMI 292
|
||||
#define TK_ANTI 293
|
||||
#define TK_ASOF 294
|
||||
#define TK_WINDOW 295
|
||||
#define TK_WINDOW_OFFSET 296
|
||||
#define TK_JLIMIT 297
|
||||
#define TK_SELECT 298
|
||||
#define TK_NK_HINT 299
|
||||
#define TK_DISTINCT 300
|
||||
#define TK_WHERE 301
|
||||
#define TK_PARTITION 302
|
||||
#define TK_BY 303
|
||||
#define TK_SESSION 304
|
||||
#define TK_STATE_WINDOW 305
|
||||
#define TK_EVENT_WINDOW 306
|
||||
#define TK_COUNT_WINDOW 307
|
||||
#define TK_SLIDING 308
|
||||
#define TK_FILL 309
|
||||
#define TK_VALUE 310
|
||||
#define TK_VALUE_F 311
|
||||
#define TK_NONE 312
|
||||
#define TK_PREV 313
|
||||
#define TK_NULL_F 314
|
||||
#define TK_LINEAR 315
|
||||
#define TK_NEXT 316
|
||||
#define TK_HAVING 317
|
||||
#define TK_RANGE 318
|
||||
#define TK_EVERY 319
|
||||
#define TK_ORDER 320
|
||||
#define TK_SLIMIT 321
|
||||
#define TK_SOFFSET 322
|
||||
#define TK_LIMIT 323
|
||||
#define TK_OFFSET 324
|
||||
#define TK_ASC 325
|
||||
#define TK_NULLS 326
|
||||
#define TK_ABORT 327
|
||||
#define TK_AFTER 328
|
||||
#define TK_ATTACH 329
|
||||
#define TK_BEFORE 330
|
||||
#define TK_BEGIN 331
|
||||
#define TK_BITAND 332
|
||||
#define TK_BITNOT 333
|
||||
#define TK_BITOR 334
|
||||
#define TK_BLOCKS 335
|
||||
#define TK_CHANGE 336
|
||||
#define TK_COMMA 337
|
||||
#define TK_CONCAT 338
|
||||
#define TK_CONFLICT 339
|
||||
#define TK_COPY 340
|
||||
#define TK_DEFERRED 341
|
||||
#define TK_DELIMITERS 342
|
||||
#define TK_DETACH 343
|
||||
#define TK_DIVIDE 344
|
||||
#define TK_DOT 345
|
||||
#define TK_EACH 346
|
||||
#define TK_FAIL 347
|
||||
#define TK_FILE 348
|
||||
#define TK_FOR 349
|
||||
#define TK_GLOB 350
|
||||
#define TK_ID 351
|
||||
#define TK_IMMEDIATE 352
|
||||
#define TK_IMPORT 353
|
||||
#define TK_INITIALLY 354
|
||||
#define TK_INSTEAD 355
|
||||
#define TK_ISNULL 356
|
||||
#define TK_MODULES 357
|
||||
#define TK_NK_BITNOT 358
|
||||
#define TK_NK_SEMI 359
|
||||
#define TK_NOTNULL 360
|
||||
#define TK_OF 361
|
||||
#define TK_PLUS 362
|
||||
#define TK_PRIVILEGE 363
|
||||
#define TK_RAISE 364
|
||||
#define TK_RESTRICT 365
|
||||
#define TK_ROW 366
|
||||
#define TK_STAR 367
|
||||
#define TK_STATEMENT 368
|
||||
#define TK_STRICT 369
|
||||
#define TK_STRING 370
|
||||
#define TK_TIMES 371
|
||||
#define TK_VALUES 372
|
||||
#define TK_VARIABLE 373
|
||||
#define TK_WAL 374
|
||||
#define TK_ENCODE 375
|
||||
#define TK_COMPRESS 376
|
||||
#define TK_LEVEL 377
|
||||
|
||||
#define TK_NK_SPACE 600
|
||||
#define TK_NK_COMMENT 601
|
||||
|
|
|
@ -329,7 +329,7 @@ typedef struct {
|
|||
|
||||
typedef struct SStateStore {
|
||||
int32_t (*streamStatePutParName)(SStreamState* pState, int64_t groupId, const char* tbname);
|
||||
int32_t (*streamStateGetParName)(SStreamState* pState, int64_t groupId, void** pVal);
|
||||
int32_t (*streamStateGetParName)(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache);
|
||||
|
||||
int32_t (*streamStateAddIfNotExist)(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||
int32_t (*streamStateReleaseBuf)(SStreamState* pState, void* pVal, bool used);
|
||||
|
|
|
@ -258,6 +258,8 @@ typedef struct SCreateUserStmt {
|
|||
char userName[TSDB_USER_LEN];
|
||||
char password[TSDB_USET_PASSWORD_LEN];
|
||||
int8_t sysinfo;
|
||||
int8_t createDb;
|
||||
int8_t isImport;
|
||||
int32_t numIpRanges;
|
||||
SIpV4Range* pIpRanges;
|
||||
|
||||
|
@ -311,6 +313,7 @@ typedef struct SShowStmt {
|
|||
SNode* pTbName; // SValueNode
|
||||
EOperatorType tableCondType;
|
||||
EShowKind showKind; // show databases: user/system, show tables: normal/child, others NULL
|
||||
bool withFull; // for show users full;
|
||||
} SShowStmt;
|
||||
|
||||
typedef struct SShowCreateDatabaseStmt {
|
||||
|
|
|
@ -101,7 +101,7 @@ int32_t streamStateCurNext(SStreamState* pState, SStreamStateCur* pCur);
|
|||
int32_t streamStateCurPrev(SStreamState* pState, SStreamStateCur* pCur);
|
||||
|
||||
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char* tbname);
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal);
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache);
|
||||
|
||||
void streamStateReloadInfo(SStreamState* pState, TSKEY ts);
|
||||
|
||||
|
|
|
@ -37,10 +37,11 @@ extern float tsNumOfCores;
|
|||
extern int64_t tsTotalMemoryKB;
|
||||
extern char *tsProcPath;
|
||||
extern char tsSIMDEnable;
|
||||
extern char tsSSE42Enable;
|
||||
extern char tsAVXEnable;
|
||||
extern char tsAVX2Enable;
|
||||
extern char tsFMAEnable;
|
||||
extern char tsSSE42Supported;
|
||||
extern char tsAVXSupported;
|
||||
extern char tsAVX2Supported;
|
||||
extern char tsFMASupported;
|
||||
extern char tsAVX512Supported;
|
||||
extern char tsAVX512Enable;
|
||||
extern char tsTagFilterCache;
|
||||
|
||||
|
|
|
@ -549,6 +549,7 @@ typedef struct {
|
|||
char dir[TSDB_FILENAME_LEN];
|
||||
int32_t level;
|
||||
int32_t primary;
|
||||
int8_t disable; // disable create new file
|
||||
} SDiskCfg;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -1846,3 +1846,7 @@ int taos_set_conn_mode(TAOS* taos, int mode, int value) {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* getBuildInfo(){
|
||||
return buildinfo;
|
||||
}
|
|
@ -828,12 +828,8 @@ TEST(clientCase, projection_query_tables) {
|
|||
// printf("error in create db, reason:%s\n", taos_errstr(pRes));
|
||||
// }
|
||||
// taos_free_result(pRes);
|
||||
/*
|
||||
TAOS_RES* pRes = taos_query(pConn, "select last(ts), ts from cache_1.t1");
|
||||
// pRes = taos_query(pConn, "select last(ts), ts from cache_1.no_pk_t1");
|
||||
if (taos_errno(pRes) != 0) {
|
||||
printf("failed to create table tu, reason:%s\n", taos_errstr(pRes));
|
||||
}
|
||||
|
||||
pRes= taos_query(pConn, "use abc1");
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_query(pConn, "create table tu using st2 tags(2)");
|
||||
|
@ -868,7 +864,6 @@ TEST(clientCase, projection_query_tables) {
|
|||
createNewTable(pConn, i, 100000, 0, pstr);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
pRes = taos_query(pConn, "select * from abc1.st2");
|
||||
if (taos_errno(pRes) != 0) {
|
||||
|
|
|
@ -169,15 +169,22 @@ int32_t uploadByRsync(const char* id, const char* path) {
|
|||
#else
|
||||
if (path[strlen(path) - 1] != '/') {
|
||||
#endif
|
||||
snprintf(command, PATH_MAX, "rsync -av --delete --timeout=10 --bwlimit=100000 %s/ rsync://%s/checkpoint/%s/",
|
||||
snprintf(command, PATH_MAX,
|
||||
"rsync -av --debug=all --log-file=%s/rsynclog --delete --timeout=10 --bwlimit=100000 %s/ "
|
||||
"rsync://%s/checkpoint/%s/",
|
||||
tsLogDir,
|
||||
#ifdef WINDOWS
|
||||
pathTransform
|
||||
#else
|
||||
path
|
||||
#endif
|
||||
, tsSnodeAddress, id);
|
||||
,
|
||||
tsSnodeAddress, id);
|
||||
} else {
|
||||
snprintf(command, PATH_MAX, "rsync -av --delete --timeout=10 --bwlimit=100000 %s rsync://%s/checkpoint/%s/",
|
||||
snprintf(command, PATH_MAX,
|
||||
"rsync -av --debug=all --log-file=%s/rsynclog --delete --timeout=10 --bwlimit=100000 %s "
|
||||
"rsync://%s/checkpoint/%s/",
|
||||
tsLogDir,
|
||||
#ifdef WINDOWS
|
||||
pathTransform
|
||||
#else
|
||||
|
@ -213,8 +220,9 @@ int32_t downloadRsync(const char* id, const char* path) {
|
|||
#endif
|
||||
|
||||
char command[PATH_MAX] = {0};
|
||||
snprintf(command, PATH_MAX, "rsync -av --debug=all --timeout=10 --bwlimit=100000 rsync://%s/checkpoint/%s/ %s",
|
||||
tsSnodeAddress, id,
|
||||
snprintf(command, PATH_MAX,
|
||||
"rsync -av --debug=all --log-file=%s/rsynclog --timeout=10 --bwlimit=100000 rsync://%s/checkpoint/%s/ %s",
|
||||
tsLogDir, tsSnodeAddress, id,
|
||||
#ifdef WINDOWS
|
||||
pathTransform
|
||||
#else
|
||||
|
@ -249,7 +257,9 @@ int32_t deleteRsync(const char* id) {
|
|||
}
|
||||
|
||||
char command[PATH_MAX] = {0};
|
||||
snprintf(command, PATH_MAX, "rsync -av --delete --timeout=10 %s rsync://%s/checkpoint/%s/", tmp, tsSnodeAddress, id);
|
||||
snprintf(command, PATH_MAX,
|
||||
"rsync -av --debug=all --log-file=%s/rsynclog --delete --timeout=10 %s rsync://%s/checkpoint/%s/", tsLogDir,
|
||||
tmp, tsSnodeAddress, id);
|
||||
|
||||
code = execCommand(command);
|
||||
taosRemoveDir(tmp);
|
||||
|
|
|
@ -269,6 +269,16 @@ static const SSysDbTableSchema userUsersSchema[] = {
|
|||
{.name = "allowed_host", .bytes = TSDB_PRIVILEDGE_HOST_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema userUsersFullSchema[] = {
|
||||
{.name = "name", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
{.name = "super", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "enable", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "sysinfo", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "createdb", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||
{.name = "encrypted_pass", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
{.name = "allowed_host", .bytes = TSDB_PRIVILEDGE_HOST_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
};
|
||||
|
||||
GRANTS_SCHEMA;
|
||||
|
||||
static const SSysDbTableSchema vgroupsSchema[] = {
|
||||
|
@ -438,6 +448,7 @@ static const SSysTableMeta infosMeta[] = {
|
|||
{TSDB_INS_TABLE_COLS, userColsSchema, tListLen(userColsSchema), false},
|
||||
// {TSDB_INS_TABLE_TABLE_DISTRIBUTED, userTblDistSchema, tListLen(userTblDistSchema)},
|
||||
{TSDB_INS_TABLE_USERS, userUsersSchema, tListLen(userUsersSchema), true},
|
||||
{TSDB_INS_TABLE_USERS_FULL, userUsersFullSchema, tListLen(userUsersFullSchema), true},
|
||||
{TSDB_INS_TABLE_LICENCES, grantsSchema, tListLen(grantsSchema), true},
|
||||
{TSDB_INS_TABLE_VGROUPS, vgroupsSchema, tListLen(vgroupsSchema), true},
|
||||
{TSDB_INS_TABLE_CONFIGS, configSchema, tListLen(configSchema), false},
|
||||
|
|
|
@ -326,6 +326,7 @@ int32_t taosSetTfsCfg(SConfig *pCfg) {
|
|||
tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN);
|
||||
tsDiskCfg[0].level = 0;
|
||||
tsDiskCfg[0].primary = 1;
|
||||
tsDiskCfg[0].disable = 0;
|
||||
tstrncpy(tsDataDir, pItem->str, PATH_MAX);
|
||||
if (taosMulMkDir(tsDataDir) != 0) {
|
||||
uError("failed to create dataDir:%s", tsDataDir);
|
||||
|
@ -595,12 +596,13 @@ static int32_t taosAddSystemCfg(SConfig *pCfg) {
|
|||
if (cfgAddBool(pCfg, "enableCoreFile", 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1;
|
||||
if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
|
||||
if (cfgAddBool(pCfg, "ssd42", tsSSE42Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx", tsAVXEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx2", tsAVX2Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "fma", tsFMAEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx512", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "ssd42", tsSSE42Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx", tsAVXSupported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx2", tsAVX2Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "fma", tsFMASupported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "avx512", tsAVX512Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
|
||||
if (cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||
|
|
|
@ -817,7 +817,6 @@ int32_t tDeserializeSMAlterStbReq(void *buf, int32_t bufLen, SMAlterStbReq *pReq
|
|||
|
||||
for (int32_t i = 0; i < pReq->numOfFields; ++i) {
|
||||
if (pReq->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION) {
|
||||
|
||||
taosArrayDestroy(pReq->pFields);
|
||||
pReq->pFields = taosArrayInit(pReq->numOfFields, sizeof(SFieldWithOptions));
|
||||
SFieldWithOptions field = {0};
|
||||
|
@ -1637,8 +1636,10 @@ int32_t tSerializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pReq
|
|||
if (tEncodeU32(&encoder, pReq->pIpRanges[i].ip) < 0) return -1;
|
||||
if (tEncodeU32(&encoder, pReq->pIpRanges[i].mask) < 0) return -1;
|
||||
}
|
||||
|
||||
ENCODESQL();
|
||||
if (tEncodeI8(&encoder, pReq->isImport) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->createDb) < 0) return -1;
|
||||
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -1664,8 +1665,12 @@ int32_t tDeserializeSCreateUserReq(void *buf, int32_t bufLen, SCreateUserReq *pR
|
|||
if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].ip)) < 0) return -1;
|
||||
if (tDecodeU32(&decoder, &(pReq->pIpRanges[i].mask)) < 0) return -1;
|
||||
}
|
||||
|
||||
DECODESQL();
|
||||
if (!tDecodeIsEnd(&decoder)) {
|
||||
if (tDecodeI8(&decoder, &pReq->createDb) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->isImport) < 0) return -1;
|
||||
}
|
||||
|
||||
tEndDecode(&decoder);
|
||||
tDecoderClear(&decoder);
|
||||
return 0;
|
||||
|
@ -4604,6 +4609,7 @@ int32_t tSerializeSRetrieveTableReq(void *buf, int32_t bufLen, SRetrieveTableReq
|
|||
if (tEncodeCStr(&encoder, pReq->filterTb) < 0) return -1;
|
||||
if (tEncodeCStr(&encoder, pReq->user) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pReq->compactId) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->withFull) < 0) return -1;
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -4626,7 +4632,9 @@ int32_t tDeserializeSRetrieveTableReq(void *buf, int32_t bufLen, SRetrieveTableR
|
|||
} else {
|
||||
pReq->compactId = -1;
|
||||
}
|
||||
|
||||
if (!tDecodeIsEnd(&decoder)) {
|
||||
if (tDecodeI8(&decoder, (int8_t *)&pReq->withFull) < 0) return -1;
|
||||
}
|
||||
tEndDecode(&decoder);
|
||||
tDecoderClear(&decoder);
|
||||
return 0;
|
||||
|
|
|
@ -110,10 +110,8 @@ static bool dmCheckDiskSpace() {
|
|||
|
||||
int32_t dmDiskInit() {
|
||||
SDnode *pDnode = dmInstance();
|
||||
SDiskCfg dCfg = {0};
|
||||
SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0};
|
||||
tstrncpy(dCfg.dir, tsDataDir, TSDB_FILENAME_LEN);
|
||||
dCfg.level = 0;
|
||||
dCfg.primary = 1;
|
||||
SDiskCfg *pDisks = tsDiskCfg;
|
||||
int32_t numOfDisks = tsDiskCfgNum;
|
||||
if (numOfDisks <= 0 || pDisks == NULL) {
|
||||
|
|
|
@ -13,17 +13,16 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "mndCompact.h"
|
||||
#include "mndTrans.h"
|
||||
#include "mndShow.h"
|
||||
#include "mndDb.h"
|
||||
#include "mndCompactDetail.h"
|
||||
#include "mndVgroup.h"
|
||||
#include "tmsgcb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "tmisce.h"
|
||||
#include "audit.h"
|
||||
#include "mndCompactDetail.h"
|
||||
#include "mndDb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndPrivilege.h"
|
||||
#include "mndShow.h"
|
||||
#include "mndTrans.h"
|
||||
#include "mndVgroup.h"
|
||||
#include "tmisce.h"
|
||||
#include "tmsgcb.h"
|
||||
|
||||
#define MND_COMPACT_VER_NUMBER 1
|
||||
#define MND_COMPACT_ID_LEN 11
|
||||
|
@ -50,12 +49,9 @@ int32_t mndInitCompact(SMnode *pMnode) {
|
|||
return sdbSetTable(pMnode->pSdb, table);
|
||||
}
|
||||
|
||||
void mndCleanupCompact(SMnode *pMnode) {
|
||||
mDebug("mnd compact cleanup");
|
||||
}
|
||||
void mndCleanupCompact(SMnode *pMnode) { mDebug("mnd compact cleanup"); }
|
||||
|
||||
void tFreeCompactObj(SCompactObj *pCompact) {
|
||||
}
|
||||
void tFreeCompactObj(SCompactObj *pCompact) {}
|
||||
|
||||
int32_t tSerializeSCompactObj(void *buf, int32_t bufLen, const SCompactObj *pObj) {
|
||||
SEncoder encoder = {0};
|
||||
|
@ -127,7 +123,6 @@ SSdbRaw *mndCompactActionEncode(SCompactObj *pCompact) {
|
|||
SDB_SET_BINARY(pRaw, dataPos, buf, tlen, OVER);
|
||||
SDB_SET_DATALEN(pRaw, dataPos, OVER);
|
||||
|
||||
|
||||
OVER:
|
||||
taosMemoryFreeClear(buf);
|
||||
if (terrno != TSDB_CODE_SUCCESS) {
|
||||
|
@ -184,7 +179,7 @@ SSdbRow *mndCompactActionDecode(SSdbRaw *pRaw) {
|
|||
goto OVER;
|
||||
}
|
||||
|
||||
//taosInitRWLatch(&pView->lock);
|
||||
// taosInitRWLatch(&pView->lock);
|
||||
|
||||
OVER:
|
||||
taosMemoryFreeClear(buf);
|
||||
|
@ -210,8 +205,8 @@ int32_t mndCompactActionDelete(SSdb *pSdb, SCompactObj *pCompact) {
|
|||
}
|
||||
|
||||
int32_t mndCompactActionUpdate(SSdb *pSdb, SCompactObj *pOldCompact, SCompactObj *pNewCompact) {
|
||||
mTrace("compact:%" PRId32 ", perform update action, old row:%p new row:%p",
|
||||
pOldCompact->compactId, pOldCompact, pNewCompact);
|
||||
mTrace("compact:%" PRId32 ", perform update action, old row:%p new row:%p", pOldCompact->compactId, pOldCompact,
|
||||
pNewCompact);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -230,8 +225,8 @@ void mndReleaseCompact(SMnode *pMnode, SCompactObj *pCompact) {
|
|||
sdbRelease(pSdb, pCompact);
|
||||
}
|
||||
|
||||
//compact db
|
||||
int32_t mndAddCompactToTran(SMnode *pMnode, STrans *pTrans, SCompactObj* pCompact, SDbObj *pDb, SCompactDbRsp *rsp){
|
||||
// compact db
|
||||
int32_t mndAddCompactToTran(SMnode *pMnode, STrans *pTrans, SCompactObj *pCompact, SDbObj *pDb, SCompactDbRsp *rsp) {
|
||||
pCompact->compactId = tGenIdPI32();
|
||||
|
||||
strcpy(pCompact->dbname, pDb->name);
|
||||
|
@ -251,8 +246,8 @@ int32_t mndAddCompactToTran(SMnode *pMnode, STrans *pTrans, SCompactObj* pCompac
|
|||
return 0;
|
||||
}
|
||||
|
||||
//retrieve compact
|
||||
int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows){
|
||||
// retrieve compact
|
||||
int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
int32_t numOfRows = 0;
|
||||
|
@ -262,7 +257,8 @@ int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock,
|
|||
|
||||
if (strlen(pShow->db) > 0) {
|
||||
sep = strchr(pShow->db, '.');
|
||||
if (sep && ((0 == strcmp(sep + 1, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcmp(sep + 1, TSDB_PERFORMANCE_SCHEMA_DB))))) {
|
||||
if (sep &&
|
||||
((0 == strcmp(sep + 1, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcmp(sep + 1, TSDB_PERFORMANCE_SCHEMA_DB))))) {
|
||||
sep++;
|
||||
} else {
|
||||
pDb = mndAcquireDb(pMnode, pShow->db);
|
||||
|
@ -306,9 +302,9 @@ int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock,
|
|||
return numOfRows;
|
||||
}
|
||||
|
||||
//kill compact
|
||||
static void *mndBuildKillCompactReq(SMnode *pMnode, SVgObj *pVgroup, int32_t *pContLen,
|
||||
int32_t compactId, int32_t dnodeid) {
|
||||
// kill compact
|
||||
static void *mndBuildKillCompactReq(SMnode *pMnode, SVgObj *pVgroup, int32_t *pContLen, int32_t compactId,
|
||||
int32_t dnodeid) {
|
||||
SVKillCompactReq req = {0};
|
||||
req.compactId = compactId;
|
||||
req.vgId = pVgroup->vgId;
|
||||
|
@ -337,8 +333,8 @@ static void *mndBuildKillCompactReq(SMnode *pMnode, SVgObj *pVgroup, int32_t *pC
|
|||
return pReq;
|
||||
}
|
||||
|
||||
static int32_t mndAddKillCompactAction(SMnode *pMnode, STrans *pTrans, SVgObj *pVgroup,
|
||||
int32_t compactId, int32_t dnodeid) {
|
||||
static int32_t mndAddKillCompactAction(SMnode *pMnode, STrans *pTrans, SVgObj *pVgroup, int32_t compactId,
|
||||
int32_t dnodeid) {
|
||||
STransAction action = {0};
|
||||
|
||||
SDnodeObj *pDnode = mndAcquireDnode(pMnode, dnodeid);
|
||||
|
@ -365,7 +361,7 @@ static int32_t mndAddKillCompactAction(SMnode *pMnode, STrans *pTrans, SVgObj *p
|
|||
static int32_t mndKillCompact(SMnode *pMnode, SRpcMsg *pReq, SCompactObj *pCompact) {
|
||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_DB, pReq, "kill-compact");
|
||||
if (pTrans == NULL) {
|
||||
mError("compact:%" PRId32 ", failed to drop since %s" , pCompact->compactId, terrstr());
|
||||
mError("compact:%" PRId32 ", failed to drop since %s", pCompact->compactId, terrstr());
|
||||
return -1;
|
||||
}
|
||||
mInfo("trans:%d, used to kill compact:%" PRId32, pTrans->id, pCompact->compactId);
|
||||
|
@ -388,13 +384,13 @@ static int32_t mndKillCompact(SMnode *pMnode, SRpcMsg *pReq, SCompactObj *pCompa
|
|||
|
||||
if (pDetail->compactId == pCompact->compactId) {
|
||||
SVgObj *pVgroup = mndAcquireVgroup(pMnode, pDetail->vgId);
|
||||
if(pVgroup == NULL){
|
||||
if (pVgroup == NULL) {
|
||||
mError("trans:%d, failed to append redo action since %s", pTrans->id, terrstr());
|
||||
mndTransDrop(pTrans);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(mndAddKillCompactAction(pMnode, pTrans, pVgroup, pCompact->compactId, pDetail->dnodeId) != 0){
|
||||
if (mndAddKillCompactAction(pMnode, pTrans, pVgroup, pCompact->compactId, pDetail->dnodeId) != 0) {
|
||||
mError("trans:%d, failed to append redo action since %s", pTrans->id, terrstr());
|
||||
mndTransDrop(pTrans);
|
||||
return -1;
|
||||
|
@ -426,7 +422,7 @@ static int32_t mndKillCompact(SMnode *pMnode, SRpcMsg *pReq, SCompactObj *pCompa
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t mndProcessKillCompactReq(SRpcMsg *pReq){
|
||||
int32_t mndProcessKillCompactReq(SRpcMsg *pReq) {
|
||||
SKillCompactReq killCompactReq = {0};
|
||||
if (tDeserializeSKillCompactReq(pReq->pCont, pReq->contLen, &killCompactReq) != 0) {
|
||||
terrno = TSDB_CODE_INVALID_MSG;
|
||||
|
@ -438,7 +434,7 @@ int32_t mndProcessKillCompactReq(SRpcMsg *pReq){
|
|||
SMnode *pMnode = pReq->info.node;
|
||||
int32_t code = -1;
|
||||
SCompactObj *pCompact = mndAcquireCompact(pMnode, killCompactReq.compactId);
|
||||
if(pCompact == NULL){
|
||||
if (pCompact == NULL) {
|
||||
terrno = TSDB_CODE_MND_INVALID_COMPACT_ID;
|
||||
tFreeSKillCompactReq(&killCompactReq);
|
||||
return -1;
|
||||
|
@ -470,9 +466,10 @@ _OVER:
|
|||
return code;
|
||||
}
|
||||
|
||||
//update progress
|
||||
static int32_t mndUpdateCompactProgress(SMnode *pMnode, SRpcMsg *pReq, int32_t compactId, SQueryCompactProgressRsp* rsp) {
|
||||
void* pIter = NULL;
|
||||
// update progress
|
||||
static int32_t mndUpdateCompactProgress(SMnode *pMnode, SRpcMsg *pReq, int32_t compactId,
|
||||
SQueryCompactProgressRsp *rsp) {
|
||||
void *pIter = NULL;
|
||||
while (1) {
|
||||
SCompactDetailObj *pDetail = NULL;
|
||||
pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail);
|
||||
|
@ -493,35 +490,35 @@ static int32_t mndUpdateCompactProgress(SMnode *pMnode, SRpcMsg *pReq, int32_t c
|
|||
return TSDB_CODE_MND_COMPACT_DETAIL_NOT_EXIST;
|
||||
}
|
||||
|
||||
int32_t mndProcessQueryCompactRsp(SRpcMsg *pReq){
|
||||
int32_t mndProcessQueryCompactRsp(SRpcMsg *pReq) {
|
||||
SQueryCompactProgressRsp req = {0};
|
||||
int32_t code = 0;
|
||||
code = tDeserializeSQueryCompactProgressRsp(pReq->pCont, pReq->contLen, &req);
|
||||
if (code != 0) {
|
||||
terrno = TSDB_CODE_INVALID_MSG;
|
||||
mError("failed to deserialize vnode-query-compact-progress-rsp, ret:%d, pCont:%p, len:%d",
|
||||
code, pReq->pCont, pReq->contLen);
|
||||
mError("failed to deserialize vnode-query-compact-progress-rsp, ret:%d, pCont:%p, len:%d", code, pReq->pCont,
|
||||
pReq->contLen);
|
||||
return -1;
|
||||
}
|
||||
|
||||
mDebug("compact:%d, receive query response, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d",
|
||||
req.compactId, req.vgId, req.dnodeId, req.numberFileset, req.finished);
|
||||
mDebug("compact:%d, receive query response, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d", req.compactId,
|
||||
req.vgId, req.dnodeId, req.numberFileset, req.finished);
|
||||
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
|
||||
code = mndUpdateCompactProgress(pMnode, pReq, req.compactId, &req);
|
||||
if(code != 0){
|
||||
if (code != 0) {
|
||||
terrno = code;
|
||||
mError("compact:%d, failed to update progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d",
|
||||
req.compactId, req.vgId, req.dnodeId, req.numberFileset, req.finished);
|
||||
mError("compact:%d, failed to update progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d", req.compactId,
|
||||
req.vgId, req.dnodeId, req.numberFileset, req.finished);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//timer
|
||||
void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact){
|
||||
// timer
|
||||
void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact) {
|
||||
void *pIter = NULL;
|
||||
|
||||
while (1) {
|
||||
|
@ -533,7 +530,7 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact){
|
|||
SEpSet epSet = {0};
|
||||
|
||||
SDnodeObj *pDnode = mndAcquireDnode(pMnode, pDetail->dnodeId);
|
||||
if(pDnode == NULL) break;
|
||||
if (pDnode == NULL) break;
|
||||
addEpIntoEpSet(&epSet, pDnode->fqdn, pDnode->port);
|
||||
mndReleaseDnode(pMnode, pDnode);
|
||||
|
||||
|
@ -562,24 +559,22 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact){
|
|||
|
||||
tSerializeSQueryCompactProgressReq((char *)pHead + sizeof(SMsgHead), contLen - sizeof(SMsgHead), &req);
|
||||
|
||||
SRpcMsg rpcMsg = {.msgType = TDMT_VND_QUERY_COMPACT_PROGRESS,
|
||||
.contLen = contLen};
|
||||
SRpcMsg rpcMsg = {.msgType = TDMT_VND_QUERY_COMPACT_PROGRESS, .contLen = contLen};
|
||||
|
||||
//rpcMsg.pCont = rpcMallocCont(contLen);
|
||||
//if (rpcMsg.pCont == NULL) {
|
||||
// rpcMsg.pCont = rpcMallocCont(contLen);
|
||||
// if (rpcMsg.pCont == NULL) {
|
||||
// return;
|
||||
//}
|
||||
// }
|
||||
|
||||
//memcpy(rpcMsg.pCont, pHead, contLen);
|
||||
// memcpy(rpcMsg.pCont, pHead, contLen);
|
||||
|
||||
rpcMsg.pCont = pHead;
|
||||
|
||||
char detail[1024] = {0};
|
||||
int32_t len = snprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d", TMSG_INFO(TDMT_VND_QUERY_COMPACT_PROGRESS),
|
||||
epSet.numOfEps, epSet.inUse);
|
||||
int32_t len = snprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d",
|
||||
TMSG_INFO(TDMT_VND_QUERY_COMPACT_PROGRESS), epSet.numOfEps, epSet.inUse);
|
||||
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
|
||||
len += snprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, epSet.eps[i].fqdn,
|
||||
epSet.eps[i].port);
|
||||
len += snprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, epSet.eps[i].fqdn, epSet.eps[i].port);
|
||||
}
|
||||
|
||||
mDebug("compact:%d, send update progress msg to %s", pDetail->compactId, detail);
|
||||
|
@ -593,40 +588,51 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact){
|
|||
|
||||
static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
||||
bool needSave = false;
|
||||
void* pIter = NULL;
|
||||
void *pIter = NULL;
|
||||
while (1) {
|
||||
SCompactDetailObj *pDetail = NULL;
|
||||
pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail);
|
||||
if (pIter == NULL) break;
|
||||
|
||||
if (pDetail->compactId == compactId) {
|
||||
mDebug("compact:%d, check save progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d, "
|
||||
mDebug(
|
||||
"compact:%d, check save progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d, "
|
||||
"newNumberFileset:%d, newFinished:%d",
|
||||
pDetail->compactId, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished,
|
||||
pDetail->newNumberFileset, pDetail->newFinished);
|
||||
|
||||
//these 2 number will jump back after dnode restart, so < is not used here
|
||||
if(pDetail->numberFileset != pDetail->newNumberFileset || pDetail->finished != pDetail->newFinished)
|
||||
// these 2 number will jump back after dnode restart, so < is not used here
|
||||
if (pDetail->numberFileset != pDetail->newNumberFileset || pDetail->finished != pDetail->newFinished)
|
||||
needSave = true;
|
||||
}
|
||||
|
||||
sdbRelease(pMnode->pSdb, pDetail);
|
||||
}
|
||||
|
||||
if(!needSave) {
|
||||
mDebug("compact:%" PRId32 ", no need to save" , compactId);
|
||||
SCompactObj *pCompact = mndAcquireCompact(pMnode, compactId);
|
||||
if (pCompact == NULL) return 0;
|
||||
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pCompact->dbname);
|
||||
if (pDb == NULL) {
|
||||
needSave = true;
|
||||
mWarn("compact:%" PRId32 ", no db exist, set needSave:%s", compactId, pCompact->dbname);
|
||||
} else {
|
||||
mndReleaseDb(pMnode, pDb);
|
||||
pDb = NULL;
|
||||
}
|
||||
|
||||
if (!needSave) {
|
||||
mDebug("compact:%" PRId32 ", no need to save", compactId);
|
||||
return 0;
|
||||
}
|
||||
|
||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_DB, NULL, "update-compact-progress");
|
||||
if (pTrans == NULL) {
|
||||
mError("trans:%" PRId32 ", failed to create since %s" , pTrans->id, terrstr());
|
||||
mError("trans:%" PRId32 ", failed to create since %s", pTrans->id, terrstr());
|
||||
return -1;
|
||||
}
|
||||
mInfo("compact:%d, trans:%d, used to update compact progress.", compactId, pTrans->id);
|
||||
|
||||
SCompactObj *pCompact = mndAcquireCompact(pMnode, compactId);
|
||||
|
||||
mndTransSetDbName(pTrans, pCompact->dbname, NULL);
|
||||
|
||||
pIter = NULL;
|
||||
|
@ -636,7 +642,8 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
|||
if (pIter == NULL) break;
|
||||
|
||||
if (pDetail->compactId == compactId) {
|
||||
mInfo("compact:%d, trans:%d, check compact progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d, "
|
||||
mInfo(
|
||||
"compact:%d, trans:%d, check compact progress, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d, "
|
||||
"newNumberFileset:%d, newFinished:%d",
|
||||
pDetail->compactId, pTrans->id, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished,
|
||||
pDetail->newNumberFileset, pDetail->newFinished);
|
||||
|
@ -657,22 +664,22 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
|||
}
|
||||
|
||||
bool allFinished = true;
|
||||
pIter = NULL;
|
||||
while (1) {
|
||||
SCompactDetailObj *pDetail = NULL;
|
||||
pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail);
|
||||
if (pIter == NULL) break;
|
||||
|
||||
if(pDetail->compactId == compactId){
|
||||
if (pDetail->compactId == compactId) {
|
||||
mInfo("compact:%d, trans:%d, check compact finished, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d",
|
||||
pDetail->compactId, pTrans->id, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished);
|
||||
|
||||
if(pDetail->numberFileset == -1 && pDetail->finished == -1){
|
||||
if (pDetail->numberFileset == -1 && pDetail->finished == -1) {
|
||||
allFinished = false;
|
||||
sdbRelease(pMnode->pSdb, pDetail);
|
||||
break;
|
||||
}
|
||||
if (pDetail->numberFileset != -1 && pDetail->finished != -1 &&
|
||||
pDetail->numberFileset != pDetail->finished) {
|
||||
if (pDetail->numberFileset != -1 && pDetail->finished != -1 && pDetail->numberFileset != pDetail->finished) {
|
||||
allFinished = false;
|
||||
sdbRelease(pMnode->pSdb, pDetail);
|
||||
break;
|
||||
|
@ -682,8 +689,18 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
|||
sdbRelease(pMnode->pSdb, pDetail);
|
||||
}
|
||||
|
||||
if(allFinished){
|
||||
pDb = mndAcquireDb(pMnode, pCompact->dbname);
|
||||
if (pDb == NULL) {
|
||||
allFinished = true;
|
||||
mWarn("compact:%" PRId32 ", no db exist, set all finished:%s", compactId, pCompact->dbname);
|
||||
} else {
|
||||
mndReleaseDb(pMnode, pDb);
|
||||
pDb = NULL;
|
||||
}
|
||||
|
||||
if (allFinished) {
|
||||
mInfo("compact:%d, all finished", pCompact->compactId);
|
||||
pIter = NULL;
|
||||
while (1) {
|
||||
SCompactDetailObj *pDetail = NULL;
|
||||
pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail);
|
||||
|
@ -692,11 +709,13 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
|||
if (pDetail->compactId == pCompact->compactId) {
|
||||
SSdbRaw *pCommitRaw = mndCompactDetailActionEncode(pDetail);
|
||||
if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) {
|
||||
mError("compact:%d, trans:%d, failed to append commit log since %s", pDetail->compactId, pTrans->id, terrstr());
|
||||
mError("compact:%d, trans:%d, failed to append commit log since %s", pDetail->compactId, pTrans->id,
|
||||
terrstr());
|
||||
mndTransDrop(pTrans);
|
||||
return -1;
|
||||
}
|
||||
(void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED);
|
||||
mInfo("compact:%d, add drop compactdetail action", pDetail->compactDetailId);
|
||||
}
|
||||
|
||||
sdbRelease(pMnode->pSdb, pDetail);
|
||||
|
@ -709,6 +728,7 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
|||
return -1;
|
||||
}
|
||||
(void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED);
|
||||
mInfo("compact:%d, add drop compact action", pCompact->compactId);
|
||||
}
|
||||
|
||||
if (mndTransPrepare(pMnode, pTrans) != 0) {
|
||||
|
|
|
@ -75,7 +75,13 @@ int32_t mndBuildInsTableSchema(SMnode *pMnode, const char *dbFName, const char *
|
|||
return -1;
|
||||
}
|
||||
|
||||
STableMetaRsp *pMeta = taosHashGet(pMnode->infosMeta, tbName, strlen(tbName));
|
||||
STableMetaRsp *pMeta = NULL;
|
||||
if (strcmp(tbName, TSDB_INS_TABLE_USERS_FULL) == 0) {
|
||||
pMeta = taosHashGet(pMnode->infosMeta, TSDB_INS_TABLE_USERS_FULL, strlen(tbName));
|
||||
} else {
|
||||
pMeta = taosHashGet(pMnode->infosMeta, tbName, strlen(tbName));
|
||||
}
|
||||
|
||||
if (NULL == pMeta) {
|
||||
mError("invalid information schema table name:%s", tbName);
|
||||
terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST;
|
||||
|
|
|
@ -89,6 +89,8 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
|||
// type = TSDB_MGMT_TABLE_DIST;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_USERS, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_USER;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_USERS_FULL, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_USER_FULL;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_LICENCES, len) == 0) {
|
||||
type = TSDB_MGMT_TABLE_GRANTS;
|
||||
} else if (strncasecmp(name, TSDB_INS_TABLE_VGROUPS, len) == 0) {
|
||||
|
@ -276,6 +278,13 @@ static int32_t mndProcessRetrieveSysTableReq(SRpcMsg *pReq) {
|
|||
if (retrieveReq.db[0] && mndCheckShowPrivilege(pMnode, pReq->info.conn.user, pShow->type, retrieveReq.db) != 0) {
|
||||
return -1;
|
||||
}
|
||||
if (pShow->type == TSDB_MGMT_TABLE_USER_FULL) {
|
||||
if(strcmp(pReq->info.conn.user, "root") != 0){
|
||||
mError("The operation is not permitted, user:%s, pShow->type:%d", pReq->info.conn.user, pShow->type);
|
||||
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t numOfCols = pShow->pMeta->numOfColumns;
|
||||
|
||||
|
|
|
@ -1766,7 +1766,7 @@ static int32_t mndUpdateSuperTableColumnCompress(SMnode *pMnode, const SStbObj *
|
|||
uint32_t dst = 0;
|
||||
updated = tUpdateCompress(pCmpr->alg, p->bytes, TSDB_COLVAL_COMPRESS_DISABLED, TSDB_COLVAL_LEVEL_DISABLED,
|
||||
TSDB_COLVAL_LEVEL_MEDIUM, &dst);
|
||||
if (updated) pCmpr->alg = dst;
|
||||
if (updated > 0) pCmpr->alg = dst;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1774,7 +1774,11 @@ static int32_t mndUpdateSuperTableColumnCompress(SMnode *pMnode, const SStbObj *
|
|||
if (updated == 0) {
|
||||
terrno = TSDB_CODE_MND_COLUMN_COMPRESS_ALREADY_EXIST;
|
||||
return -1;
|
||||
} else if (updated == -1) {
|
||||
terrno = TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
pNew->colVer++;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -45,35 +45,55 @@
|
|||
#define ALTER_USER_DEL_PRIVS(_type) ((_type) == TSDB_ALTER_USER_DEL_PRIVILEGES)
|
||||
|
||||
#define ALTER_USER_ALL_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_READ_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_READ) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_WRITE_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_WRITE) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_ALTER_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALTER) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_READ_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_READ) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_WRITE_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_WRITE) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_ALTER_PRIV(_priv) \
|
||||
(BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALTER) || BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_ALL))
|
||||
#define ALTER_USER_SUBSCRIBE_PRIV(_priv) (BIT_FLAG_TEST_MASK((_priv), PRIVILEGE_TYPE_SUBSCRIBE))
|
||||
|
||||
#define ALTER_USER_TARGET_DB(_tbname) (0 == (_tbname)[0])
|
||||
#define ALTER_USER_TARGET_TB(_tbname) (0 != (_tbname)[0])
|
||||
|
||||
#define ALTER_USER_ADD_READ_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_DB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_READ_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_DB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_DB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_READ_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_TB_PRIV(_type, _priv, _tbname) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(_type, _priv) (ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(_type, _priv) (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_ADD_READ_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_READ_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_READ_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_WRITE_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_WRITE_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_WRITE_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALTER_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALTER_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALTER_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_ADD_ALL_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
#define ALTER_USER_DEL_ALL_TB_PRIV(_type, _priv, _tbname) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_ALL_PRIV(_priv) && ALTER_USER_TARGET_TB(_tbname))
|
||||
|
||||
#define ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(_type, _priv) \
|
||||
(ALTER_USER_ADD_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
#define ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(_type, _priv) \
|
||||
(ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv))
|
||||
|
||||
static SIpWhiteList *createDefaultIpWhiteList();
|
||||
SIpWhiteList *createIpWhiteList(void *buf, int32_t len);
|
||||
|
@ -97,6 +117,7 @@ static int32_t mndProcessDropUserReq(SRpcMsg *pReq);
|
|||
static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq);
|
||||
static int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq);
|
||||
static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextUser(SMnode *pMnode, void *pIter);
|
||||
static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter);
|
||||
|
@ -502,6 +523,8 @@ int32_t mndInitUser(SMnode *pMnode) {
|
|||
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_USER, mndRetrieveUsers);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_USER, mndCancelGetNextUser);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_USER_FULL, mndRetrieveUsersFull);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_USER_FULL, mndCancelGetNextUser);
|
||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_PRIVILEGES, mndRetrievePrivileges);
|
||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_PRIVILEGES, mndCancelGetNextPrivileges);
|
||||
return sdbSetTable(pMnode->pSdb, table);
|
||||
|
@ -1440,7 +1463,12 @@ void mndReleaseUser(SMnode *pMnode, SUserObj *pUser) {
|
|||
|
||||
static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate, SRpcMsg *pReq) {
|
||||
SUserObj userObj = {0};
|
||||
if (pCreate->isImport != 1) {
|
||||
taosEncryptPass_c((uint8_t *)pCreate->pass, strlen(pCreate->pass), userObj.pass);
|
||||
} else {
|
||||
// mInfo("pCreate->pass:%s", pCreate->pass)
|
||||
strncpy(userObj.pass, pCreate->pass, TSDB_PASSWORD_LEN);
|
||||
}
|
||||
tstrncpy(userObj.user, pCreate->user, TSDB_USER_LEN);
|
||||
tstrncpy(userObj.acct, acct, TSDB_USER_LEN);
|
||||
userObj.createdTime = taosGetTimestampMs();
|
||||
|
@ -1448,7 +1476,7 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate
|
|||
userObj.superUser = 0; // pCreate->superUser;
|
||||
userObj.sysInfo = pCreate->sysInfo;
|
||||
userObj.enable = pCreate->enable;
|
||||
userObj.createdb = 0;
|
||||
userObj.createdb = pCreate->createDb;
|
||||
|
||||
if (pCreate->numIpRanges == 0) {
|
||||
userObj.pIpWhiteList = createDefaultIpWhiteList();
|
||||
|
@ -1534,10 +1562,25 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
mInfo("user:%s, start to create", createReq.user);
|
||||
mInfo("user:%s, start to create, createdb:%d, is_import:%d", createReq.user, createReq.isImport, createReq.createDb);
|
||||
|
||||
#ifndef TD_ENTERPRISE
|
||||
if (createReq.isImport == 1) {
|
||||
goto _OVER;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (createReq.isImport != 1) {
|
||||
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_USER) != 0) {
|
||||
goto _OVER;
|
||||
}
|
||||
} else {
|
||||
if (strcmp(pReq->info.conn.user, "root") != 0) {
|
||||
mError("The operation is not permitted, user:%s", pReq->info.conn.user);
|
||||
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
||||
goto _OVER;
|
||||
}
|
||||
}
|
||||
|
||||
if (createReq.user[0] == 0) {
|
||||
terrno = TSDB_CODE_MND_INVALID_USER_FORMAT;
|
||||
|
@ -1549,10 +1592,12 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
if (createReq.isImport != 1) {
|
||||
if (strlen(createReq.pass) >= TSDB_PASSWORD_LEN) {
|
||||
terrno = TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG;
|
||||
goto _OVER;
|
||||
}
|
||||
}
|
||||
|
||||
pUser = mndAcquireUser(pMnode, createReq.user);
|
||||
if (pUser != NULL) {
|
||||
|
@ -1575,10 +1620,16 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
char detail[1000] = {0};
|
||||
sprintf(detail, "enable:%d, superUser:%d, sysInfo:%d, password:xxx",
|
||||
createReq.enable, createReq.superUser, createReq.sysInfo);
|
||||
sprintf(detail, "enable:%d, superUser:%d, sysInfo:%d, password:xxx", createReq.enable, createReq.superUser,
|
||||
createReq.sysInfo);
|
||||
char operation[15] = {0};
|
||||
if (createReq.isImport == 1) {
|
||||
strcpy(operation, "importUser");
|
||||
} else {
|
||||
strcpy(operation, "createUser");
|
||||
}
|
||||
|
||||
auditRecord(pReq, pMnode->clusterId, "createUser", "", createReq.user, detail, strlen(detail));
|
||||
auditRecord(pReq, pMnode->clusterId, operation, "", createReq.user, detail, strlen(detail));
|
||||
|
||||
_OVER:
|
||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||
|
@ -1800,7 +1851,7 @@ static char *mndUserAuditTypeStr(int32_t type) {
|
|||
return "error";
|
||||
}
|
||||
|
||||
static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode *pMnode, SUserObj* pNewUser) {
|
||||
static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode *pMnode, SUserObj *pNewUser) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIter = NULL;
|
||||
|
||||
|
@ -1830,7 +1881,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1855,7 +1907,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_DEL_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_DEL_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1870,7 +1923,8 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
if (ALTER_USER_DEL_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_DEL_WRITE_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_DEL_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (strcmp(pAlterReq->objname, "1.*") != 0) {
|
||||
int32_t len = strlen(pAlterReq->objname) + 1;
|
||||
SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname);
|
||||
|
@ -1885,9 +1939,9 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
}
|
||||
|
||||
SHashObj* pReadTbs = pNewUser->readTbs;
|
||||
SHashObj* pWriteTbs = pNewUser->writeTbs;
|
||||
SHashObj* pAlterTbs = pNewUser->alterTbs;
|
||||
SHashObj *pReadTbs = pNewUser->readTbs;
|
||||
SHashObj *pWriteTbs = pNewUser->writeTbs;
|
||||
SHashObj *pAlterTbs = pNewUser->alterTbs;
|
||||
|
||||
#ifdef TD_ENTERPRISE
|
||||
if (pAlterReq->isView) {
|
||||
|
@ -1897,15 +1951,18 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode
|
|||
}
|
||||
#endif
|
||||
|
||||
if (ALTER_USER_ADD_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
if (ALTER_USER_ADD_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (ALTER_USER_ADD_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) {
|
||||
if (mndTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1;
|
||||
}
|
||||
|
||||
|
@ -2016,7 +2073,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) {
|
|||
newUser.sysInfo = alterReq.sysInfo;
|
||||
}
|
||||
|
||||
if(alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
if (alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
newUser.createdb = alterReq.createdb;
|
||||
}
|
||||
|
||||
|
@ -2119,52 +2176,43 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) {
|
|||
code = mndAlterUser(pMnode, pUser, &newUser, pReq);
|
||||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
if(alterReq.alterType == TSDB_ALTER_USER_PASSWD){
|
||||
if (alterReq.alterType == TSDB_ALTER_USER_PASSWD) {
|
||||
char detail[1000] = {0};
|
||||
sprintf(detail, "alterType:%s, enable:%d, superUser:%d, sysInfo:%d, createdb:%d, tabName:%s, password:xxx",
|
||||
mndUserAuditTypeStr(alterReq.alterType), alterReq.enable, alterReq.superUser, alterReq.sysInfo,
|
||||
alterReq.createdb ? 1 : 0, alterReq.tabName);
|
||||
auditRecord(pReq, pMnode->clusterId, "alterUser", "", alterReq.user, detail, strlen(detail));
|
||||
}
|
||||
else if(alterReq.alterType == TSDB_ALTER_USER_SUPERUSER ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_ENABLE ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_SYSINFO ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_CREATEDB){
|
||||
} else if (alterReq.alterType == TSDB_ALTER_USER_SUPERUSER || alterReq.alterType == TSDB_ALTER_USER_ENABLE ||
|
||||
alterReq.alterType == TSDB_ALTER_USER_SYSINFO || alterReq.alterType == TSDB_ALTER_USER_CREATEDB) {
|
||||
auditRecord(pReq, pMnode->clusterId, "alterUser", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else if(ALTER_USER_ADD_READ_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_WRITE_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_READ_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_WRITE_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)){
|
||||
if (strcmp(alterReq.objname, "1.*") != 0){
|
||||
} else if (ALTER_USER_ADD_READ_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_WRITE_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_ALL_DB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_READ_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_WRITE_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName) ||
|
||||
ALTER_USER_ADD_ALL_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)) {
|
||||
if (strcmp(alterReq.objname, "1.*") != 0) {
|
||||
SName name = {0};
|
||||
tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB);
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", name.dbname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}else{
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", "", alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", name.dbname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
}
|
||||
else if(ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)){
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", alterReq.objname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else if(ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)){
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", alterReq.objname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
else{
|
||||
if (strcmp(alterReq.objname, "1.*") != 0){
|
||||
} else if (ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", alterReq.objname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else if (ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(alterReq.alterType, alterReq.privileges)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", alterReq.objname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
if (strcmp(alterReq.objname, "1.*") != 0) {
|
||||
SName name = {0};
|
||||
tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB);
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", name.dbname, alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
}else{
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", "", alterReq.user,
|
||||
alterReq.sql, alterReq.sqlLen);
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", name.dbname, alterReq.user, alterReq.sql,
|
||||
alterReq.sqlLen);
|
||||
} else {
|
||||
auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", "", alterReq.user, alterReq.sql, alterReq.sqlLen);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2364,6 +2412,88 @@ static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl
|
|||
return numOfRows;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
int32_t numOfRows = 0;
|
||||
#ifdef TD_ENTERPRISE
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
SUserObj *pUser = NULL;
|
||||
int32_t cols = 0;
|
||||
int8_t flag = 0;
|
||||
char *pWrite;
|
||||
int32_t code = 0;
|
||||
|
||||
while (numOfRows < rows) {
|
||||
pShow->pIter = sdbFetch(pSdb, SDB_USER, pShow->pIter, (void **)&pUser);
|
||||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
char name[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(name, pUser->user, pShow->pMeta->pSchemas[cols].bytes);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)name, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->superUser, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->enable, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->sysInfo, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
flag = pUser->createdb ? 1 : 0;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)&flag, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
// mInfo("pUser->pass:%s", pUser->pass);
|
||||
cols++;
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
char pass[TSDB_PASSWORD_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pass, pUser->pass, pShow->pMeta->pSchemas[cols].bytes);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)pass, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
cols++;
|
||||
|
||||
char *buf = NULL;
|
||||
int32_t tlen = convertIpWhiteListToStr(pUser->pIpWhiteList, &buf);
|
||||
// int32_t tlen = mndFetchIpWhiteList(pUser->pIpWhiteList, &buf);
|
||||
if (tlen != 0) {
|
||||
char *varstr = taosMemoryCalloc(1, VARSTR_HEADER_SIZE + tlen);
|
||||
varDataSetLen(varstr, tlen);
|
||||
memcpy(varDataVal(varstr), buf, tlen);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)varstr, false);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
|
||||
taosMemoryFree(varstr);
|
||||
taosMemoryFree(buf);
|
||||
} else {
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
||||
code = colDataSetVal(pColInfo, numOfRows, (const char *)NULL, true);
|
||||
if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code));
|
||||
}
|
||||
|
||||
numOfRows++;
|
||||
sdbRelease(pSdb, pUser);
|
||||
}
|
||||
|
||||
pShow->numOfRows += numOfRows;
|
||||
#endif
|
||||
return numOfRows;
|
||||
}
|
||||
|
||||
static void mndCancelGetNextUser(SMnode *pMnode, void *pIter) {
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
sdbCancelFetch(pSdb, pIter);
|
||||
|
@ -2480,11 +2610,14 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
|||
int32_t numOfReadViews = taosHashGetSize(pUser->readViews);
|
||||
int32_t numOfWriteViews = taosHashGetSize(pUser->writeViews);
|
||||
int32_t numOfAlterViews = taosHashGetSize(pUser->alterViews);
|
||||
if (numOfRows + numOfReadDbs + numOfWriteDbs + numOfTopics + numOfReadTbs + numOfWriteTbs + numOfAlterTbs + numOfReadViews + numOfWriteViews + numOfAlterViews >= rows) {
|
||||
if (numOfRows + numOfReadDbs + numOfWriteDbs + numOfTopics + numOfReadTbs + numOfWriteTbs + numOfAlterTbs +
|
||||
numOfReadViews + numOfWriteViews + numOfAlterViews >=
|
||||
rows) {
|
||||
mInfo(
|
||||
"will restore. current num of rows: %d, read dbs %d, write dbs %d, topics %d, read tables %d, write tables "
|
||||
"%d, alter tables %d, read views %d, write views %d, alter views %d",
|
||||
numOfRows, numOfReadDbs, numOfWriteDbs, numOfTopics, numOfReadTbs, numOfWriteTbs, numOfAlterTbs, numOfReadViews, numOfWriteViews, numOfAlterViews);
|
||||
numOfRows, numOfReadDbs, numOfWriteDbs, numOfTopics, numOfReadTbs, numOfWriteTbs, numOfAlterTbs,
|
||||
numOfReadViews, numOfWriteViews, numOfAlterViews);
|
||||
pShow->restore = true;
|
||||
sdbRelease(pSdb, pUser);
|
||||
break;
|
||||
|
@ -2870,7 +3003,6 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) {
|
|||
return code;
|
||||
}
|
||||
|
||||
|
||||
int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) {
|
||||
int32_t code = 0;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
|
|
|
@ -2240,7 +2240,7 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *
|
|||
uint32_t dst = 0;
|
||||
updated = tUpdateCompress(p->alg, pReq->compress, TSDB_COLVAL_COMPRESS_DISABLED, TSDB_COLVAL_LEVEL_DISABLED,
|
||||
TSDB_COLVAL_LEVEL_MEDIUM, &dst);
|
||||
if (updated) {
|
||||
if (updated > 0) {
|
||||
p->alg = dst;
|
||||
}
|
||||
}
|
||||
|
@ -2250,6 +2250,11 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *
|
|||
tDecoderClear(&dc);
|
||||
terrno = TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST;
|
||||
goto _err;
|
||||
} else if (updated < 0) {
|
||||
tdbFree(pVal);
|
||||
tDecoderClear(&dc);
|
||||
terrno = TSDB_CODE_TSC_COMPRESS_LEVEL_ERROR;
|
||||
goto _err;
|
||||
}
|
||||
tbEntry.version = version;
|
||||
|
||||
|
|
|
@ -368,6 +368,7 @@ TEST(testCase, tSma_Data_Insert_Query_Test) {
|
|||
SDiskCfg pDisks = {0};
|
||||
pDisks.level = 0;
|
||||
pDisks.primary = 1;
|
||||
pDisks.disable = 0;
|
||||
strncpy(pDisks.dir, TD_DATA_DIR_PATH, TSDB_FILENAME_LEN);
|
||||
int32_t numOfDisks = 1;
|
||||
pTsdb->pTfs = tfsOpen(&pDisks, numOfDisks);
|
||||
|
|
|
@ -1157,7 +1157,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
|
|||
pDest->info.parTbName[0] = 0;
|
||||
if (pInfo->tbnameCalSup.numOfExprs > 0) {
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName(pOperator->pTaskInfo->streamInfo.pState, pParInfo->groupId, &tbname) == 0) {
|
||||
if (pAPI->stateStore.streamStateGetParName(pOperator->pTaskInfo->streamInfo.pState, pParInfo->groupId, &tbname, false) == 0) {
|
||||
memcpy(pDest->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
pAPI->stateStore.streamStateFreeVal(tbname);
|
||||
}
|
||||
|
@ -1178,7 +1178,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
|
|||
void appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTagSup, uint64_t groupId,
|
||||
SSDataBlock* pSrcBlock, int32_t rowId, SSDataBlock* pDestBlock, SStateStore* pAPI) {
|
||||
void* pValue = NULL;
|
||||
if (pAPI->streamStateGetParName(pState, groupId, &pValue) != 0) {
|
||||
if (pAPI->streamStateGetParName(pState, groupId, &pValue, true) != 0) {
|
||||
SSDataBlock* pTmpBlock = blockCopyOneRow(pSrcBlock, rowId);
|
||||
memset(pTmpBlock->info.parTbName, 0, TSDB_TABLE_NAME_LEN);
|
||||
pTmpBlock->info.id.groupId = groupId;
|
||||
|
|
|
@ -1892,7 +1892,7 @@ static int32_t generatePartitionDelResBlock(SStreamScanInfo* pInfo, SSDataBlock*
|
|||
groupId = calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pPreRes, preJ);
|
||||
if (pInfo->pPartTbnameSup) {
|
||||
void* parTbname = NULL;
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname);
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
calBlockTbName(pInfo, pPreRes, preJ);
|
||||
memcpy(varDataVal(tbname), pPreRes->info.parTbName, strlen(pPreRes->info.parTbName));
|
||||
|
@ -1938,7 +1938,7 @@ static int32_t generateDeleteResultBlockImpl(SStreamScanInfo* pInfo, SSDataBlock
|
|||
}
|
||||
if (pInfo->tbnameCalSup.pExprInfo) {
|
||||
void* parTbname = NULL;
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname);
|
||||
int32_t code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, srcUid, srcStartTsCol[i], srcStartTsCol[i], ver);
|
||||
printDataBlock(pPreRes, "pre res", GET_TASKID(pInfo->pStreamScanOp->pTaskInfo));
|
||||
|
@ -4961,6 +4961,7 @@ static SSDataBlock* buildSysDbTableCount(SOperatorInfo* pOperator, STableCountSc
|
|||
|
||||
size_t infodbTableNum;
|
||||
getInfosDbMeta(NULL, &infodbTableNum);
|
||||
infodbTableNum -= 1;
|
||||
size_t perfdbTableNum;
|
||||
getPerfDbMeta(NULL, &perfdbTableNum);
|
||||
|
||||
|
|
|
@ -707,7 +707,7 @@ static void buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint64_
|
|||
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
|
||||
|
||||
void* tbname = NULL;
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, groupId, &tbname);
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
colDataSetNULL(pTableCol, pBlock->info.rows);
|
||||
} else {
|
||||
|
|
|
@ -376,7 +376,7 @@ static void doBuildDeleteResult(SStreamIntervalOperatorInfo* pInfo, SArray* pWin
|
|||
for (int32_t i = *index; i < size; i++) {
|
||||
SWinKey* pWin = taosArrayGet(pWins, i);
|
||||
void* tbname = NULL;
|
||||
pInfo->stateStore.streamStateGetParName(pInfo->pState, pWin->groupId, &tbname);
|
||||
pInfo->stateStore.streamStateGetParName(pInfo->pState, pWin->groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, NULL);
|
||||
} else {
|
||||
|
@ -750,7 +750,7 @@ int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDat
|
|||
if (pBlock->info.id.groupId == 0) {
|
||||
pBlock->info.id.groupId = groupId;
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName(pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname) < 0) {
|
||||
if (pAPI->stateStore.streamStateGetParName(pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname, false) < 0) {
|
||||
pBlock->info.parTbName[0] = 0;
|
||||
} else {
|
||||
memcpy(pBlock->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
|
@ -2276,7 +2276,7 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo
|
|||
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
|
||||
|
||||
void* tbname = NULL;
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, res->groupId, &tbname);
|
||||
pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, res->groupId, &tbname, false);
|
||||
if (tbname == NULL) {
|
||||
colDataSetNULL(pTableCol, pBlock->info.rows);
|
||||
} else {
|
||||
|
@ -2446,7 +2446,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa
|
|||
|
||||
void* tbname = NULL;
|
||||
if (pAPI->stateStore.streamStateGetParName((void*)pTaskInfo->streamInfo.pState, pBlock->info.id.groupId,
|
||||
&tbname) < 0) {
|
||||
&tbname, false) < 0) {
|
||||
pBlock->info.parTbName[0] = 0;
|
||||
} else {
|
||||
memcpy(pBlock->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
|
||||
|
|
|
@ -1090,6 +1090,10 @@ int32_t buildDbTableInfoBlock(bool sysInfo, const SSDataBlock* p, const SSysTabl
|
|||
continue;
|
||||
}
|
||||
|
||||
if(strcmp(pm->name, TSDB_INS_TABLE_USERS_FULL) == 0){
|
||||
continue;
|
||||
}
|
||||
|
||||
SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
|
||||
|
||||
STR_TO_VARSTR(n, pm->name);
|
||||
|
|
|
@ -565,7 +565,7 @@ int32_t avgFunction(SqlFunctionCtx* pCtx) {
|
|||
numOfElem = pInput->numOfRows;
|
||||
pAvgRes->count += pInput->numOfRows;
|
||||
|
||||
bool simdAvailable = tsAVXEnable && tsSIMDEnable && (numOfRows > THRESHOLD_SIZE);
|
||||
bool simdAvailable = tsAVXSupported && tsSIMDEnable && (numOfRows > THRESHOLD_SIZE);
|
||||
|
||||
switch(type) {
|
||||
case TSDB_DATA_TYPE_UTINYINT:
|
||||
|
|
|
@ -370,7 +370,7 @@ static int32_t findFirstValPosition(const SColumnInfoData* pCol, int32_t start,
|
|||
static void handleInt8Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
|
||||
bool signVal) {
|
||||
// AVX2 version to speedup the loop
|
||||
if (tsAVX2Enable && tsSIMDEnable) {
|
||||
if (tsAVX2Supported && tsSIMDEnable) {
|
||||
pBuf->v = i8VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
|
||||
} else {
|
||||
if (!pBuf->assign) {
|
||||
|
@ -404,7 +404,7 @@ static void handleInt8Col(const void* data, int32_t start, int32_t numOfRows, SM
|
|||
static void handleInt16Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
|
||||
bool signVal) {
|
||||
// AVX2 version to speedup the loop
|
||||
if (tsAVX2Enable && tsSIMDEnable) {
|
||||
if (tsAVX2Supported && tsSIMDEnable) {
|
||||
pBuf->v = i16VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
|
||||
} else {
|
||||
if (!pBuf->assign) {
|
||||
|
@ -438,7 +438,7 @@ static void handleInt16Col(const void* data, int32_t start, int32_t numOfRows, S
|
|||
static void handleInt32Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
|
||||
bool signVal) {
|
||||
// AVX2 version to speedup the loop
|
||||
if (tsAVX2Enable && tsSIMDEnable) {
|
||||
if (tsAVX2Supported && tsSIMDEnable) {
|
||||
pBuf->v = i32VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
|
||||
} else {
|
||||
if (!pBuf->assign) {
|
||||
|
@ -502,7 +502,7 @@ static void handleFloatCol(SColumnInfoData* pCol, int32_t start, int32_t numOfRo
|
|||
float* val = (float*)&pBuf->v;
|
||||
|
||||
// AVX version to speedup the loop
|
||||
if (tsAVXEnable && tsSIMDEnable) {
|
||||
if (tsAVXSupported && tsSIMDEnable) {
|
||||
*val = floatVectorCmpAVX(pData, numOfRows, isMinFunc);
|
||||
} else {
|
||||
if (!pBuf->assign) {
|
||||
|
@ -533,7 +533,7 @@ static void handleDoubleCol(SColumnInfoData* pCol, int32_t start, int32_t numOfR
|
|||
double* val = (double*)&pBuf->v;
|
||||
|
||||
// AVX version to speedup the loop
|
||||
if (tsAVXEnable && tsSIMDEnable) {
|
||||
if (tsAVXSupported && tsSIMDEnable) {
|
||||
*val = (double)doubleVectorCmpAVX(pData, numOfRows, isMinFunc);
|
||||
} else {
|
||||
if (!pBuf->assign) {
|
||||
|
|
|
@ -236,6 +236,7 @@ const char* nodesNodeName(ENodeType type) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return "ShowTagsStmt";
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return "ShowUsersStmt";
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
return "ShowGrantsStmt";
|
||||
|
@ -7655,6 +7656,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return showTagsStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return showUsersStmtToJson(pObj, pJson);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
return showVgroupsStmtToJson(pObj, pJson);
|
||||
|
@ -8004,6 +8006,7 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
|||
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||
return jsonToShowTagsStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return jsonToShowUsersStmt(pJson, pObj);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
return jsonToShowVgroupsStmt(pJson, pObj);
|
||||
|
|
|
@ -524,6 +524,7 @@ SNode* nodesMakeNode(ENodeType type) {
|
|||
case QUERY_NODE_SHOW_STREAMS_STMT:
|
||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
case QUERY_NODE_SHOW_TOPICS_STMT:
|
||||
|
@ -1217,6 +1218,7 @@ void nodesDestroyNode(SNode* pNode) {
|
|||
case QUERY_NODE_SHOW_STREAMS_STMT:
|
||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
case QUERY_NODE_SHOW_TOPICS_STMT:
|
||||
|
|
|
@ -222,6 +222,7 @@ SNode* setAlterSuperTableType(SNode* pStmt);
|
|||
SNode* createUseDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
|
||||
SNode* setShowKind(SAstCreateContext* pCxt, SNode* pStmt, EShowKind showKind);
|
||||
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type);
|
||||
SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type);
|
||||
SNode* createShowStmtWithCond(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, SNode* pTbName,
|
||||
EOperatorType tableCondType);
|
||||
SNode* createShowTablesStmt(SAstCreateContext* pCxt, SShowTablesOption option, SNode* pTbName,
|
||||
|
@ -234,7 +235,8 @@ SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable
|
|||
SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pLikePattern);
|
||||
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint);
|
||||
SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* pDbName, SNodeList* pTags);
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo);
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo,
|
||||
int8_t createdb, int8_t is_import);
|
||||
SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pStmt, SNodeList* pIpRangesNodeList);
|
||||
SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, void* pAlterInfo);
|
||||
SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName);
|
||||
|
|
|
@ -95,10 +95,19 @@ white_list(A) ::= HOST ip_range_list(B).
|
|||
white_list_opt(A) ::= . { A = NULL; }
|
||||
white_list_opt(A) ::= white_list(B). { A = B; }
|
||||
|
||||
%type is_import_opt { int8_t }
|
||||
%destructor is_import_opt { }
|
||||
is_import_opt(A) ::= . { A = 0; }
|
||||
is_import_opt(A) ::= IS_IMPORT NK_INTEGER(B). { A = taosStr2Int8(B.z, NULL, 10); }
|
||||
|
||||
%type is_createdb_opt { int8_t }
|
||||
%destructor is_createdb_opt { }
|
||||
is_createdb_opt(A) ::= . { A = 0; }
|
||||
is_createdb_opt(A) ::= CREATEDB NK_INTEGER(B). { A = taosStr2Int8(B.z, NULL, 10); }
|
||||
/************************************************ create/alter/drop user **********************************************/
|
||||
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C)
|
||||
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C) is_createdb_opt(F) is_import_opt(E)
|
||||
white_list_opt(D). {
|
||||
pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C);
|
||||
pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C, E, F);
|
||||
pCxt->pRootNode = addCreateUserStmtWhiteList(pCxt, pCxt->pRootNode, D);
|
||||
}
|
||||
cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); }
|
||||
|
@ -494,6 +503,7 @@ col_name(A) ::= column_name(B).
|
|||
/************************************************ show ****************************************************************/
|
||||
cmd ::= SHOW DNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
|
||||
cmd ::= SHOW USERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
|
||||
cmd ::= SHOW USERS FULL. { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
|
||||
cmd ::= SHOW USER PRIVILEGES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
|
||||
cmd ::= SHOW db_kind_opt(A) DATABASES. {
|
||||
pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
|
||||
|
|
|
@ -2010,6 +2010,15 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) {
|
|||
CHECK_PARSER_STATUS(pCxt);
|
||||
SShowStmt* pStmt = (SShowStmt*)nodesMakeNode(type);
|
||||
CHECK_OUT_OF_MEM(pStmt);
|
||||
pStmt->withFull = false;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
SShowStmt* pStmt = (SShowStmt*)nodesMakeNode(type);
|
||||
CHECK_OUT_OF_MEM(pStmt);
|
||||
pStmt->withFull = true;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
|
@ -2250,7 +2259,8 @@ SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStm
|
|||
return pCreateUserStmt;
|
||||
}
|
||||
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) {
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo,
|
||||
int8_t createDb, int8_t is_import) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
char password[TSDB_USET_PASSWORD_LEN + 3] = {0};
|
||||
if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) {
|
||||
|
@ -2261,6 +2271,8 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST
|
|||
COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName);
|
||||
strcpy(pStmt->password, password);
|
||||
pStmt->sysinfo = sysinfo;
|
||||
pStmt->createDb = createDb;
|
||||
pStmt->isImport = is_import;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
|
|
|
@ -557,6 +557,11 @@ static int32_t collectMetaKeyFromShowUsers(SCollectMetaKeyCxt* pCxt, SShowStmt*
|
|||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowUsersFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS_FULL,
|
||||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowLicence(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_LICENCES,
|
||||
pCxt->pMetaCache);
|
||||
|
@ -906,6 +911,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
|||
return collectMetaKeyFromShowStableTags(pCxt, (SShowTableTagsStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
return collectMetaKeyFromShowUsersFull(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||
return collectMetaKeyFromShowLicence(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||
|
|
|
@ -351,6 +351,7 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
|
|||
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||
case QUERY_NODE_SHOW_SCORES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||
|
|
|
@ -334,6 +334,7 @@ static SKeyword keywordTable[] = {
|
|||
{"COMPRESS", TK_COMPRESS},
|
||||
{"LEVEL", TK_LEVEL},
|
||||
{"ARBGROUPS", TK_ARBGROUPS},
|
||||
{"IS_IMPORT", TK_IS_IMPORT},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -197,6 +197,13 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
|||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{
|
||||
.showType = QUERY_NODE_SHOW_USERS_FULL_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
.pTableName = TSDB_INS_TABLE_USERS_FULL,
|
||||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{
|
||||
.showType = QUERY_NODE_SHOW_LICENCES_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
|
@ -8518,6 +8525,8 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt
|
|||
createReq.sysInfo = pStmt->sysinfo;
|
||||
createReq.enable = 1;
|
||||
strcpy(createReq.pass, pStmt->password);
|
||||
createReq.isImport = pStmt->isImport;
|
||||
createReq.createDb = pStmt->createDb;
|
||||
|
||||
createReq.numIpRanges = pStmt->numIpRanges;
|
||||
if (pStmt->numIpRanges > 0) {
|
||||
|
@ -13594,6 +13603,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
|||
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||
case QUERY_NODE_SHOW_STABLES_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_STMT:
|
||||
case QUERY_NODE_SHOW_USERS_FULL_STMT:
|
||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||
case QUERY_NODE_SHOW_MODULES_STMT:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -737,9 +737,10 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
char *convBuf = taosMemoryMalloc(inputLen);
|
||||
char *output = taosMemoryCalloc(1, outputLen + TSDB_NCHAR_SIZE);
|
||||
char buf[400] = {0};
|
||||
int32_t bufSize = TSDB_MAX_FIELD_LEN + 1;
|
||||
char *buf = taosMemoryMalloc(bufSize);
|
||||
|
||||
if (convBuf == NULL || output == NULL) {
|
||||
if (convBuf == NULL || output == NULL || buf == NULL) {
|
||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||
goto _end;
|
||||
}
|
||||
|
@ -991,7 +992,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
memcpy(varDataVal(output), convBuf, len);
|
||||
varDataSetLen(output, len);
|
||||
} else {
|
||||
NUM_TO_STRING(inputType, input, sizeof(buf), buf);
|
||||
NUM_TO_STRING(inputType, input, bufSize, buf);
|
||||
int32_t len = (int32_t)strlen(buf);
|
||||
len = (outputLen - VARSTR_HEADER_SIZE) > len ? len : (outputLen - VARSTR_HEADER_SIZE);
|
||||
memcpy(varDataVal(output), buf, len);
|
||||
|
@ -1037,7 +1038,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
memcpy(output, input, len + VARSTR_HEADER_SIZE);
|
||||
varDataSetLen(output, len);
|
||||
} else {
|
||||
NUM_TO_STRING(inputType, input, sizeof(buf), buf);
|
||||
NUM_TO_STRING(inputType, input, bufSize, buf);
|
||||
len = (int32_t)strlen(buf);
|
||||
len = outputCharLen > len ? len : outputCharLen;
|
||||
bool ret = taosMbsToUcs4(buf, len, (TdUcs4 *)varDataVal(output), outputLen - VARSTR_HEADER_SIZE, &len);
|
||||
|
@ -1067,6 +1068,7 @@ int32_t castFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutp
|
|||
pOutput->numOfRows = pInput->numOfRows;
|
||||
|
||||
_end:
|
||||
taosMemoryFree(buf);
|
||||
taosMemoryFree(output);
|
||||
taosMemoryFree(convBuf);
|
||||
return code;
|
||||
|
|
|
@ -141,6 +141,7 @@ int32_t valueToString(void* k, char* buf);
|
|||
int32_t valueIsStale(void* k, int64_t ts);
|
||||
|
||||
void destroyCompare(void* arg);
|
||||
static void cleanDir(const char* pPath, const char* id);
|
||||
|
||||
static bool streamStateIterSeekAndValid(rocksdb_iterator_t* iter, char* buf, size_t len);
|
||||
static rocksdb_iterator_t* streamStateIterCreate(SStreamState* pState, const char* cfName,
|
||||
|
@ -212,12 +213,7 @@ int32_t rebuildDirFromCheckpoint(const char* path, int64_t chkpId, char** dst) {
|
|||
char* chkp = taosMemoryCalloc(1, strlen(path) + 64);
|
||||
sprintf(chkp, "%s%s%s%scheckpoint%" PRId64 "", path, TD_DIRSEP, "checkpoints", TD_DIRSEP, chkpId);
|
||||
if (taosIsDir(chkp) && isValidCheckpoint(chkp)) {
|
||||
if (taosIsDir(state)) {
|
||||
// remove dir if exists
|
||||
// taosRenameFile(const char *oldName, const char *newName)
|
||||
taosRemoveDir(state);
|
||||
}
|
||||
taosMkDir(state);
|
||||
cleanDir(state, "");
|
||||
code = backendCopyFiles(chkp, state);
|
||||
stInfo("copy snap file from %s to %s", chkp, state);
|
||||
if (code != 0) {
|
||||
|
@ -322,6 +318,22 @@ int32_t remoteChkp_validAndCvtMeta(char* path, SArray* list, int64_t chkpId) {
|
|||
return complete == 1 ? 0 : -1;
|
||||
}
|
||||
|
||||
void cleanDir(const char* pPath, const char* id) {
|
||||
ASSERT(pPath != NULL);
|
||||
|
||||
if (taosIsDir(pPath)) {
|
||||
taosRemoveDir(pPath);
|
||||
taosMkDir(pPath);
|
||||
stInfo("%s clear dir:%s, succ", id, pPath);
|
||||
}
|
||||
}
|
||||
|
||||
void validateDir(const char* pPath) {
|
||||
if (!taosIsDir(pPath)) {
|
||||
taosMulMkDir(pPath);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t rebuildFromRemoteChkp_rsync(const char* key, char* chkptPath, int64_t checkpointId, char* defaultPath) {
|
||||
int32_t code = 0;
|
||||
if (taosIsDir(chkptPath)) {
|
||||
|
@ -329,11 +341,8 @@ int32_t rebuildFromRemoteChkp_rsync(const char* key, char* chkptPath, int64_t ch
|
|||
stDebug("remove local checkpoint data dir:%s succ", chkptPath);
|
||||
}
|
||||
|
||||
if (taosIsDir(defaultPath)) {
|
||||
taosRemoveDir(defaultPath);
|
||||
taosMulMkDir(defaultPath);
|
||||
cleanDir(defaultPath, key);
|
||||
stDebug("clear local default dir before downloading checkpoint data:%s succ", defaultPath);
|
||||
}
|
||||
|
||||
code = streamTaskDownloadCheckpointData(key, chkptPath);
|
||||
if (code != 0) {
|
||||
|
@ -484,21 +493,14 @@ int32_t backendCopyFiles(const char* src, const char* dst) {
|
|||
static int32_t rebuildFromLocalCheckpoint(const char* pTaskIdStr, const char* checkpointPath, int64_t checkpointId,
|
||||
const char* defaultPath) {
|
||||
int32_t code = 0;
|
||||
|
||||
if (taosIsDir(defaultPath)) {
|
||||
taosRemoveDir(defaultPath);
|
||||
taosMkDir(defaultPath);
|
||||
stInfo("%s clear local backend dir:%s, succ", pTaskIdStr, defaultPath);
|
||||
}
|
||||
cleanDir(defaultPath, pTaskIdStr);
|
||||
|
||||
if (taosIsDir(checkpointPath) && isValidCheckpoint(checkpointPath)) {
|
||||
stDebug("%s local checkpoint data existed, checkpointId:%" PRId64 " copy to backend dir", pTaskIdStr, checkpointId);
|
||||
|
||||
code = backendCopyFiles(checkpointPath, defaultPath);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
taosRemoveDir(defaultPath);
|
||||
taosMkDir(defaultPath);
|
||||
|
||||
cleanDir(defaultPath, pTaskIdStr);
|
||||
stError("%s failed to start stream backend from local %s, reason:%s, try download checkpoint from remote",
|
||||
pTaskIdStr, checkpointPath, tstrerror(TAOS_SYSTEM_ERROR(errno)));
|
||||
code = TSDB_CODE_SUCCESS;
|
||||
|
@ -520,26 +522,18 @@ int32_t restoreCheckpointData(const char* path, const char* key, int64_t chkptId
|
|||
char* prefixPath = taosMemoryCalloc(1, strlen(path) + 128);
|
||||
sprintf(prefixPath, "%s%s%s", path, TD_DIRSEP, key);
|
||||
|
||||
if (!taosIsDir(prefixPath)) {
|
||||
code = taosMkDir(prefixPath);
|
||||
ASSERT(code == 0);
|
||||
}
|
||||
validateDir(prefixPath);
|
||||
|
||||
char* defaultPath = taosMemoryCalloc(1, strlen(path) + 256);
|
||||
sprintf(defaultPath, "%s%s%s", prefixPath, TD_DIRSEP, "state");
|
||||
|
||||
if (!taosIsDir(defaultPath)) {
|
||||
taosMulMkDir(defaultPath);
|
||||
}
|
||||
|
||||
validateDir(defaultPath);
|
||||
int32_t pathLen = strlen(path) + 256;
|
||||
|
||||
char* checkpointRoot = taosMemoryCalloc(1, pathLen);
|
||||
sprintf(checkpointRoot, "%s%s%s", prefixPath, TD_DIRSEP, "checkpoints");
|
||||
|
||||
if (!taosIsDir(checkpointRoot)) {
|
||||
taosMulMkDir(checkpointRoot);
|
||||
}
|
||||
validateDir(checkpointRoot);
|
||||
taosMemoryFree(checkpointRoot);
|
||||
|
||||
stDebug("%s check local backend dir:%s, checkpointId:%" PRId64 " succ", key, defaultPath, chkptId);
|
||||
|
@ -559,7 +553,8 @@ int32_t restoreCheckpointData(const char* path, const char* key, int64_t chkptId
|
|||
code = 0; // reset the error code
|
||||
}
|
||||
} else { // no valid checkpoint id
|
||||
stInfo("%s no valid checkpoint ever generated, no need to copy checkpoint data", key);
|
||||
stInfo("%s no valid checkpoint ever generated, no need to copy checkpoint data, clean defaultPath:%s", key, defaultPath);
|
||||
cleanDir(defaultPath, key);
|
||||
}
|
||||
|
||||
taosMemoryFree(chkptPath);
|
||||
|
@ -2055,7 +2050,7 @@ STaskDbWrapper* taskDbOpenImpl(const char* key, char* statePath, char* dbPath) {
|
|||
|
||||
cfNames = rocksdb_list_column_families(pTaskDb->dbOpt, dbPath, &nCf, &err);
|
||||
if (nCf == 0) {
|
||||
stInfo("%s newly create db, need to restart", key);
|
||||
stInfo("%s newly create db in state-backend", key);
|
||||
// pre create db
|
||||
pTaskDb->db = rocksdb_open(pTaskDb->pCfOpts[0], dbPath, &err);
|
||||
if (pTaskDb->db == NULL) goto _EXIT;
|
||||
|
@ -2215,13 +2210,12 @@ int32_t taskDbGenChkpUploadData__s3(STaskDbWrapper* pDb, void* bkdChkpMgt, int64
|
|||
sprintf(temp, "%s%s%s%" PRId64 "", pDb->path, TD_DIRSEP, "tmp", chkpId);
|
||||
|
||||
if (taosDirExist(temp)) {
|
||||
taosRemoveDir(temp);
|
||||
taosMkDir(temp);
|
||||
cleanDir(temp, NULL);
|
||||
} else {
|
||||
taosMkDir(temp);
|
||||
}
|
||||
code = bkdMgtGetDelta(p, pDb->idstr, chkpId, list, temp);
|
||||
|
||||
code = bkdMgtGetDelta(p, pDb->idstr, chkpId, list, temp);
|
||||
*path = temp;
|
||||
|
||||
return code;
|
||||
|
|
|
@ -299,12 +299,10 @@ int32_t streamTaskStartMonitorCheckRsp(SStreamTask* pTask) {
|
|||
|
||||
int32_t streamTaskStopMonitorCheckRsp(STaskCheckInfo* pInfo, const char* id) {
|
||||
taosThreadMutexLock(&pInfo->checkInfoLock);
|
||||
streamTaskCompleteCheckRsp(pInfo, false, id);
|
||||
|
||||
pInfo->stopCheckProcess = 1;
|
||||
taosThreadMutexUnlock(&pInfo->checkInfoLock);
|
||||
|
||||
stDebug("s-task:%s set stop check-rsp monit", id);
|
||||
stDebug("s-task:%s set stop check-rsp monitor flag", id);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -438,6 +436,7 @@ int32_t streamTaskStartCheckDownstream(STaskCheckInfo* pInfo, const char* id) {
|
|||
ASSERT(pInfo->startTs > 0);
|
||||
stError("s-task:%s already in check procedure, checkTs:%" PRId64 ", start monitor check rsp failed", id,
|
||||
pInfo->startTs);
|
||||
pInfo->stopCheckProcess = 0; // disable auto stop of check process
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
||||
|
|
|
@ -1096,7 +1096,9 @@ _end:
|
|||
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]) {
|
||||
#ifdef USE_ROCKSDB
|
||||
if (tSimpleHashGet(pState->parNameMap, &groupId, sizeof(int64_t)) == NULL) {
|
||||
if (tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
streamStatePutParName_rocksdb(pState, groupId, tbname);
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -1106,12 +1108,15 @@ int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char
|
|||
#endif
|
||||
}
|
||||
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal) {
|
||||
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal, bool onlyCache) {
|
||||
#ifdef USE_ROCKSDB
|
||||
void* pStr = tSimpleHashGet(pState->parNameMap, &groupId, sizeof(int64_t));
|
||||
if (!pStr) {
|
||||
if (onlyCache && tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
int32_t code = streamStateGetParName_rocksdb(pState, groupId, pVal);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
if (code == TSDB_CODE_SUCCESS && tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) {
|
||||
tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), *pVal, TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
return code;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
typedef struct {
|
||||
int32_t level;
|
||||
int32_t id;
|
||||
int8_t disable; // disable create new file
|
||||
char *path;
|
||||
SDiskSize size;
|
||||
} STfsDisk;
|
||||
|
@ -73,7 +74,7 @@ typedef struct STfs {
|
|||
SHashObj *hash; // name to did map
|
||||
} STfs;
|
||||
|
||||
STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *dir);
|
||||
STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *dir);
|
||||
STfsDisk *tfsFreeDisk(STfsDisk *pDisk);
|
||||
int32_t tfsUpdateDiskSize(STfsDisk *pDisk);
|
||||
|
||||
|
|
|
@ -519,6 +519,18 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (pCfg->primary < 0 || pCfg->primary > 1) {
|
||||
fError("failed to mount %s to FS since invalid primary %d", pCfg->dir, pCfg->primary);
|
||||
terrno = TSDB_CODE_FS_INVLD_CFG;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pCfg->disable < 0 || pCfg->disable > 1) {
|
||||
fError("failed to mount %s to FS since invalid disable %" PRIi8, pCfg->dir, pCfg->disable);
|
||||
terrno = TSDB_CODE_FS_INVLD_CFG;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pCfg->primary) {
|
||||
if (pCfg->level != 0) {
|
||||
fError("failed to mount %s to FS since disk is primary but level %d not 0", pCfg->dir, pCfg->level);
|
||||
|
@ -595,6 +607,15 @@ static int32_t tfsCheck(STfs *pTfs) {
|
|||
terrno = TSDB_CODE_FS_NO_MOUNT_AT_TIER;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (level == 0) {
|
||||
tfsUpdateTierSize(TFS_TIER_AT(pTfs, level));
|
||||
if (TFS_TIER_AT(pTfs, level)->nAvailDisks == 0) {
|
||||
fError("no disk to create new file at level %d", level);
|
||||
terrno = TSDB_CODE_FS_NO_VALID_DISK;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#define _DEFAULT_SOURCE
|
||||
#include "tfsInt.h"
|
||||
|
||||
STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *path) {
|
||||
STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path) {
|
||||
STfsDisk *pDisk = taosMemoryCalloc(1, sizeof(STfsDisk));
|
||||
if (pDisk == NULL) {
|
||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
@ -32,6 +32,7 @@ STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *path) {
|
|||
|
||||
pDisk->level = level;
|
||||
pDisk->id = id;
|
||||
pDisk->disable = disable;
|
||||
taosGetDiskSize(pDisk->path, &pDisk->size);
|
||||
return pDisk;
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ STfsDisk *tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
STfsDisk *pDisk = tfsNewDisk(pCfg->level, id, pCfg->dir);
|
||||
STfsDisk *pDisk = tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir);
|
||||
if (pDisk == NULL) return NULL;
|
||||
|
||||
pTier->disks[id] = pDisk;
|
||||
|
@ -89,7 +89,7 @@ void tfsUpdateTierSize(STfsTier *pTier) {
|
|||
size.total += pDisk->size.total;
|
||||
size.used += pDisk->size.used;
|
||||
size.avail += pDisk->size.avail;
|
||||
nAvailDisks++;
|
||||
if (pDisk->disable == 0) nAvailDisks++;
|
||||
}
|
||||
|
||||
pTier->size = size;
|
||||
|
@ -118,6 +118,12 @@ int32_t tfsAllocDiskOnTier(STfsTier *pTier) {
|
|||
|
||||
if (pDisk == NULL) continue;
|
||||
|
||||
if (pDisk->disable == 1) {
|
||||
uTrace("disk %s is disabled and skip it, level:%d id:%d disable:%" PRIi8, pDisk->path, pDisk->level, pDisk->id,
|
||||
pDisk->disable);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pDisk->size.avail < tsMinDiskFreeSize) {
|
||||
uInfo("disk %s is full and skip it, level:%d id:%d free size:%" PRId64 " min free size:%" PRId64, pDisk->path,
|
||||
pDisk->level, pDisk->id, pDisk->size.avail, tsMinDiskFreeSize);
|
||||
|
|
|
@ -37,6 +37,7 @@ TEST_F(TfsTest, 01_Open_Close) {
|
|||
tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN);
|
||||
dCfg.level = 0;
|
||||
dCfg.primary = 1;
|
||||
dCfg.disable = 0;
|
||||
|
||||
taosRemoveDir(root);
|
||||
STfs *pTfs = tfsOpen(&dCfg, 1);
|
||||
|
@ -63,6 +64,7 @@ TEST_F(TfsTest, 02_AllocDisk) {
|
|||
tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN);
|
||||
dCfg.level = 0;
|
||||
dCfg.primary = 1;
|
||||
dCfg.disable = 0;
|
||||
|
||||
taosRemoveDir(root);
|
||||
taosMkDir(root);
|
||||
|
@ -114,6 +116,7 @@ TEST_F(TfsTest, 03_Dir) {
|
|||
tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN);
|
||||
dCfg.level = 0;
|
||||
dCfg.primary = 1;
|
||||
dCfg.disable = 0;
|
||||
|
||||
taosRemoveDir(root);
|
||||
taosMkDir(root);
|
||||
|
@ -330,30 +333,39 @@ TEST_F(TfsTest, 05_MultiDisk) {
|
|||
tstrncpy(dCfg[0].dir, root01, TSDB_FILENAME_LEN);
|
||||
dCfg[0].level = 0;
|
||||
dCfg[0].primary = 0;
|
||||
dCfg[0].disable = 0;
|
||||
tstrncpy(dCfg[1].dir, root00, TSDB_FILENAME_LEN);
|
||||
dCfg[1].level = 0;
|
||||
dCfg[1].primary = 0;
|
||||
dCfg[1].disable = 0;
|
||||
tstrncpy(dCfg[2].dir, root20, TSDB_FILENAME_LEN);
|
||||
dCfg[2].level = 2;
|
||||
dCfg[2].primary = 0;
|
||||
dCfg[2].disable = 0;
|
||||
tstrncpy(dCfg[3].dir, root21, TSDB_FILENAME_LEN);
|
||||
dCfg[3].level = 2;
|
||||
dCfg[3].primary = 0;
|
||||
dCfg[3].disable = 0;
|
||||
tstrncpy(dCfg[4].dir, root22, TSDB_FILENAME_LEN);
|
||||
dCfg[4].level = 2;
|
||||
dCfg[4].primary = 0;
|
||||
dCfg[4].disable = 0;
|
||||
tstrncpy(dCfg[5].dir, root23, TSDB_FILENAME_LEN);
|
||||
dCfg[5].level = 2;
|
||||
dCfg[5].primary = 0;
|
||||
dCfg[5].disable = 0;
|
||||
tstrncpy(dCfg[6].dir, root10, TSDB_FILENAME_LEN);
|
||||
dCfg[6].level = 1;
|
||||
dCfg[6].primary = 0;
|
||||
dCfg[6].disable = 0;
|
||||
tstrncpy(dCfg[7].dir, root11, TSDB_FILENAME_LEN);
|
||||
dCfg[7].level = 1;
|
||||
dCfg[7].primary = 0;
|
||||
dCfg[7].disable = 0;
|
||||
tstrncpy(dCfg[8].dir, root12, TSDB_FILENAME_LEN);
|
||||
dCfg[8].level = 1;
|
||||
dCfg[8].primary = 0;
|
||||
dCfg[8].disable = 0;
|
||||
|
||||
taosRemoveDir(root00);
|
||||
taosRemoveDir(root01);
|
||||
|
|
|
@ -38,11 +38,12 @@ int64_t tsTotalMemoryKB = 0;
|
|||
char *tsProcPath = NULL;
|
||||
|
||||
char tsSIMDEnable = 0;
|
||||
char tsSSE42Enable = 0;
|
||||
char tsAVXEnable = 0;
|
||||
char tsAVX2Enable = 0;
|
||||
char tsFMAEnable = 0;
|
||||
char tsAVX512Enable = 0;
|
||||
char tsSSE42Supported = 0;
|
||||
char tsAVXSupported = 0;
|
||||
char tsAVX2Supported = 0;
|
||||
char tsFMASupported = 0;
|
||||
char tsAVX512Supported = 0;
|
||||
|
||||
void osDefaultInit() {
|
||||
taosSeedRand(taosSafeRand());
|
||||
|
|
|
@ -250,7 +250,7 @@ void taosGetSystemInfo() {
|
|||
taosGetCpuCores(&tsNumOfCores, false);
|
||||
taosGetTotalMemory(&tsTotalMemoryKB);
|
||||
taosGetCpuUsage(NULL, NULL);
|
||||
taosGetCpuInstructions(&tsSSE42Enable, &tsAVXEnable, &tsAVX2Enable, &tsFMAEnable, &tsAVX512Enable);
|
||||
taosGetCpuInstructions(&tsSSE42Supported, &tsAVXSupported, &tsAVX2Supported, &tsFMASupported, &tsAVX512Supported);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -822,9 +822,9 @@ int32_t tsDecompressTimestampImp(const char *const input, const int32_t nelement
|
|||
memcpy(output, input + 1, nelements * longBytes);
|
||||
return nelements * longBytes;
|
||||
} else if (input[0] == 1) { // Decompress
|
||||
if (tsSIMDEnable && tsAVX512Enable) {
|
||||
if (tsSIMDEnable && tsAVX512Supported && tsAVX512Enable) {
|
||||
tsDecompressTimestampAvx512(input, nelements, output, false);
|
||||
} else if (tsSIMDEnable && tsAVX2Enable) {
|
||||
} else if (tsSIMDEnable && tsAVX2Supported) {
|
||||
tsDecompressTimestampAvx2(input, nelements, output, false);
|
||||
} else {
|
||||
int64_t *ostream = (int64_t *)output;
|
||||
|
@ -1198,9 +1198,9 @@ int32_t tsDecompressFloatImp(const char *const input, const int32_t nelements, c
|
|||
return nelements * FLOAT_BYTES;
|
||||
}
|
||||
|
||||
if (tsSIMDEnable && tsAVX2Enable) {
|
||||
if (tsSIMDEnable && tsAVX2Supported) {
|
||||
tsDecompressFloatImplAvx2(input, nelements, output);
|
||||
} else if (tsSIMDEnable && tsAVX512Enable) {
|
||||
} else if (tsSIMDEnable && tsAVX512Supported && tsAVX512Enable) {
|
||||
tsDecompressFloatImplAvx512(input, nelements, output);
|
||||
} else { // alternative implementation without SIMD instructions.
|
||||
tsDecompressFloatHelper(input, nelements, (float *)output);
|
||||
|
@ -2713,7 +2713,7 @@ int32_t tsDecompressBigint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int
|
|||
int8_t alvl = tsGetCompressL2Level(l2, lvl); \
|
||||
return compressL2Dict[l2].comprFn(pIn, nIn, pOut, nOut, type, alvl); \
|
||||
} else { \
|
||||
uTrace("dencode:%s, dcompress:%s, level:%d, type:%s", "disabled", compressL2Dict[l1].name, lvl, \
|
||||
uTrace("dencode:%s, decompress:%s, level:%d, type:%s", "disabled", compressL2Dict[l1].name, lvl, \
|
||||
tDataTypes[type].name); \
|
||||
return compressL2Dict[l2].decomprFn(pIn, nIn, pOut, nOut, type); \
|
||||
} \
|
||||
|
@ -2916,8 +2916,11 @@ int32_t tcompressDebug(uint32_t cmprAlg, uint8_t *l1Alg, uint8_t *l2Alg, uint8_t
|
|||
*level = lvl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t tUpdateCompress(uint32_t oldCmpr, uint32_t newCmpr, uint8_t l2Disabled, uint8_t lvlDiabled, uint8_t lvlDefault,
|
||||
|
||||
uint32_t *dst) {
|
||||
int8_t update = 0;
|
||||
uint8_t ol1 = COMPRESS_L1_TYPE_U32(oldCmpr);
|
||||
uint8_t ol2 = COMPRESS_L2_TYPE_U32(oldCmpr);
|
||||
uint8_t olvl = COMPRESS_L2_TYPE_LEVEL_U32(oldCmpr);
|
||||
|
@ -2925,10 +2928,17 @@ int8_t tUpdateCompress(uint32_t oldCmpr, uint32_t newCmpr, uint8_t l2Disabled, u
|
|||
uint8_t nl1 = COMPRESS_L1_TYPE_U32(newCmpr);
|
||||
uint8_t nl2 = COMPRESS_L2_TYPE_U32(newCmpr);
|
||||
uint8_t nlvl = COMPRESS_L2_TYPE_LEVEL_U32(newCmpr);
|
||||
|
||||
// nl1 == 0, not update encode
|
||||
// nl2 == 0, not update compress
|
||||
// nl3 == 0, not update level
|
||||
if (nl1 != 0 && ol1 != nl1) {
|
||||
SET_COMPRESS(nl1, ol2, olvl, *dst);
|
||||
return 1;
|
||||
} else if (nl2 != 0 && ol2 != nl2) {
|
||||
update = 1;
|
||||
ol1 = nl1;
|
||||
}
|
||||
|
||||
if (nl2 != 0 && ol2 != nl2) {
|
||||
if (nl2 == l2Disabled) {
|
||||
SET_COMPRESS(ol1, nl2, lvlDiabled, *dst);
|
||||
} else {
|
||||
|
@ -2938,10 +2948,20 @@ int8_t tUpdateCompress(uint32_t oldCmpr, uint32_t newCmpr, uint8_t l2Disabled, u
|
|||
SET_COMPRESS(ol1, nl2, olvl, *dst);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
} else if (nlvl != 0 && olvl != nlvl) {
|
||||
SET_COMPRESS(ol1, ol2, nlvl, *dst);
|
||||
return 1;
|
||||
update = 1;
|
||||
ol2 = nl2;
|
||||
}
|
||||
return 0;
|
||||
|
||||
if (nlvl != 0 && olvl != nlvl) {
|
||||
if (update == 0) {
|
||||
if (ol2 == L2_DISABLED) {
|
||||
update = -1;
|
||||
return update;
|
||||
}
|
||||
}
|
||||
SET_COMPRESS(ol1, ol2, nlvl, *dst);
|
||||
update = 1;
|
||||
}
|
||||
|
||||
return update;
|
||||
}
|
||||
|
|
|
@ -259,7 +259,7 @@ static int32_t cfgSetTimezone(SConfigItem *pItem, const char *value, ECfgSrcType
|
|||
}
|
||||
|
||||
static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary,
|
||||
ECfgSrcType stype) {
|
||||
const char *disable, ECfgSrcType stype) {
|
||||
taosThreadMutexLock(&pCfg->lock);
|
||||
|
||||
SConfigItem *pItem = cfgGetItem(pCfg, name);
|
||||
|
@ -283,6 +283,7 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value,
|
|||
tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir));
|
||||
cfg.level = level ? atoi(level) : 0;
|
||||
cfg.primary = primary ? atoi(primary) : 1;
|
||||
cfg.disable = disable ? atoi(disable) : 0;
|
||||
void *ret = taosArrayPush(pItem->array, &cfg);
|
||||
if (ret == NULL) {
|
||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
@ -899,16 +900,16 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) {
|
|||
}
|
||||
|
||||
int32_t cfgLoadFromEnvVar(SConfig *pConfig) {
|
||||
char line[1024], *name, *value, *value2, *value3;
|
||||
int32_t olen, vlen, vlen2, vlen3;
|
||||
char line[1024], *name, *value, *value2, *value3, *value4;
|
||||
int32_t olen, vlen, vlen2, vlen3, vlen4;
|
||||
int32_t code = 0;
|
||||
char **pEnv = environ;
|
||||
line[1023] = 0;
|
||||
|
||||
if (pEnv == NULL) return 0;
|
||||
while (*pEnv != NULL) {
|
||||
name = value = value2 = value3 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = 0;
|
||||
name = value = value2 = value3 = value4 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = vlen4 = 0;
|
||||
|
||||
strncpy(line, *pEnv, sizeof(line) - 1);
|
||||
pEnv++;
|
||||
|
@ -926,14 +927,18 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) {
|
|||
if (vlen2 != 0) {
|
||||
value2[vlen2] = 0;
|
||||
paGetToken(value2 + vlen2 + 1, &value3, &vlen3);
|
||||
if (vlen3 != 0) value3[vlen3] = 0;
|
||||
if (vlen3 != 0) {
|
||||
value3[vlen3] = 0;
|
||||
paGetToken(value3 + vlen3 + 1, &value4, &vlen4);
|
||||
if(vlen4 != 0) value4[vlen4] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_VAR, true);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
|
||||
if (strcasecmp(name, "dataDir") == 0) {
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_VAR);
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_VAR);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
}
|
||||
}
|
||||
|
@ -943,8 +948,8 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) {
|
|||
}
|
||||
|
||||
int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) {
|
||||
char buf[1024], *name, *value, *value2, *value3;
|
||||
int32_t olen, vlen, vlen2, vlen3;
|
||||
char buf[1024], *name, *value, *value2, *value3, *value4;
|
||||
int32_t olen, vlen, vlen2, vlen3, vlen4;
|
||||
int32_t code = 0;
|
||||
int32_t index = 0;
|
||||
if (envCmd == NULL) return 0;
|
||||
|
@ -954,8 +959,8 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) {
|
|||
taosEnvToCfg(buf, buf);
|
||||
index++;
|
||||
|
||||
name = value = value2 = value3 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = 0;
|
||||
name = value = value2 = value3 = value4 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = vlen4 = 0;
|
||||
|
||||
paGetToken(buf, &name, &olen);
|
||||
if (olen == 0) continue;
|
||||
|
@ -969,14 +974,18 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) {
|
|||
if (vlen2 != 0) {
|
||||
value2[vlen2] = 0;
|
||||
paGetToken(value2 + vlen2 + 1, &value3, &vlen3);
|
||||
if (vlen3 != 0) value3[vlen3] = 0;
|
||||
if (vlen3 != 0) {
|
||||
value3[vlen3] = 0;
|
||||
paGetToken(value3 + vlen3 + 1, &value4, &vlen4);
|
||||
if(vlen4 != 0) value4[vlen4] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_CMD, true);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
|
||||
if (strcasecmp(name, "dataDir") == 0) {
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_CMD);
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_CMD);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
}
|
||||
}
|
||||
|
@ -986,8 +995,8 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) {
|
|||
}
|
||||
|
||||
int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) {
|
||||
char line[1024], *name, *value, *value2, *value3;
|
||||
int32_t olen, vlen, vlen2, vlen3;
|
||||
char line[1024], *name, *value, *value2, *value3, *value4;
|
||||
int32_t olen, vlen, vlen2, vlen3, vlen4;
|
||||
int32_t code = 0;
|
||||
ssize_t _bytes = 0;
|
||||
|
||||
|
@ -1012,8 +1021,8 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) {
|
|||
}
|
||||
|
||||
while (!taosEOFFile(pFile)) {
|
||||
name = value = value2 = value3 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = 0;
|
||||
name = value = value2 = value3 = value4 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = vlen4 = 0;
|
||||
|
||||
_bytes = taosGetsFile(pFile, sizeof(line), line);
|
||||
if (_bytes <= 0) {
|
||||
|
@ -1034,14 +1043,18 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) {
|
|||
if (vlen2 != 0) {
|
||||
value2[vlen2] = 0;
|
||||
paGetToken(value2 + vlen2 + 1, &value3, &vlen3);
|
||||
if (vlen3 != 0) value3[vlen3] = 0;
|
||||
if (vlen3 != 0) {
|
||||
value3[vlen3] = 0;
|
||||
paGetToken(value3 + vlen3 + 1, &value4, &vlen4);
|
||||
if(vlen4 != 0) value4[vlen4] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_FILE, true);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
|
||||
if (strcasecmp(name, "dataDir") == 0) {
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_FILE);
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_FILE);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
}
|
||||
}
|
||||
|
@ -1053,8 +1066,8 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) {
|
|||
}
|
||||
|
||||
int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) {
|
||||
char line[1024], *name, *value, *value2, *value3;
|
||||
int32_t olen, vlen, vlen2, vlen3;
|
||||
char line[1024], *name, *value, *value2, *value3, *value4;
|
||||
int32_t olen, vlen, vlen2, vlen3, vlen4;
|
||||
ssize_t _bytes = 0;
|
||||
int32_t code = 0;
|
||||
|
||||
|
@ -1072,8 +1085,8 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) {
|
|||
}
|
||||
|
||||
while (!taosEOFFile(pFile)) {
|
||||
name = value = value2 = value3 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = 0;
|
||||
name = value = value2 = value3 = value4 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = vlen4 = 0;
|
||||
|
||||
_bytes = taosGetsFile(pFile, sizeof(line), line);
|
||||
if (_bytes <= 0) {
|
||||
|
@ -1114,7 +1127,11 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) {
|
|||
if (vlen2 != 0) {
|
||||
value2[vlen2] = 0;
|
||||
paGetToken(value2 + vlen2 + 1, &value3, &vlen3);
|
||||
if (vlen3 != 0) value3[vlen3] = 0;
|
||||
if (vlen3 != 0) {
|
||||
value3[vlen3] = 0;
|
||||
paGetToken(value3 + vlen3 + 1, &value4, &vlen4);
|
||||
if (vlen4 != 0) value4[vlen4] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
code = cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE, true);
|
||||
|
@ -1122,7 +1139,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) {
|
|||
}
|
||||
|
||||
if (strcasecmp(name, "dataDir") == 0) {
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_CFG_FILE);
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_CFG_FILE);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
}
|
||||
|
||||
|
@ -1212,8 +1229,8 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) {
|
|||
// }
|
||||
|
||||
int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) {
|
||||
char *cfgLineBuf = NULL, *name, *value, *value2, *value3;
|
||||
int32_t olen, vlen, vlen2, vlen3;
|
||||
char *cfgLineBuf = NULL, *name, *value, *value2, *value3, *value4;
|
||||
int32_t olen, vlen, vlen2, vlen3, vlen4;
|
||||
int32_t code = 0;
|
||||
if (url == NULL || strlen(url) == 0) {
|
||||
uInfo("apoll url not load");
|
||||
|
@ -1289,14 +1306,18 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) {
|
|||
if (vlen2 != 0) {
|
||||
value2[vlen2] = 0;
|
||||
paGetToken(value2 + vlen2 + 1, &value3, &vlen3);
|
||||
if (vlen3 != 0) value3[vlen3] = 0;
|
||||
if (vlen3 != 0) {
|
||||
value3[vlen3] = 0;
|
||||
paGetToken(value3 + vlen3 + 1, &value4, &vlen4);
|
||||
if (vlen4 != 0) value4[vlen4] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
code = cfgSetItem(pConfig, name, value, CFG_STYPE_APOLLO_URL, true);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
|
||||
if (strcasecmp(name, "dataDir") == 0) {
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_APOLLO_URL);
|
||||
code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_APOLLO_URL);
|
||||
if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements,
|
|||
int32_t _pos = 0;
|
||||
int64_t prevValue = 0;
|
||||
|
||||
#if __AVX2__
|
||||
#if __AVX2__ || __AVX512F__
|
||||
while (_pos < nelements) {
|
||||
uint64_t w = *(uint64_t*) ip;
|
||||
|
||||
|
@ -72,10 +72,33 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements,
|
|||
int32_t gRemainder = (nelements - _pos);
|
||||
int32_t num = (gRemainder > elems)? elems:gRemainder;
|
||||
|
||||
int32_t batch = num >> 2;
|
||||
int32_t remain = num & 0x03;
|
||||
int32_t batch = 0;
|
||||
int32_t remain = 0;
|
||||
if (tsSIMDEnable && tsAVX512Supported && tsAVX512Enable) {
|
||||
#if __AVX512F__
|
||||
batch = num >> 3;
|
||||
remain = num & 0x07;
|
||||
#endif
|
||||
} else if (tsSIMDEnable && tsAVX2Supported) {
|
||||
#if __AVX2__
|
||||
batch = num >> 2;
|
||||
remain = num & 0x03;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (selector == 0 || selector == 1) {
|
||||
if (tsSIMDEnable && tsAVX2Enable) {
|
||||
if (tsSIMDEnable && tsAVX512Supported && tsAVX512Enable) {
|
||||
#if __AVX512F__
|
||||
for (int32_t i = 0; i < batch; ++i) {
|
||||
__m512i prev = _mm512_set1_epi64(prevValue);
|
||||
_mm512_storeu_si512((__m512i *)&p[_pos], prev);
|
||||
_pos += 8; //handle 64bit x 8 = 512bit
|
||||
}
|
||||
for (int32_t i = 0; i < remain; ++i) {
|
||||
p[_pos++] = prevValue;
|
||||
}
|
||||
#endif
|
||||
} else if (tsSIMDEnable && tsAVX2Supported) {
|
||||
for (int32_t i = 0; i < batch; ++i) {
|
||||
__m256i prev = _mm256_set1_epi64x(prevValue);
|
||||
_mm256_storeu_si256((__m256i *)&p[_pos], prev);
|
||||
|
@ -85,10 +108,7 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements,
|
|||
for (int32_t i = 0; i < remain; ++i) {
|
||||
p[_pos++] = prevValue;
|
||||
}
|
||||
} else if (tsSIMDEnable && tsAVX512Enable) {
|
||||
#if __AVX512F__
|
||||
// todo add avx512 impl
|
||||
#endif
|
||||
|
||||
} else { // alternative implementation without SIMD instructions.
|
||||
for (int32_t i = 0; i < elems && count < nelements; i++, count++) {
|
||||
p[_pos++] = prevValue;
|
||||
|
@ -96,7 +116,73 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (tsSIMDEnable && tsAVX2Enable) {
|
||||
if (tsSIMDEnable && tsAVX512Supported && tsAVX512Enable) {
|
||||
#if __AVX512F__
|
||||
__m512i sum_mask1 = _mm512_set_epi64(6, 6, 4, 4, 2, 2, 0, 0);
|
||||
__m512i sum_mask2 = _mm512_set_epi64(5, 5, 5, 5, 1, 1, 1, 1);
|
||||
__m512i sum_mask3 = _mm512_set_epi64(3, 3, 3, 3, 3, 3, 3, 3);
|
||||
__m512i base = _mm512_set1_epi64(w);
|
||||
__m512i maskVal = _mm512_set1_epi64(mask);
|
||||
__m512i shiftBits = _mm512_set_epi64(bit * 7 + 4, bit * 6 + 4, bit * 5 + 4, bit * 4 + 4, bit * 3 + 4, bit * 2 + 4, bit + 4, 4);
|
||||
__m512i inc = _mm512_set1_epi64(bit << 3);
|
||||
|
||||
for (int32_t i = 0; i < batch; ++i) {
|
||||
|
||||
__m512i after = _mm512_srlv_epi64(base, shiftBits);
|
||||
__m512i zigzagVal = _mm512_and_si512(after, maskVal);
|
||||
|
||||
// ZIGZAG_DECODE(T, v) (((v) >> 1) ^ -((T)((v)&1)))
|
||||
__m512i signmask = _mm512_and_si512(_mm512_set1_epi64(1), zigzagVal);
|
||||
signmask = _mm512_sub_epi64(_mm512_setzero_si512(), signmask);
|
||||
__m512i delta = _mm512_xor_si512(_mm512_srli_epi64(zigzagVal, 1), signmask);
|
||||
|
||||
// calculate the cumulative sum (prefix sum) for each number
|
||||
// decode[0] = prevValue + final[0]
|
||||
// decode[1] = decode[0] + final[1] -----> prevValue + final[0] + final[1]
|
||||
// decode[2] = decode[1] + final[2] -----> prevValue + final[0] + final[1] + final[2]
|
||||
// decode[3] = decode[2] + final[3] -----> prevValue + final[0] + final[1] + final[2] + final[3]
|
||||
|
||||
|
||||
//7 6 5 4 3 2 1 0
|
||||
//D7 D6 D5 D4 D3 D2 D1 D0
|
||||
//D6 0 D4 0 D2 0 D0 0
|
||||
//D7+D6 D6 D5+D4 D4 D3+D2 D2 D1+D0 D0
|
||||
//13 6 9 4 5 2 1 0
|
||||
__m512i prev = _mm512_set1_epi64(prevValue);
|
||||
__m512i cum_sum = _mm512_add_epi64(delta, _mm512_maskz_permutexvar_epi64(0xaa, sum_mask1, delta));
|
||||
cum_sum = _mm512_add_epi64(cum_sum, _mm512_maskz_permutexvar_epi64(0xcc, sum_mask2, cum_sum));
|
||||
cum_sum = _mm512_add_epi64(cum_sum, _mm512_maskz_permutexvar_epi64(0xf0, sum_mask3, cum_sum));
|
||||
|
||||
|
||||
|
||||
//13 6 9 4 5 2 1 0
|
||||
//D7,D6 D6 D5,D4 D4 D3,D2 D2 D1,D0 D0
|
||||
//+D5,D4 D5,D4, 0 0 D1,D0 D1,D0 0 0
|
||||
//D7~D4 D6~D4 D5~D4 D4 D3~D0 D2~D0 D1~D0 D0
|
||||
//22 15 9 4 6 3 1 0
|
||||
//
|
||||
//D3~D0 D3~D0 D3~D0 D3~D0 0 0 0 0
|
||||
//28 21 15 10 6 3 1 0
|
||||
|
||||
|
||||
cum_sum = _mm512_add_epi64(cum_sum, prev);
|
||||
_mm512_storeu_si512((__m512i *)&p[_pos], cum_sum);
|
||||
|
||||
shiftBits = _mm512_add_epi64(shiftBits, inc);
|
||||
prevValue = p[_pos + 7];
|
||||
_pos += 8;
|
||||
|
||||
}
|
||||
// handle the remain value
|
||||
for (int32_t i = 0; i < remain; i++) {
|
||||
zigzag_value = ((w >> (v + (batch * bit * 8))) & mask);
|
||||
prevValue += ZIGZAG_DECODE(int64_t, zigzag_value);
|
||||
|
||||
p[_pos++] = prevValue;
|
||||
v += bit;
|
||||
}
|
||||
#endif
|
||||
} else if (tsSIMDEnable && tsAVX2Supported) {
|
||||
__m256i base = _mm256_set1_epi64x(w);
|
||||
__m256i maskVal = _mm256_set1_epi64x(mask);
|
||||
|
||||
|
@ -157,10 +243,6 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements,
|
|||
p[_pos++] = prevValue;
|
||||
v += bit;
|
||||
}
|
||||
} else if (tsSIMDEnable && tsAVX512Enable) {
|
||||
#if __AVX512F__
|
||||
// todo add avx512 impl
|
||||
#endif
|
||||
} else { // alternative implementation without SIMD instructions.
|
||||
for (int32_t i = 0; i < elems && count < nelements; i++, count++) {
|
||||
zigzag_value = ((w >> v) & mask);
|
||||
|
@ -247,18 +329,19 @@ int32_t tsDecompressFloatImplAvx2(const char *const input, const int32_t nelemen
|
|||
return 0;
|
||||
}
|
||||
|
||||
// decode two timestamps in one loop.
|
||||
int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelements, char *const output,
|
||||
bool bigEndian) {
|
||||
#if 0
|
||||
int64_t *ostream = (int64_t *)output;
|
||||
int32_t ipos = 1, opos = 0;
|
||||
|
||||
#if __AVX2__
|
||||
__m128i prevVal = _mm_setzero_si128();
|
||||
__m128i prevDelta = _mm_setzero_si128();
|
||||
|
||||
#if __AVX2__
|
||||
int32_t batch = nelements >> 1;
|
||||
int32_t remainder = nelements & 0x01;
|
||||
__mmask16 mask2[16] = {0, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff};
|
||||
// __mmask16 mask2[16] = {0, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff};
|
||||
|
||||
int32_t i = 0;
|
||||
if (batch > 1) {
|
||||
|
@ -268,18 +351,18 @@ int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelemen
|
|||
int8_t nbytes1 = flags & INT8MASK(4); // range of nbytes starts from 0 to 7
|
||||
int8_t nbytes2 = (flags >> 4) & INT8MASK(4);
|
||||
|
||||
__m128i data1;
|
||||
if (nbytes1 == 0) {
|
||||
data1 = _mm_setzero_si128();
|
||||
} else {
|
||||
memcpy(&data1, (const void*) (input + ipos), nbytes1);
|
||||
__m128i data1 = _mm_setzero_si128();
|
||||
if (nbytes1 > 0) {
|
||||
int64_t tmp = 0;
|
||||
memcpy(&tmp, (const void*) (input + ipos), nbytes1);
|
||||
data1 = _mm_set1_epi64x(tmp);
|
||||
}
|
||||
|
||||
__m128i data2;
|
||||
if (nbytes2 == 0) {
|
||||
data2 = _mm_setzero_si128();
|
||||
} else {
|
||||
memcpy(&data2, (const void*) (input + ipos + nbytes1), nbytes2);
|
||||
__m128i data2 = _mm_setzero_si128();
|
||||
if (nbytes2 > 0) {
|
||||
int64_t tmp = 0;
|
||||
memcpy(&tmp, (const void*) (input + ipos + nbytes1), nbytes2);
|
||||
data2 = _mm_set1_epi64x(tmp);
|
||||
}
|
||||
|
||||
data2 = _mm_broadcastq_epi64(data2);
|
||||
|
@ -293,13 +376,13 @@ int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelemen
|
|||
__m128i deltaOfDelta = _mm_xor_si128(_mm_srli_epi64(zzVal, 1), signmask);
|
||||
|
||||
__m128i deltaCurrent = _mm_add_epi64(deltaOfDelta, prevDelta);
|
||||
deltaCurrent = _mm_add_epi64(_mm_slli_si128(deltaCurrent, 8), deltaCurrent);
|
||||
deltaCurrent = _mm_add_epi64(_mm_slli_si128(deltaOfDelta, 8), deltaCurrent);
|
||||
|
||||
__m128i val = _mm_add_epi64(deltaCurrent, prevVal);
|
||||
_mm_storeu_si128((__m128i *)&ostream[opos], val);
|
||||
__m128i finalVal = _mm_add_epi64(deltaCurrent, prevVal);
|
||||
_mm_storeu_si128((__m128i *)&ostream[opos], finalVal);
|
||||
|
||||
// keep the previous value
|
||||
prevVal = _mm_shuffle_epi32 (val, 0xEE);
|
||||
prevVal = _mm_shuffle_epi32 (finalVal, 0xEE);
|
||||
|
||||
// keep the previous delta of delta, for the first item
|
||||
prevDelta = _mm_shuffle_epi32(deltaOfDelta, 0xEE);
|
||||
|
@ -316,21 +399,15 @@ int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelemen
|
|||
int8_t nbytes1 = flags & INT8MASK(4); // range of nbytes starts from 0 to 7
|
||||
int8_t nbytes2 = (flags >> 4) & INT8MASK(4);
|
||||
|
||||
// __m128i data1 = _mm_maskz_loadu_epi8(mask2[nbytes1], (const void*)(input + ipos));
|
||||
// __m128i data2 = _mm_maskz_loadu_epi8(mask2[nbytes2], (const void*)(input + ipos + nbytes1));
|
||||
__m128i data1;
|
||||
if (nbytes1 == 0) {
|
||||
data1 = _mm_setzero_si128();
|
||||
} else {
|
||||
__m128i data1 = _mm_setzero_si128();
|
||||
if (nbytes1 > 0) {
|
||||
int64_t dd = 0;
|
||||
memcpy(&dd, (const void*) (input + ipos), nbytes1);
|
||||
data1 = _mm_loadu_si64(&dd);
|
||||
}
|
||||
|
||||
__m128i data2;
|
||||
if (nbytes2 == 0) {
|
||||
data2 = _mm_setzero_si128();
|
||||
} else {
|
||||
__m128i data2 = _mm_setzero_si128();
|
||||
if (nbytes2 > 0) {
|
||||
int64_t dd = 0;
|
||||
memcpy(&dd, (const void*) (input + ipos + nbytes1), nbytes2);
|
||||
data2 = _mm_loadu_si64(&dd);
|
||||
|
@ -348,17 +425,18 @@ int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelemen
|
|||
__m128i deltaOfDelta = _mm_xor_si128(_mm_srli_epi64(zzVal, 1), signmask);
|
||||
|
||||
__m128i deltaCurrent = _mm_add_epi64(deltaOfDelta, prevDelta);
|
||||
deltaCurrent = _mm_add_epi64(_mm_slli_si128(deltaCurrent, 8), deltaCurrent);
|
||||
deltaCurrent = _mm_add_epi64(_mm_slli_si128(deltaOfDelta, 8), deltaCurrent);
|
||||
|
||||
__m128i val = _mm_add_epi64(deltaCurrent, prevVal);
|
||||
_mm_storeu_si128((__m128i *)&ostream[opos], val);
|
||||
__m128i finalVal = _mm_add_epi64(deltaCurrent, prevVal);
|
||||
finalVal = _mm_add_epi64(_mm_slli_si128(deltaCurrent, 8), finalVal);
|
||||
|
||||
_mm_storeu_si128((__m128i *)&ostream[opos], finalVal);
|
||||
|
||||
// keep the previous value
|
||||
prevVal = _mm_shuffle_epi32 (val, 0xEE);
|
||||
prevVal = _mm_shuffle_epi32 (finalVal, 0xEE);
|
||||
|
||||
// keep the previous delta of delta
|
||||
__m128i delta = _mm_add_epi64(_mm_slli_si128(deltaOfDelta, 8), deltaOfDelta);
|
||||
prevDelta = _mm_shuffle_epi32(_mm_add_epi64(delta, prevDelta), 0xEE);
|
||||
prevDelta = _mm_shuffle_epi32 (deltaCurrent, 0xEE);
|
||||
|
||||
opos += 2;
|
||||
ipos += nbytes1 + nbytes2;
|
||||
|
@ -389,7 +467,6 @@ int32_t tsDecompressTimestampAvx2(const char *const input, const int32_t nelemen
|
|||
ostream[opos++] = prevVal[1] + prevDeltaX;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,3 @@ char gitinfoOfInternal[48] = "${TD_VER_GIT_INTERNAL}";
|
|||
char buildinfo[64] = "${TD_VER_OSTYPE}-${TD_VER_CPUTYPE} ${TD_VER_DATE}";
|
||||
|
||||
void libtaos_${TD_LIB_VER_NUMBER}_${TD_VER_OSTYPE}_${TD_VER_CPUTYPE}_${TD_VER_VERTYPE}() {};
|
||||
char* getBuildInfo(){
|
||||
return buildinfo;
|
||||
}
|
||||
|
|
|
@ -4,9 +4,16 @@
|
|||
#include <random>
|
||||
#include "ttypes.h"
|
||||
|
||||
namespace {} // namespace
|
||||
namespace {
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(utilTest, decompress_ts_test) {
|
||||
{
|
||||
tsSIMDEnable = 1;
|
||||
tsAVX2Supported = 1;
|
||||
}
|
||||
|
||||
TEST(utilTest, decompress_test) {
|
||||
int64_t tsList[10] = {1700000000, 1700000100, 1700000200, 1700000300, 1700000400,
|
||||
1700000500, 1700000600, 1700000700, 1700000800, 1700000900};
|
||||
|
||||
|
@ -30,6 +37,20 @@ TEST(utilTest, decompress_test) {
|
|||
std::cout << ((int64_t*)decompOutput)[i] << std::endl;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
tsList[0] = 1286; tsList[1] = 1124; tsList[2]=2681; tsList[3] = 2823;
|
||||
|
||||
// char* pOutput[4 * sizeof(int64_t)] = {0};
|
||||
len = tsCompressTimestamp(tsList, sizeof(tsList), sizeof(tsList) / sizeof(tsList[0]), pOutput, 4,
|
||||
ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
decompOutput[4 * 8] = {0};
|
||||
tsDecompressTimestamp(pOutput, len, 4, decompOutput, sizeof(int64_t) * 4, ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
for (int32_t i = 0; i < 4; ++i) {
|
||||
std::cout << ((int64_t*)decompOutput)[i] << std::endl;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
int64_t tsList1[7] = {1700000000, 1700000000, 1700000000, 1700000000, 1700000000, 1700000000, 1700000900};
|
||||
int32_t len1 = tsCompressTimestamp(tsList1, sizeof(tsList1), sizeof(tsList1) / sizeof(tsList1[0]), pOutput, 7,
|
||||
|
@ -57,6 +78,49 @@ TEST(utilTest, decompress_test) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST(utilTest, decompress_bigint_avx2_test) {
|
||||
{
|
||||
tsSIMDEnable = 1;
|
||||
tsAVX2Supported = 1;
|
||||
}
|
||||
|
||||
int64_t tsList[10] = {1700000000, 1700000100, 1700000200, 1700000300, 1700000400,
|
||||
1700000500, 1700000600, 1700000700, 1700000800, 1700000900};
|
||||
|
||||
char* pOutput[10 * sizeof(int64_t)] = {0};
|
||||
int32_t len = tsCompressBigint(tsList, sizeof(tsList), sizeof(tsList) / sizeof(tsList[0]), pOutput, 10,
|
||||
ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
char* decompOutput[10 * 8] = {0};
|
||||
|
||||
tsDecompressBigint(pOutput, len, 10, decompOutput, sizeof(int64_t) * 10, ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
for (int32_t i = 0; i < 10; ++i) {
|
||||
std::cout << ((int64_t*)decompOutput)[i] << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(utilTest, decompress_int_avx2_test) {
|
||||
{
|
||||
tsSIMDEnable = 1;
|
||||
tsAVX2Supported = 1;
|
||||
}
|
||||
|
||||
int32_t tsList[10] = {17000000, 17000001, 17000002, 17000003, 17000004,
|
||||
17000005, 17000006, 17000007, 17000008, 17000009};
|
||||
|
||||
char* pOutput[10 * sizeof(int32_t)] = {0};
|
||||
int32_t len =
|
||||
tsCompressInt(tsList, sizeof(tsList), sizeof(tsList) / sizeof(tsList[0]), pOutput, 10, ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
char* decompOutput[10 * 8] = {0};
|
||||
tsDecompressInt(pOutput, len, 10, decompOutput, sizeof(int32_t) * 10, ONE_STAGE_COMP, NULL, 0);
|
||||
|
||||
for (int32_t i = 0; i < 10; ++i) {
|
||||
std::cout << ((int32_t*)decompOutput)[i] << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(utilTest, decompress_perf_test) {
|
||||
int32_t num = 10000;
|
||||
|
||||
|
|
|
@ -163,6 +163,31 @@ sql alter table $stb modify column f compress 'zlib'
|
|||
sql desc $stb
|
||||
sql alter table $stb modify column f compress 'zstd'
|
||||
|
||||
|
||||
sql alter table $stb modify column f compress 'zstd' level 'h'
|
||||
sql_error alter table $stb modify column f compress 'zstd' level 'h'
|
||||
|
||||
sql alter table $stb modify column f compress 'lz4' level 'h'
|
||||
sql_error alter table $stb modify column f compress 'lz4' level 'h'
|
||||
|
||||
|
||||
sql alter table $stb modify column f level 'low'
|
||||
sql_error alter table $stb modify column f compress 'lz4'
|
||||
|
||||
sql_error alter table $stb modify column f compress 'lz4' level 'low'
|
||||
|
||||
sql alter table $stb modify column f compress 'zstd' level 'h'
|
||||
|
||||
sql_error alter table $stb modify column f compress 'zstd'
|
||||
sql_error alter table $stb modify column f level 'h'
|
||||
|
||||
|
||||
|
||||
sql alter table $stb modify column f compress 'lz4'
|
||||
|
||||
|
||||
|
||||
|
||||
sql_error alter table $stb modify column d compress 'lz4' # same with init
|
||||
sql alter table $stb modify column d compress 'disabled'
|
||||
sql desc $stb
|
||||
|
|
|
@ -48,6 +48,8 @@ if $data00 != @70-02-01 08:00:00.001@ then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select cast('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as double);
|
||||
|
||||
sql select 1-1n;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
|
|
|
@ -222,7 +222,7 @@ class TDTestCase:
|
|||
|
||||
tdSql.query("select * from information_schema.ins_columns where db_name ='information_schema'")
|
||||
tdLog.info(len(tdSql.queryResult))
|
||||
tdSql.checkEqual(True, len(tdSql.queryResult) in range(261, 262))
|
||||
tdSql.checkEqual(True, len(tdSql.queryResult) in range(261, 269))
|
||||
|
||||
tdSql.query("select * from information_schema.ins_columns where db_name ='performance_schema'")
|
||||
tdSql.checkEqual(54, len(tdSql.queryResult))
|
||||
|
|
|
@ -52,7 +52,7 @@ class TDTestCase:
|
|||
tdLog.info("============== basic test ===============")
|
||||
cfg={
|
||||
'/mnt/data1' : 'dataDir',
|
||||
'/mnt/data2 0 0' : 'dataDir'
|
||||
'/mnt/data2 0 0 0' : 'dataDir'
|
||||
}
|
||||
tdSql.createDir('/mnt/data1')
|
||||
tdSql.createDir('/mnt/data2')
|
||||
|
@ -112,9 +112,9 @@ class TDTestCase:
|
|||
cfg={
|
||||
'/mnt/data00 0 1' : 'dataDir',
|
||||
'/mnt/data01 0 0' : 'dataDir',
|
||||
'/mnt/data02 0 0' : 'dataDir',
|
||||
'/mnt/data02 0 0 0' : 'dataDir',
|
||||
'/mnt/data03 0 0' : 'dataDir',
|
||||
'/mnt/data04 0 0' : 'dataDir'
|
||||
'/mnt/data04 0 0 0' : 'dataDir'
|
||||
}
|
||||
dir_list = ['/mnt/data00','/mnt/data01','/mnt/data02','/mnt/data03','/mnt/data04']
|
||||
for i in dir_list:
|
||||
|
@ -160,15 +160,15 @@ class TDTestCase:
|
|||
tdDnodes.stop(1)
|
||||
# Test1 1 dataDir
|
||||
cfg={
|
||||
'/mnt/data000 0 1' : 'dataDir',
|
||||
'/mnt/data000 0 1 0' : 'dataDir',
|
||||
'/mnt/data001 0 0' : 'dataDir',
|
||||
'/mnt/data002 0 0' : 'dataDir',
|
||||
'/mnt/data002 0 0 0' : 'dataDir',
|
||||
'/mnt/data010 1 0' : 'dataDir',
|
||||
'/mnt/data011 1 0' : 'dataDir',
|
||||
'/mnt/data011 1 0 0' : 'dataDir',
|
||||
'/mnt/data012 1 0' : 'dataDir',
|
||||
'/mnt/data020 2 0' : 'dataDir',
|
||||
'/mnt/data021 2 0' : 'dataDir',
|
||||
'/mnt/data022 2 0' : 'dataDir'
|
||||
'/mnt/data020 2 0 0' : 'dataDir',
|
||||
'/mnt/data021 2 0 0' : 'dataDir',
|
||||
'/mnt/data022 2 0 0' : 'dataDir'
|
||||
}
|
||||
dir_list = ['/mnt/data000','/mnt/data001','/mnt/data002','/mnt/data010','/mnt/data011','/mnt/data012','/mnt/data020','/mnt/data021''/mnt/data022']
|
||||
for i in dir_list:
|
||||
|
@ -189,7 +189,7 @@ class TDTestCase:
|
|||
if i == 0 :
|
||||
datadir = '/mnt/data%d 0 1' % (i+1)
|
||||
else:
|
||||
datadir = '/mnt/data%d 0 0' % (i+1)
|
||||
datadir = '/mnt/data%d 0 0 0' % (i+1)
|
||||
cfg.update({ datadir : 'dataDir' })
|
||||
tdSql.createDir('/mnt/data%d' % (i+1))
|
||||
|
||||
|
@ -227,6 +227,22 @@ class TDTestCase:
|
|||
|
||||
tdSql.taosdStatus(0)
|
||||
|
||||
def disable_create_new_file(self):
|
||||
tdLog.info("============== disable_create_new_file_0_not_exist test ===============")
|
||||
cfg={
|
||||
'/mnt/data1 0 1 1' : 'dataDir',
|
||||
'/mnt/data2 0 0 1' : 'dataDir'
|
||||
}
|
||||
tdSql.createDir('/mnt/data1')
|
||||
tdSql.createDir('/mnt/data2')
|
||||
|
||||
tdLog.info("================= step1")
|
||||
tdDnodes.deploy(1,cfg)
|
||||
tdDnodes.startWithoutSleep(1)
|
||||
|
||||
tdLog.info("================= step2")
|
||||
tdSql.taosdStatus(0)
|
||||
|
||||
def trim_database(self):
|
||||
tdLog.info("============== trim_database test ===============")
|
||||
tdDnodes.stop(1)
|
||||
|
@ -242,7 +258,7 @@ class TDTestCase:
|
|||
tdSql.execute('use dbtest')
|
||||
tdSql.execute('create table stb (ts timestamp,c0 int) tags(t0 int)')
|
||||
tdSql.execute('create table tb1 using stb tags(1)')
|
||||
for i in range(10,30):
|
||||
for i in range(1,600, 30):
|
||||
tdSql.execute(f'insert into tb1 values(now-{i}d,10)')
|
||||
tdSql.execute('flush database dbtest')
|
||||
time.sleep(3)
|
||||
|
@ -250,21 +266,26 @@ class TDTestCase:
|
|||
tdDnodes.stop(1)
|
||||
cfg={
|
||||
'/mnt/data1 0 1' : 'dataDir',
|
||||
'/mnt/data2 1 0' : 'dataDir',
|
||||
'/mnt/data3 2 0' : 'dataDir',
|
||||
'/mnt/data2 1 0 0' : 'dataDir',
|
||||
'/mnt/data3 1 0 1' : 'dataDir',
|
||||
'/mnt/data4 2 0' : 'dataDir',
|
||||
}
|
||||
tdSql.createDir('/mnt/data2')
|
||||
tdSql.createDir('/mnt/data3')
|
||||
tdSql.createDir('/mnt/data4')
|
||||
tdDnodes.deploy(1,cfg)
|
||||
tdDnodes.start(1)
|
||||
checkFiles('/mnt/data1/vnode/*/tsdb/v*',1)
|
||||
checkFiles('/mnt/data2/vnode/*/tsdb/v*',0)
|
||||
checkFiles('/mnt/data3/vnode/*/tsdb/v*',0)
|
||||
checkFiles('/mnt/data4/vnode/*/tsdb/v*',0)
|
||||
tdSql.execute('alter database dbtest keep 10d,365d,3650d')
|
||||
tdSql.execute('trim database dbtest')
|
||||
time.sleep(3)
|
||||
checkFiles('/mnt/data1/vnode/*/tsdb/v*',1)
|
||||
checkFiles('/mnt/data2/vnode/*/tsdb/v*',1)
|
||||
checkFiles('/mnt/data3/vnode/*/tsdb/v*',0)
|
||||
checkFiles('/mnt/data4/vnode/*/tsdb/v*',1)
|
||||
|
||||
def run(self):
|
||||
self.basic()
|
||||
|
@ -275,6 +296,7 @@ class TDTestCase:
|
|||
self.more_than_128_disks()
|
||||
self.trim_database()
|
||||
self.missing_middle_level()
|
||||
self.disable_create_new_file()
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue