Merge branch '3.0' into fix/3_liaohj
This commit is contained in:
commit
3533f7ecea
|
@ -7,14 +7,14 @@ description: This document describes the usage of escape characters in TDengine.
|
||||||
|
|
||||||
| Escape Character | **Actual Meaning** |
|
| Escape Character | **Actual Meaning** |
|
||||||
| :--------------: | ------------------------ |
|
| :--------------: | ------------------------ |
|
||||||
| `\'` | Single quote ' |
|
| `\'` | Single quote `'` |
|
||||||
| `\"` | Double quote " |
|
| `\"` | Double quote `"` |
|
||||||
| \n | Line Break |
|
| `\n` | Line Break |
|
||||||
| \r | Carriage Return |
|
| `\r` | Carriage Return |
|
||||||
| \t | tab |
|
| `\t` | tab |
|
||||||
| `\\` | Back Slash \ |
|
| `\\` | Back Slash `\ ` |
|
||||||
| `\%` | % see below for details |
|
| `\%` | `%` see below for details |
|
||||||
| `\_` | \_ see below for details |
|
| `\_` | `_` see below for details |
|
||||||
|
|
||||||
## Restrictions
|
## Restrictions
|
||||||
|
|
||||||
|
@ -22,5 +22,5 @@ description: This document describes the usage of escape characters in TDengine.
|
||||||
- Identifier without ``: Error will be returned because identifier must be constituted of digits, ASCII characters or underscore and can't be started with digits
|
- Identifier without ``: Error will be returned because identifier must be constituted of digits, ASCII characters or underscore and can't be started with digits
|
||||||
- Identifier quoted with ``: Original content is kept, no escaping
|
- Identifier quoted with ``: Original content is kept, no escaping
|
||||||
2. If there are escape characters in values
|
2. If there are escape characters in values
|
||||||
- The escape characters will be escaped as the above table. If the escape character doesn't match any supported one, the escape character "\" will be ignored.
|
- The escape characters will be escaped as the above table. If the escape character doesn't match any supported one, the escape character `\ ` will be ignored(`\x` remaining).
|
||||||
- "%" and "\_" are used as wildcards in `like`. `\%` and `\_` should be used to represent literal "%" and "\_" in `like`,. If `\%` and `\_` are used out of `like` context, the evaluation result is "`\%`"and "`\_`", instead of "%" and "\_".
|
- `%` and `_` are used as wildcards in `like`. `\%` and `\_` should be used to represent literal `%` and `_` in `like`. If `\%` and `\_` are used out of `like` context, the evaluation result is `\%` and `\_`, instead of `%` and `_`.
|
||||||
|
|
|
@ -8,16 +8,15 @@ description: TDengine 中使用转义字符的详细规则
|
||||||
|
|
||||||
| 字符序列 | **代表的字符** |
|
| 字符序列 | **代表的字符** |
|
||||||
| :------: | -------------- |
|
| :------: | -------------- |
|
||||||
| `\'` | 单引号' |
|
| `\'` | 单引号`'` |
|
||||||
| `\"` | 双引号" |
|
| `\"` | 双引号`"` |
|
||||||
| \n | 换行符 |
|
| `\n` | 换行符 |
|
||||||
| \r | 回车符 |
|
| `\r` | 回车符 |
|
||||||
| \t | tab 符 |
|
| `\t` | tab 符 |
|
||||||
| `\\` | 斜杠\ |
|
| `\\` | 斜杠 `\ ` |
|
||||||
| `\%` | % 规则见下 |
|
| `\%` | `%` 规则见下 |
|
||||||
| `\_` | \_ 规则见下 |
|
| `\_` | `_` 规则见下 |
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## 转义字符使用规则
|
## 转义字符使用规则
|
||||||
|
|
||||||
|
@ -25,5 +24,5 @@ description: TDengine 中使用转义字符的详细规则
|
||||||
1. 普通标识符: 直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
|
1. 普通标识符: 直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
|
||||||
2. 反引号``标识符: 保持原样,不转义
|
2. 反引号``标识符: 保持原样,不转义
|
||||||
2. 数据里有转义字符
|
2. 数据里有转义字符
|
||||||
1. 遇到上面定义的转义字符会转义(%和\_见下面说明),如果没有匹配的转义字符会忽略掉转义符\。
|
1. 遇到上面定义的转义字符会转义(`%`和`_`见下面说明),如果没有匹配的转义字符会忽略掉转义符`\ `(`\x`保持原样)。
|
||||||
2. 对于%和\_,因为在 like 里这两个字符是通配符,所以在模式匹配 like 里用`\%`%和`\_`表示字符里本身的%和\_,如果在 like 模式匹配上下文之外使用`\%`或`\_`,则它们的计算结果为字符串`\%`和`\_`,而不是%和\_。
|
2. 对于`%`和`_`,因为在`like`里这两个字符是通配符,所以在模式匹配`like`里用`\%`和`\_`表示字符里本身的`%`和`_`,如果在`like`模式匹配上下文之外使用`\%`或`\_`,则它们的计算结果为字符串`\%`和`\_`,而不是`%`和`_`。
|
||||||
|
|
|
@ -52,6 +52,9 @@ extern "C" {
|
||||||
#define TSDB_INS_TABLE_VIEWS "ins_views"
|
#define TSDB_INS_TABLE_VIEWS "ins_views"
|
||||||
#define TSDB_INS_TABLE_COMPACTS "ins_compacts"
|
#define TSDB_INS_TABLE_COMPACTS "ins_compacts"
|
||||||
#define TSDB_INS_TABLE_COMPACT_DETAILS "ins_compact_details"
|
#define TSDB_INS_TABLE_COMPACT_DETAILS "ins_compact_details"
|
||||||
|
#define TSDB_INS_TABLE_GRANTS_FULL "ins_grants_full"
|
||||||
|
#define TSDB_INS_TABLE_GRANTS_LOGS "ins_grants_logs"
|
||||||
|
#define TSDB_INS_TABLE_MACHINES "ins_machines"
|
||||||
|
|
||||||
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
|
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
|
||||||
#define TSDB_PERFS_TABLE_SMAS "perf_smas"
|
#define TSDB_PERFS_TABLE_SMAS "perf_smas"
|
||||||
|
|
|
@ -206,6 +206,7 @@ typedef struct SDataBlockInfo {
|
||||||
int16_t hasVarCol;
|
int16_t hasVarCol;
|
||||||
int16_t dataLoad; // denote if the data is loaded or not
|
int16_t dataLoad; // denote if the data is loaded or not
|
||||||
uint8_t scanFlag;
|
uint8_t scanFlag;
|
||||||
|
bool blankFill;
|
||||||
|
|
||||||
// TODO: optimize and remove following
|
// TODO: optimize and remove following
|
||||||
int64_t version; // used for stream, and need serialization
|
int64_t version; // used for stream, and need serialization
|
||||||
|
|
|
@ -22,15 +22,14 @@ extern "C" {
|
||||||
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
#ifdef GRANTS_CFG
|
#include "tdef.h"
|
||||||
#include "tgrantCfg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GRANTS_COL_MAX_LEN
|
#ifndef GRANTS_COL_MAX_LEN
|
||||||
#define GRANTS_COL_MAX_LEN 196
|
#define GRANTS_COL_MAX_LEN 196
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GRANT_HEART_BEAT_MIN 2
|
#define GRANT_HEART_BEAT_MIN 2
|
||||||
|
#define GRANT_ACTIVE_CODE "activeCode"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TSDB_GRANT_ALL,
|
TSDB_GRANT_ALL,
|
||||||
|
@ -48,14 +47,34 @@ typedef enum {
|
||||||
TSDB_GRANT_CPU_CORES,
|
TSDB_GRANT_CPU_CORES,
|
||||||
TSDB_GRANT_STABLE,
|
TSDB_GRANT_STABLE,
|
||||||
TSDB_GRANT_TABLE,
|
TSDB_GRANT_TABLE,
|
||||||
TSDB_GRANT_SUBSCRIBE,
|
TSDB_GRANT_SUBSCRIPTION,
|
||||||
|
TSDB_GRANT_AUDIT,
|
||||||
|
TSDB_GRANT_CSV,
|
||||||
|
TSDB_GRANT_MULTI_TIER,
|
||||||
|
TSDB_GRANT_BACKUP_RESTORE,
|
||||||
} EGrantType;
|
} EGrantType;
|
||||||
|
|
||||||
int32_t grantCheck(EGrantType grant);
|
int32_t grantCheck(EGrantType grant);
|
||||||
|
char* tGetMachineId();
|
||||||
|
#ifndef TD_UNIQ_GRANT
|
||||||
int32_t grantAlterActiveCode(int32_t did, const char* old, const char* newer, char* out, int8_t type);
|
int32_t grantAlterActiveCode(int32_t did, const char* old, const char* newer, char* out, int8_t type);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GRANTS_CFG
|
// #ifndef GRANTS_CFG
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
|
#ifdef TD_UNIQ_GRANT
|
||||||
|
#define GRANTS_SCHEMA \
|
||||||
|
static const SSysDbTableSchema grantsSchema[] = { \
|
||||||
|
{.name = "version", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "expire_time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "service_time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "expired", .bytes = 5 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "state", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "timeseries", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "dnodes", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
{.name = "cpu_cores", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
}
|
||||||
|
#else
|
||||||
#define GRANTS_SCHEMA \
|
#define GRANTS_SCHEMA \
|
||||||
static const SSysDbTableSchema grantsSchema[] = { \
|
static const SSysDbTableSchema grantsSchema[] = { \
|
||||||
{.name = "version", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "version", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
|
@ -79,33 +98,28 @@ int32_t grantAlterActiveCode(int32_t did, const char* old, const char* newer, ch
|
||||||
{.name = "influxdb", .bytes = GRANTS_COL_MAX_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "influxdb", .bytes = GRANTS_COL_MAX_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "mqtt", .bytes = GRANTS_COL_MAX_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "mqtt", .bytes = GRANTS_COL_MAX_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define GRANTS_SCHEMA \
|
#define GRANTS_SCHEMA \
|
||||||
static const SSysDbTableSchema grantsSchema[] = { \
|
static const SSysDbTableSchema grantsSchema[] = { \
|
||||||
{.name = "version", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "version", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "expire_time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "expire_time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "expired", .bytes = 5 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "service_time", .bytes = 19 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "storage", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "expired", .bytes = 5 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "timeseries", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "state", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "databases", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "timeseries", .bytes = 21 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "users", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "dnodes", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "accounts", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
{.name = "cpu_cores", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
||||||
{.name = "dnodes", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
{.name = "connections", .bytes = 11 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
{.name = "streams", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
{.name = "cpu_cores", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
{.name = "speed", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
{.name = "querytime", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, \
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#define GRANT_CFG_ADD
|
// #define GRANT_CFG_ADD
|
||||||
#define GRANT_CFG_SET
|
// #define GRANT_CFG_SET
|
||||||
#define GRANT_CFG_GET
|
// #define GRANT_CFG_GET
|
||||||
#define GRANT_CFG_CHECK
|
// #define GRANT_CFG_CHECK
|
||||||
#define GRANT_CFG_SKIP
|
// #define GRANT_CFG_SKIP
|
||||||
#define GRANT_CFG_DECLARE
|
// #define GRANT_CFG_DECLARE
|
||||||
#define GRANT_CFG_EXTERN
|
// #define GRANT_CFG_EXTERN
|
||||||
#endif
|
// #endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,6 +147,9 @@ typedef enum _mgmt_table {
|
||||||
TSDB_MGMT_TABLE_VIEWS,
|
TSDB_MGMT_TABLE_VIEWS,
|
||||||
TSDB_MGMT_TABLE_COMPACT,
|
TSDB_MGMT_TABLE_COMPACT,
|
||||||
TSDB_MGMT_TABLE_COMPACT_DETAIL,
|
TSDB_MGMT_TABLE_COMPACT_DETAIL,
|
||||||
|
TSDB_MGMT_TABLE_GRANTS_FULL,
|
||||||
|
TSDB_MGMT_TABLE_GRANTS_LOGS,
|
||||||
|
TSDB_MGMT_TABLE_MACHINES,
|
||||||
TSDB_MGMT_TABLE_MAX,
|
TSDB_MGMT_TABLE_MAX,
|
||||||
} EShowType;
|
} EShowType;
|
||||||
|
|
||||||
|
@ -298,7 +301,8 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_SYNCDB_STMT,
|
QUERY_NODE_SYNCDB_STMT,
|
||||||
QUERY_NODE_GRANT_STMT,
|
QUERY_NODE_GRANT_STMT,
|
||||||
QUERY_NODE_REVOKE_STMT,
|
QUERY_NODE_REVOKE_STMT,
|
||||||
// placeholder for [152, 180]
|
QUERY_NODE_ALTER_CLUSTER_STMT,
|
||||||
|
// placeholder for [153, 180]
|
||||||
QUERY_NODE_SHOW_CREATE_VIEW_STMT = 181,
|
QUERY_NODE_SHOW_CREATE_VIEW_STMT = 181,
|
||||||
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
||||||
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
||||||
|
@ -359,6 +363,9 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_SHOW_VIEWS_STMT,
|
QUERY_NODE_SHOW_VIEWS_STMT,
|
||||||
QUERY_NODE_SHOW_COMPACTS_STMT,
|
QUERY_NODE_SHOW_COMPACTS_STMT,
|
||||||
QUERY_NODE_SHOW_COMPACT_DETAILS_STMT,
|
QUERY_NODE_SHOW_COMPACT_DETAILS_STMT,
|
||||||
|
QUERY_NODE_SHOW_GRANTS_FULL_STMT,
|
||||||
|
QUERY_NODE_SHOW_GRANTS_LOGS_STMT,
|
||||||
|
QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT,
|
||||||
|
|
||||||
// logic plan node
|
// logic plan node
|
||||||
QUERY_NODE_LOGIC_PLAN_SCAN = 1000,
|
QUERY_NODE_LOGIC_PLAN_SCAN = 1000,
|
||||||
|
@ -1557,9 +1564,11 @@ typedef struct {
|
||||||
int64_t updateTime;
|
int64_t updateTime;
|
||||||
float numOfCores;
|
float numOfCores;
|
||||||
int32_t numOfSupportVnodes;
|
int32_t numOfSupportVnodes;
|
||||||
|
int32_t numOfDiskCfg;
|
||||||
int64_t memTotal;
|
int64_t memTotal;
|
||||||
int64_t memAvail;
|
int64_t memAvail;
|
||||||
char dnodeEp[TSDB_EP_LEN];
|
char dnodeEp[TSDB_EP_LEN];
|
||||||
|
char machineId[TSDB_MACHINE_ID_LEN + 1];
|
||||||
SMnodeLoad mload;
|
SMnodeLoad mload;
|
||||||
SQnodeLoad qload;
|
SQnodeLoad qload;
|
||||||
SClusterCfg clusterCfg;
|
SClusterCfg clusterCfg;
|
||||||
|
@ -1600,6 +1609,7 @@ typedef struct {
|
||||||
SEp ep;
|
SEp ep;
|
||||||
char active[TSDB_ACTIVE_KEY_LEN];
|
char active[TSDB_ACTIVE_KEY_LEN];
|
||||||
char connActive[TSDB_CONN_ACTIVE_KEY_LEN];
|
char connActive[TSDB_CONN_ACTIVE_KEY_LEN];
|
||||||
|
char machineId[TSDB_MACHINE_ID_LEN + 1];
|
||||||
} SDnodeInfo;
|
} SDnodeInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -2031,6 +2041,17 @@ int32_t tSerializeSExplainRsp(void* buf, int32_t bufLen, SExplainRsp* pRsp);
|
||||||
int32_t tDeserializeSExplainRsp(void* buf, int32_t bufLen, SExplainRsp* pRsp);
|
int32_t tDeserializeSExplainRsp(void* buf, int32_t bufLen, SExplainRsp* pRsp);
|
||||||
void tFreeSExplainRsp(SExplainRsp* pRsp);
|
void tFreeSExplainRsp(SExplainRsp* pRsp);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char config[TSDB_DNODE_CONFIG_LEN];
|
||||||
|
char value[TSDB_CLUSTER_VALUE_LEN];
|
||||||
|
int32_t sqlLen;
|
||||||
|
char* sql;
|
||||||
|
} SMCfgClusterReq;
|
||||||
|
|
||||||
|
int32_t tSerializeSMCfgClusterReq(void* buf, int32_t bufLen, SMCfgClusterReq* pReq);
|
||||||
|
int32_t tDeserializeSMCfgClusterReq(void* buf, int32_t bufLen, SMCfgClusterReq* pReq);
|
||||||
|
void tFreeSMCfgClusterReq(SMCfgClusterReq* pReq);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char fqdn[TSDB_FQDN_LEN]; // end point, hostname:port
|
char fqdn[TSDB_FQDN_LEN]; // end point, hostname:port
|
||||||
int32_t port;
|
int32_t port;
|
||||||
|
|
|
@ -218,6 +218,7 @@
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_KILL_COMPACT, "kill-compact", SKillCompactReq, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_KILL_COMPACT, "kill-compact", SKillCompactReq, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_COMPACT_TIMER, "compact-tmr", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_COMPACT_TIMER, "compact-tmr", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_STREAM_REQ_CHKPT, "stream-req-checkpoint", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_STREAM_REQ_CHKPT, "stream-req-checkpoint", NULL, NULL)
|
||||||
|
TD_DEF_MSG_TYPE(TDMT_MND_CONFIG_CLUSTER, "config-cluster", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_MND_MAX_MSG, "mnd-max", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_MND_MAX_MSG, "mnd-max", NULL, NULL)
|
||||||
TD_CLOSE_MSG_SEG(TDMT_END_MND_MSG)
|
TD_CLOSE_MSG_SEG(TDMT_END_MND_MSG)
|
||||||
|
|
||||||
|
@ -337,8 +338,9 @@
|
||||||
TD_DEF_MSG_TYPE(TDMT_SYNC_LOCAL_CMD, "sync-local-cmd", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_SYNC_LOCAL_CMD, "sync-local-cmd", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_SYNC_PREP_SNAPSHOT, "sync-prep-snapshot", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_SYNC_PREP_SNAPSHOT, "sync-prep-snapshot", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_SYNC_PREP_SNAPSHOT_REPLY, "sync-prep-snapshot-reply", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_SYNC_PREP_SNAPSHOT_REPLY, "sync-prep-snapshot-reply", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_SYNC_MAX_MSG, "sync-max", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_SYNC_UNUSED_CODE, "sync-unused", NULL, NULL)
|
||||||
TD_DEF_MSG_TYPE(TDMT_SYNC_FORCE_FOLLOWER, "sync-force-become-follower", NULL, NULL)
|
TD_DEF_MSG_TYPE(TDMT_SYNC_FORCE_FOLLOWER, "sync-force-become-follower", NULL, NULL)
|
||||||
|
TD_DEF_MSG_TYPE(TDMT_SYNC_MAX_MSG, "sync-max", NULL, NULL)
|
||||||
TD_CLOSE_MSG_SEG(TDMT_END_SYNC_MSG)
|
TD_CLOSE_MSG_SEG(TDMT_END_SYNC_MSG)
|
||||||
|
|
||||||
TD_NEW_MSG_SEG(TDMT_VND_STREAM_MSG) //7 << 8
|
TD_NEW_MSG_SEG(TDMT_VND_STREAM_MSG) //7 << 8
|
||||||
|
|
|
@ -74,295 +74,298 @@
|
||||||
#define TK_NK_IPTOKEN 55
|
#define TK_NK_IPTOKEN 55
|
||||||
#define TK_FORCE 56
|
#define TK_FORCE 56
|
||||||
#define TK_UNSAFE 57
|
#define TK_UNSAFE 57
|
||||||
#define TK_LOCAL 58
|
#define TK_CLUSTER 58
|
||||||
#define TK_QNODE 59
|
#define TK_LOCAL 59
|
||||||
#define TK_BNODE 60
|
#define TK_QNODE 60
|
||||||
#define TK_SNODE 61
|
#define TK_BNODE 61
|
||||||
#define TK_MNODE 62
|
#define TK_SNODE 62
|
||||||
#define TK_VNODE 63
|
#define TK_MNODE 63
|
||||||
#define TK_DATABASE 64
|
#define TK_VNODE 64
|
||||||
#define TK_USE 65
|
#define TK_DATABASE 65
|
||||||
#define TK_FLUSH 66
|
#define TK_USE 66
|
||||||
#define TK_TRIM 67
|
#define TK_FLUSH 67
|
||||||
#define TK_COMPACT 68
|
#define TK_TRIM 68
|
||||||
#define TK_IF 69
|
#define TK_COMPACT 69
|
||||||
#define TK_NOT 70
|
#define TK_IF 70
|
||||||
#define TK_EXISTS 71
|
#define TK_NOT 71
|
||||||
#define TK_BUFFER 72
|
#define TK_EXISTS 72
|
||||||
#define TK_CACHEMODEL 73
|
#define TK_BUFFER 73
|
||||||
#define TK_CACHESIZE 74
|
#define TK_CACHEMODEL 74
|
||||||
#define TK_COMP 75
|
#define TK_CACHESIZE 75
|
||||||
#define TK_DURATION 76
|
#define TK_COMP 76
|
||||||
#define TK_NK_VARIABLE 77
|
#define TK_DURATION 77
|
||||||
#define TK_MAXROWS 78
|
#define TK_NK_VARIABLE 78
|
||||||
#define TK_MINROWS 79
|
#define TK_MAXROWS 79
|
||||||
#define TK_KEEP 80
|
#define TK_MINROWS 80
|
||||||
#define TK_PAGES 81
|
#define TK_KEEP 81
|
||||||
#define TK_PAGESIZE 82
|
#define TK_PAGES 82
|
||||||
#define TK_TSDB_PAGESIZE 83
|
#define TK_PAGESIZE 83
|
||||||
#define TK_PRECISION 84
|
#define TK_TSDB_PAGESIZE 84
|
||||||
#define TK_REPLICA 85
|
#define TK_PRECISION 85
|
||||||
#define TK_VGROUPS 86
|
#define TK_REPLICA 86
|
||||||
#define TK_SINGLE_STABLE 87
|
#define TK_VGROUPS 87
|
||||||
#define TK_RETENTIONS 88
|
#define TK_SINGLE_STABLE 88
|
||||||
#define TK_SCHEMALESS 89
|
#define TK_RETENTIONS 89
|
||||||
#define TK_WAL_LEVEL 90
|
#define TK_SCHEMALESS 90
|
||||||
#define TK_WAL_FSYNC_PERIOD 91
|
#define TK_WAL_LEVEL 91
|
||||||
#define TK_WAL_RETENTION_PERIOD 92
|
#define TK_WAL_FSYNC_PERIOD 92
|
||||||
#define TK_WAL_RETENTION_SIZE 93
|
#define TK_WAL_RETENTION_PERIOD 93
|
||||||
#define TK_WAL_ROLL_PERIOD 94
|
#define TK_WAL_RETENTION_SIZE 94
|
||||||
#define TK_WAL_SEGMENT_SIZE 95
|
#define TK_WAL_ROLL_PERIOD 95
|
||||||
#define TK_STT_TRIGGER 96
|
#define TK_WAL_SEGMENT_SIZE 96
|
||||||
#define TK_TABLE_PREFIX 97
|
#define TK_STT_TRIGGER 97
|
||||||
#define TK_TABLE_SUFFIX 98
|
#define TK_TABLE_PREFIX 98
|
||||||
#define TK_KEEP_TIME_OFFSET 99
|
#define TK_TABLE_SUFFIX 99
|
||||||
#define TK_NK_COLON 100
|
#define TK_KEEP_TIME_OFFSET 100
|
||||||
#define TK_BWLIMIT 101
|
#define TK_NK_COLON 101
|
||||||
#define TK_START 102
|
#define TK_BWLIMIT 102
|
||||||
#define TK_TIMESTAMP 103
|
#define TK_START 103
|
||||||
#define TK_END 104
|
#define TK_TIMESTAMP 104
|
||||||
#define TK_TABLE 105
|
#define TK_END 105
|
||||||
#define TK_NK_LP 106
|
#define TK_TABLE 106
|
||||||
#define TK_NK_RP 107
|
#define TK_NK_LP 107
|
||||||
#define TK_STABLE 108
|
#define TK_NK_RP 108
|
||||||
#define TK_COLUMN 109
|
#define TK_STABLE 109
|
||||||
#define TK_MODIFY 110
|
#define TK_COLUMN 110
|
||||||
#define TK_RENAME 111
|
#define TK_MODIFY 111
|
||||||
#define TK_TAG 112
|
#define TK_RENAME 112
|
||||||
#define TK_SET 113
|
#define TK_TAG 113
|
||||||
#define TK_NK_EQ 114
|
#define TK_SET 114
|
||||||
#define TK_USING 115
|
#define TK_NK_EQ 115
|
||||||
#define TK_TAGS 116
|
#define TK_USING 116
|
||||||
#define TK_BOOL 117
|
#define TK_TAGS 117
|
||||||
#define TK_TINYINT 118
|
#define TK_BOOL 118
|
||||||
#define TK_SMALLINT 119
|
#define TK_TINYINT 119
|
||||||
#define TK_INT 120
|
#define TK_SMALLINT 120
|
||||||
#define TK_INTEGER 121
|
#define TK_INT 121
|
||||||
#define TK_BIGINT 122
|
#define TK_INTEGER 122
|
||||||
#define TK_FLOAT 123
|
#define TK_BIGINT 123
|
||||||
#define TK_DOUBLE 124
|
#define TK_FLOAT 124
|
||||||
#define TK_BINARY 125
|
#define TK_DOUBLE 125
|
||||||
#define TK_NCHAR 126
|
#define TK_BINARY 126
|
||||||
#define TK_UNSIGNED 127
|
#define TK_NCHAR 127
|
||||||
#define TK_JSON 128
|
#define TK_UNSIGNED 128
|
||||||
#define TK_VARCHAR 129
|
#define TK_JSON 129
|
||||||
#define TK_MEDIUMBLOB 130
|
#define TK_VARCHAR 130
|
||||||
#define TK_BLOB 131
|
#define TK_MEDIUMBLOB 131
|
||||||
#define TK_VARBINARY 132
|
#define TK_BLOB 132
|
||||||
#define TK_GEOMETRY 133
|
#define TK_VARBINARY 133
|
||||||
#define TK_DECIMAL 134
|
#define TK_GEOMETRY 134
|
||||||
#define TK_COMMENT 135
|
#define TK_DECIMAL 135
|
||||||
#define TK_MAX_DELAY 136
|
#define TK_COMMENT 136
|
||||||
#define TK_WATERMARK 137
|
#define TK_MAX_DELAY 137
|
||||||
#define TK_ROLLUP 138
|
#define TK_WATERMARK 138
|
||||||
#define TK_TTL 139
|
#define TK_ROLLUP 139
|
||||||
#define TK_SMA 140
|
#define TK_TTL 140
|
||||||
#define TK_DELETE_MARK 141
|
#define TK_SMA 141
|
||||||
#define TK_FIRST 142
|
#define TK_DELETE_MARK 142
|
||||||
#define TK_LAST 143
|
#define TK_FIRST 143
|
||||||
#define TK_SHOW 144
|
#define TK_LAST 144
|
||||||
#define TK_PRIVILEGES 145
|
#define TK_SHOW 145
|
||||||
#define TK_DATABASES 146
|
#define TK_PRIVILEGES 146
|
||||||
#define TK_TABLES 147
|
#define TK_DATABASES 147
|
||||||
#define TK_STABLES 148
|
#define TK_TABLES 148
|
||||||
#define TK_MNODES 149
|
#define TK_STABLES 149
|
||||||
#define TK_QNODES 150
|
#define TK_MNODES 150
|
||||||
#define TK_FUNCTIONS 151
|
#define TK_QNODES 151
|
||||||
#define TK_INDEXES 152
|
#define TK_FUNCTIONS 152
|
||||||
#define TK_ACCOUNTS 153
|
#define TK_INDEXES 153
|
||||||
#define TK_APPS 154
|
#define TK_ACCOUNTS 154
|
||||||
#define TK_CONNECTIONS 155
|
#define TK_APPS 155
|
||||||
#define TK_LICENCES 156
|
#define TK_CONNECTIONS 156
|
||||||
#define TK_GRANTS 157
|
#define TK_LICENCES 157
|
||||||
#define TK_QUERIES 158
|
#define TK_GRANTS 158
|
||||||
#define TK_SCORES 159
|
#define TK_FULL 159
|
||||||
#define TK_TOPICS 160
|
#define TK_LOGS 160
|
||||||
#define TK_VARIABLES 161
|
#define TK_MACHINES 161
|
||||||
#define TK_CLUSTER 162
|
#define TK_QUERIES 162
|
||||||
#define TK_BNODES 163
|
#define TK_SCORES 163
|
||||||
#define TK_SNODES 164
|
#define TK_TOPICS 164
|
||||||
#define TK_TRANSACTIONS 165
|
#define TK_VARIABLES 165
|
||||||
#define TK_DISTRIBUTED 166
|
#define TK_BNODES 166
|
||||||
#define TK_CONSUMERS 167
|
#define TK_SNODES 167
|
||||||
#define TK_SUBSCRIPTIONS 168
|
#define TK_TRANSACTIONS 168
|
||||||
#define TK_VNODES 169
|
#define TK_DISTRIBUTED 169
|
||||||
#define TK_ALIVE 170
|
#define TK_CONSUMERS 170
|
||||||
#define TK_VIEWS 171
|
#define TK_SUBSCRIPTIONS 171
|
||||||
#define TK_VIEW 172
|
#define TK_VNODES 172
|
||||||
#define TK_COMPACTS 173
|
#define TK_ALIVE 173
|
||||||
#define TK_NORMAL 174
|
#define TK_VIEWS 174
|
||||||
#define TK_CHILD 175
|
#define TK_VIEW 175
|
||||||
#define TK_LIKE 176
|
#define TK_COMPACTS 176
|
||||||
#define TK_TBNAME 177
|
#define TK_NORMAL 177
|
||||||
#define TK_QTAGS 178
|
#define TK_CHILD 178
|
||||||
#define TK_AS 179
|
#define TK_LIKE 179
|
||||||
#define TK_SYSTEM 180
|
#define TK_TBNAME 180
|
||||||
#define TK_INDEX 181
|
#define TK_QTAGS 181
|
||||||
#define TK_FUNCTION 182
|
#define TK_AS 182
|
||||||
#define TK_INTERVAL 183
|
#define TK_SYSTEM 183
|
||||||
#define TK_COUNT 184
|
#define TK_INDEX 184
|
||||||
#define TK_LAST_ROW 185
|
#define TK_FUNCTION 185
|
||||||
#define TK_META 186
|
#define TK_INTERVAL 186
|
||||||
#define TK_ONLY 187
|
#define TK_COUNT 187
|
||||||
#define TK_TOPIC 188
|
#define TK_LAST_ROW 188
|
||||||
#define TK_CONSUMER 189
|
#define TK_META 189
|
||||||
#define TK_GROUP 190
|
#define TK_ONLY 190
|
||||||
#define TK_DESC 191
|
#define TK_TOPIC 191
|
||||||
#define TK_DESCRIBE 192
|
#define TK_CONSUMER 192
|
||||||
#define TK_RESET 193
|
#define TK_GROUP 193
|
||||||
#define TK_QUERY 194
|
#define TK_DESC 194
|
||||||
#define TK_CACHE 195
|
#define TK_DESCRIBE 195
|
||||||
#define TK_EXPLAIN 196
|
#define TK_RESET 196
|
||||||
#define TK_ANALYZE 197
|
#define TK_QUERY 197
|
||||||
#define TK_VERBOSE 198
|
#define TK_CACHE 198
|
||||||
#define TK_NK_BOOL 199
|
#define TK_EXPLAIN 199
|
||||||
#define TK_RATIO 200
|
#define TK_ANALYZE 200
|
||||||
#define TK_NK_FLOAT 201
|
#define TK_VERBOSE 201
|
||||||
#define TK_OUTPUTTYPE 202
|
#define TK_NK_BOOL 202
|
||||||
#define TK_AGGREGATE 203
|
#define TK_RATIO 203
|
||||||
#define TK_BUFSIZE 204
|
#define TK_NK_FLOAT 204
|
||||||
#define TK_LANGUAGE 205
|
#define TK_OUTPUTTYPE 205
|
||||||
#define TK_REPLACE 206
|
#define TK_AGGREGATE 206
|
||||||
#define TK_STREAM 207
|
#define TK_BUFSIZE 207
|
||||||
#define TK_INTO 208
|
#define TK_LANGUAGE 208
|
||||||
#define TK_PAUSE 209
|
#define TK_REPLACE 209
|
||||||
#define TK_RESUME 210
|
#define TK_STREAM 210
|
||||||
#define TK_TRIGGER 211
|
#define TK_INTO 211
|
||||||
#define TK_AT_ONCE 212
|
#define TK_PAUSE 212
|
||||||
#define TK_WINDOW_CLOSE 213
|
#define TK_RESUME 213
|
||||||
#define TK_IGNORE 214
|
#define TK_TRIGGER 214
|
||||||
#define TK_EXPIRED 215
|
#define TK_AT_ONCE 215
|
||||||
#define TK_FILL_HISTORY 216
|
#define TK_WINDOW_CLOSE 216
|
||||||
#define TK_UPDATE 217
|
#define TK_IGNORE 217
|
||||||
#define TK_SUBTABLE 218
|
#define TK_EXPIRED 218
|
||||||
#define TK_UNTREATED 219
|
#define TK_FILL_HISTORY 219
|
||||||
#define TK_KILL 220
|
#define TK_UPDATE 220
|
||||||
#define TK_CONNECTION 221
|
#define TK_SUBTABLE 221
|
||||||
#define TK_TRANSACTION 222
|
#define TK_UNTREATED 222
|
||||||
#define TK_BALANCE 223
|
#define TK_KILL 223
|
||||||
#define TK_VGROUP 224
|
#define TK_CONNECTION 224
|
||||||
#define TK_LEADER 225
|
#define TK_TRANSACTION 225
|
||||||
#define TK_MERGE 226
|
#define TK_BALANCE 226
|
||||||
#define TK_REDISTRIBUTE 227
|
#define TK_VGROUP 227
|
||||||
#define TK_SPLIT 228
|
#define TK_LEADER 228
|
||||||
#define TK_DELETE 229
|
#define TK_MERGE 229
|
||||||
#define TK_INSERT 230
|
#define TK_REDISTRIBUTE 230
|
||||||
#define TK_NULL 231
|
#define TK_SPLIT 231
|
||||||
#define TK_NK_QUESTION 232
|
#define TK_DELETE 232
|
||||||
#define TK_NK_ALIAS 233
|
#define TK_INSERT 233
|
||||||
#define TK_NK_ARROW 234
|
#define TK_NULL 234
|
||||||
#define TK_ROWTS 235
|
#define TK_NK_QUESTION 235
|
||||||
#define TK_QSTART 236
|
#define TK_NK_ALIAS 236
|
||||||
#define TK_QEND 237
|
#define TK_NK_ARROW 237
|
||||||
#define TK_QDURATION 238
|
#define TK_ROWTS 238
|
||||||
#define TK_WSTART 239
|
#define TK_QSTART 239
|
||||||
#define TK_WEND 240
|
#define TK_QEND 240
|
||||||
#define TK_WDURATION 241
|
#define TK_QDURATION 241
|
||||||
#define TK_IROWTS 242
|
#define TK_WSTART 242
|
||||||
#define TK_ISFILLED 243
|
#define TK_WEND 243
|
||||||
#define TK_CAST 244
|
#define TK_WDURATION 244
|
||||||
#define TK_NOW 245
|
#define TK_IROWTS 245
|
||||||
#define TK_TODAY 246
|
#define TK_ISFILLED 246
|
||||||
#define TK_TIMEZONE 247
|
#define TK_CAST 247
|
||||||
#define TK_CLIENT_VERSION 248
|
#define TK_NOW 248
|
||||||
#define TK_SERVER_VERSION 249
|
#define TK_TODAY 249
|
||||||
#define TK_SERVER_STATUS 250
|
#define TK_TIMEZONE 250
|
||||||
#define TK_CURRENT_USER 251
|
#define TK_CLIENT_VERSION 251
|
||||||
#define TK_CASE 252
|
#define TK_SERVER_VERSION 252
|
||||||
#define TK_WHEN 253
|
#define TK_SERVER_STATUS 253
|
||||||
#define TK_THEN 254
|
#define TK_CURRENT_USER 254
|
||||||
#define TK_ELSE 255
|
#define TK_CASE 255
|
||||||
#define TK_BETWEEN 256
|
#define TK_WHEN 256
|
||||||
#define TK_IS 257
|
#define TK_THEN 257
|
||||||
#define TK_NK_LT 258
|
#define TK_ELSE 258
|
||||||
#define TK_NK_GT 259
|
#define TK_BETWEEN 259
|
||||||
#define TK_NK_LE 260
|
#define TK_IS 260
|
||||||
#define TK_NK_GE 261
|
#define TK_NK_LT 261
|
||||||
#define TK_NK_NE 262
|
#define TK_NK_GT 262
|
||||||
#define TK_MATCH 263
|
#define TK_NK_LE 263
|
||||||
#define TK_NMATCH 264
|
#define TK_NK_GE 264
|
||||||
#define TK_CONTAINS 265
|
#define TK_NK_NE 265
|
||||||
#define TK_IN 266
|
#define TK_MATCH 266
|
||||||
#define TK_JOIN 267
|
#define TK_NMATCH 267
|
||||||
#define TK_INNER 268
|
#define TK_CONTAINS 268
|
||||||
#define TK_SELECT 269
|
#define TK_IN 269
|
||||||
#define TK_NK_HINT 270
|
#define TK_JOIN 270
|
||||||
#define TK_DISTINCT 271
|
#define TK_INNER 271
|
||||||
#define TK_WHERE 272
|
#define TK_SELECT 272
|
||||||
#define TK_PARTITION 273
|
#define TK_NK_HINT 273
|
||||||
#define TK_BY 274
|
#define TK_DISTINCT 274
|
||||||
#define TK_SESSION 275
|
#define TK_WHERE 275
|
||||||
#define TK_STATE_WINDOW 276
|
#define TK_PARTITION 276
|
||||||
#define TK_EVENT_WINDOW 277
|
#define TK_BY 277
|
||||||
#define TK_SLIDING 278
|
#define TK_SESSION 278
|
||||||
#define TK_FILL 279
|
#define TK_STATE_WINDOW 279
|
||||||
#define TK_VALUE 280
|
#define TK_EVENT_WINDOW 280
|
||||||
#define TK_VALUE_F 281
|
#define TK_SLIDING 281
|
||||||
#define TK_NONE 282
|
#define TK_FILL 282
|
||||||
#define TK_PREV 283
|
#define TK_VALUE 283
|
||||||
#define TK_NULL_F 284
|
#define TK_VALUE_F 284
|
||||||
#define TK_LINEAR 285
|
#define TK_NONE 285
|
||||||
#define TK_NEXT 286
|
#define TK_PREV 286
|
||||||
#define TK_HAVING 287
|
#define TK_NULL_F 287
|
||||||
#define TK_RANGE 288
|
#define TK_LINEAR 288
|
||||||
#define TK_EVERY 289
|
#define TK_NEXT 289
|
||||||
#define TK_ORDER 290
|
#define TK_HAVING 290
|
||||||
#define TK_SLIMIT 291
|
#define TK_RANGE 291
|
||||||
#define TK_SOFFSET 292
|
#define TK_EVERY 292
|
||||||
#define TK_LIMIT 293
|
#define TK_ORDER 293
|
||||||
#define TK_OFFSET 294
|
#define TK_SLIMIT 294
|
||||||
#define TK_ASC 295
|
#define TK_SOFFSET 295
|
||||||
#define TK_NULLS 296
|
#define TK_LIMIT 296
|
||||||
#define TK_ABORT 297
|
#define TK_OFFSET 297
|
||||||
#define TK_AFTER 298
|
#define TK_ASC 298
|
||||||
#define TK_ATTACH 299
|
#define TK_NULLS 299
|
||||||
#define TK_BEFORE 300
|
#define TK_ABORT 300
|
||||||
#define TK_BEGIN 301
|
#define TK_AFTER 301
|
||||||
#define TK_BITAND 302
|
#define TK_ATTACH 302
|
||||||
#define TK_BITNOT 303
|
#define TK_BEFORE 303
|
||||||
#define TK_BITOR 304
|
#define TK_BEGIN 304
|
||||||
#define TK_BLOCKS 305
|
#define TK_BITAND 305
|
||||||
#define TK_CHANGE 306
|
#define TK_BITNOT 306
|
||||||
#define TK_COMMA 307
|
#define TK_BITOR 307
|
||||||
#define TK_CONCAT 308
|
#define TK_BLOCKS 308
|
||||||
#define TK_CONFLICT 309
|
#define TK_CHANGE 309
|
||||||
#define TK_COPY 310
|
#define TK_COMMA 310
|
||||||
#define TK_DEFERRED 311
|
#define TK_CONCAT 311
|
||||||
#define TK_DELIMITERS 312
|
#define TK_CONFLICT 312
|
||||||
#define TK_DETACH 313
|
#define TK_COPY 313
|
||||||
#define TK_DIVIDE 314
|
#define TK_DEFERRED 314
|
||||||
#define TK_DOT 315
|
#define TK_DELIMITERS 315
|
||||||
#define TK_EACH 316
|
#define TK_DETACH 316
|
||||||
#define TK_FAIL 317
|
#define TK_DIVIDE 317
|
||||||
#define TK_FILE 318
|
#define TK_DOT 318
|
||||||
#define TK_FOR 319
|
#define TK_EACH 319
|
||||||
#define TK_GLOB 320
|
#define TK_FAIL 320
|
||||||
#define TK_ID 321
|
#define TK_FILE 321
|
||||||
#define TK_IMMEDIATE 322
|
#define TK_FOR 322
|
||||||
#define TK_IMPORT 323
|
#define TK_GLOB 323
|
||||||
#define TK_INITIALLY 324
|
#define TK_ID 324
|
||||||
#define TK_INSTEAD 325
|
#define TK_IMMEDIATE 325
|
||||||
#define TK_ISNULL 326
|
#define TK_IMPORT 326
|
||||||
#define TK_KEY 327
|
#define TK_INITIALLY 327
|
||||||
#define TK_MODULES 328
|
#define TK_INSTEAD 328
|
||||||
#define TK_NK_BITNOT 329
|
#define TK_ISNULL 329
|
||||||
#define TK_NK_SEMI 330
|
#define TK_KEY 330
|
||||||
#define TK_NOTNULL 331
|
#define TK_MODULES 331
|
||||||
#define TK_OF 332
|
#define TK_NK_BITNOT 332
|
||||||
#define TK_PLUS 333
|
#define TK_NK_SEMI 333
|
||||||
#define TK_PRIVILEGE 334
|
#define TK_NOTNULL 334
|
||||||
#define TK_RAISE 335
|
#define TK_OF 335
|
||||||
#define TK_RESTRICT 336
|
#define TK_PLUS 336
|
||||||
#define TK_ROW 337
|
#define TK_PRIVILEGE 337
|
||||||
#define TK_SEMI 338
|
#define TK_RAISE 338
|
||||||
#define TK_STAR 339
|
#define TK_RESTRICT 339
|
||||||
#define TK_STATEMENT 340
|
#define TK_ROW 340
|
||||||
#define TK_STRICT 341
|
#define TK_SEMI 341
|
||||||
#define TK_STRING 342
|
#define TK_STAR 342
|
||||||
#define TK_TIMES 343
|
#define TK_STATEMENT 343
|
||||||
#define TK_VALUES 344
|
#define TK_STRICT 344
|
||||||
#define TK_VARIABLE 345
|
#define TK_STRING 345
|
||||||
#define TK_WAL 346
|
#define TK_TIMES 346
|
||||||
|
#define TK_VALUES 347
|
||||||
|
#define TK_VARIABLE 348
|
||||||
|
#define TK_WAL 349
|
||||||
|
|
||||||
#define TK_NK_SPACE 600
|
#define TK_NK_SPACE 600
|
||||||
#define TK_NK_COMMENT 601
|
#define TK_NK_COMMENT 601
|
||||||
|
|
|
@ -114,6 +114,7 @@ typedef struct SInputColumnInfoData {
|
||||||
int32_t totalRows; // total rows in current columnar data
|
int32_t totalRows; // total rows in current columnar data
|
||||||
int32_t startRowIndex; // handle started row index
|
int32_t startRowIndex; // handle started row index
|
||||||
int64_t numOfRows; // the number of rows needs to be handled
|
int64_t numOfRows; // the number of rows needs to be handled
|
||||||
|
bool blankFill; // fill blank data to block for empty table
|
||||||
int32_t numOfInputCols; // PTS is not included
|
int32_t numOfInputCols; // PTS is not included
|
||||||
bool colDataSMAIsSet; // if agg is set or not
|
bool colDataSMAIsSet; // if agg is set or not
|
||||||
SColumnInfoData *pPTS; // primary timestamp column
|
SColumnInfoData *pPTS; // primary timestamp column
|
||||||
|
|
|
@ -420,6 +420,12 @@ typedef struct SDropCGroupStmt {
|
||||||
bool ignoreNotExists;
|
bool ignoreNotExists;
|
||||||
} SDropCGroupStmt;
|
} SDropCGroupStmt;
|
||||||
|
|
||||||
|
typedef struct SAlterClusterStmt {
|
||||||
|
ENodeType type;
|
||||||
|
char config[TSDB_DNODE_CONFIG_LEN];
|
||||||
|
char value[TSDB_CLUSTER_VALUE_LEN];
|
||||||
|
} SAlterClusterStmt;
|
||||||
|
|
||||||
typedef struct SAlterLocalStmt {
|
typedef struct SAlterLocalStmt {
|
||||||
ENodeType type;
|
ENodeType type;
|
||||||
char config[TSDB_DNODE_CONFIG_LEN];
|
char config[TSDB_DNODE_CONFIG_LEN];
|
||||||
|
|
|
@ -222,6 +222,10 @@ void syslog(int unused, const char *format, ...);
|
||||||
do { \
|
do { \
|
||||||
prctl(PR_SET_NAME, (name)); \
|
prctl(PR_SET_NAME, (name)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#define getThreadName(name) \
|
||||||
|
do { \
|
||||||
|
prctl(PR_GET_NAME, (name)); \
|
||||||
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
// Windows
|
// Windows
|
||||||
|
|
|
@ -414,6 +414,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_MNODE_ONLY_TWO_MNODE TAOS_DEF_ERROR_CODE(0, 0x0414) // internal
|
#define TSDB_CODE_MNODE_ONLY_TWO_MNODE TAOS_DEF_ERROR_CODE(0, 0x0414) // internal
|
||||||
#define TSDB_CODE_MNODE_NO_NEED_RESTORE TAOS_DEF_ERROR_CODE(0, 0x0415) // internal
|
#define TSDB_CODE_MNODE_NO_NEED_RESTORE TAOS_DEF_ERROR_CODE(0, 0x0415) // internal
|
||||||
#define TSDB_CODE_DNODE_ONLY_USE_WHEN_OFFLINE TAOS_DEF_ERROR_CODE(0, 0x0416)
|
#define TSDB_CODE_DNODE_ONLY_USE_WHEN_OFFLINE TAOS_DEF_ERROR_CODE(0, 0x0416)
|
||||||
|
#define TSDB_CODE_DNODE_NO_MACHINE_CODE TAOS_DEF_ERROR_CODE(0, 0x0417)
|
||||||
|
|
||||||
// mnode-sma
|
// mnode-sma
|
||||||
#define TSDB_CODE_MND_SMA_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0480)
|
#define TSDB_CODE_MND_SMA_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0480)
|
||||||
|
@ -531,7 +532,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_QRY_TASK_DROPPED TAOS_DEF_ERROR_CODE(0, 0x0725)
|
#define TSDB_CODE_QRY_TASK_DROPPED TAOS_DEF_ERROR_CODE(0, 0x0725)
|
||||||
#define TSDB_CODE_QRY_TASK_CANCELLING TAOS_DEF_ERROR_CODE(0, 0x0726)
|
#define TSDB_CODE_QRY_TASK_CANCELLING TAOS_DEF_ERROR_CODE(0, 0x0726)
|
||||||
#define TSDB_CODE_QRY_TASK_DROPPING TAOS_DEF_ERROR_CODE(0, 0x0727)
|
#define TSDB_CODE_QRY_TASK_DROPPING TAOS_DEF_ERROR_CODE(0, 0x0727)
|
||||||
#define TSDB_CODE_QRY_DUPLICATTED_OPERATION TAOS_DEF_ERROR_CODE(0, 0x0728)
|
#define TSDB_CODE_QRY_DUPLICATED_OPERATION TAOS_DEF_ERROR_CODE(0, 0x0728)
|
||||||
#define TSDB_CODE_QRY_TASK_MSG_ERROR TAOS_DEF_ERROR_CODE(0, 0x0729)
|
#define TSDB_CODE_QRY_TASK_MSG_ERROR TAOS_DEF_ERROR_CODE(0, 0x0729)
|
||||||
#define TSDB_CODE_QRY_JOB_FREED TAOS_DEF_ERROR_CODE(0, 0x072A)
|
#define TSDB_CODE_QRY_JOB_FREED TAOS_DEF_ERROR_CODE(0, 0x072A)
|
||||||
#define TSDB_CODE_QRY_TASK_STATUS_ERROR TAOS_DEF_ERROR_CODE(0, 0x072B)
|
#define TSDB_CODE_QRY_TASK_STATUS_ERROR TAOS_DEF_ERROR_CODE(0, 0x072B)
|
||||||
|
@ -554,7 +555,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_GRANT_STREAM_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0807)
|
#define TSDB_CODE_GRANT_STREAM_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0807)
|
||||||
#define TSDB_CODE_GRANT_SPEED_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0808)
|
#define TSDB_CODE_GRANT_SPEED_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0808)
|
||||||
#define TSDB_CODE_GRANT_STORAGE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0809)
|
#define TSDB_CODE_GRANT_STORAGE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0809)
|
||||||
#define TSDB_CODE_GRANT_QUERYTIME_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080A)
|
#define TSDB_CODE_GRANT_SUBSCRIPTION_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080A)
|
||||||
#define TSDB_CODE_GRANT_CPU_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080B)
|
#define TSDB_CODE_GRANT_CPU_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080B)
|
||||||
#define TSDB_CODE_GRANT_STABLE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080C)
|
#define TSDB_CODE_GRANT_STABLE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080C)
|
||||||
#define TSDB_CODE_GRANT_TABLE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080D)
|
#define TSDB_CODE_GRANT_TABLE_LIMITED TAOS_DEF_ERROR_CODE(0, 0x080D)
|
||||||
|
@ -563,8 +564,19 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_GRANT_PAR_DEC_IVLD_KEY TAOS_DEF_ERROR_CODE(0, 0x0810)
|
#define TSDB_CODE_GRANT_PAR_DEC_IVLD_KEY TAOS_DEF_ERROR_CODE(0, 0x0810)
|
||||||
#define TSDB_CODE_GRANT_PAR_DEC_IVLD_KLEN TAOS_DEF_ERROR_CODE(0, 0x0811)
|
#define TSDB_CODE_GRANT_PAR_DEC_IVLD_KLEN TAOS_DEF_ERROR_CODE(0, 0x0811)
|
||||||
#define TSDB_CODE_GRANT_GEN_IVLD_KEY TAOS_DEF_ERROR_CODE(0, 0x0812)
|
#define TSDB_CODE_GRANT_GEN_IVLD_KEY TAOS_DEF_ERROR_CODE(0, 0x0812)
|
||||||
#define TSDB_CODE_GRANT_GEN_APP_LIMIT TAOS_DEF_ERROR_CODE(0, 0x0813)
|
#define TSDB_CODE_GRANT_GEN_ACTIVE_LEN TAOS_DEF_ERROR_CODE(0, 0x0813)
|
||||||
#define TSDB_CODE_GRANT_GEN_ENC_IVLD_KLEN TAOS_DEF_ERROR_CODE(0, 0x0814)
|
#define TSDB_CODE_GRANT_GEN_ENC_IVLD_KLEN TAOS_DEF_ERROR_CODE(0, 0x0814)
|
||||||
|
#define TSDB_CODE_GRANT_PAR_IVLD_DIST TAOS_DEF_ERROR_CODE(0, 0x0815)
|
||||||
|
#define TSDB_CODE_GRANT_UNLICENSED_CLUSTER TAOS_DEF_ERROR_CODE(0, 0x0816)
|
||||||
|
#define TSDB_CODE_GRANT_LACK_OF_BASIC TAOS_DEF_ERROR_CODE(0, 0x0817)
|
||||||
|
#define TSDB_CODE_GRANT_OBJ_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0818)
|
||||||
|
#define TSDB_CODE_GRANT_LAST_ACTIVE_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0819)
|
||||||
|
#define TSDB_CODE_GRANT_MACHINES_MISMATCH TAOS_DEF_ERROR_CODE(0, 0x0820)
|
||||||
|
#define TSDB_CODE_GRANT_OPT_EXPIRE_TOO_LARGE TAOS_DEF_ERROR_CODE(0, 0x0821)
|
||||||
|
#define TSDB_CODE_GRANT_DUPLICATED_ACTIVE TAOS_DEF_ERROR_CODE(0, 0x0822)
|
||||||
|
#define TSDB_CODE_GRANT_VIEW_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0823)
|
||||||
|
#define TSDB_CODE_GRANT_CSV_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0824)
|
||||||
|
#define TSDB_CODE_GRANT_AUDIT_LIMITED TAOS_DEF_ERROR_CODE(0, 0x0825)
|
||||||
|
|
||||||
// sync
|
// sync
|
||||||
// #define TSDB_CODE_SYN_INVALID_CONFIG TAOS_DEF_ERROR_CODE(0, 0x0900) // 2.x
|
// #define TSDB_CODE_SYN_INVALID_CONFIG TAOS_DEF_ERROR_CODE(0, 0x0900) // 2.x
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TD_UTIL_BASE58_H_
|
||||||
|
#define _TD_UTIL_BASE58_H_
|
||||||
|
|
||||||
|
#include "os.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen);
|
||||||
|
char *base58_encode(const uint8_t *value, int32_t vlen);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*_TD_UTIL_BASE58_H_*/
|
|
@ -264,6 +264,7 @@ typedef enum ELogicConditionType {
|
||||||
#define TSDB_JOB_STATUS_LEN 32
|
#define TSDB_JOB_STATUS_LEN 32
|
||||||
|
|
||||||
#define TSDB_CLUSTER_ID_LEN 40
|
#define TSDB_CLUSTER_ID_LEN 40
|
||||||
|
#define TSDB_MACHINE_ID_LEN 24
|
||||||
#define TSDB_FQDN_LEN 128
|
#define TSDB_FQDN_LEN 128
|
||||||
#define TSDB_EP_LEN (TSDB_FQDN_LEN + 6)
|
#define TSDB_EP_LEN (TSDB_FQDN_LEN + 6)
|
||||||
#define TSDB_IPv4ADDR_LEN 16
|
#define TSDB_IPv4ADDR_LEN 16
|
||||||
|
@ -285,6 +286,8 @@ typedef enum ELogicConditionType {
|
||||||
#define TSDB_DNODE_CONFIG_LEN 128
|
#define TSDB_DNODE_CONFIG_LEN 128
|
||||||
#define TSDB_DNODE_VALUE_LEN 256
|
#define TSDB_DNODE_VALUE_LEN 256
|
||||||
|
|
||||||
|
#define TSDB_CLUSTER_VALUE_LEN 1000
|
||||||
|
|
||||||
#define TSDB_ACTIVE_KEY_LEN 109
|
#define TSDB_ACTIVE_KEY_LEN 109
|
||||||
#define TSDB_CONN_ACTIVE_KEY_LEN 255
|
#define TSDB_CONN_ACTIVE_KEY_LEN 255
|
||||||
|
|
||||||
|
|
|
@ -761,6 +761,7 @@ int32_t tmqHbCb(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
taosWUnLockLatch(&tmq->lock);
|
taosWUnLockLatch(&tmq->lock);
|
||||||
|
taosReleaseRef(tmqMgmt.rsetId, refId);
|
||||||
}
|
}
|
||||||
tDeatroySMqHbRsp(&rsp);
|
tDeatroySMqHbRsp(&rsp);
|
||||||
taosMemoryFree(pMsg->pData);
|
taosMemoryFree(pMsg->pData);
|
||||||
|
|
|
@ -37,8 +37,7 @@ static const SSysDbTableSchema dnodesSchema[] = {
|
||||||
{.name = "reboot_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true},
|
{.name = "reboot_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = true},
|
||||||
{.name = "note", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
{.name = "note", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{.name = "active_code", .bytes = TSDB_ACTIVE_KEY_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
{.name = "machine_id", .bytes = TSDB_MACHINE_ID_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
{.name = "c_active_code", .bytes = TSDB_CONN_ACTIVE_KEY_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -349,6 +348,24 @@ static const SSysDbTableSchema userCompactsDetailSchema[] = {
|
||||||
{.name = "start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
{.name = "start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const SSysDbTableSchema useGrantsFullSchema[] = {
|
||||||
|
{.name = "grant_name", .bytes = 32 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
{.name = "display_name", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
{.name = "expire", .bytes = 32 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
{.name = "limits", .bytes = 512 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const SSysDbTableSchema useGrantsLogsSchema[] = {
|
||||||
|
{.name = "state", .bytes = 1536 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
{.name = "active", .bytes = 512 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
{.name = "machine", .bytes = 9088 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const SSysDbTableSchema useMachinesSchema[] = {
|
||||||
|
{.name = "id", .bytes = TSDB_CLUSTER_ID_LEN + 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
{.name = "machine", .bytes = 6016 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
};
|
||||||
|
|
||||||
static const SSysTableMeta infosMeta[] = {
|
static const SSysTableMeta infosMeta[] = {
|
||||||
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
||||||
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
||||||
|
@ -378,6 +395,9 @@ static const SSysTableMeta infosMeta[] = {
|
||||||
{TSDB_INS_TABLE_VIEWS, userViewsSchema, tListLen(userViewsSchema), false},
|
{TSDB_INS_TABLE_VIEWS, userViewsSchema, tListLen(userViewsSchema), false},
|
||||||
{TSDB_INS_TABLE_COMPACTS, userCompactsSchema, tListLen(userCompactsSchema), false},
|
{TSDB_INS_TABLE_COMPACTS, userCompactsSchema, tListLen(userCompactsSchema), false},
|
||||||
{TSDB_INS_TABLE_COMPACT_DETAILS, userCompactsDetailSchema, tListLen(userCompactsDetailSchema), false},
|
{TSDB_INS_TABLE_COMPACT_DETAILS, userCompactsDetailSchema, tListLen(userCompactsDetailSchema), false},
|
||||||
|
{TSDB_INS_TABLE_GRANTS_FULL, useGrantsFullSchema, tListLen(useGrantsFullSchema), false},
|
||||||
|
{TSDB_INS_TABLE_GRANTS_LOGS, useGrantsLogsSchema, tListLen(useGrantsLogsSchema), false},
|
||||||
|
{TSDB_INS_TABLE_MACHINES, useMachinesSchema, tListLen(useMachinesSchema), false},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SSysDbTableSchema connectionsSchema[] = {
|
static const SSysDbTableSchema connectionsSchema[] = {
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include "cus_name.h"
|
#include "cus_name.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GRANT_CFG_DECLARE;
|
// GRANT_CFG_DECLARE;
|
||||||
|
|
||||||
SConfig *tsCfg = NULL;
|
SConfig *tsCfg = NULL;
|
||||||
|
|
||||||
|
@ -804,7 +804,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
|
|
||||||
if (cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1;
|
if (cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1;
|
||||||
|
|
||||||
GRANT_CFG_ADD;
|
// GRANT_CFG_ADD;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1229,7 +1229,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
|
|
||||||
tsExperimental = cfgGetItem(pCfg, "experimental")->bval;
|
tsExperimental = cfgGetItem(pCfg, "experimental")->bval;
|
||||||
|
|
||||||
GRANT_CFG_GET;
|
// GRANT_CFG_GET;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1163,9 +1163,11 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
||||||
if (tEncodeI64(&encoder, pReq->updateTime) < 0) return -1;
|
if (tEncodeI64(&encoder, pReq->updateTime) < 0) return -1;
|
||||||
if (tEncodeFloat(&encoder, pReq->numOfCores) < 0) return -1;
|
if (tEncodeFloat(&encoder, pReq->numOfCores) < 0) return -1;
|
||||||
if (tEncodeI32(&encoder, pReq->numOfSupportVnodes) < 0) return -1;
|
if (tEncodeI32(&encoder, pReq->numOfSupportVnodes) < 0) return -1;
|
||||||
|
if (tEncodeI32v(&encoder, pReq->numOfDiskCfg) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, pReq->memTotal) < 0) return -1;
|
if (tEncodeI64(&encoder, pReq->memTotal) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, pReq->memAvail) < 0) return -1;
|
if (tEncodeI64(&encoder, pReq->memAvail) < 0) return -1;
|
||||||
if (tEncodeCStr(&encoder, pReq->dnodeEp) < 0) return -1;
|
if (tEncodeCStr(&encoder, pReq->dnodeEp) < 0) return -1;
|
||||||
|
if (tEncodeCStr(&encoder, pReq->machineId) < 0) return -1;
|
||||||
|
|
||||||
// cluster cfg
|
// cluster cfg
|
||||||
if (tEncodeI32(&encoder, pReq->clusterCfg.statusInterval) < 0) return -1;
|
if (tEncodeI32(&encoder, pReq->clusterCfg.statusInterval) < 0) return -1;
|
||||||
|
@ -1253,9 +1255,11 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
||||||
if (tDecodeI64(&decoder, &pReq->updateTime) < 0) return -1;
|
if (tDecodeI64(&decoder, &pReq->updateTime) < 0) return -1;
|
||||||
if (tDecodeFloat(&decoder, &pReq->numOfCores) < 0) return -1;
|
if (tDecodeFloat(&decoder, &pReq->numOfCores) < 0) return -1;
|
||||||
if (tDecodeI32(&decoder, &pReq->numOfSupportVnodes) < 0) return -1;
|
if (tDecodeI32(&decoder, &pReq->numOfSupportVnodes) < 0) return -1;
|
||||||
|
if (tDecodeI32v(&decoder, &pReq->numOfDiskCfg) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &pReq->memTotal) < 0) return -1;
|
if (tDecodeI64(&decoder, &pReq->memTotal) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &pReq->memAvail) < 0) return -1;
|
if (tDecodeI64(&decoder, &pReq->memAvail) < 0) return -1;
|
||||||
if (tDecodeCStrTo(&decoder, pReq->dnodeEp) < 0) return -1;
|
if (tDecodeCStrTo(&decoder, pReq->dnodeEp) < 0) return -1;
|
||||||
|
if (tDecodeCStrTo(&decoder, pReq->machineId) < 0) return -1;
|
||||||
|
|
||||||
// cluster cfg
|
// cluster cfg
|
||||||
if (tDecodeI32(&decoder, &pReq->clusterCfg.statusInterval) < 0) return -1;
|
if (tDecodeI32(&decoder, &pReq->clusterCfg.statusInterval) < 0) return -1;
|
||||||
|
@ -2266,6 +2270,37 @@ int32_t tDeserializeSGetUserWhiteListRsp(void *buf, int32_t bufLen, SGetUserWhit
|
||||||
|
|
||||||
void tFreeSGetUserWhiteListRsp(SGetUserWhiteListRsp *pRsp) { taosMemoryFree(pRsp->pWhiteLists); }
|
void tFreeSGetUserWhiteListRsp(SGetUserWhiteListRsp *pRsp) { taosMemoryFree(pRsp->pWhiteLists); }
|
||||||
|
|
||||||
|
int32_t tSerializeSMCfgClusterReq(void *buf, int32_t bufLen, SMCfgClusterReq *pReq) {
|
||||||
|
SEncoder encoder = {0};
|
||||||
|
tEncoderInit(&encoder, buf, bufLen);
|
||||||
|
|
||||||
|
if (tStartEncode(&encoder) < 0) return -1;
|
||||||
|
if (tEncodeCStr(&encoder, pReq->config) < 0) return -1;
|
||||||
|
if (tEncodeCStr(&encoder, pReq->value) < 0) return -1;
|
||||||
|
ENCODESQL();
|
||||||
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
|
int32_t tlen = encoder.pos;
|
||||||
|
tEncoderClear(&encoder);
|
||||||
|
return tlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t tDeserializeSMCfgClusterReq(void *buf, int32_t bufLen, SMCfgClusterReq *pReq) {
|
||||||
|
SDecoder decoder = {0};
|
||||||
|
tDecoderInit(&decoder, buf, bufLen);
|
||||||
|
|
||||||
|
if (tStartDecode(&decoder) < 0) return -1;
|
||||||
|
if (tDecodeCStrTo(&decoder, pReq->config) < 0) return -1;
|
||||||
|
if (tDecodeCStrTo(&decoder, pReq->value) < 0) return -1;
|
||||||
|
DECODESQL();
|
||||||
|
tEndDecode(&decoder);
|
||||||
|
|
||||||
|
tDecoderClear(&decoder);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tFreeSMCfgClusterReq(SMCfgClusterReq *pReq) { FREESQL(); }
|
||||||
|
|
||||||
int32_t tSerializeSCreateDropMQSNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
int32_t tSerializeSCreateDropMQSNodeReq(void *buf, int32_t bufLen, SMCreateQnodeReq *pReq) {
|
||||||
SEncoder encoder = {0};
|
SEncoder encoder = {0};
|
||||||
tEncoderInit(&encoder, buf, bufLen);
|
tEncoderInit(&encoder, buf, bufLen);
|
||||||
|
|
|
@ -114,9 +114,15 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) {
|
||||||
req.updateTime = pMgmt->pData->updateTime;
|
req.updateTime = pMgmt->pData->updateTime;
|
||||||
req.numOfCores = tsNumOfCores;
|
req.numOfCores = tsNumOfCores;
|
||||||
req.numOfSupportVnodes = tsNumOfSupportVnodes;
|
req.numOfSupportVnodes = tsNumOfSupportVnodes;
|
||||||
|
req.numOfDiskCfg = tsDiskCfgNum;
|
||||||
req.memTotal = tsTotalMemoryKB * 1024;
|
req.memTotal = tsTotalMemoryKB * 1024;
|
||||||
req.memAvail = req.memTotal - tsRpcQueueMemoryAllowed - 16 * 1024 * 1024;
|
req.memAvail = req.memTotal - tsRpcQueueMemoryAllowed - 16 * 1024 * 1024;
|
||||||
tstrncpy(req.dnodeEp, tsLocalEp, TSDB_EP_LEN);
|
tstrncpy(req.dnodeEp, tsLocalEp, TSDB_EP_LEN);
|
||||||
|
char *machine = tGetMachineId();
|
||||||
|
if (machine) {
|
||||||
|
tstrncpy(req.machineId, machine, TSDB_MACHINE_ID_LEN + 1);
|
||||||
|
taosMemoryFreeClear(machine);
|
||||||
|
}
|
||||||
|
|
||||||
req.clusterCfg.statusInterval = tsStatusInterval;
|
req.clusterCfg.statusInterval = tsStatusInterval;
|
||||||
req.clusterCfg.checkTime = 0;
|
req.clusterCfg.checkTime = 0;
|
||||||
|
@ -319,7 +325,7 @@ int32_t dmAppendVariablesToBlock(SSDataBlock *pBlock, int32_t dnodeId) {
|
||||||
|
|
||||||
for (int32_t i = 0, c = 0; i < numOfCfg; ++i, c = 0) {
|
for (int32_t i = 0, c = 0; i < numOfCfg; ++i, c = 0) {
|
||||||
SConfigItem *pItem = taosArrayGet(tsCfg->array, i);
|
SConfigItem *pItem = taosArrayGet(tsCfg->array, i);
|
||||||
GRANT_CFG_SKIP;
|
// GRANT_CFG_SKIP;
|
||||||
|
|
||||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
|
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
|
||||||
colDataSetVal(pColInfo, i, (const char *)&dnodeId, false);
|
colDataSetVal(pColInfo, i, (const char *)&dnodeId, false);
|
||||||
|
|
|
@ -163,7 +163,6 @@ SArray *mmGetMsgHandles() {
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_PAUSE_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_PAUSE_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_RESUME_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_RESUME_STREAM, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_GRANT_RSP, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
|
||||||
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_RETRIEVE_IP_WHITE, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_RETRIEVE_IP_WHITE, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_GET_USER_WHITELIST, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_GET_USER_WHITELIST, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
|
@ -193,6 +192,7 @@ SArray *mmGetMsgHandles() {
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_VIEW, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_DROP_VIEW, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_VIEW_META, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_VIEW_META, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_MND_KILL_COMPACT, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_MND_KILL_COMPACT, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
|
if (dmSetMgmtHandle(pArray, TDMT_MND_CONFIG_CLUSTER, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_VND_QUERY_COMPACT_PROGRESS_RSP, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_VND_QUERY_COMPACT_PROGRESS_RSP, mmPutMsgToReadQueue, 0) == NULL) goto _OVER;
|
||||||
|
|
||||||
if (dmSetMgmtHandle(pArray, TDMT_SCH_QUERY, mmPutMsgToQueryQueue, 1) == NULL) goto _OVER;
|
if (dmSetMgmtHandle(pArray, TDMT_SCH_QUERY, mmPutMsgToQueryQueue, 1) == NULL) goto _OVER;
|
||||||
|
|
|
@ -72,7 +72,6 @@ typedef struct SUdfdData {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
} SUdfdData;
|
} SUdfdData;
|
||||||
|
|
||||||
#ifndef TD_MODULE_OPTIMIZE
|
|
||||||
typedef struct SDnode {
|
typedef struct SDnode {
|
||||||
int8_t once;
|
int8_t once;
|
||||||
bool stop;
|
bool stop;
|
||||||
|
@ -86,21 +85,6 @@ typedef struct SDnode {
|
||||||
SMgmtWrapper wrappers[NODE_END];
|
SMgmtWrapper wrappers[NODE_END];
|
||||||
SDnodeTrans trans;
|
SDnodeTrans trans;
|
||||||
} SDnode;
|
} SDnode;
|
||||||
#else
|
|
||||||
typedef struct SDnode {
|
|
||||||
int8_t once;
|
|
||||||
bool stop;
|
|
||||||
EDndRunStatus status;
|
|
||||||
SStartupInfo startup;
|
|
||||||
SDnodeTrans trans;
|
|
||||||
SUdfdData udfdData;
|
|
||||||
TdThreadMutex mutex;
|
|
||||||
TdFilePtr lockfile;
|
|
||||||
SDnodeData data;
|
|
||||||
STfs *pTfs;
|
|
||||||
SMgmtWrapper wrappers[NODE_END];
|
|
||||||
} SDnode;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// dmEnv.c
|
// dmEnv.c
|
||||||
SDnode *dmInstance();
|
SDnode *dmInstance();
|
||||||
|
@ -115,12 +99,7 @@ int32_t dmMarkWrapper(SMgmtWrapper *pWrapper);
|
||||||
void dmReleaseWrapper(SMgmtWrapper *pWrapper);
|
void dmReleaseWrapper(SMgmtWrapper *pWrapper);
|
||||||
int32_t dmInitVars(SDnode *pDnode);
|
int32_t dmInitVars(SDnode *pDnode);
|
||||||
void dmClearVars(SDnode *pDnode);
|
void dmClearVars(SDnode *pDnode);
|
||||||
#ifdef TD_MODULE_OPTIMIZE
|
int32_t dmInitModule(SDnode *pDnode);
|
||||||
int32_t dmInitModule(SDnode *pDnode, SMgmtWrapper *wrappers);
|
|
||||||
bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper);
|
|
||||||
#else
|
|
||||||
int32_t dmInitModule(SDnode *pDnode);
|
|
||||||
#endif
|
|
||||||
SMgmtInputOpt dmBuildMgmtInputOpt(SMgmtWrapper *pWrapper);
|
SMgmtInputOpt dmBuildMgmtInputOpt(SMgmtWrapper *pWrapper);
|
||||||
void dmSetStatus(SDnode *pDnode, EDndRunStatus stype);
|
void dmSetStatus(SDnode *pDnode, EDndRunStatus stype);
|
||||||
void dmProcessServerStartupStatus(SDnode *pDnode, SRpcMsg *pMsg);
|
void dmProcessServerStartupStatus(SDnode *pDnode, SRpcMsg *pMsg);
|
||||||
|
@ -143,11 +122,7 @@ void dmCleanupClient(SDnode *pDnode);
|
||||||
void dmCleanupStatusClient(SDnode *pDnode);
|
void dmCleanupStatusClient(SDnode *pDnode);
|
||||||
void dmCleanupSyncClient(SDnode *pDnode);
|
void dmCleanupSyncClient(SDnode *pDnode);
|
||||||
SMsgCb dmGetMsgcb(SDnode *pDnode);
|
SMsgCb dmGetMsgcb(SDnode *pDnode);
|
||||||
#ifdef TD_MODULE_OPTIMIZE
|
|
||||||
int32_t dmInitMsgHandle(SDnode *pDnode, SMgmtWrapper *wrappers);
|
|
||||||
#else
|
|
||||||
int32_t dmInitMsgHandle(SDnode *pDnode);
|
int32_t dmInitMsgHandle(SDnode *pDnode);
|
||||||
#endif
|
|
||||||
int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg);
|
int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg);
|
||||||
|
|
||||||
// dmMonitor.c
|
// dmMonitor.c
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TD_MODULE_OPTIMIZE
|
|
||||||
static bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper) {
|
static bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper) {
|
||||||
SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper);
|
SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper);
|
||||||
|
|
||||||
|
@ -38,7 +37,6 @@ static bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper) {
|
||||||
|
|
||||||
return required;
|
return required;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t dmInitDnode(SDnode *pDnode) {
|
int32_t dmInitDnode(SDnode *pDnode) {
|
||||||
dDebug("start to create dnode");
|
dDebug("start to create dnode");
|
||||||
|
@ -81,15 +79,9 @@ int32_t dmInitDnode(SDnode *pDnode) {
|
||||||
if (pDnode->lockfile == NULL) {
|
if (pDnode->lockfile == NULL) {
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
#ifdef TD_MODULE_OPTIMIZE
|
|
||||||
if (dmInitModule(pDnode, pDnode->wrappers) != 0) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (dmInitModule(pDnode) != 0) {
|
if (dmInitModule(pDnode) != 0) {
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
indexInit(tsNumOfCommitThreads);
|
indexInit(tsNumOfCommitThreads);
|
||||||
streamMetaInit();
|
streamMetaInit();
|
||||||
|
|
|
@ -251,33 +251,6 @@ _OVER:
|
||||||
dmReleaseWrapper(pWrapper);
|
dmReleaseWrapper(pWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TD_MODULE_OPTIMIZE
|
|
||||||
int32_t dmInitMsgHandle(SDnode *pDnode, SMgmtWrapper *wrappers) {
|
|
||||||
SDnodeTrans *pTrans = &pDnode->trans;
|
|
||||||
|
|
||||||
for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
|
|
||||||
SMgmtWrapper *pWrapper = wrappers + ntype;
|
|
||||||
SArray *pArray = (*pWrapper->func.getHandlesFp)();
|
|
||||||
if (pArray == NULL) return -1;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < taosArrayGetSize(pArray); ++i) {
|
|
||||||
SMgmtHandle *pMgmt = taosArrayGet(pArray, i);
|
|
||||||
SDnodeHandle *pHandle = &pTrans->msgHandles[TMSG_INDEX(pMgmt->msgType)];
|
|
||||||
if (pMgmt->needCheckVgId) {
|
|
||||||
pHandle->needCheckVgId = pMgmt->needCheckVgId;
|
|
||||||
}
|
|
||||||
if (!pMgmt->needCheckVgId) {
|
|
||||||
pHandle->defaultNtype = ntype;
|
|
||||||
}
|
|
||||||
pWrapper->msgFps[TMSG_INDEX(pMgmt->msgType)] = pMgmt->msgFp;
|
|
||||||
}
|
|
||||||
|
|
||||||
taosArrayDestroy(pArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
int32_t dmInitMsgHandle(SDnode *pDnode) {
|
int32_t dmInitMsgHandle(SDnode *pDnode) {
|
||||||
SDnodeTrans *pTrans = &pDnode->trans;
|
SDnodeTrans *pTrans = &pDnode->trans;
|
||||||
|
|
||||||
|
@ -303,7 +276,6 @@ int32_t dmInitMsgHandle(SDnode *pDnode) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
|
static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
|
||||||
SDnode *pDnode = dmInstance();
|
SDnode *pDnode = dmInstance();
|
||||||
|
|
|
@ -76,6 +76,7 @@ typedef enum {
|
||||||
MND_OPER_DROP_TOPIC,
|
MND_OPER_DROP_TOPIC,
|
||||||
MND_OPER_CREATE_VIEW,
|
MND_OPER_CREATE_VIEW,
|
||||||
MND_OPER_DROP_VIEW,
|
MND_OPER_DROP_VIEW,
|
||||||
|
MND_OPER_CONFIG_CLUSTER,
|
||||||
} EOperType;
|
} EOperType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -204,6 +205,7 @@ typedef struct {
|
||||||
int32_t numOfVnodes;
|
int32_t numOfVnodes;
|
||||||
int32_t numOfOtherNodes;
|
int32_t numOfOtherNodes;
|
||||||
int32_t numOfSupportVnodes;
|
int32_t numOfSupportVnodes;
|
||||||
|
int32_t numOfDiskCfg;
|
||||||
float numOfCores;
|
float numOfCores;
|
||||||
int64_t memTotal;
|
int64_t memTotal;
|
||||||
int64_t memAvail;
|
int64_t memAvail;
|
||||||
|
@ -214,6 +216,7 @@ typedef struct {
|
||||||
char ep[TSDB_EP_LEN];
|
char ep[TSDB_EP_LEN];
|
||||||
char active[TSDB_ACTIVE_KEY_LEN];
|
char active[TSDB_ACTIVE_KEY_LEN];
|
||||||
char connActive[TSDB_CONN_ACTIVE_KEY_LEN];
|
char connActive[TSDB_CONN_ACTIVE_KEY_LEN];
|
||||||
|
char machineId[TSDB_MACHINE_ID_LEN + 1];
|
||||||
} SDnodeObj;
|
} SDnodeObj;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -753,6 +756,77 @@ typedef struct {
|
||||||
SArray* compactDetail;
|
SArray* compactDetail;
|
||||||
} SCompactObj;
|
} SCompactObj;
|
||||||
|
|
||||||
|
// SGrantLogObj
|
||||||
|
typedef enum {
|
||||||
|
GRANT_STATE_INIT = 0,
|
||||||
|
GRANT_STATE_UNGRANTED = 1,
|
||||||
|
GRANT_STATE_GRANTED = 2,
|
||||||
|
GRANT_STATE_EXPIRED = 3,
|
||||||
|
GRANT_STATE_REVOKED = 4,
|
||||||
|
GRANT_STATE_MAX,
|
||||||
|
} EGrantState;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GRANT_STATE_REASON_INIT = 0,
|
||||||
|
GRANT_STATE_REASON_ALTER = 1, // alter activeCode 'revoked' or 'xxx'
|
||||||
|
GRANT_STATE_REASON_MISMATCH = 2, // dnode machine mismatch
|
||||||
|
GRANT_STATE_REASON_EXPIRE = 3, // expire
|
||||||
|
GRANT_STATE_REASON_MAX,
|
||||||
|
} EGrantStateReason;
|
||||||
|
|
||||||
|
#define GRANT_STATE_NUM 30
|
||||||
|
#define GRANT_ACTIVE_NUM 10
|
||||||
|
#define GRANT_ACTIVE_HEAD_LEN 30
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
int64_t u0;
|
||||||
|
struct {
|
||||||
|
int64_t ts : 40;
|
||||||
|
int64_t lastState : 4;
|
||||||
|
int64_t state : 4;
|
||||||
|
int64_t reason : 8;
|
||||||
|
int64_t reserve : 8;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} SGrantState;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
int64_t u0;
|
||||||
|
struct {
|
||||||
|
int64_t ts : 40;
|
||||||
|
int64_t reserve : 24;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
char active[GRANT_ACTIVE_HEAD_LEN + 1];
|
||||||
|
} SGrantActive;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
int64_t u0;
|
||||||
|
struct {
|
||||||
|
int64_t ts : 40;
|
||||||
|
int64_t id : 24;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
char machine[TSDB_MACHINE_ID_LEN + 1];
|
||||||
|
} SGrantMachine;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int32_t id;
|
||||||
|
int8_t nStates;
|
||||||
|
int8_t nActives;
|
||||||
|
int64_t createTime;
|
||||||
|
int64_t updateTime;
|
||||||
|
int64_t upgradeTime;
|
||||||
|
SGrantState states[GRANT_STATE_NUM];
|
||||||
|
SGrantActive actives[GRANT_ACTIVE_NUM];
|
||||||
|
char* active;
|
||||||
|
SArray* pMachines; // SGrantMachine
|
||||||
|
SRWLatch lock;
|
||||||
|
} SGrantLogObj;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TDENGINE_GTANT_H
|
#ifndef _TD_MND_GRANT_H_
|
||||||
#define TDENGINE_GTANT_H
|
#define _TD_MND_GRANT_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
"C" {
|
"C" {
|
||||||
|
@ -29,6 +29,26 @@
|
||||||
void grantAdd(EGrantType grant, uint64_t value);
|
void grantAdd(EGrantType grant, uint64_t value);
|
||||||
void grantRestore(EGrantType grant, uint64_t value);
|
void grantRestore(EGrantType grant, uint64_t value);
|
||||||
|
|
||||||
|
#ifdef TD_ENTERPRISE
|
||||||
|
SSdbRaw *mndGrantActionEncode(SGrantLogObj * pGrant);
|
||||||
|
SSdbRow *mndGrantActionDecode(SSdbRaw * pRaw);
|
||||||
|
int32_t mndGrantActionInsert(SSdb * pSdb, SGrantLogObj * pGrant);
|
||||||
|
int32_t mndGrantActionDelete(SSdb * pSdb, SGrantLogObj * pGrant);
|
||||||
|
int32_t mndGrantActionUpdate(SSdb * pSdb, SGrantLogObj * pOldGrant, SGrantLogObj * pNewGrant);
|
||||||
|
|
||||||
|
#ifdef TD_UNIQ_GRANT
|
||||||
|
int32_t grantAlterActiveCode(SMnode * pMnode, SGrantLogObj * pObj, const char *oldActive, const char *newActive,
|
||||||
|
char **mergeActive);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int32_t mndProcessConfigGrantReq(SMnode * pMnode, SRpcMsg * pReq, SMCfgClusterReq * pCfg);
|
||||||
|
int32_t mndProcessUpdGrantLog(SMnode * pMnode, SRpcMsg * pReq, SArray * pMachines, SGrantState * pState);
|
||||||
|
|
||||||
|
int32_t mndGrantGetLastState(SMnode * pMnode, SGrantState * pState);
|
||||||
|
SGrantLogObj *mndAcquireGrant(SMnode * pMnode, void **ppIter);
|
||||||
|
void mndReleaseGrant(SMnode * pMnode, SGrantLogObj * pGrant, void *pIter);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -14,7 +14,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
|
#include "audit.h"
|
||||||
#include "mndCluster.h"
|
#include "mndCluster.h"
|
||||||
|
#include "mndGrant.h"
|
||||||
|
#include "mndPrivilege.h"
|
||||||
#include "mndShow.h"
|
#include "mndShow.h"
|
||||||
#include "mndTrans.h"
|
#include "mndTrans.h"
|
||||||
|
|
||||||
|
@ -31,6 +34,8 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode);
|
||||||
static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||||
static void mndCancelGetNextCluster(SMnode *pMnode, void *pIter);
|
static void mndCancelGetNextCluster(SMnode *pMnode, void *pIter);
|
||||||
static int32_t mndProcessUptimeTimer(SRpcMsg *pReq);
|
static int32_t mndProcessUptimeTimer(SRpcMsg *pReq);
|
||||||
|
static int32_t mndProcessConfigClusterReq(SRpcMsg *pReq);
|
||||||
|
static int32_t mndProcessConfigClusterRsp(SRpcMsg *pReq);
|
||||||
|
|
||||||
int32_t mndInitCluster(SMnode *pMnode) {
|
int32_t mndInitCluster(SMnode *pMnode) {
|
||||||
SSdbTable table = {
|
SSdbTable table = {
|
||||||
|
@ -45,6 +50,8 @@ int32_t mndInitCluster(SMnode *pMnode) {
|
||||||
};
|
};
|
||||||
|
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_UPTIME_TIMER, mndProcessUptimeTimer);
|
mndSetMsgHandle(pMnode, TDMT_MND_UPTIME_TIMER, mndProcessUptimeTimer);
|
||||||
|
mndSetMsgHandle(pMnode, TDMT_MND_CONFIG_CLUSTER, mndProcessConfigClusterReq);
|
||||||
|
mndSetMsgHandle(pMnode, TDMT_MND_CONFIG_CLUSTER_RSP, mndProcessConfigClusterRsp);
|
||||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndRetrieveClusters);
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndRetrieveClusters);
|
||||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndCancelGetNextCluster);
|
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_CLUSTER, mndCancelGetNextCluster);
|
||||||
|
|
||||||
|
@ -147,6 +154,7 @@ static SSdbRaw *mndClusterActionEncode(SClusterObj *pCluster) {
|
||||||
SDB_SET_BINARY(pRaw, dataPos, pCluster->name, TSDB_CLUSTER_ID_LEN, _OVER)
|
SDB_SET_BINARY(pRaw, dataPos, pCluster->name, TSDB_CLUSTER_ID_LEN, _OVER)
|
||||||
SDB_SET_INT32(pRaw, dataPos, pCluster->upTime, _OVER)
|
SDB_SET_INT32(pRaw, dataPos, pCluster->upTime, _OVER)
|
||||||
SDB_SET_RESERVE(pRaw, dataPos, CLUSTER_RESERVE_SIZE, _OVER)
|
SDB_SET_RESERVE(pRaw, dataPos, CLUSTER_RESERVE_SIZE, _OVER)
|
||||||
|
SDB_SET_DATALEN(pRaw, dataPos, _OVER);
|
||||||
|
|
||||||
terrno = 0;
|
terrno = 0;
|
||||||
|
|
||||||
|
@ -164,7 +172,7 @@ _OVER:
|
||||||
static SSdbRow *mndClusterActionDecode(SSdbRaw *pRaw) {
|
static SSdbRow *mndClusterActionDecode(SSdbRaw *pRaw) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
SClusterObj *pCluster = NULL;
|
SClusterObj *pCluster = NULL;
|
||||||
SSdbRow *pRow = NULL;
|
SSdbRow *pRow = NULL;
|
||||||
|
|
||||||
int8_t sver = 0;
|
int8_t sver = 0;
|
||||||
if (sdbGetRawSoftVer(pRaw, &sver) != 0) goto _OVER;
|
if (sdbGetRawSoftVer(pRaw, &sver) != 0) goto _OVER;
|
||||||
|
@ -359,3 +367,62 @@ static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) {
|
||||||
mndTransDrop(pTrans);
|
mndTransDrop(pTrans);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t mndProcessConfigClusterReq(SRpcMsg *pReq) {
|
||||||
|
int32_t code = 0;
|
||||||
|
SMnode *pMnode = pReq->info.node;
|
||||||
|
SMCfgClusterReq cfgReq = {0};
|
||||||
|
if (tDeserializeSMCfgClusterReq(pReq->pCont, pReq->contLen, &cfgReq) != 0) {
|
||||||
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mInfo("cluster: start to config, option:%s, value:%s", cfgReq.config, cfgReq.value);
|
||||||
|
if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CONFIG_CLUSTER) != 0) {
|
||||||
|
code = terrno != 0 ? terrno : TSDB_CODE_MND_NO_RIGHTS;
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
SClusterObj clusterObj = {0};
|
||||||
|
void *pIter = NULL;
|
||||||
|
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||||
|
if (!pCluster || pCluster->id <= 0) {
|
||||||
|
code = TSDB_CODE_APP_IS_STARTING;
|
||||||
|
if (pCluster) mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
memcpy(&clusterObj, pCluster, sizeof(SClusterObj));
|
||||||
|
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
|
|
||||||
|
if (strncmp(cfgReq.config, GRANT_ACTIVE_CODE, TSDB_DNODE_CONFIG_LEN) == 0) {
|
||||||
|
#ifdef TD_ENTERPRISE
|
||||||
|
if (0 != (code = mndProcessConfigGrantReq(pMnode, pReq, &cfgReq))) {
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
code = TSDB_CODE_OPS_NOT_SUPPORT;
|
||||||
|
goto _exit;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
code = TSDB_CODE_OPS_NOT_SUPPORT;
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
{ // audit
|
||||||
|
auditRecord(pReq, pMnode->clusterId, "alterCluster", "", "", cfgReq.sql, cfgReq.sqlLen);
|
||||||
|
}
|
||||||
|
_exit:
|
||||||
|
tFreeSMCfgClusterReq(&cfgReq);
|
||||||
|
if (code != 0) {
|
||||||
|
terrno = code;
|
||||||
|
mError("cluster: failed to config:%s %s since %s", cfgReq.config, cfgReq.value, terrstr());
|
||||||
|
} else {
|
||||||
|
mInfo("cluster: success to config:%s %s", cfgReq.config, cfgReq.value);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t mndProcessConfigClusterRsp(SRpcMsg *pRsp) {
|
||||||
|
mInfo("config rsp from cluster");
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -599,7 +599,8 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) {
|
||||||
pDetail->compactId, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished,
|
pDetail->compactId, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished,
|
||||||
pDetail->newNumberFileset, pDetail->newFinished);
|
pDetail->newNumberFileset, pDetail->newFinished);
|
||||||
|
|
||||||
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;
|
needSave = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,12 +101,17 @@ static int32_t validateTopics(STrans *pTrans, const SArray *pTopicList, SMnode *
|
||||||
goto FAILED;
|
goto FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mndCheckTopicPrivilege(pMnode, pUser, MND_OPER_SUBSCRIBE, pTopic) != 0 || grantCheck(TSDB_GRANT_SUBSCRIBE) < 0) {
|
if (mndCheckTopicPrivilege(pMnode, pUser, MND_OPER_SUBSCRIBE, pTopic) != 0) {
|
||||||
code = TSDB_CODE_MND_NO_RIGHTS;
|
code = TSDB_CODE_MND_NO_RIGHTS;
|
||||||
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
terrno = TSDB_CODE_MND_NO_RIGHTS;
|
||||||
goto FAILED;
|
goto FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((terrno = grantCheck(TSDB_GRANT_SUBSCRIPTION)) < 0) {
|
||||||
|
code = terrno;
|
||||||
|
goto FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
if(enableReplay){
|
if(enableReplay){
|
||||||
if(pTopic->subType != TOPIC_SUB_TYPE__COLUMN){
|
if(pTopic->subType != TOPIC_SUB_TYPE__COLUMN){
|
||||||
code = TSDB_CODE_TMQ_REPLAY_NOT_SUPPORT;
|
code = TSDB_CODE_TMQ_REPLAY_NOT_SUPPORT;
|
||||||
|
@ -235,7 +240,7 @@ static int32_t checkPrivilege(SMnode *pMnode, SMqConsumerObj *pConsumer, SMqHbR
|
||||||
}
|
}
|
||||||
STopicPrivilege *data = taosArrayReserve(rsp->topicPrivileges, 1);
|
STopicPrivilege *data = taosArrayReserve(rsp->topicPrivileges, 1);
|
||||||
strcpy(data->topic, topic);
|
strcpy(data->topic, topic);
|
||||||
if (mndCheckTopicPrivilege(pMnode, user, MND_OPER_SUBSCRIBE, pTopic) != 0 || grantCheck(TSDB_GRANT_SUBSCRIBE) < 0) {
|
if (mndCheckTopicPrivilege(pMnode, user, MND_OPER_SUBSCRIBE, pTopic) != 0 || grantCheck(TSDB_GRANT_SUBSCRIPTION) < 0) {
|
||||||
data->noPrivilege = 1;
|
data->noPrivilege = 1;
|
||||||
} else{
|
} else{
|
||||||
data->noPrivilege = 0;
|
data->noPrivilege = 0;
|
||||||
|
@ -544,10 +549,11 @@ static void freeItem(void *param) {
|
||||||
int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
SMnode *pMnode = pMsg->info.node;
|
SMnode *pMnode = pMsg->info.node;
|
||||||
char *msgStr = pMsg->pCont;
|
char *msgStr = pMsg->pCont;
|
||||||
|
int32_t code = -1;
|
||||||
|
|
||||||
if(grantCheck(TSDB_GRANT_SUBSCRIBE) < 0){
|
if ((terrno = grantCheck(TSDB_GRANT_SUBSCRIPTION)) < 0) {
|
||||||
terrno = TSDB_CODE_GRANT_EXPIRED;
|
code = terrno;
|
||||||
return -1;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCMSubscribeReq subscribe = {0};
|
SCMSubscribeReq subscribe = {0};
|
||||||
|
@ -559,7 +565,7 @@ int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
SMqConsumerObj *pConsumerNew = NULL;
|
SMqConsumerObj *pConsumerNew = NULL;
|
||||||
STrans *pTrans = NULL;
|
STrans *pTrans = NULL;
|
||||||
|
|
||||||
int32_t code = -1;
|
|
||||||
SArray *pTopicList = subscribe.topicNames;
|
SArray *pTopicList = subscribe.topicNames;
|
||||||
taosArraySort(pTopicList, taosArrayCompareString);
|
taosArraySort(pTopicList, taosArrayCompareString);
|
||||||
taosArrayRemoveDuplicate(pTopicList, taosArrayCompareString, freeItem);
|
taosArrayRemoveDuplicate(pTopicList, taosArrayCompareString, freeItem);
|
||||||
|
|
|
@ -136,6 +136,16 @@ static int32_t mndCreateDefaultDnode(SMnode *pMnode) {
|
||||||
tstrncpy(dnodeObj.fqdn, tsLocalFqdn, TSDB_FQDN_LEN);
|
tstrncpy(dnodeObj.fqdn, tsLocalFqdn, TSDB_FQDN_LEN);
|
||||||
dnodeObj.fqdn[TSDB_FQDN_LEN - 1] = 0;
|
dnodeObj.fqdn[TSDB_FQDN_LEN - 1] = 0;
|
||||||
snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
char *machineId = tGetMachineId();
|
||||||
|
if (machineId) {
|
||||||
|
memcpy(dnodeObj.machineId, machineId, TSDB_MACHINE_ID_LEN);
|
||||||
|
taosMemoryFreeClear(machineId);
|
||||||
|
} else {
|
||||||
|
#ifdef TD_UNIQ_GRANT
|
||||||
|
terrno = TSDB_CODE_DNODE_NO_MACHINE_CODE;
|
||||||
|
goto _OVER;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, NULL, "create-dnode");
|
pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, NULL, "create-dnode");
|
||||||
if (pTrans == NULL) goto _OVER;
|
if (pTrans == NULL) goto _OVER;
|
||||||
|
@ -402,6 +412,7 @@ void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) {
|
||||||
tstrncpy(dInfo.ep.fqdn, pDnode->fqdn, TSDB_FQDN_LEN);
|
tstrncpy(dInfo.ep.fqdn, pDnode->fqdn, TSDB_FQDN_LEN);
|
||||||
tstrncpy(dInfo.active, pDnode->active, TSDB_ACTIVE_KEY_LEN);
|
tstrncpy(dInfo.active, pDnode->active, TSDB_ACTIVE_KEY_LEN);
|
||||||
tstrncpy(dInfo.connActive, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN);
|
tstrncpy(dInfo.connActive, pDnode->connActive, TSDB_CONN_ACTIVE_KEY_LEN);
|
||||||
|
tstrncpy(dInfo.machineId, pDnode->machineId, TSDB_MACHINE_ID_LEN + 1);
|
||||||
sdbRelease(pSdb, pDnode);
|
sdbRelease(pSdb, pDnode);
|
||||||
if (mndIsMnode(pMnode, pDnode->id)) {
|
if (mndIsMnode(pMnode, pDnode->id)) {
|
||||||
dInfo.isMnode = 1;
|
dInfo.isMnode = 1;
|
||||||
|
@ -657,8 +668,12 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
||||||
pDnode->rebootTime = statusReq.rebootTime;
|
pDnode->rebootTime = statusReq.rebootTime;
|
||||||
pDnode->numOfCores = statusReq.numOfCores;
|
pDnode->numOfCores = statusReq.numOfCores;
|
||||||
pDnode->numOfSupportVnodes = statusReq.numOfSupportVnodes;
|
pDnode->numOfSupportVnodes = statusReq.numOfSupportVnodes;
|
||||||
|
pDnode->numOfDiskCfg = statusReq.numOfDiskCfg;
|
||||||
pDnode->memAvail = statusReq.memAvail;
|
pDnode->memAvail = statusReq.memAvail;
|
||||||
pDnode->memTotal = statusReq.memTotal;
|
pDnode->memTotal = statusReq.memTotal;
|
||||||
|
if (pDnode->machineId[0] == 0 && statusReq.machineId[0] != 0) {
|
||||||
|
tstrncpy(pDnode->machineId, statusReq.machineId, TSDB_MACHINE_ID_LEN + 1);
|
||||||
|
}
|
||||||
|
|
||||||
SStatusRsp statusRsp = {0};
|
SStatusRsp statusRsp = {0};
|
||||||
statusRsp.statusSeq++;
|
statusRsp.statusSeq++;
|
||||||
|
@ -761,109 +776,6 @@ _OVER:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndConfigDnode(SMnode *pMnode, SRpcMsg *pReq, SMCfgDnodeReq *pCfgReq, int8_t action) {
|
|
||||||
SSdbRaw *pRaw = NULL;
|
|
||||||
STrans *pTrans = NULL;
|
|
||||||
SDnodeObj *pDnode = NULL;
|
|
||||||
SArray *failRecord = NULL;
|
|
||||||
bool cfgAll = pCfgReq->dnodeId == -1;
|
|
||||||
int32_t cfgAllErr = 0;
|
|
||||||
int32_t iter = 0;
|
|
||||||
|
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
|
||||||
void *pIter = NULL;
|
|
||||||
while (1) {
|
|
||||||
if (cfgAll) {
|
|
||||||
pIter = sdbFetch(pSdb, SDB_DNODE, pIter, (void **)&pDnode);
|
|
||||||
if (pIter == NULL) break;
|
|
||||||
++iter;
|
|
||||||
} else if (!(pDnode = mndAcquireDnode(pMnode, pCfgReq->dnodeId))) {
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDnodeObj tmpDnode = *pDnode;
|
|
||||||
if (action == DND_ACTIVE_CODE) {
|
|
||||||
if (grantAlterActiveCode(pDnode->id, pDnode->active, pCfgReq->value, tmpDnode.active, 0) != 0) {
|
|
||||||
if (TSDB_CODE_DUP_KEY != terrno) {
|
|
||||||
mError("dnode:%d, config dnode:%d, app:%p config:%s value:%s failed since %s", pDnode->id, pCfgReq->dnodeId,
|
|
||||||
pReq->info.ahandle, pCfgReq->config, pCfgReq->value, terrstr());
|
|
||||||
if (cfgAll) { // alter all dnodes:
|
|
||||||
if (!failRecord) failRecord = taosArrayInit(1, sizeof(int32_t));
|
|
||||||
if (failRecord) taosArrayPush(failRecord, &pDnode->id);
|
|
||||||
if (0 == cfgAllErr) cfgAllErr = terrno; // output 1st terrno.
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
terrno = 0; // no action for dup active code
|
|
||||||
}
|
|
||||||
if (cfgAll) continue;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
} else if (action == DND_CONN_ACTIVE_CODE) {
|
|
||||||
if (grantAlterActiveCode(pDnode->id, pDnode->connActive, pCfgReq->value, tmpDnode.connActive, 1) != 0) {
|
|
||||||
if (TSDB_CODE_DUP_KEY != terrno) {
|
|
||||||
mError("dnode:%d, config dnode:%d, app:%p config:%s value:%s failed since %s", pDnode->id, pCfgReq->dnodeId,
|
|
||||||
pReq->info.ahandle, pCfgReq->config, pCfgReq->value, terrstr());
|
|
||||||
if (cfgAll) {
|
|
||||||
if (!failRecord) failRecord = taosArrayInit(1, sizeof(int32_t));
|
|
||||||
if (failRecord) taosArrayPush(failRecord, &pDnode->id);
|
|
||||||
if (0 == cfgAllErr) cfgAllErr = terrno;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
terrno = 0;
|
|
||||||
}
|
|
||||||
if (cfgAll) continue;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
terrno = TSDB_CODE_INVALID_CFG;
|
|
||||||
goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pTrans) {
|
|
||||||
pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, pReq, "config-dnode");
|
|
||||||
if (!pTrans) goto _OVER;
|
|
||||||
if (mndTrancCheckConflict(pMnode, pTrans) != 0) goto _OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
pRaw = mndDnodeActionEncode(&tmpDnode);
|
|
||||||
if (pRaw == NULL || mndTransAppendCommitlog(pTrans, pRaw) != 0) goto _OVER;
|
|
||||||
(void)sdbSetRawStatus(pRaw, SDB_STATUS_READY);
|
|
||||||
pRaw = NULL;
|
|
||||||
|
|
||||||
mInfo("dnode:%d, config dnode:%d, app:%p config:%s value:%s", pDnode->id, pCfgReq->dnodeId, pReq->info.ahandle,
|
|
||||||
pCfgReq->config, pCfgReq->value);
|
|
||||||
|
|
||||||
if (cfgAll) {
|
|
||||||
sdbRelease(pSdb, pDnode);
|
|
||||||
pDnode = NULL;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pTrans && mndTransPrepare(pMnode, pTrans) != 0) goto _OVER;
|
|
||||||
tsGrantHBInterval = TMIN(TMAX(5, iter / 2), 30);
|
|
||||||
terrno = 0;
|
|
||||||
|
|
||||||
_OVER:
|
|
||||||
if (cfgAll) {
|
|
||||||
sdbRelease(pSdb, pDnode);
|
|
||||||
if (cfgAllErr != 0) terrno = cfgAllErr;
|
|
||||||
int32_t nFail = taosArrayGetSize(failRecord);
|
|
||||||
if (nFail > 0) {
|
|
||||||
mError("config dnode, cfg:%d, app:%p config:%s value:%s. total:%d, fail:%d", pCfgReq->dnodeId, pReq->info.ahandle,
|
|
||||||
pCfgReq->config, pCfgReq->value, iter, nFail);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mndReleaseDnode(pMnode, pDnode);
|
|
||||||
}
|
|
||||||
sdbCancelFetch(pSdb, pIter);
|
|
||||||
mndTransDrop(pTrans);
|
|
||||||
sdbFreeRaw(pRaw);
|
|
||||||
taosArrayDestroy(failRecord);
|
|
||||||
return terrno;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t mndProcessDnodeListReq(SRpcMsg *pReq) {
|
static int32_t mndProcessDnodeListReq(SRpcMsg *pReq) {
|
||||||
SMnode *pMnode = pReq->info.node;
|
SMnode *pMnode = pReq->info.node;
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
|
@ -1013,8 +925,10 @@ static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq) {
|
||||||
}
|
}
|
||||||
|
|
||||||
code = mndCreateDnode(pMnode, pReq, &createReq);
|
code = mndCreateDnode(pMnode, pReq, &createReq);
|
||||||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
if (code == 0) {
|
||||||
tsGrantHBInterval = 5;
|
code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||||
|
tsGrantHBInterval = 5;
|
||||||
|
}
|
||||||
|
|
||||||
char obj[200] = {0};
|
char obj[200] = {0};
|
||||||
sprintf(obj, "%s:%d", createReq.fqdn, createReq.port);
|
sprintf(obj, "%s:%d", createReq.fqdn, createReq.port);
|
||||||
|
@ -1310,34 +1224,6 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) {
|
||||||
|
|
||||||
strcpy(dcfgReq.config, "supportvnodes");
|
strcpy(dcfgReq.config, "supportvnodes");
|
||||||
snprintf(dcfgReq.value, TSDB_DNODE_VALUE_LEN, "%d", flag);
|
snprintf(dcfgReq.value, TSDB_DNODE_VALUE_LEN, "%d", flag);
|
||||||
} else if (strncasecmp(cfgReq.config, "activeCode", 10) == 0 || strncasecmp(cfgReq.config, "cActiveCode", 11) == 0) {
|
|
||||||
int8_t opt = strncasecmp(cfgReq.config, "a", 1) == 0 ? DND_ACTIVE_CODE : DND_CONN_ACTIVE_CODE;
|
|
||||||
int8_t index = opt == DND_ACTIVE_CODE ? 10 : 11;
|
|
||||||
if (' ' != cfgReq.config[index] && 0 != cfgReq.config[index]) {
|
|
||||||
mError("dnode:%d, failed to config activeCode since invalid conf:%s", cfgReq.dnodeId, cfgReq.config);
|
|
||||||
terrno = TSDB_CODE_INVALID_CFG;
|
|
||||||
goto _err_out;
|
|
||||||
}
|
|
||||||
int32_t vlen = strlen(cfgReq.value);
|
|
||||||
if (vlen > 0 && ((opt == DND_ACTIVE_CODE && vlen != (TSDB_ACTIVE_KEY_LEN - 1)) ||
|
|
||||||
(opt == DND_CONN_ACTIVE_CODE &&
|
|
||||||
(vlen > (TSDB_CONN_ACTIVE_KEY_LEN - 1) || vlen < (TSDB_ACTIVE_KEY_LEN - 1))))) {
|
|
||||||
mError("dnode:%d, failed to config activeCode since invalid vlen:%d. conf:%s, val:%s", cfgReq.dnodeId, vlen,
|
|
||||||
cfgReq.config, cfgReq.value);
|
|
||||||
terrno = TSDB_CODE_INVALID_CFG;
|
|
||||||
goto _err_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
strcpy(dcfgReq.config, opt == DND_ACTIVE_CODE ? "activeCode" : "cActiveCode");
|
|
||||||
snprintf(dcfgReq.value, TSDB_DNODE_VALUE_LEN, "%s", cfgReq.value);
|
|
||||||
|
|
||||||
if (mndConfigDnode(pMnode, pReq, &cfgReq, opt) != 0) {
|
|
||||||
mError("dnode:%d, failed to config activeCode since %s", cfgReq.dnodeId, terrstr());
|
|
||||||
terrno = TSDB_CODE_INVALID_CFG;
|
|
||||||
goto _err_out;
|
|
||||||
}
|
|
||||||
tFreeSMCfgDnodeReq(&cfgReq);
|
|
||||||
return 0;
|
|
||||||
} else if (strncasecmp(cfgReq.config, "s3blocksize", 11) == 0) {
|
} else if (strncasecmp(cfgReq.config, "s3blocksize", 11) == 0) {
|
||||||
int32_t optLen = strlen("s3blocksize");
|
int32_t optLen = strlen("s3blocksize");
|
||||||
int32_t flag = -1;
|
int32_t flag = -1;
|
||||||
|
@ -1497,11 +1383,7 @@ static int32_t mndRetrieveDnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB
|
||||||
taosMemoryFreeClear(b);
|
taosMemoryFreeClear(b);
|
||||||
|
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
STR_TO_VARSTR(buf, pDnode->active);
|
STR_TO_VARSTR(buf, pDnode->machineId);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, buf, false);
|
|
||||||
|
|
||||||
STR_TO_VARSTR(buf, pDnode->connActive);
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, buf, false);
|
colDataSetVal(pColInfo, numOfRows, buf, false);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,6 +19,15 @@
|
||||||
|
|
||||||
#ifndef _GRANT
|
#ifndef _GRANT
|
||||||
|
|
||||||
|
#define GRANT_ITEM_SHOW(display) \
|
||||||
|
do { \
|
||||||
|
cols++; \
|
||||||
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols); \
|
||||||
|
src = (display); \
|
||||||
|
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32); \
|
||||||
|
colDataSetVal(pColInfo, numOfRows, tmp, false); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||||
int32_t numOfRows = 0;
|
int32_t numOfRows = 0;
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
|
@ -31,95 +40,32 @@ static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
||||||
|
|
||||||
cols++;
|
GRANT_ITEM_SHOW("unlimited");
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
GRANT_ITEM_SHOW("limited");
|
||||||
src = "unlimited";
|
GRANT_ITEM_SHOW("false");
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
GRANT_ITEM_SHOW("ungranted");
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
GRANT_ITEM_SHOW("unlimited");
|
||||||
|
GRANT_ITEM_SHOW("unlimited");
|
||||||
|
GRANT_ITEM_SHOW("unlimited");
|
||||||
|
|
||||||
cols++;
|
++numOfRows;
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "false";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
cols++;
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols);
|
|
||||||
src = "unlimited";
|
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32);
|
|
||||||
colDataSetVal(pColInfo, numOfRows, tmp, false);
|
|
||||||
|
|
||||||
numOfRows++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pShow->numOfRows += numOfRows;
|
pShow->numOfRows += numOfRows;
|
||||||
return numOfRows;
|
return numOfRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t mndRetrieveGrantFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||||
|
static int32_t mndRetrieveGrantLogs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||||
|
static int32_t mndRetrieveMachines(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { return 0; }
|
||||||
|
|
||||||
static int32_t mndProcessGrantHB(SRpcMsg *pReq) { return TSDB_CODE_SUCCESS; }
|
static int32_t mndProcessGrantHB(SRpcMsg *pReq) { return TSDB_CODE_SUCCESS; }
|
||||||
|
|
||||||
int32_t mndInitGrant(SMnode *pMnode) {
|
int32_t mndInitGrant(SMnode *pMnode) {
|
||||||
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS, mndRetrieveGrant);
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS, mndRetrieveGrant);
|
||||||
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS_FULL, mndRetrieveGrantFull);
|
||||||
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS_LOGS, mndRetrieveGrantLogs);
|
||||||
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_MACHINES, mndRetrieveMachines);
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_GRANT_HB_TIMER, mndProcessGrantHB);
|
mndSetMsgHandle(pMnode, TDMT_MND_GRANT_HB_TIMER, mndProcessGrantHB);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -129,12 +75,15 @@ void grantParseParameter() { mError("can't parsed parameter k"); }
|
||||||
void grantReset(SMnode *pMnode, EGrantType grant, uint64_t value) {}
|
void grantReset(SMnode *pMnode, EGrantType grant, uint64_t value) {}
|
||||||
void grantAdd(EGrantType grant, uint64_t value) {}
|
void grantAdd(EGrantType grant, uint64_t value) {}
|
||||||
void grantRestore(EGrantType grant, uint64_t value) {}
|
void grantRestore(EGrantType grant, uint64_t value) {}
|
||||||
|
char *tGetMachineId() { return NULL; };
|
||||||
int32_t dmProcessGrantReq(void *pInfo, SRpcMsg *pMsg) { return TSDB_CODE_SUCCESS; }
|
int32_t dmProcessGrantReq(void *pInfo, SRpcMsg *pMsg) { return TSDB_CODE_SUCCESS; }
|
||||||
int32_t dmProcessGrantNotify(void *pInfo, SRpcMsg *pMsg) { return TSDB_CODE_SUCCESS; }
|
int32_t dmProcessGrantNotify(void *pInfo, SRpcMsg *pMsg) { return TSDB_CODE_SUCCESS; }
|
||||||
int32_t grantAlterActiveCode(int32_t did, const char *old, const char *new, char *out, int8_t type) {
|
int32_t mndProcessConfigGrantReq(SMnode *pMnode, SRpcMsg *pReq, SMCfgClusterReq *pCfg) { return 0; }
|
||||||
return TSDB_CODE_SUCCESS;
|
#else
|
||||||
}
|
#ifndef TD_UNIQ_GRANT
|
||||||
|
char *tGetMachineId() { return NULL; };
|
||||||
|
int32_t mndProcessConfigGrantReq(SMnode *pMnode, SRpcMsg *pReq, SMCfgClusterReq *pCfg) { return 0; }
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void mndGenerateMachineCode() { grantParseParameter(); }
|
void mndGenerateMachineCode() { grantParseParameter(); }
|
|
@ -193,7 +193,7 @@ static void mndPullupGrant(SMnode *pMnode) {
|
||||||
if (pReq != NULL) {
|
if (pReq != NULL) {
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.msgType = TDMT_MND_GRANT_HB_TIMER, .pCont = pReq, .contLen = contLen, .info.ahandle = (void *)0x9527};
|
.msgType = TDMT_MND_GRANT_HB_TIMER, .pCont = pReq, .contLen = contLen, .info.ahandle = (void *)0x9527};
|
||||||
tmsgPutToQueue(&pMnode->msgCb, READ_QUEUE, &rpcMsg);
|
tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,12 @@ static int32_t convertToRetrieveType(char *name, int32_t len) {
|
||||||
type = TSDB_MGMT_TABLE_COMPACT;
|
type = TSDB_MGMT_TABLE_COMPACT;
|
||||||
} else if (strncasecmp(name, TSDB_INS_TABLE_COMPACT_DETAILS, len) == 0) {
|
} else if (strncasecmp(name, TSDB_INS_TABLE_COMPACT_DETAILS, len) == 0) {
|
||||||
type = TSDB_MGMT_TABLE_COMPACT_DETAIL;
|
type = TSDB_MGMT_TABLE_COMPACT_DETAIL;
|
||||||
|
} else if (strncasecmp(name, TSDB_INS_TABLE_GRANTS_FULL, len) == 0) {
|
||||||
|
type = TSDB_MGMT_TABLE_GRANTS_FULL;
|
||||||
|
} else if (strncasecmp(name, TSDB_INS_TABLE_GRANTS_LOGS, len) == 0) {
|
||||||
|
type = TSDB_MGMT_TABLE_GRANTS_LOGS;
|
||||||
|
} else if (strncasecmp(name, TSDB_INS_TABLE_MACHINES, len) == 0) {
|
||||||
|
type = TSDB_MGMT_TABLE_MACHINES;
|
||||||
} else {
|
} else {
|
||||||
mError("invalid show name:%s len:%d", name, len);
|
mError("invalid show name:%s len:%d", name, len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -632,9 +632,8 @@ static int32_t mndProcessCreateStreamReq(SRpcMsg *pReq) {
|
||||||
int32_t sqlLen = 0;
|
int32_t sqlLen = 0;
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
if(grantCheck(TSDB_GRANT_STREAMS) < 0){
|
if ((terrno = grantCheck(TSDB_GRANT_STREAMS)) < 0) {
|
||||||
terrno = TSDB_CODE_GRANT_STREAM_LIMITED;
|
goto _OVER;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SCMCreateStreamReq createReq = {0};
|
SCMCreateStreamReq createReq = {0};
|
||||||
|
|
|
@ -599,6 +599,8 @@ STrans *mndTransCreate(SMnode *pMnode, ETrnPolicy policy, ETrnConflct conflict,
|
||||||
pTrans->originRpcType = pReq->msgType;
|
pTrans->originRpcType = pReq->msgType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mInfo("trans:%d, create transaction:%s, origin:%s", pTrans->id, pTrans->opername, opername);
|
||||||
|
|
||||||
mTrace("trans:%d, local object is created, data:%p", pTrans->id, pTrans);
|
mTrace("trans:%d, local object is created, data:%p", pTrans->id, pTrans);
|
||||||
return pTrans;
|
return pTrans;
|
||||||
}
|
}
|
||||||
|
@ -845,6 +847,8 @@ int32_t mndTransCheckConflict(SMnode *pMnode, STrans *pTrans) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
|
int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
|
||||||
|
if(pTrans == NULL) return -1;
|
||||||
|
|
||||||
if (mndTransCheckConflict(pMnode, pTrans) != 0) {
|
if (mndTransCheckConflict(pMnode, pTrans) != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,7 +152,8 @@ typedef enum {
|
||||||
SDB_STREAM_SEQ = 23,
|
SDB_STREAM_SEQ = 23,
|
||||||
SDB_COMPACT = 24,
|
SDB_COMPACT = 24,
|
||||||
SDB_COMPACT_DETAIL = 25,
|
SDB_COMPACT_DETAIL = 25,
|
||||||
SDB_MAX = 26
|
SDB_GRANT = 26, // grant log
|
||||||
|
SDB_MAX = 27
|
||||||
} ESdbType;
|
} ESdbType;
|
||||||
|
|
||||||
typedef struct SSdbRaw {
|
typedef struct SSdbRaw {
|
||||||
|
|
|
@ -62,6 +62,7 @@ int metaOpenIdx(SMeta *pMeta) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUILD_NO_CALL
|
||||||
void metaCloseIdx(SMeta *pMeta) { /* TODO */
|
void metaCloseIdx(SMeta *pMeta) { /* TODO */
|
||||||
#if 0
|
#if 0
|
||||||
if (pMeta->pIdx) {
|
if (pMeta->pIdx) {
|
||||||
|
@ -114,3 +115,4 @@ int metaRemoveTableFromIdx(SMeta *pMeta, tb_uid_t uid) {
|
||||||
// TODO
|
// TODO
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
|
@ -273,7 +273,9 @@ static void metaCleanup(SMeta **ppMeta) {
|
||||||
if (pMeta) {
|
if (pMeta) {
|
||||||
if (pMeta->pEnv) metaAbort(pMeta);
|
if (pMeta->pEnv) metaAbort(pMeta);
|
||||||
if (pMeta->pCache) metaCacheClose(pMeta);
|
if (pMeta->pCache) metaCacheClose(pMeta);
|
||||||
|
#ifdef BUILD_NO_CALL
|
||||||
if (pMeta->pIdx) metaCloseIdx(pMeta);
|
if (pMeta->pIdx) metaCloseIdx(pMeta);
|
||||||
|
#endif
|
||||||
if (pMeta->pStreamDb) tdbTbClose(pMeta->pStreamDb);
|
if (pMeta->pStreamDb) tdbTbClose(pMeta->pStreamDb);
|
||||||
if (pMeta->pNcolIdx) tdbTbClose(pMeta->pNcolIdx);
|
if (pMeta->pNcolIdx) tdbTbClose(pMeta->pNcolIdx);
|
||||||
if (pMeta->pBtimeIdx) tdbTbClose(pMeta->pBtimeIdx);
|
if (pMeta->pBtimeIdx) tdbTbClose(pMeta->pBtimeIdx);
|
||||||
|
|
|
@ -886,7 +886,7 @@ int32_t setLocalVariablesResultIntoDataBlock(SSDataBlock* pBlock) {
|
||||||
|
|
||||||
for (int32_t i = 0, c = 0; i < numOfCfg; ++i, c = 0) {
|
for (int32_t i = 0, c = 0; i < numOfCfg; ++i, c = 0) {
|
||||||
SConfigItem* pItem = taosArrayGet(tsCfg->array, i);
|
SConfigItem* pItem = taosArrayGet(tsCfg->array, i);
|
||||||
GRANT_CFG_SKIP;
|
// GRANT_CFG_SKIP;
|
||||||
|
|
||||||
char name[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0};
|
char name[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(name, pItem->name, TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE);
|
STR_WITH_MAXSIZE_TO_VARSTR(name, pItem->name, TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE);
|
||||||
|
|
|
@ -220,7 +220,6 @@ static int32_t setSingleOutputTupleBufv1(SResultRowInfo* pResultRowInfo, STimeWi
|
||||||
|
|
||||||
(*pResult)->win = *win;
|
(*pResult)->win = *win;
|
||||||
|
|
||||||
clearResultRowInitFlag(pExprSup->pCtx, pExprSup->numOfExprs);
|
|
||||||
setResultRowInitCtx(*pResult, pExprSup->pCtx, pExprSup->numOfExprs, pExprSup->rowEntryInfoOffset);
|
setResultRowInitCtx(*pResult, pExprSup->pCtx, pExprSup->numOfExprs, pExprSup->rowEntryInfoOffset);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -262,6 +261,7 @@ int32_t eventWindowAggImpl(SOperatorInfo* pOperator, SEventWindowOperatorInfo* p
|
||||||
} else if (pInfo->groupId != gid) {
|
} else if (pInfo->groupId != gid) {
|
||||||
// this is a new group, reset the info
|
// this is a new group, reset the info
|
||||||
pInfo->inWindow = false;
|
pInfo->inWindow = false;
|
||||||
|
pInfo->groupId = gid;
|
||||||
}
|
}
|
||||||
|
|
||||||
SFilterColumnParam param1 = {.numOfCols = taosArrayGetSize(pBlock->pDataBlock), .pDataBlock = pBlock->pDataBlock};
|
SFilterColumnParam param1 = {.numOfCols = taosArrayGetSize(pBlock->pDataBlock), .pDataBlock = pBlock->pDataBlock};
|
||||||
|
@ -319,6 +319,9 @@ int32_t eventWindowAggImpl(SOperatorInfo* pOperator, SEventWindowOperatorInfo* p
|
||||||
doKeepNewWindowStartInfo(pRowSup, tsList, rowIndex, gid);
|
doKeepNewWindowStartInfo(pRowSup, tsList, rowIndex, gid);
|
||||||
pInfo->inWindow = true;
|
pInfo->inWindow = true;
|
||||||
startIndex = rowIndex;
|
startIndex = rowIndex;
|
||||||
|
if (pInfo->pRow != NULL) {
|
||||||
|
clearResultRowInitFlag(pSup->pCtx, pSup->numOfExprs);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,6 +311,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int
|
||||||
pInput->totalRows = pBlock->info.rows;
|
pInput->totalRows = pBlock->info.rows;
|
||||||
pInput->numOfRows = pBlock->info.rows;
|
pInput->numOfRows = pBlock->info.rows;
|
||||||
pInput->startRowIndex = 0;
|
pInput->startRowIndex = 0;
|
||||||
|
pInput->blankFill = pBlock->info.blankFill;
|
||||||
|
|
||||||
// NOTE: the last parameter is the primary timestamp column
|
// NOTE: the last parameter is the primary timestamp column
|
||||||
// todo: refactor this
|
// todo: refactor this
|
||||||
|
@ -325,6 +326,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int
|
||||||
pInput->totalRows = pBlock->info.rows;
|
pInput->totalRows = pBlock->info.rows;
|
||||||
pInput->numOfRows = pBlock->info.rows;
|
pInput->numOfRows = pBlock->info.rows;
|
||||||
pInput->startRowIndex = 0;
|
pInput->startRowIndex = 0;
|
||||||
|
pInput->blankFill = pBlock->info.blankFill;
|
||||||
|
|
||||||
code = doCreateConstantValColumnInfo(pInput, pFuncParam, j, pBlock->info.rows);
|
code = doCreateConstantValColumnInfo(pInput, pFuncParam, j, pBlock->info.rows);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
|
|
@ -711,6 +711,8 @@ static void initNextGroupScan(STableScanInfo* pInfo, STableKeyInfo** pKeyInfo, i
|
||||||
|
|
||||||
pInfo->tableEndIndex = (pInfo->tableStartIndex + (*size) - 1);
|
pInfo->tableEndIndex = (pInfo->tableStartIndex + (*size) - 1);
|
||||||
|
|
||||||
|
pInfo->pResBlock->info.blankFill = false;
|
||||||
|
|
||||||
if (!pInfo->needCountEmptyTable) {
|
if (!pInfo->needCountEmptyTable) {
|
||||||
pInfo->countState = TABLE_COUNT_STATE_END;
|
pInfo->countState = TABLE_COUNT_STATE_END;
|
||||||
} else {
|
} else {
|
||||||
|
@ -735,6 +737,7 @@ static SSDataBlock* getOneRowResultBlock(SExecTaskInfo* pTaskInfo, STableScanBas
|
||||||
pBlock->info.rows = 1;
|
pBlock->info.rows = 1;
|
||||||
pBlock->info.id.uid = tbInfo->uid;
|
pBlock->info.id.uid = tbInfo->uid;
|
||||||
pBlock->info.id.groupId = tbInfo->groupId;
|
pBlock->info.id.groupId = tbInfo->groupId;
|
||||||
|
pBlock->info.blankFill = true;
|
||||||
|
|
||||||
// only one row: set all col data to null & hasNull
|
// only one row: set all col data to null & hasNull
|
||||||
int32_t col_num = blockDataGetNumOfCols(pBlock);
|
int32_t col_num = blockDataGetNumOfCols(pBlock);
|
||||||
|
@ -744,7 +747,7 @@ static SSDataBlock* getOneRowResultBlock(SExecTaskInfo* pTaskInfo, STableScanBas
|
||||||
}
|
}
|
||||||
|
|
||||||
// set tag/tbname
|
// set tag/tbname
|
||||||
doSetTagColumnData(pBase, pBlock, pTaskInfo, pBlock->info.rows);
|
doSetTagColumnData(pBase, pBlock, pTaskInfo, 1);
|
||||||
return pBlock;
|
return pBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1334,7 +1334,6 @@ static bool tsortOpenForBufMergeSort(SSortHandle* pHandle) {
|
||||||
|
|
||||||
int32_t tsortClose(SSortHandle* pHandle) {
|
int32_t tsortClose(SSortHandle* pHandle) {
|
||||||
atomic_val_compare_exchange_8(&pHandle->closed, 0, 1);
|
atomic_val_compare_exchange_8(&pHandle->closed, 0, 1);
|
||||||
taosMsleep(10);
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -499,6 +499,9 @@ static int64_t getNumOfElems(SqlFunctionCtx* pCtx) {
|
||||||
*/
|
*/
|
||||||
SInputColumnInfoData* pInput = &pCtx->input;
|
SInputColumnInfoData* pInput = &pCtx->input;
|
||||||
SColumnInfoData* pInputCol = pInput->pData[0];
|
SColumnInfoData* pInputCol = pInput->pData[0];
|
||||||
|
if(1 == pInput->numOfRows && pInput->blankFill) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (pInput->colDataSMAIsSet && pInput->totalRows == pInput->numOfRows) {
|
if (pInput->colDataSMAIsSet && pInput->totalRows == pInput->numOfRows) {
|
||||||
numOfElem = pInput->numOfRows - pInput->pColumnDataAgg[0]->numOfNull;
|
numOfElem = pInput->numOfRows - pInput->pColumnDataAgg[0]->numOfNull;
|
||||||
} else {
|
} else {
|
||||||
|
@ -6022,7 +6025,7 @@ int32_t groupKeyFunction(SqlFunctionCtx* pCtx) {
|
||||||
goto _group_key_over;
|
goto _group_key_over;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colDataIsNull_s(pInputCol, startIndex)) {
|
if (pInputCol->pData == NULL || colDataIsNull_s(pInputCol, startIndex)) {
|
||||||
pInfo->isNull = true;
|
pInfo->isNull = true;
|
||||||
pInfo->hasResult = true;
|
pInfo->hasResult = true;
|
||||||
goto _group_key_over;
|
goto _group_key_over;
|
||||||
|
|
|
@ -193,6 +193,8 @@ const char* nodesNodeName(ENodeType type) {
|
||||||
return "GrantStmt";
|
return "GrantStmt";
|
||||||
case QUERY_NODE_REVOKE_STMT:
|
case QUERY_NODE_REVOKE_STMT:
|
||||||
return "RevokeStmt";
|
return "RevokeStmt";
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT:
|
||||||
|
return "AlterClusterStmt";
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
return "ShowDnodesStmt";
|
return "ShowDnodesStmt";
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
|
@ -263,6 +265,12 @@ const char* nodesNodeName(ENodeType type) {
|
||||||
return "ShowCompactsStmt";
|
return "ShowCompactsStmt";
|
||||||
case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
|
case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
|
||||||
return "ShowCompactDetailsStmt";
|
return "ShowCompactDetailsStmt";
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
return "ShowGrantsFullStmt";
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
return "ShowGrantsLogsStmt";
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
|
return "ShowClusterMachinesStmt";
|
||||||
case QUERY_NODE_DELETE_STMT:
|
case QUERY_NODE_DELETE_STMT:
|
||||||
return "DeleteStmt";
|
return "DeleteStmt";
|
||||||
case QUERY_NODE_INSERT_STMT:
|
case QUERY_NODE_INSERT_STMT:
|
||||||
|
@ -6162,6 +6170,31 @@ static int32_t jsonToDropConsumerGroupStmt(const SJson* pJson, void* pObj) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* jkAlterClusterStmtConfig = "Config";
|
||||||
|
static const char* jkAlterClusterStmtValue = "Value";
|
||||||
|
|
||||||
|
static int32_t alterClusterStmtToJson(const void* pObj, SJson* pJson) {
|
||||||
|
const SAlterClusterStmt* pNode = (const SAlterClusterStmt*)pObj;
|
||||||
|
|
||||||
|
int32_t code = tjsonAddStringToObject(pJson, jkAlterClusterStmtConfig, pNode->config);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = tjsonAddStringToObject(pJson, jkAlterClusterStmtValue, pNode->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t jsonToAlterClusterStmt(const SJson* pJson, void* pObj) {
|
||||||
|
SAlterClusterStmt* pNode = (SAlterClusterStmt*)pObj;
|
||||||
|
|
||||||
|
int32_t code = tjsonGetStringValue(pJson, jkAlterClusterStmtConfig, pNode->config);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = tjsonGetStringValue(pJson, jkAlterClusterStmtValue, pNode->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
static const char* jkAlterLocalStmtConfig = "Config";
|
static const char* jkAlterLocalStmtConfig = "Config";
|
||||||
static const char* jkAlterLocalStmtValue = "Value";
|
static const char* jkAlterLocalStmtValue = "Value";
|
||||||
|
|
||||||
|
@ -6559,6 +6592,18 @@ static int32_t showVariablesStmtToJson(const void* pObj, SJson* pJson) { return
|
||||||
|
|
||||||
static int32_t jsonToShowVariablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
static int32_t jsonToShowVariablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||||
|
|
||||||
|
static int32_t showGrantsFullStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
|
||||||
|
|
||||||
|
static int32_t jsonToShowGrantsFullStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||||
|
|
||||||
|
static int32_t showGrantsLogsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
|
||||||
|
|
||||||
|
static int32_t showClusterMachinesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
|
||||||
|
|
||||||
|
static int32_t jsonToShowGrantsLogsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||||
|
|
||||||
|
static int32_t jsonToShowClusterMachinesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
|
||||||
|
|
||||||
static const char* jkShowDnodeVariablesStmtDnodeId = "DnodeId";
|
static const char* jkShowDnodeVariablesStmtDnodeId = "DnodeId";
|
||||||
static const char* jkShowDnodeVariablesStmtLikePattern = "LikePattern";
|
static const char* jkShowDnodeVariablesStmtLikePattern = "LikePattern";
|
||||||
|
|
||||||
|
@ -7014,6 +7059,8 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
||||||
return grantStmtToJson(pObj, pJson);
|
return grantStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_REVOKE_STMT:
|
case QUERY_NODE_REVOKE_STMT:
|
||||||
return revokeStmtToJson(pObj, pJson);
|
return revokeStmtToJson(pObj, pJson);
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT:
|
||||||
|
return alterClusterStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
return showDnodesStmtToJson(pObj, pJson);
|
return showDnodesStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
|
@ -7044,6 +7091,12 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
||||||
return showConsumersStmtToJson(pObj, pJson);
|
return showConsumersStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_SHOW_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_VARIABLES_STMT:
|
||||||
return showVariablesStmtToJson(pObj, pJson);
|
return showVariablesStmtToJson(pObj, pJson);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
return showGrantsFullStmtToJson(pObj, pJson);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
return showGrantsLogsStmtToJson(pObj, pJson);
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
|
return showClusterMachinesStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||||
return showDnodeVariablesStmtToJson(pObj, pJson);
|
return showDnodeVariablesStmtToJson(pObj, pJson);
|
||||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||||
|
@ -7337,6 +7390,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
||||||
return jsonToGrantStmt(pJson, pObj);
|
return jsonToGrantStmt(pJson, pObj);
|
||||||
case QUERY_NODE_REVOKE_STMT:
|
case QUERY_NODE_REVOKE_STMT:
|
||||||
return jsonToRevokeStmt(pJson, pObj);
|
return jsonToRevokeStmt(pJson, pObj);
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT:
|
||||||
|
return jsonToAlterClusterStmt(pJson, pObj);
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
return jsonToShowDnodesStmt(pJson, pObj);
|
return jsonToShowDnodesStmt(pJson, pObj);
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
|
@ -7367,6 +7422,12 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
||||||
return jsonToShowConsumersStmt(pJson, pObj);
|
return jsonToShowConsumersStmt(pJson, pObj);
|
||||||
case QUERY_NODE_SHOW_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_VARIABLES_STMT:
|
||||||
return jsonToShowVariablesStmt(pJson, pObj);
|
return jsonToShowVariablesStmt(pJson, pObj);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
return jsonToShowGrantsFullStmt(pJson, pObj);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
return jsonToShowGrantsLogsStmt(pJson, pObj);
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
|
return jsonToShowClusterMachinesStmt(pJson, pObj);
|
||||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||||
return jsonToShowDnodeVariablesStmt(pJson, pObj);
|
return jsonToShowDnodeVariablesStmt(pJson, pObj);
|
||||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||||
|
|
|
@ -409,6 +409,8 @@ SNode* nodesMakeNode(ENodeType type) {
|
||||||
return makeNode(type, sizeof(SGrantStmt));
|
return makeNode(type, sizeof(SGrantStmt));
|
||||||
case QUERY_NODE_REVOKE_STMT:
|
case QUERY_NODE_REVOKE_STMT:
|
||||||
return makeNode(type, sizeof(SRevokeStmt));
|
return makeNode(type, sizeof(SRevokeStmt));
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT:
|
||||||
|
return makeNode(type, sizeof(SAlterClusterStmt));
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MODULES_STMT:
|
case QUERY_NODE_SHOW_MODULES_STMT:
|
||||||
|
@ -439,6 +441,9 @@ SNode* nodesMakeNode(ENodeType type) {
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
case QUERY_NODE_SHOW_VIEWS_STMT:
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
return makeNode(type, sizeof(SShowStmt));
|
return makeNode(type, sizeof(SShowStmt));
|
||||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
||||||
return makeNode(type, sizeof(SShowTableTagsStmt));
|
return makeNode(type, sizeof(SShowTableTagsStmt));
|
||||||
|
@ -1046,6 +1051,8 @@ void nodesDestroyNode(SNode* pNode) {
|
||||||
case QUERY_NODE_REVOKE_STMT:
|
case QUERY_NODE_REVOKE_STMT:
|
||||||
nodesDestroyNode(((SRevokeStmt*)pNode)->pTagCond);
|
nodesDestroyNode(((SRevokeStmt*)pNode)->pTagCond);
|
||||||
break;
|
break;
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT: // no pointer field
|
||||||
|
break;
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MODULES_STMT:
|
case QUERY_NODE_SHOW_MODULES_STMT:
|
||||||
|
@ -1075,7 +1082,10 @@ void nodesDestroyNode(SNode* pNode) {
|
||||||
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
case QUERY_NODE_SHOW_VIEWS_STMT: {
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT: {
|
||||||
SShowStmt* pStmt = (SShowStmt*)pNode;
|
SShowStmt* pStmt = (SShowStmt*)pNode;
|
||||||
nodesDestroyNode(pStmt->pDbName);
|
nodesDestroyNode(pStmt->pDbName);
|
||||||
nodesDestroyNode(pStmt->pTbName);
|
nodesDestroyNode(pStmt->pTbName);
|
||||||
|
|
|
@ -225,6 +225,7 @@ SNode* createCreateTopicStmtUseTable(SAstCreateContext* pCxt, bool ignoreExists,
|
||||||
int8_t withMeta, SNode* pWhere);
|
int8_t withMeta, SNode* pWhere);
|
||||||
SNode* createDropTopicStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pTopicName);
|
SNode* createDropTopicStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pTopicName);
|
||||||
SNode* createDropCGroupStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pCGroupId, SToken* pTopicName);
|
SNode* createDropCGroupStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToken* pCGroupId, SToken* pTopicName);
|
||||||
|
SNode* createAlterClusterStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue);
|
||||||
SNode* createAlterLocalStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue);
|
SNode* createAlterLocalStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue);
|
||||||
SNode* createDefaultExplainOptions(SAstCreateContext* pCxt);
|
SNode* createDefaultExplainOptions(SAstCreateContext* pCxt);
|
||||||
SNode* setExplainVerbose(SAstCreateContext* pCxt, SNode* pOptions, const SToken* pVal);
|
SNode* setExplainVerbose(SAstCreateContext* pCxt, SNode* pOptions, const SToken* pVal);
|
||||||
|
|
|
@ -172,6 +172,10 @@ force_opt(A) ::= FORCE.
|
||||||
%destructor unsafe_opt { }
|
%destructor unsafe_opt { }
|
||||||
unsafe_opt(A) ::= UNSAFE. { A = true; }
|
unsafe_opt(A) ::= UNSAFE. { A = true; }
|
||||||
|
|
||||||
|
/************************************************ alter cluster *********************************************************/
|
||||||
|
cmd ::= ALTER CLUSTER NK_STRING(A). { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, NULL); }
|
||||||
|
cmd ::= ALTER CLUSTER NK_STRING(A) NK_STRING(B). { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, &B); }
|
||||||
|
|
||||||
/************************************************ alter local *********************************************************/
|
/************************************************ alter local *********************************************************/
|
||||||
cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
|
cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
|
||||||
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
|
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
|
||||||
|
@ -483,6 +487,9 @@ cmd ::= SHOW APPS.
|
||||||
cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
|
cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
|
||||||
cmd ::= SHOW LICENCES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
|
cmd ::= SHOW LICENCES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
|
||||||
cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
|
cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
|
||||||
|
cmd ::= SHOW GRANTS FULL. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
|
||||||
|
cmd ::= SHOW GRANTS LOGS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOGS_STMT); }
|
||||||
|
cmd ::= SHOW CLUSTER MACHINES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
|
||||||
cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
|
cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
|
||||||
cmd ::= SHOW CREATE TABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
|
cmd ::= SHOW CREATE TABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
|
||||||
cmd ::= SHOW CREATE STABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, A); }
|
cmd ::= SHOW CREATE STABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, A); }
|
||||||
|
|
|
@ -2187,6 +2187,17 @@ SNode* createDropCGroupStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SToke
|
||||||
return (SNode*)pStmt;
|
return (SNode*)pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SNode* createAlterClusterStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue) {
|
||||||
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
|
SAlterClusterStmt* pStmt = (SAlterClusterStmt*)nodesMakeNode(QUERY_NODE_ALTER_CLUSTER_STMT);
|
||||||
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
|
trimString(pConfig->z, pConfig->n, pStmt->config, sizeof(pStmt->config));
|
||||||
|
if (NULL != pValue) {
|
||||||
|
trimString(pValue->z, pValue->n, pStmt->value, sizeof(pStmt->value));
|
||||||
|
}
|
||||||
|
return (SNode*)pStmt;
|
||||||
|
}
|
||||||
|
|
||||||
SNode* createAlterLocalStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue) {
|
SNode* createAlterLocalStmt(SAstCreateContext* pCxt, const SToken* pConfig, const SToken* pValue) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
SAlterLocalStmt* pStmt = (SAlterLocalStmt*)nodesMakeNode(QUERY_NODE_ALTER_LOCAL_STMT);
|
SAlterLocalStmt* pStmt = (SAlterLocalStmt*)nodesMakeNode(QUERY_NODE_ALTER_LOCAL_STMT);
|
||||||
|
|
|
@ -619,6 +619,21 @@ static int32_t collectMetaKeyFromShowCompactDetails(SCollectMetaKeyCxt* pCxt, SS
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t collectMetaKeyFromShowGrantsFull(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||||
|
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_FULL,
|
||||||
|
pCxt->pMetaCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t collectMetaKeyFromShowGrantsLogs(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||||
|
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_GRANTS_LOGS,
|
||||||
|
pCxt->pMetaCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t collectMetaKeyFromShowClusterMachines(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
||||||
|
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MACHINES,
|
||||||
|
pCxt->pMetaCache);
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
||||||
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
||||||
}
|
}
|
||||||
|
@ -839,6 +854,12 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
||||||
return collectMetaKeyFromShowCompacts(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowCompacts(pCxt, (SShowStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
|
case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT:
|
||||||
return collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
return collectMetaKeyFromShowGrantsFull(pCxt, (SShowStmt*)pStmt);
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
return collectMetaKeyFromShowGrantsLogs(pCxt, (SShowStmt*)pStmt);
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
|
return collectMetaKeyFromShowClusterMachines(pCxt, (SShowStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||||
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
||||||
|
|
|
@ -349,6 +349,9 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
|
||||||
case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
|
case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
|
||||||
case QUERY_NODE_SHOW_VNODES_STMT:
|
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_SCORES_STMT:
|
case QUERY_NODE_SHOW_SCORES_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
return !pCxt->pParseCxt->enableSysInfo ? TSDB_CODE_PAR_PERMISSION_DENIED : TSDB_CODE_SUCCESS;
|
return !pCxt->pParseCxt->enableSysInfo ? TSDB_CODE_PAR_PERMISSION_DENIED : TSDB_CODE_SUCCESS;
|
||||||
case QUERY_NODE_SHOW_TABLES_STMT:
|
case QUERY_NODE_SHOW_TABLES_STMT:
|
||||||
case QUERY_NODE_SHOW_STABLES_STMT:
|
case QUERY_NODE_SHOW_STABLES_STMT:
|
||||||
|
|
|
@ -109,6 +109,9 @@ static SKeyword keywordTable[] = {
|
||||||
{"GEOMETRY", TK_GEOMETRY},
|
{"GEOMETRY", TK_GEOMETRY},
|
||||||
{"GRANT", TK_GRANT},
|
{"GRANT", TK_GRANT},
|
||||||
{"GRANTS", TK_GRANTS},
|
{"GRANTS", TK_GRANTS},
|
||||||
|
{"FULL", TK_FULL},
|
||||||
|
{"LOGS", TK_LOGS},
|
||||||
|
{"MACHINES", TK_MACHINES},
|
||||||
{"GROUP", TK_GROUP},
|
{"GROUP", TK_GROUP},
|
||||||
{"HAVING", TK_HAVING},
|
{"HAVING", TK_HAVING},
|
||||||
{"HOST", TK_HOST},
|
{"HOST", TK_HOST},
|
||||||
|
|
|
@ -270,6 +270,24 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
||||||
.numOfShowCols = 1,
|
.numOfShowCols = 1,
|
||||||
.pShowCols = {"*"}
|
.pShowCols = {"*"}
|
||||||
},
|
},
|
||||||
|
{ .showType = QUERY_NODE_SHOW_GRANTS_FULL_STMT,
|
||||||
|
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||||
|
.pTableName = TSDB_INS_TABLE_GRANTS_FULL,
|
||||||
|
.numOfShowCols = 1,
|
||||||
|
.pShowCols = {"*"}
|
||||||
|
},
|
||||||
|
{ .showType = QUERY_NODE_SHOW_GRANTS_LOGS_STMT,
|
||||||
|
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||||
|
.pTableName = TSDB_INS_TABLE_GRANTS_LOGS,
|
||||||
|
.numOfShowCols = 1,
|
||||||
|
.pShowCols = {"*"}
|
||||||
|
},
|
||||||
|
{ .showType = QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT,
|
||||||
|
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||||
|
.pTableName = TSDB_INS_TABLE_MACHINES,
|
||||||
|
.numOfShowCols = 1,
|
||||||
|
.pShowCols = {"*"}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -5590,6 +5608,11 @@ static int32_t fillCmdSql(STranslateContext* pCxt, int16_t msgType, void* pReq)
|
||||||
FILL_CMD_SQL(sql, sqlLen, pCmdReq, SMDropStreamReq, pReq);
|
FILL_CMD_SQL(sql, sqlLen, pCmdReq, SMDropStreamReq, pReq);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TDMT_MND_CONFIG_CLUSTER: {
|
||||||
|
FILL_CMD_SQL(sql, sqlLen, pCmdReq, SMCfgClusterReq, pReq);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6809,6 +6832,16 @@ static int32_t translateRestoreDnode(STranslateContext* pCxt, SRestoreComponentN
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t translateAlterCluster(STranslateContext* pCxt, SAlterClusterStmt* pStmt) {
|
||||||
|
SMCfgClusterReq cfgReq = {0};
|
||||||
|
strcpy(cfgReq.config, pStmt->config);
|
||||||
|
strcpy(cfgReq.value, pStmt->value);
|
||||||
|
|
||||||
|
int32_t code = buildCmdMsg(pCxt, TDMT_MND_CONFIG_CLUSTER, (FSerializeFunc)tSerializeSMCfgClusterReq, &cfgReq);
|
||||||
|
tFreeSMCfgClusterReq(&cfgReq);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t getSmaIndexDstVgId(STranslateContext* pCxt, const char* pDbName, const char* pTableName,
|
static int32_t getSmaIndexDstVgId(STranslateContext* pCxt, const char* pDbName, const char* pTableName,
|
||||||
int32_t* pVgId) {
|
int32_t* pVgId) {
|
||||||
SVgroupInfo vg = {0};
|
SVgroupInfo vg = {0};
|
||||||
|
@ -8927,6 +8960,9 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
|
||||||
case QUERY_NODE_COMPACT_DATABASE_STMT:
|
case QUERY_NODE_COMPACT_DATABASE_STMT:
|
||||||
code = translateCompact(pCxt, (SCompactDatabaseStmt*)pNode);
|
code = translateCompact(pCxt, (SCompactDatabaseStmt*)pNode);
|
||||||
break;
|
break;
|
||||||
|
case QUERY_NODE_ALTER_CLUSTER_STMT:
|
||||||
|
code = translateAlterCluster(pCxt, (SAlterClusterStmt*)pNode);
|
||||||
|
break;
|
||||||
case QUERY_NODE_KILL_CONNECTION_STMT:
|
case QUERY_NODE_KILL_CONNECTION_STMT:
|
||||||
code = translateKillConnection(pCxt, (SKillStmt*)pNode);
|
code = translateKillConnection(pCxt, (SKillStmt*)pNode);
|
||||||
break;
|
break;
|
||||||
|
@ -10773,6 +10809,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
|
||||||
case QUERY_NODE_SHOW_VIEWS_STMT:
|
case QUERY_NODE_SHOW_VIEWS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_FULL_STMT:
|
||||||
|
case QUERY_NODE_SHOW_GRANTS_LOGS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT:
|
||||||
code = rewriteShow(pCxt, pQuery);
|
code = rewriteShow(pCxt, pQuery);
|
||||||
break;
|
break;
|
||||||
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
case QUERY_NODE_SHOW_VGROUPS_STMT:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1455,28 +1455,25 @@ static int32_t sortForJoinOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pL
|
||||||
SLogicNode* pLeft = (SLogicNode*)nodesListGetNode(pJoin->node.pChildren, 0);
|
SLogicNode* pLeft = (SLogicNode*)nodesListGetNode(pJoin->node.pChildren, 0);
|
||||||
SLogicNode* pRight = (SLogicNode*)nodesListGetNode(pJoin->node.pChildren, 1);
|
SLogicNode* pRight = (SLogicNode*)nodesListGetNode(pJoin->node.pChildren, 1);
|
||||||
SScanLogicNode* pScan = NULL;
|
SScanLogicNode* pScan = NULL;
|
||||||
|
SLogicNode* pChild = NULL;
|
||||||
|
SNode** pChildPos = NULL;
|
||||||
|
EOrder targetOrder = 0;
|
||||||
|
SSHashObj* pTables = NULL;
|
||||||
|
|
||||||
if (QUERY_NODE_LOGIC_PLAN_SCAN == nodeType(pLeft) && ((SScanLogicNode*)pLeft)->node.outputTsOrder != SCAN_ORDER_BOTH) {
|
if (QUERY_NODE_LOGIC_PLAN_SCAN == nodeType(pLeft) && ((SScanLogicNode*)pLeft)->node.outputTsOrder != SCAN_ORDER_BOTH) {
|
||||||
pScan = (SScanLogicNode*)pLeft;
|
pScan = (SScanLogicNode*)pLeft;
|
||||||
|
pChild = pRight;
|
||||||
|
pChildPos = &pJoin->node.pChildren->pTail->pNode;
|
||||||
|
targetOrder = pScan->node.outputTsOrder;
|
||||||
} else if (QUERY_NODE_LOGIC_PLAN_SCAN == nodeType(pRight) && ((SScanLogicNode*)pRight)->node.outputTsOrder != SCAN_ORDER_BOTH) {
|
} else if (QUERY_NODE_LOGIC_PLAN_SCAN == nodeType(pRight) && ((SScanLogicNode*)pRight)->node.outputTsOrder != SCAN_ORDER_BOTH) {
|
||||||
pScan = (SScanLogicNode*)pRight;
|
pScan = (SScanLogicNode*)pRight;
|
||||||
}
|
pChild = pLeft;
|
||||||
|
pChildPos = &pJoin->node.pChildren->pHead->pNode;
|
||||||
if (NULL != pScan) {
|
targetOrder = pScan->node.outputTsOrder;
|
||||||
switch (pScan->node.outputTsOrder) {
|
} else {
|
||||||
case SCAN_ORDER_ASC:
|
pChild = pRight;
|
||||||
pScan->scanSeq[0] = 0;
|
pChildPos = &pJoin->node.pChildren->pTail->pNode;
|
||||||
pScan->scanSeq[1] = 1;
|
targetOrder = pLeft->outputTsOrder;
|
||||||
pScan->node.outputTsOrder = ORDER_DESC;
|
|
||||||
goto _return;
|
|
||||||
case SCAN_ORDER_DESC:
|
|
||||||
pScan->scanSeq[0] = 1;
|
|
||||||
pScan->scanSeq[1] = 0;
|
|
||||||
pScan->node.outputTsOrder = ORDER_ASC;
|
|
||||||
goto _return;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QUERY_NODE_OPERATOR != nodeType(pJoin->pPrimKeyEqCond)) {
|
if (QUERY_NODE_OPERATOR != nodeType(pJoin->pPrimKeyEqCond)) {
|
||||||
|
@ -1490,16 +1487,15 @@ static int32_t sortForJoinOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pL
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* pOrderByNode = NULL;
|
SNode* pOrderByNode = NULL;
|
||||||
SSHashObj* pLeftTables = NULL;
|
|
||||||
collectTableAliasFromNodes(nodesListGetNode(pJoin->node.pChildren, 0), &pLeftTables);
|
|
||||||
|
|
||||||
if (NULL != tSimpleHashGet(pLeftTables, ((SColumnNode*)pOp->pLeft)->tableAlias, strlen(((SColumnNode*)pOp->pLeft)->tableAlias))) {
|
collectTableAliasFromNodes((SNode*)pChild, &pTables);
|
||||||
|
if (NULL != tSimpleHashGet(pTables, ((SColumnNode*)pOp->pLeft)->tableAlias, strlen(((SColumnNode*)pOp->pLeft)->tableAlias))) {
|
||||||
pOrderByNode = pOp->pLeft;
|
pOrderByNode = pOp->pLeft;
|
||||||
} else if (NULL != tSimpleHashGet(pLeftTables, ((SColumnNode*)pOp->pRight)->tableAlias, strlen(((SColumnNode*)pOp->pRight)->tableAlias))) {
|
} else if (NULL != tSimpleHashGet(pTables, ((SColumnNode*)pOp->pRight)->tableAlias, strlen(((SColumnNode*)pOp->pRight)->tableAlias))) {
|
||||||
pOrderByNode = pOp->pRight;
|
pOrderByNode = pOp->pRight;
|
||||||
}
|
}
|
||||||
|
|
||||||
tSimpleHashCleanup(pLeftTables);
|
tSimpleHashCleanup(pTables);
|
||||||
|
|
||||||
if (NULL == pOrderByNode) {
|
if (NULL == pOrderByNode) {
|
||||||
return TSDB_CODE_PLAN_INTERNAL_ERROR;
|
return TSDB_CODE_PLAN_INTERNAL_ERROR;
|
||||||
|
@ -1510,7 +1506,13 @@ static int32_t sortForJoinOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pL
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
pSort->node.outputTsOrder = (ORDER_ASC == pLeft->outputTsOrder) ? ORDER_DESC : ORDER_ASC;
|
pSort->node.outputTsOrder = targetOrder;
|
||||||
|
pSort->node.pTargets = nodesCloneList(pChild->pTargets);
|
||||||
|
if (NULL == pSort->node.pTargets) {
|
||||||
|
nodesDestroyNode((SNode *)pSort);
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
pSort->groupSort = false;
|
pSort->groupSort = false;
|
||||||
SOrderByExprNode* pOrder = (SOrderByExprNode*)nodesMakeNode(QUERY_NODE_ORDER_BY_EXPR);
|
SOrderByExprNode* pOrder = (SOrderByExprNode*)nodesMakeNode(QUERY_NODE_ORDER_BY_EXPR);
|
||||||
if (NULL == pOrder) {
|
if (NULL == pOrder) {
|
||||||
|
@ -1519,7 +1521,7 @@ static int32_t sortForJoinOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pL
|
||||||
}
|
}
|
||||||
|
|
||||||
nodesListMakeAppend(&pSort->pSortKeys, (SNode*)pOrder);
|
nodesListMakeAppend(&pSort->pSortKeys, (SNode*)pOrder);
|
||||||
pOrder->order = (ORDER_ASC == pLeft->outputTsOrder) ? ORDER_DESC : ORDER_ASC;
|
pOrder->order = targetOrder;
|
||||||
pOrder->pExpr = nodesCloneNode(pOrderByNode);
|
pOrder->pExpr = nodesCloneNode(pOrderByNode);
|
||||||
pOrder->nullOrder = (ORDER_ASC == pOrder->order) ? NULL_ORDER_FIRST : NULL_ORDER_LAST;
|
pOrder->nullOrder = (ORDER_ASC == pOrder->order) ? NULL_ORDER_FIRST : NULL_ORDER_LAST;
|
||||||
if (!pOrder->pExpr) {
|
if (!pOrder->pExpr) {
|
||||||
|
@ -1527,9 +1529,9 @@ static int32_t sortForJoinOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pL
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
pLeft->pParent = (SLogicNode*)pSort;
|
pChild->pParent = (SLogicNode*)pSort;
|
||||||
nodesListMakeAppend(&pSort->node.pChildren, (SNode*)pLeft);
|
nodesListMakeAppend(&pSort->node.pChildren, (SNode*)pChild);
|
||||||
pJoin->node.pChildren->pHead->pNode = (SNode*)pSort;
|
*pChildPos = (SNode*)pSort;
|
||||||
pSort->node.pParent = (SLogicNode*)pJoin;;
|
pSort->node.pParent = (SLogicNode*)pJoin;;
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
|
|
|
@ -543,7 +543,7 @@ int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inpu
|
||||||
|
|
||||||
if (QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) {
|
if (QW_EVENT_RECEIVED(ctx, QW_EVENT_FETCH)) {
|
||||||
QW_TASK_WLOG("last fetch still not processed, phase:%s", qwPhaseStr(phase));
|
QW_TASK_WLOG("last fetch still not processed, phase:%s", qwPhaseStr(phase));
|
||||||
QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATTED_OPERATION);
|
QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATED_OPERATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->rspCode) {
|
if (ctx->rspCode) {
|
||||||
|
@ -979,7 +979,7 @@ int32_t qwProcessDrop(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
|
||||||
|
|
||||||
if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) {
|
if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP)) {
|
||||||
QW_TASK_WLOG_E("task already dropping");
|
QW_TASK_WLOG_E("task already dropping");
|
||||||
QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATTED_OPERATION);
|
QW_ERR_JRET(TSDB_CODE_QRY_DUPLICATED_OPERATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QW_QUERY_RUNNING(ctx)) {
|
if (QW_QUERY_RUNNING(ctx)) {
|
||||||
|
|
|
@ -2141,7 +2141,7 @@ static void syncNodeEqPingTimer(void* param, void* tmrId) {
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
sError("failed to build ping msg");
|
sError("failed to build ping msg");
|
||||||
rpcFreeCont(rpcMsg.pCont);
|
rpcFreeCont(rpcMsg.pCont);
|
||||||
return;
|
goto _out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sTrace("enqueue ping msg");
|
// sTrace("enqueue ping msg");
|
||||||
|
@ -2149,9 +2149,10 @@ static void syncNodeEqPingTimer(void* param, void* tmrId) {
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
sError("failed to sync enqueue ping msg since %s", terrstr());
|
sError("failed to sync enqueue ping msg since %s", terrstr());
|
||||||
rpcFreeCont(rpcMsg.pCont);
|
rpcFreeCont(rpcMsg.pCont);
|
||||||
return;
|
goto _out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_out:
|
||||||
taosTmrReset(syncNodeEqPingTimer, pNode->pingTimerMS, pNode, syncEnv()->pTimerManager, &pNode->pPingTimer);
|
taosTmrReset(syncNodeEqPingTimer, pNode->pingTimerMS, pNode, syncEnv()->pTimerManager, &pNode->pPingTimer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2211,7 +2212,7 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
sError("failed to build heartbeat msg");
|
sError("failed to build heartbeat msg");
|
||||||
return;
|
goto _out;
|
||||||
}
|
}
|
||||||
|
|
||||||
sTrace("vgId:%d, enqueue heartbeat timer", pNode->vgId);
|
sTrace("vgId:%d, enqueue heartbeat timer", pNode->vgId);
|
||||||
|
@ -2219,9 +2220,10 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
sError("failed to enqueue heartbeat msg since %s", terrstr());
|
sError("failed to enqueue heartbeat msg since %s", terrstr());
|
||||||
rpcFreeCont(rpcMsg.pCont);
|
rpcFreeCont(rpcMsg.pCont);
|
||||||
return;
|
goto _out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_out:
|
||||||
taosTmrReset(syncNodeEqHeartbeatTimer, pNode->heartbeatTimerMS, pNode, syncEnv()->pTimerManager,
|
taosTmrReset(syncNodeEqHeartbeatTimer, pNode->heartbeatTimerMS, pNode, syncEnv()->pTimerManager,
|
||||||
&pNode->pHeartbeatTimer);
|
&pNode->pHeartbeatTimer);
|
||||||
|
|
||||||
|
|
|
@ -2515,7 +2515,7 @@ int transReleaseCliHandle(void* handle) {
|
||||||
|
|
||||||
SCliThrd* pThrd = transGetWorkThrdFromHandle(NULL, (int64_t)handle);
|
SCliThrd* pThrd = transGetWorkThrdFromHandle(NULL, (int64_t)handle);
|
||||||
if (pThrd == NULL) {
|
if (pThrd == NULL) {
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
STransMsg tmsg = {.info.handle = handle, .info.ahandle = (void*)0x9527};
|
STransMsg tmsg = {.info.handle = handle, .info.ahandle = (void*)0x9527};
|
||||||
|
@ -2535,7 +2535,7 @@ int transReleaseCliHandle(void* handle) {
|
||||||
|
|
||||||
if (0 != transAsyncSend(pThrd->asyncPool, &cmsg->q)) {
|
if (0 != transAsyncSend(pThrd->asyncPool, &cmsg->q)) {
|
||||||
destroyCmsg(cmsg);
|
destroyCmsg(cmsg);
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2544,7 +2544,7 @@ int transSendRequest(void* shandle, const SEpSet* pEpSet, STransMsg* pReq, STran
|
||||||
STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle);
|
STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
if (pTransInst == NULL) {
|
if (pTransInst == NULL) {
|
||||||
transFreeMsg(pReq->pCont);
|
transFreeMsg(pReq->pCont);
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
||||||
|
@ -2577,7 +2577,7 @@ int transSendRequest(void* shandle, const SEpSet* pEpSet, STransMsg* pReq, STran
|
||||||
if (0 != transAsyncSend(pThrd->asyncPool, &(cliMsg->q))) {
|
if (0 != transAsyncSend(pThrd->asyncPool, &(cliMsg->q))) {
|
||||||
destroyCmsg(cliMsg);
|
destroyCmsg(cliMsg);
|
||||||
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2589,7 +2589,7 @@ int transSendRecv(void* shandle, const SEpSet* pEpSet, STransMsg* pReq, STransMs
|
||||||
if (pTransInst == NULL) {
|
if (pTransInst == NULL) {
|
||||||
transFreeMsg(pReq->pCont);
|
transFreeMsg(pReq->pCont);
|
||||||
taosMemoryFree(pTransRsp);
|
taosMemoryFree(pTransRsp);
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
||||||
|
@ -2627,6 +2627,7 @@ int transSendRecv(void* shandle, const SEpSet* pEpSet, STransMsg* pReq, STransMs
|
||||||
int ret = transAsyncSend(pThrd->asyncPool, &cliMsg->q);
|
int ret = transAsyncSend(pThrd->asyncPool, &cliMsg->q);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
destroyCmsg(cliMsg);
|
destroyCmsg(cliMsg);
|
||||||
|
ret = TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
goto _RETURN;
|
goto _RETURN;
|
||||||
}
|
}
|
||||||
tsem_wait(sem);
|
tsem_wait(sem);
|
||||||
|
@ -2661,7 +2662,7 @@ int transSendRecvWithTimeout(void* shandle, SEpSet* pEpSet, STransMsg* pReq, STr
|
||||||
if (pTransInst == NULL) {
|
if (pTransInst == NULL) {
|
||||||
transFreeMsg(pReq->pCont);
|
transFreeMsg(pReq->pCont);
|
||||||
taosMemoryFree(pTransMsg);
|
taosMemoryFree(pTransMsg);
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
SCliThrd* pThrd = transGetWorkThrd(pTransInst, (int64_t)pReq->info.handle);
|
||||||
|
@ -2698,6 +2699,7 @@ int transSendRecvWithTimeout(void* shandle, SEpSet* pEpSet, STransMsg* pReq, STr
|
||||||
int ret = transAsyncSend(pThrd->asyncPool, &cliMsg->q);
|
int ret = transAsyncSend(pThrd->asyncPool, &cliMsg->q);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
destroyCmsg(cliMsg);
|
destroyCmsg(cliMsg);
|
||||||
|
ret = TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
goto _RETURN;
|
goto _RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2726,7 +2728,7 @@ _RETURN:
|
||||||
int transSetDefaultAddr(void* shandle, const char* ip, const char* fqdn) {
|
int transSetDefaultAddr(void* shandle, const char* ip, const char* fqdn) {
|
||||||
STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle);
|
STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
if (pTransInst == NULL) {
|
if (pTransInst == NULL) {
|
||||||
return -1;
|
return TSDB_CODE_RPC_BROKEN_LINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCvtAddr cvtAddr = {0};
|
SCvtAddr cvtAddr = {0};
|
||||||
|
@ -2750,7 +2752,6 @@ int transSetDefaultAddr(void* shandle, const char* ip, const char* fqdn) {
|
||||||
if (transAsyncSend(thrd->asyncPool, &(cliMsg->q)) != 0) {
|
if (transAsyncSend(thrd->asyncPool, &(cliMsg->q)) != 0) {
|
||||||
destroyCmsg(cliMsg);
|
destroyCmsg(cliMsg);
|
||||||
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
transReleaseExHandle(transGetInstMgt(), (int64_t)shandle);
|
||||||
|
|
|
@ -159,7 +159,7 @@ static void uvStartSendResp(SSvrMsg* msg);
|
||||||
|
|
||||||
static void uvNotifyLinkBrokenToApp(SSvrConn* conn);
|
static void uvNotifyLinkBrokenToApp(SSvrConn* conn);
|
||||||
|
|
||||||
static FORCE_INLINE void destroySmsg(SSvrMsg* smsg);
|
static FORCE_INLINE void destroySmsg(SSvrMsg* smsg);
|
||||||
static FORCE_INLINE SSvrConn* createConn(void* hThrd);
|
static FORCE_INLINE SSvrConn* createConn(void* hThrd);
|
||||||
static FORCE_INLINE void destroyConn(SSvrConn* conn, bool clear /*clear handle or not*/);
|
static FORCE_INLINE void destroyConn(SSvrConn* conn, bool clear /*clear handle or not*/);
|
||||||
static FORCE_INLINE void destroyConnRegArg(SSvrConn* conn);
|
static FORCE_INLINE void destroyConnRegArg(SSvrConn* conn);
|
||||||
|
@ -1382,7 +1382,7 @@ void uvHandleUpdate(SSvrMsg* msg, SWorkThrd* thrd) {
|
||||||
tFreeSUpdateIpWhiteReq(req);
|
tFreeSUpdateIpWhiteReq(req);
|
||||||
taosMemoryFree(req);
|
taosMemoryFree(req);
|
||||||
} else {
|
} else {
|
||||||
tInfo("ip-white-list disable on trans");
|
tDebug("ip-white-list disable on trans");
|
||||||
thrd->enableIpWhiteList = 0;
|
thrd->enableIpWhiteList = 0;
|
||||||
}
|
}
|
||||||
taosMemoryFree(msg);
|
taosMemoryFree(msg);
|
||||||
|
|
|
@ -56,6 +56,8 @@ int32_t taosGetAppName(char* name, int32_t* len) {
|
||||||
char* end = strrchr(filepath, TD_DIRSEP[0]);
|
char* end = strrchr(filepath, TD_DIRSEP[0]);
|
||||||
if (end == NULL) {
|
if (end == NULL) {
|
||||||
end = filepath;
|
end = filepath;
|
||||||
|
} else {
|
||||||
|
end += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tstrncpy(name, end, TSDB_APP_NAME_LEN);
|
tstrncpy(name, end, TSDB_APP_NAME_LEN);
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
|
#include "tbase58.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#define BASE_BUF_SIZE 256
|
||||||
|
static const char *basis_58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||||
|
|
||||||
|
char *base58_encode(const uint8_t *value, int32_t vlen) {
|
||||||
|
const uint8_t *pb = value;
|
||||||
|
const uint8_t *pe = pb + vlen;
|
||||||
|
uint8_t buf[BASE_BUF_SIZE] = {0};
|
||||||
|
uint8_t *pbuf = &buf[0];
|
||||||
|
bool bfree = false;
|
||||||
|
int32_t nz = 0, size = 0, len = 0;
|
||||||
|
|
||||||
|
while (pb != pe && *pb == 0) {
|
||||||
|
++pb;
|
||||||
|
++nz;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = (pe - pb) * 69 / 50 + 1;
|
||||||
|
if (size > BASE_BUF_SIZE) {
|
||||||
|
if (!(pbuf = taosMemoryCalloc(1, size))) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
bfree = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (pb != pe) {
|
||||||
|
int32_t num = *pb;
|
||||||
|
int32_t i = 0;
|
||||||
|
for (int32_t j = (int32_t)size - 1; (num != 0 || i < len) && j >= 0; --j, ++i) {
|
||||||
|
num += ((int32_t)buf[j]) << 8;
|
||||||
|
pbuf[j] = num % 58;
|
||||||
|
num /= 58;
|
||||||
|
}
|
||||||
|
len = i;
|
||||||
|
++pb;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t *pi = pbuf + (size - len);
|
||||||
|
while (pi != pbuf + size && *pi == 0) ++pi;
|
||||||
|
uint8_t *result = taosMemoryCalloc(1, size + 1);
|
||||||
|
if (!result) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
memset(result, '1', nz);
|
||||||
|
while (pi != pbuf + size) result[nz++] = basis_58[*pi++];
|
||||||
|
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const signed char index_58[256] = {
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18, 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, 28,
|
||||||
|
29, 30, 31, 32, -1, -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, 48, 49, 50,
|
||||||
|
51, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
|
||||||
|
|
||||||
|
uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) {
|
||||||
|
const char *pe = value + inlen;
|
||||||
|
uint8_t buf[BASE_BUF_SIZE] = {0};
|
||||||
|
uint8_t *pbuf = &buf[0];
|
||||||
|
bool bfree = false;
|
||||||
|
int32_t nz = 0, size = 0, len = 0;
|
||||||
|
|
||||||
|
while (*value && isspace(*value)) ++value;
|
||||||
|
while (*value == '1') {
|
||||||
|
++nz;
|
||||||
|
++value;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = (int32_t)(pe - value) * 733 / 1000 + 1;
|
||||||
|
if (size > BASE_BUF_SIZE) {
|
||||||
|
if (!(pbuf = taosMemoryCalloc(1, size))) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
bfree = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*value && !isspace(*value)) {
|
||||||
|
int32_t num = index_58[(uint8_t)*value];
|
||||||
|
if (num == -1) {
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
int32_t i = 0;
|
||||||
|
for (int32_t j = size - 1; (num != 0 || i < len) && (j >= 0); --j, ++i) {
|
||||||
|
num += (int32_t)pbuf[j] * 58;
|
||||||
|
pbuf[j] = num & 255;
|
||||||
|
num >>= 8;
|
||||||
|
}
|
||||||
|
len = i;
|
||||||
|
++value;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (isspace(*value)) ++value;
|
||||||
|
if (*value != 0) {
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
const uint8_t *it = pbuf + (size - len);
|
||||||
|
while (it != pbuf + size && *it == 0) ++it;
|
||||||
|
|
||||||
|
uint8_t *result = taosMemoryCalloc(1, size + 1);
|
||||||
|
if (!result) {
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(result, 0, nz);
|
||||||
|
while (it != pbuf + size) result[nz++] = *it++;
|
||||||
|
|
||||||
|
if (outlen) *outlen = nz;
|
||||||
|
|
||||||
|
if (bfree) taosMemoryFree(pbuf);
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "tbase64.h"
|
#include "tbase64.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
|
||||||
|
|
|
@ -977,6 +977,7 @@ int32_t tsDecompressDoubleLossyImp(const char *input, int32_t compressedSize, co
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BUILD_NO_CALL
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* STREAM COMPRESSION
|
* STREAM COMPRESSION
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
@ -2120,7 +2121,7 @@ int32_t tCompressEnd(SCompressor *pCmprsor, const uint8_t **ppOut, int32_t *nOut
|
||||||
int32_t tCompress(SCompressor *pCmprsor, const void *pData, int64_t nData) {
|
int32_t tCompress(SCompressor *pCmprsor, const void *pData, int64_t nData) {
|
||||||
return DATA_TYPE_INFO[pCmprsor->type].cmprFn(pCmprsor, pData, nData);
|
return DATA_TYPE_INFO[pCmprsor->type].cmprFn(pCmprsor, pData, nData);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* REGULAR COMPRESSION
|
* REGULAR COMPRESSION
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
|
@ -336,7 +336,7 @@ static int32_t cfgUpdateDebugFlagItem(SConfig *pCfg, const char *name, bool rese
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcType stype) {
|
int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcType stype) {
|
||||||
GRANT_CFG_SET;
|
// GRANT_CFG_SET;
|
||||||
SConfigItem *pItem = cfgGetItem(pCfg, name);
|
SConfigItem *pItem = cfgGetItem(pCfg, name);
|
||||||
if (pItem == NULL) {
|
if (pItem == NULL) {
|
||||||
terrno = TSDB_CODE_CFG_NOT_FOUND;
|
terrno = TSDB_CODE_CFG_NOT_FOUND;
|
||||||
|
|
|
@ -48,6 +48,10 @@ char* taosDesImp(uint8_t* key, char* src, uint32_t len, int32_t process_mode) {
|
||||||
key_set key_sets[17];
|
key_set key_sets[17];
|
||||||
memset(key_sets, 0, sizeof(key_sets));
|
memset(key_sets, 0, sizeof(key_sets));
|
||||||
char* dest = taosMemoryCalloc(len + 1, 1);
|
char* dest = taosMemoryCalloc(len + 1, 1);
|
||||||
|
if (!dest) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
generate_sub_keys(key, key_sets);
|
generate_sub_keys(key, key_sets);
|
||||||
|
|
||||||
for (uint32_t block_count = 0; block_count < number_of_blocks; block_count++) {
|
for (uint32_t block_count = 0; block_count < number_of_blocks; block_count++) {
|
||||||
|
@ -61,7 +65,10 @@ char* taosDesImp(uint8_t* key, char* src, uint32_t len, int32_t process_mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char* taosDesEncode(int64_t key, char* src, int32_t len) {
|
char* taosDesEncode(int64_t key, char* src, int32_t len) {
|
||||||
if (len % 8 != 0) return NULL;
|
if (len % 8 != 0) {
|
||||||
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
uint8_t* keyStr = (uint8_t*)(&key);
|
uint8_t* keyStr = (uint8_t*)(&key);
|
||||||
return taosDesImp(keyStr, src, len, ENCRYPTION_MODE);
|
return taosDesImp(keyStr, src, len, ENCRYPTION_MODE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -346,6 +346,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_ALREADY_IS_VOTER, "Mnode already is a le
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_ONLY_TWO_MNODE, "Only two mnodes exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_ONLY_TWO_MNODE, "Only two mnodes exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_NO_NEED_RESTORE, "No need to restore on this dnode")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_NO_NEED_RESTORE, "No need to restore on this dnode")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_ONLY_USE_WHEN_OFFLINE, "Please use this command when the dnode is offline")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_ONLY_USE_WHEN_OFFLINE, "Please use this command when the dnode is offline")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_NO_MACHINE_CODE, "Dnode can not get machine code")
|
||||||
|
|
||||||
// vnode
|
// vnode
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VGROUP_ID, "Vnode is closed or removed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VGROUP_ID, "Vnode is closed or removed")
|
||||||
|
@ -417,7 +418,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_CANCELLED, "Task cancelled")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_DROPPED, "Task dropped")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_DROPPED, "Task dropped")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_CANCELLING, "Task cancelling")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_CANCELLING, "Task cancelling")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_DROPPING, "Task dropping")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_DROPPING, "Task dropping")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_DUPLICATTED_OPERATION, "Duplicatted operation")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_DUPLICATED_OPERATION, "Duplicated operation")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_MSG_ERROR, "Task message error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_MSG_ERROR, "Task message error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JOB_FREED, "Job already freed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JOB_FREED, "Job already freed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_STATUS_ERROR, "Task status error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_TASK_STATUS_ERROR, "Task status error")
|
||||||
|
@ -432,26 +433,37 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR, "Executor internal err
|
||||||
|
|
||||||
// grant
|
// grant
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, "License expired")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, "License expired")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DNODE_LIMITED, "DNode creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DNODE_LIMITED, "Number of dnodes has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_ACCT_LIMITED, "Account creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_ACCT_LIMITED, "Number of accounts has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TIMESERIES_LIMITED, "Time series limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TIMESERIES_LIMITED, "Number of time series has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DB_LIMITED, "DB creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DB_LIMITED, "Number of DBs has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_USER_LIMITED, "User creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_USER_LIMITED, "Number of users has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CONN_LIMITED, "Conn creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CONN_LIMITED, "Number of connections has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STREAM_LIMITED, "Stream creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STREAM_LIMITED, "Number of streams has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_SPEED_LIMITED, "Write speed limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_SPEED_LIMITED, "Write speed has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STORAGE_LIMITED, "Storage capacity limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STORAGE_LIMITED, "Storage capacity has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_QUERYTIME_LIMITED, "Query time limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_SUBSCRIPTION_LIMITED, "Number of subscriptions has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CPU_LIMITED, "CPU cores limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CPU_LIMITED, "Number of CPU cores has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STABLE_LIMITED, "STable creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_STABLE_LIMITED, "Number of stables has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TABLE_LIMITED, "Table creation limited by license")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TABLE_LIMITED, "Number of tables has reached the licensed upper limit")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_IVLD_ACTIVE, "Invalid active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_IVLD_ACTIVE, "Invalid active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_IVLD_KEY, "Invalid key to parse active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_IVLD_KEY, "Invalid key to parse active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_DEC_IVLD_KEY, "Invalid key to decode active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_DEC_IVLD_KEY, "Invalid key to decode active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_DEC_IVLD_KLEN, "Invalid klen to decode active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_DEC_IVLD_KLEN, "Invalid klen to decode active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_IVLD_KEY, "Invalid key to gen active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_IVLD_KEY, "Invalid key to gen active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_APP_LIMIT, "Limited app num to gen active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_ACTIVE_LEN, "Exceeded active len to gen active code")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_ENC_IVLD_KLEN, "Invalid klen to encode active code")
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_GEN_ENC_IVLD_KLEN, "Invalid klen to encode active code")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_PAR_IVLD_DIST, "Invalid dist to parse active code")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_UNLICENSED_CLUSTER, "Illegal operation, the license is being used by an unlicensed cluster")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_LACK_OF_BASIC, "Lack of basic functions in active code")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_OBJ_NOT_EXIST, "Grant object not exist")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_LAST_ACTIVE_NOT_FOUND, "The historial active code does not match")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_MACHINES_MISMATCH, "Cluster machines mismatch with active code")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_OPT_EXPIRE_TOO_LARGE, "Expire time of optional grant item is too large")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_DUPLICATED_ACTIVE, "The active code can't be activated repeatedly")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_VIEW_LIMITED, "Number of view has reached the licensed upper limit")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_CSV_LIMITED, "Csv has reached the licensed upper limit")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_AUDIT_LIMITED, "Audit has reached the licensed upper limit")
|
||||||
|
|
||||||
// sync
|
// sync
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_TIMEOUT, "Sync timeout")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_TIMEOUT, "Sync timeout")
|
||||||
|
@ -594,7 +606,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_WINDOW_NOT_ALLOWED_FUNC, "Window not allowed"
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_STREAM_NOT_ALLOWED_FUNC, "Stream not allowed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_STREAM_NOT_ALLOWED_FUNC, "Stream not allowed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC, "Group by not allowd")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC, "Group by not allowd")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Invalid interp clause")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Invalid interp clause")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN, "Not valid function ion window")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN, "Not valid function in window")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE, "Only support single table")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE, "Only support single table")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SMA_INDEX, "Invalid sma index")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SMA_INDEX, "Invalid sma index")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SELECTED_EXPR, "Invalid SELECTed expression")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_SELECTED_EXPR, "Invalid SELECTed expression")
|
||||||
|
|
|
@ -159,6 +159,7 @@ void taosFreeQitem(void *pItem) {
|
||||||
int32_t taosWriteQitem(STaosQueue *queue, void *pItem) {
|
int32_t taosWriteQitem(STaosQueue *queue, void *pItem) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
STaosQnode *pNode = (STaosQnode *)(((char *)pItem) - sizeof(STaosQnode));
|
STaosQnode *pNode = (STaosQnode *)(((char *)pItem) - sizeof(STaosQnode));
|
||||||
|
pNode->timestamp = taosGetTimestampUs();
|
||||||
pNode->next = NULL;
|
pNode->next = NULL;
|
||||||
|
|
||||||
taosThreadMutexLock(&queue->mutex);
|
taosThreadMutexLock(&queue->mutex);
|
||||||
|
@ -464,6 +465,7 @@ int32_t taosReadAllQitemsFromQset(STaosQset *qset, STaosQall *qall, SQueueInfo *
|
||||||
qinfo->ahandle = queue->ahandle;
|
qinfo->ahandle = queue->ahandle;
|
||||||
qinfo->fp = queue->itemsFp;
|
qinfo->fp = queue->itemsFp;
|
||||||
qinfo->queue = queue;
|
qinfo->queue = queue;
|
||||||
|
qinfo->timestamp = queue->head->timestamp;
|
||||||
|
|
||||||
queue->head = NULL;
|
queue->head = NULL;
|
||||||
queue->tail = NULL;
|
queue->tail = NULL;
|
||||||
|
@ -489,8 +491,8 @@ int32_t taosReadAllQitemsFromQset(STaosQset *qset, STaosQall *qall, SQueueInfo *
|
||||||
int32_t taosQallItemSize(STaosQall *qall) { return qall->numOfItems; }
|
int32_t taosQallItemSize(STaosQall *qall) { return qall->numOfItems; }
|
||||||
int64_t taosQallMemSize(STaosQall *qall) { return qall->memOfItems; }
|
int64_t taosQallMemSize(STaosQall *qall) { return qall->memOfItems; }
|
||||||
|
|
||||||
int64_t taosQallUnAccessedItemSize(STaosQall *qall) {return qall->unAccessedNumOfItems;}
|
int64_t taosQallUnAccessedItemSize(STaosQall *qall) { return qall->unAccessedNumOfItems; }
|
||||||
int64_t taosQallUnAccessedMemSize(STaosQall *qall) {return qall->unAccessMemOfItems;}
|
int64_t taosQallUnAccessedMemSize(STaosQall *qall) { return qall->unAccessMemOfItems; }
|
||||||
|
|
||||||
void taosResetQitems(STaosQall *qall) { qall->current = qall->start; }
|
void taosResetQitems(STaosQall *qall) { qall->current = qall->start; }
|
||||||
int32_t taosGetQueueNumber(STaosQset *qset) { return qset->numOfQueues; }
|
int32_t taosGetQueueNumber(STaosQset *qset) { return qset->numOfQueues; }
|
||||||
|
|
|
@ -15,10 +15,12 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "tworker.h"
|
#include "tworker.h"
|
||||||
#include "tgeosctx.h"
|
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
|
#include "tgeosctx.h"
|
||||||
#include "tlog.h"
|
#include "tlog.h"
|
||||||
|
|
||||||
|
#define QUEUE_THRESHOLD 1000 * 1000
|
||||||
|
|
||||||
typedef void *(*ThreadFp)(void *param);
|
typedef void *(*ThreadFp)(void *param);
|
||||||
|
|
||||||
int32_t tQWorkerInit(SQWorkerPool *pool) {
|
int32_t tQWorkerInit(SQWorkerPool *pool) {
|
||||||
|
@ -84,6 +86,13 @@ static void *tQWorkerThreadFp(SQueueWorker *worker) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qinfo.timestamp != 0) {
|
||||||
|
int64_t cost = taosGetTimestampUs() - qinfo.timestamp;
|
||||||
|
if (cost > QUEUE_THRESHOLD) {
|
||||||
|
uWarn("worker:%s,message has been queued for too long, cost: %" PRId64 "s", pool->name, cost / QUEUE_THRESHOLD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (qinfo.fp != NULL) {
|
if (qinfo.fp != NULL) {
|
||||||
qinfo.workerId = worker->id;
|
qinfo.workerId = worker->id;
|
||||||
qinfo.threadNum = pool->num;
|
qinfo.threadNum = pool->num;
|
||||||
|
@ -198,6 +207,13 @@ static void *tAutoQWorkerThreadFp(SQueueWorker *worker) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qinfo.timestamp != 0) {
|
||||||
|
int64_t cost = taosGetTimestampUs() - qinfo.timestamp;
|
||||||
|
if (cost > QUEUE_THRESHOLD) {
|
||||||
|
uWarn("worker:%s,message has been queued for too long, cost: %" PRId64 "s", pool->name, cost / QUEUE_THRESHOLD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (qinfo.fp != NULL) {
|
if (qinfo.fp != NULL) {
|
||||||
qinfo.workerId = worker->id;
|
qinfo.workerId = worker->id;
|
||||||
qinfo.threadNum = taosArrayGetSize(pool->workers);
|
qinfo.threadNum = taosArrayGetSize(pool->workers);
|
||||||
|
@ -338,6 +354,13 @@ static void *tWWorkerThreadFp(SWWorker *worker) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qinfo.timestamp != 0) {
|
||||||
|
int64_t cost = taosGetTimestampUs() - qinfo.timestamp;
|
||||||
|
if (cost > QUEUE_THRESHOLD) {
|
||||||
|
uWarn("worker:%s,message has been queued for too long, cost: %" PRId64 "s", pool->name, cost / QUEUE_THRESHOLD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (qinfo.fp != NULL) {
|
if (qinfo.fp != NULL) {
|
||||||
qinfo.workerId = worker->id;
|
qinfo.workerId = worker->id;
|
||||||
qinfo.threadNum = pool->num;
|
qinfo.threadNum = pool->num;
|
||||||
|
|
|
@ -35,8 +35,8 @@
|
||||||
"start_timestamp":"now-12d",
|
"start_timestamp":"now-12d",
|
||||||
"columns": [
|
"columns": [
|
||||||
{ "type": "bool", "name": "bc"},
|
{ "type": "bool", "name": "bc"},
|
||||||
{ "type": "float", "name": "fc" },
|
{ "type": "float", "name": "fc", "min": 100, "max": 100},
|
||||||
{ "type": "double", "name": "dc"},
|
{ "type": "double", "name": "dc", "min": 200, "max": 200},
|
||||||
{ "type": "tinyint", "name": "ti"},
|
{ "type": "tinyint", "name": "ti"},
|
||||||
{ "type": "smallint", "name": "si" },
|
{ "type": "smallint", "name": "si" },
|
||||||
{ "type": "int", "name": "ic" },
|
{ "type": "int", "name": "ic" },
|
||||||
|
|
|
@ -29,7 +29,11 @@ from frame import *
|
||||||
|
|
||||||
class TDTestCase(TBase):
|
class TDTestCase(TBase):
|
||||||
updatecfgDict = {
|
updatecfgDict = {
|
||||||
"countAlwaysReturnValue" : "0"
|
"countAlwaysReturnValue" : "0",
|
||||||
|
"lossyColumns" : "float,double",
|
||||||
|
"fPrecision" : "0.000000001",
|
||||||
|
"dPrecision" : "0.00000000000000001",
|
||||||
|
"ifAdtFse" : "1"
|
||||||
}
|
}
|
||||||
|
|
||||||
def insertData(self):
|
def insertData(self):
|
||||||
|
@ -48,6 +52,18 @@ class TDTestCase(TBase):
|
||||||
sql = f"create table {self.db}.ta(ts timestamp, age int) tags(area int)"
|
sql = f"create table {self.db}.ta(ts timestamp, age int) tags(area int)"
|
||||||
tdSql.execute(sql)
|
tdSql.execute(sql)
|
||||||
|
|
||||||
|
def checkFloatDouble(self):
|
||||||
|
sql = f"select * from {self.db}.{self.stb} where fc!=100"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = f"select count(*) from {self.db}.{self.stb} where dc!=200"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = f"select avg(fc) from {self.db}.{self.stb}"
|
||||||
|
tdSql.checkFirstValue(sql, 100)
|
||||||
|
sql = f"select avg(dc) from {self.db}.{self.stb}"
|
||||||
|
tdSql.checkFirstValue(sql, 200)
|
||||||
|
|
||||||
def doAction(self):
|
def doAction(self):
|
||||||
tdLog.info(f"do action.")
|
tdLog.info(f"do action.")
|
||||||
self.flushDb()
|
self.flushDb()
|
||||||
|
@ -85,6 +101,9 @@ class TDTestCase(TBase):
|
||||||
# check insert data correct
|
# check insert data correct
|
||||||
self.checkInsertCorrect()
|
self.checkInsertCorrect()
|
||||||
|
|
||||||
|
# check float double value ok
|
||||||
|
self.checkFloatDouble()
|
||||||
|
|
||||||
# save
|
# save
|
||||||
self.snapshotAgg()
|
self.snapshotAgg()
|
||||||
|
|
||||||
|
@ -97,6 +116,10 @@ class TDTestCase(TBase):
|
||||||
# check insert correct again
|
# check insert correct again
|
||||||
self.checkInsertCorrect()
|
self.checkInsertCorrect()
|
||||||
|
|
||||||
|
# check float double value ok
|
||||||
|
self.checkFloatDouble()
|
||||||
|
|
||||||
|
|
||||||
tdLog.success(f"{__file__} successfully executed")
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
{
|
||||||
|
"filetype": "insert",
|
||||||
|
"cfgdir": "/etc/taos",
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"port": 6030,
|
||||||
|
"user": "root",
|
||||||
|
"password": "taosdata",
|
||||||
|
"connection_pool_size": 8,
|
||||||
|
"num_of_records_per_req": 3000,
|
||||||
|
"prepared_rand": 3000,
|
||||||
|
"thread_count": 2,
|
||||||
|
"create_table_thread_count": 1,
|
||||||
|
"confirm_parameter_prompt": "no",
|
||||||
|
"databases": [
|
||||||
|
{
|
||||||
|
"dbinfo": {
|
||||||
|
"name": "db",
|
||||||
|
"drop": "yes",
|
||||||
|
"vgroups": 2,
|
||||||
|
"replica": 3,
|
||||||
|
"wal_retention_period": 10,
|
||||||
|
"wal_retention_size": 100,
|
||||||
|
"keep": "60d,120d,365d",
|
||||||
|
"stt_trigger": 1,
|
||||||
|
"wal_level": 2,
|
||||||
|
"WAL_FSYNC_PERIOD": 3300,
|
||||||
|
"cachemodel": "'last_value'",
|
||||||
|
"TABLE_PREFIX":1,
|
||||||
|
"comp": 1
|
||||||
|
},
|
||||||
|
"super_tables": [
|
||||||
|
{
|
||||||
|
"name": "stb",
|
||||||
|
"child_table_exists": "no",
|
||||||
|
"childtable_count": 10,
|
||||||
|
"insert_rows": 100000,
|
||||||
|
"childtable_prefix": "d",
|
||||||
|
"insert_mode": "taosc",
|
||||||
|
"timestamp_step": 1000,
|
||||||
|
"start_timestamp":"now-360d",
|
||||||
|
"columns": [
|
||||||
|
{ "type": "bool", "name": "bc","max": 1,"min": 1},
|
||||||
|
{ "type": "float", "name": "fc" ,"max": 101,"min": 101},
|
||||||
|
{ "type": "double", "name": "dc" ,"max": 102,"min": 102},
|
||||||
|
{ "type": "tinyint", "name": "ti" ,"max": 103,"min": 103},
|
||||||
|
{ "type": "smallint", "name": "si" ,"max": 104,"min": 104},
|
||||||
|
{ "type": "int", "name": "ic" ,"max": 105,"min": 105},
|
||||||
|
{ "type": "bigint", "name": "bi" ,"max": 106,"min": 106},
|
||||||
|
{ "type": "utinyint", "name": "uti","max": 107,"min": 107},
|
||||||
|
{ "type": "usmallint", "name": "usi","max": 108,"min": 108},
|
||||||
|
{ "type": "uint", "name": "ui" ,"max": 109,"min": 109},
|
||||||
|
{ "type": "ubigint", "name": "ubi","max": 110,"min": 110},
|
||||||
|
{ "type": "binary", "name": "bin", "len": 16},
|
||||||
|
{ "type": "nchar", "name": "nch", "len": 32}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
{"type": "tinyint", "name": "groupid","max": 100,"min": 100},
|
||||||
|
{"name": "location","type": "binary", "len": 16, "values":
|
||||||
|
["San Francisco", "Los Angles", "San Diego", "San Jose", "Palo Alto", "Campbell", "Mountain View","Sunnyvale", "Santa Clara", "Cupertino"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
###################################################################
|
||||||
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is proprietary and confidential to TAOS Technologies.
|
||||||
|
# No part of this file may be reproduced, stored, transmitted,
|
||||||
|
# disclosed or used in any form or by any means other than as
|
||||||
|
# expressly provided by the written permission from Jianhui Tao
|
||||||
|
#
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
|
||||||
|
import taos
|
||||||
|
import frame
|
||||||
|
import frame.etool
|
||||||
|
|
||||||
|
|
||||||
|
from frame.log import *
|
||||||
|
from frame.cases import *
|
||||||
|
from frame.sql import *
|
||||||
|
from frame.caseBase import *
|
||||||
|
from frame import *
|
||||||
|
|
||||||
|
|
||||||
|
class TDTestCase(TBase):
|
||||||
|
updatecfgDict = {
|
||||||
|
"compressMsgSize" : "100",
|
||||||
|
}
|
||||||
|
|
||||||
|
def insertData(self):
|
||||||
|
tdLog.info(f"insert data.")
|
||||||
|
# taosBenchmark run
|
||||||
|
jfile = etool.curFile(__file__, "oneStageComp.json")
|
||||||
|
etool.benchMark(json=jfile)
|
||||||
|
|
||||||
|
tdSql.execute(f"use {self.db}")
|
||||||
|
# set insert data information
|
||||||
|
self.childtable_count = 10
|
||||||
|
self.insert_rows = 100000
|
||||||
|
self.timestamp_step = 1000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def checkColValueCorrect(self):
|
||||||
|
tdLog.info(f"do action.")
|
||||||
|
self.flushDb()
|
||||||
|
|
||||||
|
# check all columns correct
|
||||||
|
cnt = self.insert_rows * self.childtable_count
|
||||||
|
sql = "select * from stb where bc!=1"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where fc=101"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(cnt)
|
||||||
|
sql = "select * from stb where dc!=102"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where ti!=103"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where si!=104"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where ic!=105"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where bi!=106"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where uti!=107"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where usi!=108"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where ui!=109"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where ubi!=110"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
|
||||||
|
def insertNull(self):
|
||||||
|
# insert 6 lines
|
||||||
|
sql = "insert into d0(ts) values(now) (now + 1s) (now + 2s) (now + 3s) (now + 4s) (now + 5s)"
|
||||||
|
tdSql.execute(sql)
|
||||||
|
|
||||||
|
self.flushDb()
|
||||||
|
self.trimDb()
|
||||||
|
|
||||||
|
# check all columns correct
|
||||||
|
cnt = self.insert_rows * self.childtable_count
|
||||||
|
sql = "select * from stb where bc!=1"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
sql = "select * from stb where bc is null"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(6)
|
||||||
|
sql = "select * from stb where bc=1"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(cnt)
|
||||||
|
sql = "select * from stb where usi is null"
|
||||||
|
tdSql.query(sql)
|
||||||
|
tdSql.checkRows(6)
|
||||||
|
|
||||||
|
# run
|
||||||
|
def run(self):
|
||||||
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
|
||||||
|
# insert data
|
||||||
|
self.insertData()
|
||||||
|
|
||||||
|
# check insert data correct
|
||||||
|
self.checkInsertCorrect()
|
||||||
|
|
||||||
|
# save
|
||||||
|
self.snapshotAgg()
|
||||||
|
|
||||||
|
# do action
|
||||||
|
self.checkColValueCorrect()
|
||||||
|
|
||||||
|
# check save agg result correct
|
||||||
|
self.checkAggCorrect()
|
||||||
|
|
||||||
|
# insert null
|
||||||
|
self.insertNull()
|
||||||
|
|
||||||
|
|
||||||
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -128,7 +128,7 @@ class TDTestCase(TBase):
|
||||||
self.checkInsertCorrect()
|
self.checkInsertCorrect()
|
||||||
|
|
||||||
# check stream correct and drop stream
|
# check stream correct and drop stream
|
||||||
# self.checkStreamCorrect()
|
#self.checkStreamCorrect()
|
||||||
|
|
||||||
# drop stream
|
# drop stream
|
||||||
self.dropStream(self.sname)
|
self.dropStream(self.sname)
|
||||||
|
|
|
@ -65,7 +65,7 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query('select count(*),db_name, stable_name from information_schema.ins_tables group by db_name, stable_name;')
|
tdSql.query('select count(*),db_name, stable_name from information_schema.ins_tables group by db_name, stable_name;')
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0, 0, 26)
|
tdSql.checkData(0, 0, 29)
|
||||||
tdSql.checkData(0, 1, 'information_schema')
|
tdSql.checkData(0, 1, 'information_schema')
|
||||||
tdSql.checkData(0, 2, None)
|
tdSql.checkData(0, 2, None)
|
||||||
tdSql.checkData(1, 0, 3)
|
tdSql.checkData(1, 0, 3)
|
||||||
|
@ -77,7 +77,7 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query('select count(1) v,db_name, stable_name from information_schema.ins_tables group by db_name, stable_name order by v desc;')
|
tdSql.query('select count(1) v,db_name, stable_name from information_schema.ins_tables group by db_name, stable_name order by v desc;')
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0, 0, 26)
|
tdSql.checkData(0, 0, 29)
|
||||||
tdSql.checkData(0, 1, 'information_schema')
|
tdSql.checkData(0, 1, 'information_schema')
|
||||||
tdSql.checkData(0, 2, None)
|
tdSql.checkData(0, 2, None)
|
||||||
tdSql.checkData(1, 0, 5)
|
tdSql.checkData(1, 0, 5)
|
||||||
|
@ -93,7 +93,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(1, 1, 'performance_schema')
|
tdSql.checkData(1, 1, 'performance_schema')
|
||||||
tdSql.checkData(0, 0, 3)
|
tdSql.checkData(0, 0, 3)
|
||||||
tdSql.checkData(0, 1, 'tbl_count')
|
tdSql.checkData(0, 1, 'tbl_count')
|
||||||
tdSql.checkData(2, 0, 26)
|
tdSql.checkData(2, 0, 29)
|
||||||
tdSql.checkData(2, 1, 'information_schema')
|
tdSql.checkData(2, 1, 'information_schema')
|
||||||
|
|
||||||
tdSql.query("select count(*) from information_schema.ins_tables where db_name='tbl_count'")
|
tdSql.query("select count(*) from information_schema.ins_tables where db_name='tbl_count'")
|
||||||
|
@ -106,7 +106,7 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query('select count(*) from information_schema.ins_tables')
|
tdSql.query('select count(*) from information_schema.ins_tables')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 34)
|
tdSql.checkData(0, 0, 37)
|
||||||
|
|
||||||
|
|
||||||
tdSql.execute('create table stba (ts timestamp, c1 bool, c2 tinyint, c3 smallint, c4 int, c5 bigint, c6 float, c7 double, c8 binary(10), c9 nchar(10), c10 tinyint unsigned, c11 smallint unsigned, c12 int unsigned, c13 bigint unsigned) TAGS(t1 int, t2 binary(10), t3 double);')
|
tdSql.execute('create table stba (ts timestamp, c1 bool, c2 tinyint, c3 smallint, c4 int, c5 bigint, c6 float, c7 double, c8 binary(10), c9 nchar(10), c10 tinyint unsigned, c11 smallint unsigned, c12 int unsigned, c13 bigint unsigned) TAGS(t1 int, t2 binary(10), t3 double);')
|
||||||
|
@ -189,7 +189,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(2, 0, 5)
|
tdSql.checkData(2, 0, 5)
|
||||||
tdSql.checkData(2, 1, 'performance_schema')
|
tdSql.checkData(2, 1, 'performance_schema')
|
||||||
tdSql.checkData(2, 2, None)
|
tdSql.checkData(2, 2, None)
|
||||||
tdSql.checkData(3, 0, 26)
|
tdSql.checkData(3, 0, 29)
|
||||||
tdSql.checkData(3, 1, 'information_schema')
|
tdSql.checkData(3, 1, 'information_schema')
|
||||||
tdSql.checkData(3, 2, None)
|
tdSql.checkData(3, 2, None)
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(2, 0, 5)
|
tdSql.checkData(2, 0, 5)
|
||||||
tdSql.checkData(2, 1, 'performance_schema')
|
tdSql.checkData(2, 1, 'performance_schema')
|
||||||
tdSql.checkData(2, 2, None)
|
tdSql.checkData(2, 2, None)
|
||||||
tdSql.checkData(3, 0, 26)
|
tdSql.checkData(3, 0, 29)
|
||||||
tdSql.checkData(3, 1, 'information_schema')
|
tdSql.checkData(3, 1, 'information_schema')
|
||||||
tdSql.checkData(3, 2, None)
|
tdSql.checkData(3, 2, None)
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(0, 1, 'tbl_count')
|
tdSql.checkData(0, 1, 'tbl_count')
|
||||||
tdSql.checkData(1, 0, 5)
|
tdSql.checkData(1, 0, 5)
|
||||||
tdSql.checkData(1, 1, 'performance_schema')
|
tdSql.checkData(1, 1, 'performance_schema')
|
||||||
tdSql.checkData(2, 0, 26)
|
tdSql.checkData(2, 0, 29)
|
||||||
tdSql.checkData(2, 1, 'information_schema')
|
tdSql.checkData(2, 1, 'information_schema')
|
||||||
|
|
||||||
tdSql.query("select count(*) from information_schema.ins_tables where db_name='tbl_count'")
|
tdSql.query("select count(*) from information_schema.ins_tables where db_name='tbl_count'")
|
||||||
|
@ -228,7 +228,7 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query('select count(*) from information_schema.ins_tables')
|
tdSql.query('select count(*) from information_schema.ins_tables')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 35)
|
tdSql.checkData(0, 0, 38)
|
||||||
|
|
||||||
|
|
||||||
tdSql.execute('drop database tbl_count')
|
tdSql.execute('drop database tbl_count')
|
||||||
|
|
|
@ -23,7 +23,7 @@ fi
|
||||||
,,y,army,./pytest.sh python3 ./test.py -f community/query/query_basic.py -N 3
|
,,y,army,./pytest.sh python3 ./test.py -f community/query/query_basic.py -N 3
|
||||||
,,y,army,./pytest.sh python3 ./test.py -f community/cluster/splitVgroupByLearner.py -N 3
|
,,y,army,./pytest.sh python3 ./test.py -f community/cluster/splitVgroupByLearner.py -N 3
|
||||||
,,n,army,python3 ./test.py -f community/cmdline/fullopt.py
|
,,n,army,python3 ./test.py -f community/cmdline/fullopt.py
|
||||||
|
,,y,army,./pytest.sh python3 ./test.py -f community/storage/oneStageComp.py -N 3 -L 3 -D 1
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -230,6 +230,7 @@ fi
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -i True
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -i True
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -n 3 -i True
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -n 3 -i True
|
||||||
|
,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform.py -N 2 -n 1
|
||||||
,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 2 -n 1
|
,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 2 -n 1
|
||||||
,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 6 -n 3
|
,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 6 -n 3
|
||||||
#,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db.py -N 6 -n 3
|
#,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db.py -N 6 -n 3
|
||||||
|
|
|
@ -47,5 +47,90 @@ sql select a.*,b.* from (select * from tba1 order by ts desc) a, (select * from
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts desc) a, (select * from tba1 order by ts) b where a.ts=b.ts order by a.ts;
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:00.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts desc) a, (select * from tba1 order by ts) b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:04.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts) a, (select * from tba1 order by ts) b where a.ts=b.ts order by a.ts;
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:00.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts) a, (select * from tba1 order by ts) b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:04.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts limit 2) a, (select * from tba1 order by ts desc limit 2) b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts limit 3) a, (select * from tba1 order by ts desc limit 3) b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:03.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts limit 3) a, (select * from tba1 order by ts desc limit 3) b where a.ts=b.ts order by a.ts;
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:02.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select a.*,b.* from tba1 a, (select * from tba1 order by ts desc limit 3) b where a.ts=b.ts order by a.ts;
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:02.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from tba1 a, (select * from tba1 order by ts limit 3) b where a.ts=b.ts order by a.ts desc limit 2;
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:03.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts limit 3) a, tba1 b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:03.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts desc limit 3) a, tba1 b where a.ts=b.ts order by a.ts desc;
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:04.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select a.*,b.* from (select * from tba1 order by ts desc limit 3) a, tba1 b where a.ts=b.ts order by a.ts;
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @23-11-17 16:29:02.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -58,7 +58,7 @@ endi
|
||||||
|
|
||||||
sql select tbname from information_schema.ins_tables;
|
sql select tbname from information_schema.ins_tables;
|
||||||
print $rows $data00
|
print $rows $data00
|
||||||
if $rows != 35 then
|
if $rows != 38 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @ins_tables@ then
|
if $data00 != @ins_tables@ then
|
||||||
|
|
|
@ -53,7 +53,7 @@ sql select stable_name,count(table_name) from information_schema.ins_tables grou
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 32 then
|
if $data01 != 35 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
if $data11 != 10 then
|
||||||
|
@ -72,7 +72,7 @@ endi
|
||||||
if $data11 != 5 then
|
if $data11 != 5 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data21 != 26 then
|
if $data21 != 29 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data31 != 5 then
|
if $data31 != 5 then
|
||||||
|
@ -97,7 +97,7 @@ endi
|
||||||
if $data42 != 3 then
|
if $data42 != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data52 != 26 then
|
if $data52 != 29 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data62 != 5 then
|
if $data62 != 5 then
|
||||||
|
|
|
@ -58,7 +58,7 @@ class TDTestCase:
|
||||||
self.ins_list = ['ins_dnodes','ins_mnodes','ins_qnodes','ins_snodes','ins_cluster','ins_databases','ins_functions',\
|
self.ins_list = ['ins_dnodes','ins_mnodes','ins_qnodes','ins_snodes','ins_cluster','ins_databases','ins_functions',\
|
||||||
'ins_indexes','ins_stables','ins_tables','ins_tags','ins_columns','ins_users','ins_grants','ins_vgroups','ins_configs','ins_dnode_variables',\
|
'ins_indexes','ins_stables','ins_tables','ins_tags','ins_columns','ins_users','ins_grants','ins_vgroups','ins_configs','ins_dnode_variables',\
|
||||||
'ins_topics','ins_subscriptions','ins_streams','ins_stream_tasks','ins_vnodes','ins_user_privileges','ins_views',
|
'ins_topics','ins_subscriptions','ins_streams','ins_stream_tasks','ins_vnodes','ins_user_privileges','ins_views',
|
||||||
'ins_compacts', 'ins_compact_details']
|
'ins_compacts', 'ins_compact_details', 'ins_grants_full','ins_grants_logs', 'ins_machines']
|
||||||
self.perf_list = ['perf_connections','perf_queries','perf_consumers','perf_trans','perf_apps']
|
self.perf_list = ['perf_connections','perf_queries','perf_consumers','perf_trans','perf_apps']
|
||||||
def insert_data(self,column_dict,tbname,row_num):
|
def insert_data(self,column_dict,tbname,row_num):
|
||||||
insert_sql = self.setsql.set_insertsql(column_dict,tbname,self.binary_str,self.nchar_str)
|
insert_sql = self.setsql.set_insertsql(column_dict,tbname,self.binary_str,self.nchar_str)
|
||||||
|
@ -218,7 +218,7 @@ class TDTestCase:
|
||||||
tdSql.checkEqual(20470,len(tdSql.queryResult))
|
tdSql.checkEqual(20470,len(tdSql.queryResult))
|
||||||
|
|
||||||
tdSql.query("select * from information_schema.ins_columns where db_name ='information_schema'")
|
tdSql.query("select * from information_schema.ins_columns where db_name ='information_schema'")
|
||||||
tdSql.checkEqual(219, len(tdSql.queryResult))
|
tdSql.checkEqual(True, len(tdSql.queryResult) in range(215, 230))
|
||||||
|
|
||||||
tdSql.query("select * from information_schema.ins_columns where db_name ='performance_schema'")
|
tdSql.query("select * from information_schema.ins_columns where db_name ='performance_schema'")
|
||||||
tdSql.checkEqual(54, len(tdSql.queryResult))
|
tdSql.checkEqual(54, len(tdSql.queryResult))
|
||||||
|
@ -229,8 +229,7 @@ class TDTestCase:
|
||||||
tdSql.query(f'select * from information_schema.ins_dnodes')
|
tdSql.query(f'select * from information_schema.ins_dnodes')
|
||||||
result = tdSql.queryResult
|
result = tdSql.queryResult
|
||||||
tdSql.checkEqual(result[0][0],1)
|
tdSql.checkEqual(result[0][0],1)
|
||||||
tdSql.checkEqual(result[0][8],"")
|
tdSql.checkEqual(True, len(result[0][8]) in (0,24))
|
||||||
tdSql.checkEqual(result[0][9],"")
|
|
||||||
self.str107 = 'Hc7VCc+'
|
self.str107 = 'Hc7VCc+'
|
||||||
for t in range (10):
|
for t in range (10):
|
||||||
self.str107 += 'tP+2soIXpP'
|
self.str107 += 'tP+2soIXpP'
|
||||||
|
@ -247,11 +246,9 @@ class TDTestCase:
|
||||||
tdSql.error('alter dnode 1 "activeCode" "' + self.str109 + '"')
|
tdSql.error('alter dnode 1 "activeCode" "' + self.str109 + '"')
|
||||||
tdSql.error('alter all dnodes "activeCode" "' + self.str510 + '"')
|
tdSql.error('alter all dnodes "activeCode" "' + self.str510 + '"')
|
||||||
tdSql.query(f'select * from information_schema.ins_dnodes')
|
tdSql.query(f'select * from information_schema.ins_dnodes')
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][8],"")
|
tdSql.checkEqual(True, len(result[0][8]) in (0,24))
|
||||||
tdSql.execute('alter dnode 1 "activeCode" ""')
|
tdSql.error('alter dnode 1 "activeCode" ""')
|
||||||
tdSql.query(f'select active_code,c_active_code from information_schema.ins_dnodes')
|
tdSql.error(f'select active_code,c_active_code from information_schema.ins_dnodes')
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][0],"")
|
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][1],'')
|
|
||||||
tdSql.error('alter dnode 1 "cActiveCode" "a"')
|
tdSql.error('alter dnode 1 "cActiveCode" "a"')
|
||||||
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str107 + '"')
|
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str107 + '"')
|
||||||
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str256 + '"')
|
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str256 + '"')
|
||||||
|
@ -260,15 +257,11 @@ class TDTestCase:
|
||||||
tdSql.error('alter all dnodes "cActiveCode" "' + self.str257 + '"')
|
tdSql.error('alter all dnodes "cActiveCode" "' + self.str257 + '"')
|
||||||
tdSql.error('alter all dnodes "cActiveCode" "' + self.str254 + '"')
|
tdSql.error('alter all dnodes "cActiveCode" "' + self.str254 + '"')
|
||||||
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str510 + '"')
|
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str510 + '"')
|
||||||
tdSql.query(f'select active_code,c_active_code from information_schema.ins_dnodes')
|
tdSql.error(f'select active_code,c_active_code from information_schema.ins_dnodes')
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][0],"")
|
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][1],"")
|
|
||||||
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str109 + '"')
|
tdSql.error('alter dnode 1 "cActiveCode" "' + self.str109 + '"')
|
||||||
tdSql.query(f'show dnodes')
|
tdSql.query(f'show dnodes')
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][9],"")
|
tdSql.error(f'select c_active_code from information_schema.ins_dnodes')
|
||||||
tdSql.execute('alter all dnodes "cActiveCode" ""')
|
tdSql.error('alter all dnodes "cActiveCode" ""')
|
||||||
tdSql.query(f'select c_active_code from information_schema.ins_dnodes')
|
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][0],'')
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.prepare_data()
|
self.prepare_data()
|
||||||
|
|
|
@ -12,7 +12,8 @@ sys.path.append("./7-tmq")
|
||||||
from tmqCommon import *
|
from tmqCommon import *
|
||||||
|
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
# updatecfgDict = {'debugFlag': 135}
|
clientCfgDict = {'debugFlag': 135}
|
||||||
|
updatecfgDict = {'debugFlag': 135, 'clientCfg':clientCfgDict}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.vgroups = 2
|
self.vgroups = 2
|
||||||
|
|
|
@ -11,7 +11,9 @@ sys.path.append("./7-tmq")
|
||||||
from tmqCommon import *
|
from tmqCommon import *
|
||||||
|
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
updatecfgDict = {'debugFlag': 135}
|
clientCfgDict = {'debugFlag': 135}
|
||||||
|
updatecfgDict = {'debugFlag': 135, 'clientCfg':clientCfgDict}
|
||||||
|
|
||||||
def init(self, conn, logSql, replicaVar=1):
|
def init(self, conn, logSql, replicaVar=1):
|
||||||
self.replicaVar = int(replicaVar)
|
self.replicaVar = int(replicaVar)
|
||||||
tdLog.debug(f"start to excute {__file__}")
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
|
|
@ -186,7 +186,7 @@ class TDTestCase:
|
||||||
tmqCom.getStartCommitNotifyFromTmqsim()
|
tmqCom.getStartCommitNotifyFromTmqsim()
|
||||||
|
|
||||||
#restart dnode & remove wal
|
#restart dnode & remove wal
|
||||||
# self.restartAndRemoveWal()
|
self.restartAndRemoveWal()
|
||||||
|
|
||||||
# redistribute vgroup
|
# redistribute vgroup
|
||||||
self.redistributeVgroups();
|
self.redistributeVgroups();
|
||||||
|
@ -235,7 +235,7 @@ class TDTestCase:
|
||||||
tdSql.execute(sqlString)
|
tdSql.execute(sqlString)
|
||||||
tdSql.query("flush database %s"%(paraDict['dbName']))
|
tdSql.query("flush database %s"%(paraDict['dbName']))
|
||||||
#restart dnode & remove wal
|
#restart dnode & remove wal
|
||||||
# self.restartAndRemoveWal()
|
self.restartAndRemoveWal()
|
||||||
|
|
||||||
# redistribute vgroup
|
# redistribute vgroup
|
||||||
self.redistributeVgroups();
|
self.redistributeVgroups();
|
||||||
|
@ -313,7 +313,7 @@ class TDTestCase:
|
||||||
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
#restart dnode & remove wal
|
#restart dnode & remove wal
|
||||||
# self.restartAndRemoveWal()
|
self.restartAndRemoveWal()
|
||||||
|
|
||||||
# redistribute vgroup
|
# redistribute vgroup
|
||||||
self.redistributeVgroups()
|
self.redistributeVgroups()
|
||||||
|
|
|
@ -385,9 +385,11 @@ unsigned int optimize_intervals_double_1D_opt(double *oriData, size_t dataLength
|
||||||
totalSampleSize++;
|
totalSampleSize++;
|
||||||
pred_value = data_pos[-1];
|
pred_value = data_pos[-1];
|
||||||
pred_err = fabs(pred_value - *data_pos);
|
pred_err = fabs(pred_value - *data_pos);
|
||||||
radiusIndex = (unsigned long)((pred_err/realPrecision+1)/2);
|
double dbri = (unsigned long)((pred_err/realPrecision+1)/2);
|
||||||
if(radiusIndex>=confparams_cpr->maxRangeRadius)
|
if(dbri >= (double)confparams_cpr->maxRangeRadius)
|
||||||
radiusIndex = confparams_cpr->maxRangeRadius - 1;
|
radiusIndex = confparams_cpr->maxRangeRadius - 1;
|
||||||
|
else
|
||||||
|
radiusIndex = dbri;
|
||||||
intervals[radiusIndex]++;
|
intervals[radiusIndex]++;
|
||||||
|
|
||||||
data_pos += confparams_cpr->sampleDistance;
|
data_pos += confparams_cpr->sampleDistance;
|
||||||
|
|
Loading…
Reference in New Issue