Merge branch '3.0' of https://github.com/taosdata/TDengine into enh/TD-29367-3.0
This commit is contained in:
commit
b1c480afd1
|
@ -163,4 +163,12 @@ geos_c.h
|
|||
source/libs/parser/src/sql.c
|
||||
include/common/ttokenauto.h
|
||||
!packaging/smokeTest/pytest_require.txt
|
||||
tdengine-test-dir
|
||||
tdengine-test-dir/
|
||||
localtime.c
|
||||
private.h
|
||||
strftime.c
|
||||
tzdir.h
|
||||
tzfile.h
|
||||
coverage.info
|
||||
taos
|
||||
taosd
|
||||
|
|
|
@ -18,14 +18,14 @@ create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
|||
The parameters are explained as follows.
|
||||
|
||||
- user_name: Up to 23 B long.
|
||||
- password: Up to 128 B long, valid characters include letters and numbers as well as special characters other than single and double quotes, apostrophes, backslashes, and spaces, and it cannot be empty.
|
||||
- password: The password must be between 8 and 16 characters long and include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters. Special characters include `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`.
|
||||
- sysinfo: Whether the user can view system information. 1 means they can view it, 0 means they cannot. System information includes server configuration information, various node information such as dnode, query node (qnode), etc., as well as storage-related information, etc. The default is to view system information.
|
||||
- createdb: Whether the user can create databases. 1 means they can create databases, 0 means they cannot. The default value is 0. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||
|
||||
The following SQL can create a user named test with the password 123456 who can view system information.
|
||||
The following SQL can create a user named test with the password abc123!@# who can view system information.
|
||||
|
||||
```sql
|
||||
create user test pass '123456' sysinfo 1
|
||||
create user test pass 'abc123!@#' sysinfo 1
|
||||
```
|
||||
|
||||
### Viewing Users
|
||||
|
|
|
@ -13,16 +13,16 @@ CREATE USER user_name PASS 'password' [SYSINFO {1|0}] [CREATEDB {1|0}];
|
|||
|
||||
The username can be up to 23 bytes long.
|
||||
|
||||
The password can be up to 31 bytes long. The password can include letters, numbers, and special characters except for single quotes, double quotes, backticks, backslashes, and spaces, and it cannot be an empty string.
|
||||
The password must be between 8 and 16 characters long and include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters. Special characters include `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`.
|
||||
|
||||
`SYSINFO` indicates whether the user can view system information. `1` means they can view, `0` means they have no permission to view. System information includes service configuration, dnode, vnode, storage, etc. The default value is `1`.
|
||||
|
||||
`CREATEDB` indicates whether the user can create databases. `1` means they can create databases, `0` means they have no permission to create databases. The default value is `0`. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||
|
||||
In the example below, we create a user with the password `123456` who can view system information.
|
||||
In the example below, we create a user with the password `abc123!@#` who can view system information.
|
||||
|
||||
```sql
|
||||
taos> create user test pass '123456' sysinfo 1;
|
||||
taos> create user test pass 'abc123!@#' sysinfo 1;
|
||||
Query OK, 0 of 0 rows affected (0.001254s)
|
||||
```
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ This document details the server error codes that may be encountered when using
|
|||
| 0x80000350 | User already exists | Create user, duplicate creation | Confirm if the operation is correct |
|
||||
| 0x80000351 | Invalid user | User does not exist | Confirm if the operation is correct |
|
||||
| 0x80000352 | Invalid user format | Incorrect format | Confirm if the operation is correct |
|
||||
| 0x80000353 | Invalid password format | Incorrect format | Confirm if the operation is correct |
|
||||
| 0x80000353 | Invalid password format | The password must be between 8 and 16 characters long and include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters. | Confirm the format of the password string |
|
||||
| 0x80000354 | Can not get user from conn | Internal error | Report issue |
|
||||
| 0x80000355 | Too many users | (Enterprise only) Exceeding user limit | Adjust configuration |
|
||||
| 0x80000357 | Authentication failure | Incorrect password | Confirm if the operation is correct |
|
||||
|
|
|
@ -16,15 +16,15 @@ create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
|||
```
|
||||
|
||||
相关参数说明如下。
|
||||
- user_name:最长为 23 B。
|
||||
- password:最长为 128 B,合法字符包括字母和数字以及单双引号、撇号、反斜杠和空格以外的特殊字符,且不可以为空。
|
||||
- user_name:用户名最长不超过 23 个字节。
|
||||
- password:密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类。特殊字符包括 `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`。
|
||||
- sysinfo :用户是否可以查看系统信息。1 表示可以查看,0 表示不可以查看。系统信息包括服务端配置信息、服务端各种节点信息,如 dnode、查询节点(qnode)等,以及与存储相关的信息等。默认为可以查看系统信息。
|
||||
- createdb:用户是否可以创建数据库。1 表示可以创建,0 表示不可以创建。缺省值为 0。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||
|
||||
如下 SQL 可以创建密码为 123456 且可以查看系统信息的用户 test。
|
||||
如下 SQL 可以创建密码为 abc123!@# 且可以查看系统信息的用户 test。
|
||||
|
||||
```sql
|
||||
create user test pass '123456' sysinfo 1
|
||||
create user test pass 'abc123!@#' sysinfo 1
|
||||
```
|
||||
|
||||
### 查看用户
|
||||
|
|
|
@ -54,7 +54,7 @@ taos> SET MAX_BINARY_DISPLAY_WIDTH <nn>;
|
|||
- -h HOST: 要连接的 TDengine 服务端所在服务器的 FQDN, 默认为连接本地服务
|
||||
- -P PORT: 指定服务端所用端口号
|
||||
- -u USER: 连接时使用的用户名
|
||||
- -p PASSWORD: 连接服务端时使用的密码
|
||||
- -p PASSWORD: 连接服务端时使用的密码,特殊字符如 `! & ( ) < > ; |` 需使用字符 `\` 进行转义处理
|
||||
- -?, --help: 打印出所有命令行参数
|
||||
|
||||
还有更多其他参数:
|
||||
|
|
|
@ -64,7 +64,8 @@ database_option: {
|
|||
- DURATION:数据文件存储数据的时间跨度。可以使用加单位的表示形式,如 DURATION 100h、DURATION 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。不加时间单位时默认单位为天,如 DURATION 50 表示 50 天。
|
||||
- MAXROWS:文件块中记录的最大条数,默认为 4096 条。
|
||||
- MINROWS:文件块中记录的最小条数,默认为 100 条。
|
||||
- KEEP:表示数据文件保存的天数,缺省值为 3650,取值范围 [1, 365000],且必须大于或等于 3 倍的 DURATION 参数值。数据库会自动删除保存时间超过 KEEP 值的数据从而释放存储空间。KEEP 可以使用加单位的表示形式,如 KEEP 100h、KEEP 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。也可以不写单位,如 KEEP 50,此时默认单位为天。企业版支持[多级存储](https://docs.taosdata.com/tdinternal/arch/#%E5%A4%9A%E7%BA%A7%E5%AD%98%E5%82%A8)功能, 因此, 可以设置多个保存时间(多个以英文逗号分隔,最多 3 个,满足 keep 0 \<= keep 1 \<= keep 2,如 KEEP 100h,100d,3650d); 社区版不支持多级存储功能(即使配置了多个保存时间, 也不会生效, KEEP 会取最大的保存时间)。了解更多,请点击 [关于主键时间戳](https://docs.taosdata.com/reference/taos-sql/insert/)
|
||||
- KEEP:表示数据文件保存的天数,缺省值为 3650,取值范围 [1, 365000],且必须大于或等于 3 倍的 DURATION 参数值。数据库会自动删除保存时间超过 KEEP 值的数据从而释放存储空间。KEEP 可以使用加单位的表示形式,如 KEEP 100h、KEEP 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。也可以不写单位,如 KEEP 50,此时默认单位为天。企业版支持[多级存储](../../operation/planning/#%E5%A4%9A%E7%BA%A7%E5%AD%98%E5%82%A8)功能, 因此, 可以设置多个保存时间(多个以英文逗号分隔,最多 3 个,满足 keep 0 \<= keep 1 \<= keep 2,如 KEEP 100h,100d,3650d); 社区版不支持多级存储功能(即使配置了多个保存时间, 也不会生效, KEEP 会取最大的保存时间)。了解更多,请点击 [关于主键时间戳](https://docs.taosdata.com/reference/taos-sql/insert/)
|
||||
|
||||
- KEEP_TIME_OFFSET:自 3.2.0.0 版本生效。删除或迁移保存时间超过 KEEP 值的数据的延迟执行时间,默认值为 0 (小时)。在数据文件保存时间超过 KEEP 后,删除或迁移操作不会立即执行,而会额外等待本参数指定的时间间隔,以实现与业务高峰期错开的目的。
|
||||
- STT_TRIGGER:表示落盘文件触发文件合并的个数。开源版本固定为 1,企业版本可设置范围为 1 到 16。对于少表高频写入场景,此参数建议使用默认配置;而对于多表低频写入场景,此参数建议配置较大的值。
|
||||
- SINGLE_STABLE:表示此数据库中是否只可以创建一个超级表,用于超级表列非常多的情况。
|
||||
|
|
|
@ -14,16 +14,16 @@ CREATE USER user_name PASS 'password' [SYSINFO {1|0}] [CREATEDB {1|0}];
|
|||
|
||||
用户名最长不超过 23 个字节。
|
||||
|
||||
密码最长不超过 31 个字节。密码可以包含字母、数字以及除单引号、双引号、反引号、反斜杠和空格以外的特殊字符,密码不能为空字符串。
|
||||
密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类。特殊字符包括 `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`。
|
||||
|
||||
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
||||
|
||||
`CREATEDB` 表示该用户是否能够创建数据库。`1` 表示可以创建,`0` 表示无权创建。缺省值为 `0`。// 从 TDengine 企业版 3.3.2.0 开始支持
|
||||
|
||||
在下面的示例中,我们创建一个密码为 `123456` 且可以查看系统信息的用户。
|
||||
在下面的示例中,我们创建一个密码为 `abc123!@#` 且可以查看系统信息的用户。
|
||||
|
||||
```sql
|
||||
taos> create user test pass '123456' sysinfo 1;
|
||||
taos> create user test pass 'abc123!@#' sysinfo 1;
|
||||
Query OK, 0 of 0 rows affected (0.001254s)
|
||||
```
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/w
|
|||
|
||||
**原因**:程序没有找到依赖的本地函数库 taos。
|
||||
|
||||
**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。
|
||||
**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib /usr/lib/libtaos.dylib`。
|
||||
|
||||
3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ description: TDengine 服务端的错误码列表和详细说明
|
|||
| 0x80000350 | User already exists | Create user, 重复创建 | 确认操作是否正确 |
|
||||
| 0x80000351 | Invalid user | 用户不存在 | 确认操作是否正确 |
|
||||
| 0x80000352 | Invalid user format | 格式不正确 | 确认操作是否正确 |
|
||||
| 0x80000353 | Invalid password format | 格式不正确 | 确认操作是否正确 |
|
||||
| 0x80000353 | Invalid password format | 密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类 | 确认密码字符串的格式 |
|
||||
| 0x80000354 | Can not get user from conn | 内部错误 | 上报issue |
|
||||
| 0x80000355 | Too many users | (仅企业版)用户数量超限 | 调整配置 |
|
||||
| 0x80000357 | Authentication failure | 密码不正确 | 确认操作是否正确 |
|
||||
|
|
|
@ -281,3 +281,11 @@ https://docs.taosdata.com/reference/components/taosd/#%E7%9B%91%E6%8E%A7%E7%9B%B
|
|||
您可以随时关闭该参数,只需要在taos.cfg 中修改telemetryReporting为 0,然后重启数据库服务即可。
|
||||
代码位于:https://github.com/taosdata/TDengine/blob/62e609c558deb764a37d1a01ba84bc35115a85a4/source/dnode/mnode/impl/src/mndTelem.c
|
||||
此外,对于安全性要求极高的企业版 TDengine Enterprise 来说,此参数不会工作。
|
||||
### 31 第一次连接集群时遇到“Sync leader is unreachable”怎么办?
|
||||
报这个错,说明第一次向集群的连接是成功的,但第一次访问的IP不是mnode的leader节点,客户端试图与leader建立连接时发生错误。客户端通过EP,也就是指定的fqdn与端口号寻找leader节点,常见的报错原因有两个:
|
||||
|
||||
- 集群中其他节点的端口没有打开
|
||||
- 客户端的hosts未正确配置
|
||||
|
||||
因此用户首先要检查服务端,集群的所有端口(原生连接默认6030,http连接默认6041)有无打开;其次是客户端的hosts文件中是否配置了集群所有节点的fqdn与IP信息。
|
||||
如仍无法解决,则需要联系涛思技术人员支持。
|
||||
|
|
|
@ -86,10 +86,15 @@ int64_t tsnprintf(char *dst, int64_t size, const char *format, ...);
|
|||
char *tstrdup(const char *src);
|
||||
int32_t taosUcs4len(TdUcs4 *ucs4);
|
||||
int32_t taosStr2int64(const char *str, int64_t *val);
|
||||
int32_t taosStr2int16(const char *str, int16_t *val);
|
||||
int32_t taosStr2int32(const char *str, int32_t *val);
|
||||
int32_t taosStr2int16(const char *str, int16_t *val);
|
||||
int32_t taosStr2int8(const char *str, int8_t *val);
|
||||
|
||||
int32_t taosStr2Uint64(const char *str, uint64_t *val);
|
||||
int32_t taosStr2Uint32(const char *str, uint32_t *val);
|
||||
int32_t taosStr2Uint16(const char *str, uint16_t *val);
|
||||
int32_t taosStr2Uint8(const char *str, uint8_t *val);
|
||||
|
||||
iconv_t taosAcquireConv(int32_t *idx, ConvType type, void* charsetCxt);
|
||||
void taosReleaseConv(int32_t idx, iconv_t conv, ConvType type, void* charsetCxt);
|
||||
int32_t taosUcs4ToMbs(TdUcs4 *ucs4, int32_t ucs4_max_len, char *mbs, void* charsetCxt);
|
||||
|
|
|
@ -318,6 +318,8 @@ typedef enum ELogicConditionType {
|
|||
#define TSDB_MAX_JSON_KEY_LEN 256
|
||||
|
||||
#define TSDB_AUTH_LEN 16
|
||||
#define TSDB_PASSWORD_MIN_LEN 8
|
||||
#define TSDB_PASSWORD_MAX_LEN 16
|
||||
#define TSDB_PASSWORD_LEN 32
|
||||
#define TSDB_USET_PASSWORD_LEN 129
|
||||
#define TSDB_VERSION_LEN 32
|
||||
|
|
|
@ -227,6 +227,11 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen,
|
|||
|
||||
#define TAOS_UNUSED(expr) (void)(expr)
|
||||
|
||||
bool taosIsBigChar(char c);
|
||||
bool taosIsSmallChar(char c);
|
||||
bool taosIsNumberChar(char c);
|
||||
bool taosIsSpecialChar(char c);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -300,7 +300,13 @@ void* doConsumeData(void* param) {
|
|||
int main(int argc, char** argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
if (argc > 1) {
|
||||
numOfThreads = atoi(argv[1]);
|
||||
//numOfThreads = atoi(argv[1]);
|
||||
int32_t code = taosStr2int32(argv[1], &numOfThreads);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
numOfThreads = TMAX(numOfThreads, 1);
|
||||
|
|
|
@ -1916,6 +1916,7 @@ void s3EvictCache(const char *path, long object_size) {
|
|||
}
|
||||
|
||||
long s3Size(const char *object_name) {
|
||||
int32_t code = 0;
|
||||
long size = 0;
|
||||
|
||||
cos_pool_t *p = NULL;
|
||||
|
@ -1941,7 +1942,10 @@ long s3Size(const char *object_name) {
|
|||
if (cos_status_is_ok(s)) {
|
||||
char *content_length_str = (char *)apr_table_get(resp_headers, COS_CONTENT_LENGTH);
|
||||
if (content_length_str != NULL) {
|
||||
size = atol(content_length_str);
|
||||
code = taosStr2Int64(content_length_str, &size);
|
||||
if (code != 0) {
|
||||
cos_warn_log("parse content length failed since %s\n", tstrerror(code));
|
||||
}
|
||||
}
|
||||
cos_warn_log("head object succeeded: %ld\n", size);
|
||||
} else {
|
||||
|
|
|
@ -267,7 +267,7 @@ bool checkColumnEncode(char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
|||
}
|
||||
bool checkColumnEncodeOrSetDefault(uint8_t type, char encode[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
||||
if (0 == strlen(encode)) {
|
||||
strncpy(encode, getDefaultEncodeStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
tstrncpy(encode, getDefaultEncodeStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
return true;
|
||||
}
|
||||
return checkColumnEncode(encode) && validColEncode(type, columnEncodeVal(encode));
|
||||
|
@ -284,7 +284,7 @@ bool checkColumnCompress(char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
|||
}
|
||||
bool checkColumnCompressOrSetDefault(uint8_t type, char compress[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
||||
if (0 == strlen(compress)) {
|
||||
strncpy(compress, getDefaultCompressStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
tstrncpy(compress, getDefaultCompressStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -306,7 +306,7 @@ bool checkColumnLevel(char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
|||
}
|
||||
bool checkColumnLevelOrSetDefault(uint8_t type, char level[TSDB_CL_COMPRESS_OPTION_LEN]) {
|
||||
if (0 == strlen(level)) {
|
||||
strncpy(level, getDefaultLevelStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
tstrncpy(level, getDefaultLevelStr(type), TSDB_CL_COMPRESS_OPTION_LEN);
|
||||
return true;
|
||||
}
|
||||
return checkColumnLevel(level) && validColCompressLevel(type, columnLevelVal(level));
|
||||
|
|
|
@ -22,12 +22,15 @@
|
|||
int32_t taosGetFqdnPortFromEp(const char* ep, SEp* pEp) {
|
||||
pEp->port = 0;
|
||||
memset(pEp->fqdn, 0, TSDB_FQDN_LEN);
|
||||
strncpy(pEp->fqdn, ep, TSDB_FQDN_LEN - 1);
|
||||
tstrncpy(pEp->fqdn, ep, TSDB_FQDN_LEN);
|
||||
|
||||
char* temp = strchr(pEp->fqdn, ':');
|
||||
if (temp) {
|
||||
*temp = 0;
|
||||
pEp->port = atoi(temp + 1);
|
||||
pEp->port = taosStr2UInt16(temp + 1, NULL, 10);
|
||||
if (pEp->port < 0) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
}
|
||||
|
||||
if (pEp->port == 0) {
|
||||
|
@ -299,7 +302,6 @@ _start:
|
|||
|
||||
char value[TSDB_CONFIG_PATH_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
int32_t valueLen = 0;
|
||||
|
||||
SDiskCfg* pDiskCfg = NULL;
|
||||
if (strcasecmp(pItem->name, "dataDir") == 0 && exSize > 0) {
|
||||
char* buf = &value[VARSTR_HEADER_SIZE];
|
||||
|
|
|
@ -279,7 +279,7 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) {
|
|||
printf("ERROR: Encrypt key overflow, it should be at most %d characters\n", ENCRYPT_KEY_LEN);
|
||||
return TSDB_CODE_INVALID_CFG;
|
||||
}
|
||||
tstrncpy(global.encryptKey, argv[i], ENCRYPT_KEY_LEN);
|
||||
tstrncpy(global.encryptKey, argv[i], ENCRYPT_KEY_LEN + 1);
|
||||
} else {
|
||||
printf("'-y' requires a parameter\n");
|
||||
return TSDB_CODE_INVALID_CFG;
|
||||
|
|
|
@ -114,7 +114,7 @@ static void dmMayShouldUpdateAnalFunc(SDnodeMgmt *pMgmt, int64_t newVer) {
|
|||
.pCont = pHead,
|
||||
.contLen = contLen,
|
||||
.msgType = TDMT_MND_RETRIEVE_ANAL_ALGO,
|
||||
.info.ahandle = (void *)0x9527,
|
||||
.info.ahandle = 0,
|
||||
.info.refId = 0,
|
||||
.info.noResp = 0,
|
||||
.info.handle = 0,
|
||||
|
|
|
@ -186,7 +186,7 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
|
|||
#if defined(TD_ENTERPRISE)
|
||||
pCfg->tsdbCfg.encryptAlgorithm = pCreate->encryptAlgorithm;
|
||||
if (pCfg->tsdbCfg.encryptAlgorithm == DND_CA_SM4) {
|
||||
strncpy(pCfg->tsdbCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(pCfg->tsdbCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
#else
|
||||
pCfg->tsdbCfg.encryptAlgorithm = 0;
|
||||
|
@ -202,7 +202,7 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
|
|||
#if defined(TD_ENTERPRISE)
|
||||
pCfg->walCfg.encryptAlgorithm = pCreate->encryptAlgorithm;
|
||||
if (pCfg->walCfg.encryptAlgorithm == DND_CA_SM4) {
|
||||
strncpy(pCfg->walCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(pCfg->walCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
#else
|
||||
pCfg->walCfg.encryptAlgorithm = 0;
|
||||
|
@ -883,7 +883,7 @@ int32_t vmProcessArbHeartBeatReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
|||
size_t size = taosArrayGetSize(arbHbReq.hbMembers);
|
||||
|
||||
arbHbRsp.dnodeId = pMgmt->pData->dnodeId;
|
||||
strncpy(arbHbRsp.arbToken, arbHbReq.arbToken, TSDB_ARB_TOKEN_SIZE);
|
||||
tstrncpy(arbHbRsp.arbToken, arbHbReq.arbToken, TSDB_ARB_TOKEN_SIZE);
|
||||
arbHbRsp.hbMembers = taosArrayInit(size, sizeof(SVArbHbRspMember));
|
||||
if (arbHbRsp.hbMembers == NULL) {
|
||||
goto _OVER;
|
||||
|
|
|
@ -180,7 +180,7 @@ int32_t dmInitVars(SDnode *pDnode) {
|
|||
|
||||
//code = taosGetCryptKey(tsAuthCode, pData->machineId, tsCryptKey);
|
||||
code = 0;
|
||||
strncpy(tsEncryptKey, tsAuthCode, 16);
|
||||
tstrncpy(tsEncryptKey, tsAuthCode, 16);
|
||||
|
||||
if (code != 0) {
|
||||
if(code == -1){
|
||||
|
@ -221,6 +221,7 @@ int32_t dmInitVars(SDnode *pDnode) {
|
|||
}
|
||||
|
||||
extern SMonVloadInfo tsVinfo;
|
||||
|
||||
void dmClearVars(SDnode *pDnode) {
|
||||
for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
|
||||
SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
|
||||
|
|
|
@ -230,7 +230,7 @@ static int32_t dmWriteCheckCodeFile(char *file, char *realfile, char *key, bool
|
|||
}
|
||||
|
||||
SCryptOpts opts;
|
||||
strncpy(opts.key, key, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, key, ENCRYPT_KEY_LEN + 1);
|
||||
opts.len = len;
|
||||
opts.source = DM_KEY_INDICATOR;
|
||||
opts.result = result;
|
||||
|
@ -349,7 +349,7 @@ static int32_t dmCompareEncryptKey(char *file, char *key, bool toLogFile) {
|
|||
}
|
||||
|
||||
SCryptOpts opts = {0};
|
||||
strncpy(opts.key, key, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, key, ENCRYPT_KEY_LEN + 1);
|
||||
opts.len = len;
|
||||
opts.source = content;
|
||||
opts.result = result;
|
||||
|
@ -551,7 +551,7 @@ int32_t dmGetEncryptKey() {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
strncpy(tsEncryptKey, encryptKey, ENCRYPT_KEY_LEN);
|
||||
strncpy(tsEncryptKey, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
taosMemoryFreeClear(encryptKey);
|
||||
tsEncryptionKeyChksum = taosCalcChecksum(0, tsEncryptKey, strlen(tsEncryptKey));
|
||||
tsEncryptionKeyStat = ENCRYPT_KEY_STAT_LOADED;
|
||||
|
|
|
@ -1315,7 +1315,7 @@ static int32_t mndRetrieveArbGroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
|||
continue;
|
||||
}
|
||||
char dbNameInGroup[TSDB_DB_FNAME_LEN];
|
||||
strncpy(dbNameInGroup, pVgObj->dbName, TSDB_DB_FNAME_LEN);
|
||||
tstrncpy(dbNameInGroup, pVgObj->dbName, TSDB_DB_FNAME_LEN);
|
||||
sdbRelease(pSdb, pVgObj);
|
||||
|
||||
char dbname[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
|
|
|
@ -244,7 +244,7 @@ int32_t mndCompactGetDbName(SMnode *pMnode, int32_t compactId, char *dbname, int
|
|||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
(void)strncpy(dbname, pCompact->dbname, len);
|
||||
tstrncpy(dbname, pCompact->dbname, len);
|
||||
mndReleaseCompact(pMnode, pCompact);
|
||||
TAOS_RETURN(code);
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock,
|
|||
TAOS_CHECK_GOTO(tNameFromString(&name, pCompact->dbname, T_NAME_ACCT | T_NAME_DB), &lino, _OVER);
|
||||
(void)tNameGetDbName(&name, varDataVal(tmpBuf));
|
||||
} else {
|
||||
(void)strncpy(varDataVal(tmpBuf), pCompact->dbname, TSDB_SHOW_SQL_LEN);
|
||||
tstrncpy(varDataVal(tmpBuf), pCompact->dbname, TSDB_SHOW_SQL_LEN);
|
||||
}
|
||||
varDataSetLen(tmpBuf, strlen(varDataVal(tmpBuf)));
|
||||
RETRIEVE_CHECK_GOTO(colDataSetVal(pColInfo, numOfRows, (const char *)tmpBuf, false), pCompact, &lino, _OVER);
|
||||
|
@ -517,10 +517,13 @@ int32_t mndProcessKillCompactReq(SRpcMsg *pReq) {
|
|||
code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
char obj[TSDB_INT32_ID_LEN] = {0};
|
||||
(void)sprintf(obj, "%d", pCompact->compactId);
|
||||
|
||||
auditRecord(pReq, pMnode->clusterId, "killCompact", pCompact->dbname, obj, killCompactReq.sql, killCompactReq.sqlLen);
|
||||
|
||||
int32_t nBytes = snprintf(obj, sizeof(obj), "%d", pCompact->compactId);
|
||||
if ((uint32_t)nBytes < sizeof(obj)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "killCompact", pCompact->dbname, obj, killCompactReq.sql,
|
||||
killCompactReq.sqlLen);
|
||||
} else {
|
||||
mError("compact:%" PRId32 " failed to audit since %s", pCompact->compactId, tstrerror(TSDB_CODE_OUT_OF_RANGE));
|
||||
}
|
||||
_OVER:
|
||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||
mError("failed to kill compact %" PRId32 " since %s", killCompactReq.compactId, terrstr());
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#define _DEFAULT_SOURCE
|
||||
#include "mndDb.h"
|
||||
#include "audit.h"
|
||||
#include "command.h"
|
||||
#include "mndArbGroup.h"
|
||||
#include "mndCluster.h"
|
||||
#include "mndDnode.h"
|
||||
|
@ -34,7 +35,6 @@
|
|||
#include "systable.h"
|
||||
#include "thttp.h"
|
||||
#include "tjson.h"
|
||||
#include "command.h"
|
||||
|
||||
#define DB_VER_NUMBER 1
|
||||
#define DB_RESERVE_SIZE 27
|
||||
|
@ -416,7 +416,12 @@ static int32_t mndCheckDbName(const char *dbName, SUserObj *pUser) {
|
|||
return TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
int32_t acctId = atoi(dbName);
|
||||
int32_t acctId;
|
||||
int32_t code = taosStr2int32(dbName, &acctId);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
|
||||
if (acctId != pUser->acctId) {
|
||||
return TSDB_CODE_MND_INVALID_DB_ACCT;
|
||||
}
|
||||
|
@ -2387,7 +2392,8 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
|||
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)strictVstr, false), &lino, _OVER);
|
||||
|
||||
char durationVstr[128] = {0};
|
||||
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE, pDb->cfg.daysPerFile);
|
||||
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE,
|
||||
pDb->cfg.daysPerFile);
|
||||
|
||||
varDataSetLen(durationVstr, len);
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
|
|
|
@ -486,7 +486,8 @@ static int32_t mndCheckClusterCfgPara(SMnode *pMnode, SDnodeObj *pDnode, const S
|
|||
CHECK_MONITOR_PARA(tsSlowLogScope, DND_REASON_STATUS_MONITOR_SLOW_LOG_SCOPE_NOT_MATCH);
|
||||
|
||||
if (0 != strcasecmp(pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb)) {
|
||||
mError("dnode:%d, tsSlowLogExceptDb:%s inconsistent with cluster:%s", pDnode->id, pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb);
|
||||
mError("dnode:%d, tsSlowLogExceptDb:%s inconsistent with cluster:%s", pDnode->id,
|
||||
pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb);
|
||||
terrno = TSDB_CODE_DNODE_INVALID_MONITOR_PARAS;
|
||||
return DND_REASON_STATUS_MONITOR_NOT_MATCH;
|
||||
}
|
||||
|
@ -1448,7 +1449,7 @@ static int32_t mndMCfg2DCfg(SMCfgDnodeReq *pMCfgReq, SDCfgDnodeReq *pDCfgReq) {
|
|||
}
|
||||
|
||||
size_t optLen = p - pMCfgReq->config;
|
||||
(void)strncpy(pDCfgReq->config, pMCfgReq->config, optLen);
|
||||
tstrncpy(pDCfgReq->config, pMCfgReq->config, optLen + 1);
|
||||
pDCfgReq->config[optLen] = 0;
|
||||
|
||||
if (' ' == pMCfgReq->config[optLen]) {
|
||||
|
@ -1880,11 +1881,19 @@ static int32_t mndMCfgGetValInt32(SMCfgDnodeReq *pMCfgReq, int32_t optLen, int32
|
|||
if (' ' == pMCfgReq->config[optLen]) {
|
||||
// 'key value'
|
||||
if (strlen(pMCfgReq->value) != 0) goto _err;
|
||||
*pOutValue = atoi(pMCfgReq->config + optLen + 1);
|
||||
code = taosStr2int32(pMCfgReq->config + optLen + 1, pOutValue);
|
||||
if (code != 0) {
|
||||
mError("dnode:%d, failed to get cfg since %s", pMCfgReq->dnodeId, tstrerror(code));
|
||||
goto _err;
|
||||
}
|
||||
} else {
|
||||
// 'key' 'value'
|
||||
if (strlen(pMCfgReq->value) == 0) goto _err;
|
||||
*pOutValue = atoi(pMCfgReq->value);
|
||||
code = taosStr2int32(pMCfgReq->value, pOutValue);
|
||||
if (code != 0) {
|
||||
mError("dnode:%d, failed to get cfg since %s", pMCfgReq->dnodeId, tstrerror(code));
|
||||
goto _err;
|
||||
}
|
||||
}
|
||||
|
||||
TAOS_RETURN(code);
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
|
||||
#define _DEFAULT_SOURCE
|
||||
#include "mndAcct.h"
|
||||
#include "mndArbGroup.h"
|
||||
#include "mndAnode.h"
|
||||
#include "mndArbGroup.h"
|
||||
#include "mndCluster.h"
|
||||
#include "mndCompact.h"
|
||||
#include "mndCompactDetail.h"
|
||||
|
@ -254,7 +254,7 @@ static void mndIncreaseUpTime(SMnode *pMnode) {
|
|||
.pCont = pReq,
|
||||
.contLen = contLen,
|
||||
.info.notFreeAhandle = 1,
|
||||
.info.ahandle = (void *)0x9527};
|
||||
.info.ahandle = 0};
|
||||
// TODO check return value
|
||||
if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) {
|
||||
mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__);
|
||||
|
@ -530,7 +530,7 @@ static int32_t mndInitWal(SMnode *pMnode) {
|
|||
code = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY;
|
||||
TAOS_RETURN(code);
|
||||
} else {
|
||||
(void)strncpy(cfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(cfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -14,10 +14,10 @@
|
|||
*/
|
||||
|
||||
#define _DEFAULT_SOURCE
|
||||
#include "mndMnode.h"
|
||||
#include "audit.h"
|
||||
#include "mndCluster.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndMnode.h"
|
||||
#include "mndPrivilege.h"
|
||||
#include "mndShow.h"
|
||||
#include "mndSync.h"
|
||||
|
@ -723,9 +723,12 @@ static int32_t mndProcessCreateMnodeReq(SRpcMsg *pReq) {
|
|||
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
|
||||
|
||||
char obj[40] = {0};
|
||||
sprintf(obj, "%d", createReq.dnodeId);
|
||||
|
||||
int32_t bytes = snprintf(obj, sizeof(obj), "%d", createReq.dnodeId);
|
||||
if ((uint32_t)bytes < sizeof(obj)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "createMnode", "", obj, createReq.sql, createReq.sqlLen);
|
||||
} else {
|
||||
mError("mnode:%d, failed to audit create req since %s", createReq.dnodeId, tstrerror(TSDB_CODE_OUT_OF_RANGE));
|
||||
}
|
||||
|
||||
_OVER:
|
||||
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
|
||||
|
|
|
@ -14,12 +14,12 @@
|
|||
*/
|
||||
|
||||
#define _DEFAULT_SOURCE
|
||||
#include "mndProfile.h"
|
||||
#include "audit.h"
|
||||
#include "mndDb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndMnode.h"
|
||||
#include "mndPrivilege.h"
|
||||
#include "mndProfile.h"
|
||||
#include "mndQnode.h"
|
||||
#include "mndShow.h"
|
||||
#include "mndSma.h"
|
||||
|
@ -345,9 +345,12 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
|
|||
code = 0;
|
||||
|
||||
char detail[1000] = {0};
|
||||
(void)sprintf(detail, "app:%s", connReq.app);
|
||||
|
||||
int32_t nBytes = snprintf(detail, sizeof(detail), "app:%s", connReq.app);
|
||||
if ((uint32_t)nBytes < sizeof(detail)) {
|
||||
auditRecord(pReq, pMnode->clusterId, "login", "", "", detail, strlen(detail));
|
||||
} else {
|
||||
mError("failed to audit logic since %s", tstrerror(TSDB_CODE_OUT_OF_RANGE));
|
||||
}
|
||||
|
||||
_OVER:
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#define _DEFAULT_SOURCE
|
||||
#include "mndSma.h"
|
||||
#include "functionMgt.h"
|
||||
#include "mndDb.h"
|
||||
#include "mndDnode.h"
|
||||
#include "mndIndex.h"
|
||||
|
@ -31,7 +32,6 @@
|
|||
#include "mndVgroup.h"
|
||||
#include "parser.h"
|
||||
#include "tname.h"
|
||||
#include "functionMgt.h"
|
||||
|
||||
#define TSDB_SMA_VER_NUMBER 1
|
||||
#define TSDB_SMA_RESERVE_SIZE 64
|
||||
|
@ -298,10 +298,7 @@ void mndReleaseSma(SMnode *pMnode, SSmaObj *pSma) {
|
|||
sdbRelease(pSdb, pSma);
|
||||
}
|
||||
|
||||
SDbObj *mndAcquireDbBySma(SMnode *pMnode, const char *db) {
|
||||
|
||||
return mndAcquireDb(pMnode, db);
|
||||
}
|
||||
SDbObj *mndAcquireDbBySma(SMnode *pMnode, const char *db) { return mndAcquireDb(pMnode, db); }
|
||||
|
||||
static void *mndBuildVCreateSmaReq(SMnode *pMnode, SVgObj *pVgroup, SSmaObj *pSma, int32_t *pContLen) {
|
||||
SEncoder encoder = {0};
|
||||
|
@ -670,7 +667,8 @@ static int32_t mndCreateSma(SMnode *pMnode, SRpcMsg *pReq, SMCreateSmaReq *pCrea
|
|||
// check the maxDelay
|
||||
if (streamObj.conf.triggerParam < TSDB_MIN_ROLLUP_MAX_DELAY) {
|
||||
int64_t msInterval = -1;
|
||||
int32_t code = convertTimeFromPrecisionToUnit(pCreate->interval, pDb->cfg.precision, TIME_UNIT_MILLISECOND, &msInterval);
|
||||
int32_t code =
|
||||
convertTimeFromPrecisionToUnit(pCreate->interval, pDb->cfg.precision, TIME_UNIT_MILLISECOND, &msInterval);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
mError("sma:%s, failed to create since convert time failed: %s", smaObj.name, tstrerror(code));
|
||||
return code;
|
||||
|
@ -1023,7 +1021,6 @@ static int32_t mndDropSma(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SSmaObj *p
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
|
||||
code = mndAcquireStream(pMnode, streamName, &pStream);
|
||||
if (pStream == NULL || pStream->smaId != pSma->uid || code != 0) {
|
||||
sdbRelease(pMnode->pSdb, pStream);
|
||||
|
@ -1691,8 +1688,7 @@ static int32_t mndCreateTSMATxnPrepare(SCreateTSMACxt* pCxt) {
|
|||
STransAction createStreamUndoAction = {0};
|
||||
STransAction dropStbUndoAction = {0};
|
||||
SMDropStbReq dropStbReq = {0};
|
||||
STrans *pTrans =
|
||||
mndTransCreate(pCxt->pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_TSMA, pCxt->pRpcReq, "create-tsma");
|
||||
STrans *pTrans = mndTransCreate(pCxt->pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_TSMA, pCxt->pRpcReq, "create-tsma");
|
||||
if (!pTrans) {
|
||||
code = terrno;
|
||||
goto _OVER;
|
||||
|
@ -1713,7 +1709,9 @@ static int32_t mndCreateTSMATxnPrepare(SCreateTSMACxt* pCxt) {
|
|||
code = terrno;
|
||||
goto _OVER;
|
||||
}
|
||||
if (createStreamRedoAction.contLen != tSerializeSCMCreateStreamReq(createStreamRedoAction.pCont, createStreamRedoAction.contLen, pCxt->pCreateStreamReq)) {
|
||||
if (createStreamRedoAction.contLen != tSerializeSCMCreateStreamReq(createStreamRedoAction.pCont,
|
||||
createStreamRedoAction.contLen,
|
||||
pCxt->pCreateStreamReq)) {
|
||||
mError("sma: %s, failed to create due to create stream req encode failure", pCxt->pCreateSmaReq->name);
|
||||
code = TSDB_CODE_INVALID_MSG;
|
||||
goto _OVER;
|
||||
|
@ -1728,7 +1726,8 @@ static int32_t mndCreateTSMATxnPrepare(SCreateTSMACxt* pCxt) {
|
|||
code = terrno;
|
||||
goto _OVER;
|
||||
}
|
||||
if (createStreamUndoAction.contLen != tSerializeSMDropStreamReq(createStreamUndoAction.pCont, createStreamUndoAction.contLen, pCxt->pDropStreamReq)) {
|
||||
if (createStreamUndoAction.contLen !=
|
||||
tSerializeSMDropStreamReq(createStreamUndoAction.pCont, createStreamUndoAction.contLen, pCxt->pDropStreamReq)) {
|
||||
mError("sma: %s, failed to create due to drop stream req encode failure", pCxt->pCreateSmaReq->name);
|
||||
code = TSDB_CODE_INVALID_MSG;
|
||||
goto _OVER;
|
||||
|
@ -1746,7 +1745,8 @@ static int32_t mndCreateTSMATxnPrepare(SCreateTSMACxt* pCxt) {
|
|||
code = terrno;
|
||||
goto _OVER;
|
||||
}
|
||||
if (dropStbUndoAction.contLen != tSerializeSMDropStbReq(dropStbUndoAction.pCont, dropStbUndoAction.contLen, &dropStbReq)) {
|
||||
if (dropStbUndoAction.contLen !=
|
||||
tSerializeSMDropStbReq(dropStbUndoAction.pCont, dropStbUndoAction.contLen, &dropStbReq)) {
|
||||
mError("sma: %s, failed to create due to drop stb req encode failure", pCxt->pCreateSmaReq->name);
|
||||
code = TSDB_CODE_INVALID_MSG;
|
||||
goto _OVER;
|
||||
|
@ -2021,7 +2021,8 @@ static int32_t mndDropTSMA(SCreateTSMACxt* pCxt) {
|
|||
code = terrno;
|
||||
goto _OVER;
|
||||
}
|
||||
if (dropStbRedoAction.contLen != tSerializeSMDropStbReq(dropStbRedoAction.pCont, dropStbRedoAction.contLen, &dropStbReq)) {
|
||||
if (dropStbRedoAction.contLen !=
|
||||
tSerializeSMDropStbReq(dropStbRedoAction.pCont, dropStbRedoAction.contLen, &dropStbReq)) {
|
||||
mError("tsma: %s, failedto drop due to drop stb req encode failure", pCxt->pDropSmaReq->name);
|
||||
code = TSDB_CODE_INVALID_MSG;
|
||||
goto _OVER;
|
||||
|
@ -2297,7 +2298,8 @@ static void mndCancelRetrieveTSMA(SMnode *pMnode, void *pIter) {
|
|||
taosMemoryFree(p);
|
||||
}
|
||||
|
||||
int32_t dumpTSMAInfoFromSmaObj(const SSmaObj* pSma, const SStbObj* pDestStb, STableTSMAInfo* pInfo, const SSmaObj* pBaseTsma) {
|
||||
int32_t dumpTSMAInfoFromSmaObj(const SSmaObj *pSma, const SStbObj *pDestStb, STableTSMAInfo *pInfo,
|
||||
const SSmaObj *pBaseTsma) {
|
||||
int32_t code = 0;
|
||||
pInfo->interval = pSma->interval;
|
||||
pInfo->unit = pSma->intervalUnit;
|
||||
|
@ -2407,7 +2409,6 @@ static int32_t mndGetDeepestBaseForTsma(SMnode* pMnode, SSmaObj* pSma, SSmaObj**
|
|||
return code;
|
||||
}
|
||||
|
||||
|
||||
static int32_t mndGetTSMA(SMnode *pMnode, char *tsmaFName, STableTSMAInfoRsp *rsp, bool *exist) {
|
||||
int32_t code = -1;
|
||||
SSmaObj *pSma = NULL;
|
||||
|
|
|
@ -1706,8 +1706,8 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate
|
|||
if (pCreate->isImport != 1) {
|
||||
taosEncryptPass_c((uint8_t *)pCreate->pass, strlen(pCreate->pass), userObj.pass);
|
||||
} else {
|
||||
// mInfo("pCreate->pass:%s", pCreate->pass)
|
||||
strncpy(userObj.pass, pCreate->pass, TSDB_PASSWORD_LEN);
|
||||
// mInfo("pCreate->pass:%s", pCreate->eass)
|
||||
memcpy(userObj.pass, pCreate->pass, TSDB_PASSWORD_LEN);
|
||||
}
|
||||
tstrncpy(userObj.user, pCreate->user, TSDB_USER_LEN);
|
||||
tstrncpy(userObj.acct, acct, TSDB_USER_LEN);
|
||||
|
@ -1803,6 +1803,43 @@ _OVER:
|
|||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
static int32_t mndCheckPasswordFmt(const char *pwd) {
|
||||
int32_t len = strlen(pwd);
|
||||
if (len < TSDB_PASSWORD_MIN_LEN || len > TSDB_PASSWORD_MAX_LEN) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strcmp(pwd, "taosdata") == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool charTypes[4] = {0};
|
||||
for (int32_t i = 0; i < len; ++i) {
|
||||
if (taosIsBigChar(pwd[i])) {
|
||||
charTypes[0] = true;
|
||||
} else if (taosIsSmallChar(pwd[i])) {
|
||||
charTypes[1] = true;
|
||||
} else if (taosIsNumberChar(pwd[i])) {
|
||||
charTypes[2] = true;
|
||||
} else if (taosIsSpecialChar(pwd[i])) {
|
||||
charTypes[3] = true;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t numOfTypes = 0;
|
||||
for (int32_t i = 0; i < 4; ++i) {
|
||||
numOfTypes += charTypes[i];
|
||||
}
|
||||
|
||||
if (numOfTypes < 3) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
int32_t code = 0;
|
||||
|
@ -1836,7 +1873,7 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) {
|
|||
TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_USER_FORMAT, &lino, _OVER);
|
||||
}
|
||||
|
||||
if (createReq.pass[0] == 0) {
|
||||
if (mndCheckPasswordFmt(createReq.pass) != 0) {
|
||||
TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_PASS_FORMAT, &lino, _OVER);
|
||||
}
|
||||
|
||||
|
@ -2325,8 +2362,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) {
|
|||
TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_USER_FORMAT, &lino, _OVER);
|
||||
}
|
||||
|
||||
if (TSDB_ALTER_USER_PASSWD == alterReq.alterType &&
|
||||
(alterReq.pass[0] == 0 || strlen(alterReq.pass) >= TSDB_PASSWORD_LEN)) {
|
||||
if (TSDB_ALTER_USER_PASSWD == alterReq.alterType && mndCheckPasswordFmt(alterReq.pass) != 0) {
|
||||
TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_PASS_FORMAT, &lino, _OVER);
|
||||
}
|
||||
|
||||
|
|
|
@ -370,7 +370,7 @@ static int32_t sdbReadFileImp(SSdb *pSdb) {
|
|||
opts.source = pRaw->pData;
|
||||
opts.result = plantContent;
|
||||
opts.unitLen = 16;
|
||||
strncpy(opts.key, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
count = CBC_Decrypt(&opts);
|
||||
|
||||
|
@ -515,7 +515,7 @@ static int32_t sdbWriteFileImp(SSdb *pSdb, int32_t skip_type) {
|
|||
opts.source = pRaw->pData;
|
||||
opts.result = newData;
|
||||
opts.unitLen = 16;
|
||||
strncpy(opts.key, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
int32_t count = CBC_Encrypt(&opts);
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ static int32_t tsdbFSAddEntryToFileObjHash(STFileHash *hash, const char *fname)
|
|||
STFileHashEntry *entry = taosMemoryMalloc(sizeof(*entry));
|
||||
if (entry == NULL) return terrno;
|
||||
|
||||
strncpy(entry->fname, fname, TSDB_FILENAME_LEN);
|
||||
tstrncpy(entry->fname, fname, TSDB_FILENAME_LEN);
|
||||
|
||||
uint32_t idx = MurmurHash3_32(fname, strlen(fname)) % hash->numBucket;
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ static int32_t tsdbWriteFilePage(STsdbFD *pFD, int32_t encryptAlgorithm, char *e
|
|||
opts.result = PacketData;
|
||||
opts.unitLen = 128;
|
||||
// strncpy(opts.key, tsEncryptKey, 16);
|
||||
strncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
NewLen = CBC_Encrypt(&opts);
|
||||
|
||||
|
@ -249,7 +249,7 @@ static int32_t tsdbReadFilePage(STsdbFD *pFD, int64_t pgno, int32_t encryptAlgor
|
|||
opts.result = PacketData;
|
||||
opts.unitLen = 128;
|
||||
// strncpy(opts.key, tsEncryptKey, 16);
|
||||
strncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
NewLen = CBC_Decrypt(&opts);
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
|
|||
if (tsEncryptKey[0] == 0) {
|
||||
return terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY;
|
||||
} else {
|
||||
strncpy(pCfg->tsdbCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(pCfg->tsdbCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -292,7 +292,7 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
|
|||
if (tsEncryptKey[0] == 0) {
|
||||
return terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY;
|
||||
} else {
|
||||
strncpy(pCfg->walCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(pCfg->walCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -199,7 +199,14 @@ int32_t vnodeRenameVgroupId(const char *srcPath, const char *dstPath, int32_t sr
|
|||
char *tsdbFilePrefixPos = strstr(oldRname, tsdbFilePrefix);
|
||||
if (tsdbFilePrefixPos == NULL) continue;
|
||||
|
||||
int32_t tsdbFileVgId = atoi(tsdbFilePrefixPos + prefixLen);
|
||||
int32_t tsdbFileVgId = 0; // atoi(tsdbFilePrefixPos + prefixLen);
|
||||
ret = taosStr2int32(tsdbFilePrefixPos + prefixLen, &tsdbFileVgId);
|
||||
if (ret != 0) {
|
||||
vError("vgId:%d, failed to get tsdb file vgid since %s", dstVgId, tstrerror(ret));
|
||||
tfsClosedir(tsdbDir);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (tsdbFileVgId == srcVgId) {
|
||||
char *tsdbFileSurfixPos = tsdbFilePrefixPos + prefixLen + vnodeVgroupIdLen(srcVgId);
|
||||
|
||||
|
|
|
@ -1093,7 +1093,7 @@ static int32_t vnodeProcessFetchTtlExpiredTbs(SVnode *pVnode, int64_t ver, void
|
|||
expiredTb.suid = *uid;
|
||||
terrno = metaReaderGetTableEntryByUid(&mr, *uid);
|
||||
if (terrno < 0) goto _end;
|
||||
strncpy(buf, mr.me.name, TSDB_TABLE_NAME_LEN);
|
||||
tstrncpy(buf, mr.me.name, TSDB_TABLE_NAME_LEN);
|
||||
void *p = taosArrayPush(pNames, buf);
|
||||
if (p == NULL) {
|
||||
goto _end;
|
||||
|
|
|
@ -41,10 +41,11 @@ void taos_monitor_split_str_metric(char** arr, taos_metric_t* metric, const char
|
|||
memset(name, 0, size + 1);
|
||||
memcpy(name, metric->name, size);
|
||||
|
||||
char* s = strtok(name, del);
|
||||
char* saveptr;
|
||||
char* s = strtok_r(name, del, &saveptr);
|
||||
while (s != NULL) {
|
||||
*arr++ = s;
|
||||
s = strtok(NULL, del);
|
||||
s = strtok_r(NULL, del, &saveptr);
|
||||
}
|
||||
|
||||
*buf = name;
|
||||
|
|
|
@ -2887,7 +2887,9 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange
|
|||
*slash = '\0';
|
||||
struct in_addr addr;
|
||||
if (uv_inet_pton(AF_INET, ipCopy, &addr) == 0) {
|
||||
int prefix = atoi(slash + 1);
|
||||
int32_t prefix = 0;
|
||||
code = taosStr2int32(slash + 1, &prefix);
|
||||
if (code == 0) {
|
||||
if (prefix < 0 || prefix > 32) {
|
||||
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
|
||||
} else {
|
||||
|
@ -2895,6 +2897,7 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange
|
|||
pIpRange->mask = prefix;
|
||||
code = TSDB_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
|
||||
}
|
||||
|
|
|
@ -166,10 +166,12 @@ int32_t streamStateDel_rocksdb(SStreamState* pState, const SWinKey* key);
|
|||
int32_t streamStateClear_rocksdb(SStreamState* pState);
|
||||
void streamStateCurNext_rocksdb(SStreamStateCur* pCur);
|
||||
int32_t streamStateGetFirst_rocksdb(SStreamState* pState, SWinKey* key);
|
||||
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
||||
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey,
|
||||
const void** pVal, int32_t* pVLen);
|
||||
int32_t streamStateAddIfNotExist_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||
void streamStateCurPrev_rocksdb(SStreamStateCur* pCur);
|
||||
int32_t streamStateGetKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
||||
int32_t streamStateGetKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey, const void** pVal,
|
||||
int32_t* pVLen);
|
||||
SStreamStateCur* streamStateGetAndCheckCur_rocksdb(SStreamState* pState, SWinKey* key);
|
||||
SStreamStateCur* streamStateSeekKeyNext_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||
SStreamStateCur* streamStateSeekKeyPrev_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||
|
@ -218,15 +220,14 @@ int32_t streamStateFillGetGroupKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* p
|
|||
int32_t streamStatePutParTag_rocksdb(SStreamState* pState, int64_t groupId, const void* tag, int32_t tagLen);
|
||||
int32_t streamStateGetParTag_rocksdb(SStreamState* pState, int64_t groupId, void** tagVal, int32_t* tagLen);
|
||||
void streamStateParTagSeekKeyNext_rocksdb(SStreamState* pState, const int64_t groupId, SStreamStateCur* pCur);
|
||||
int32_t streamStateParTagGetKVByCur_rocksdb(SStreamStateCur* pCur, int64_t* pGroupId, const void** pVal, int32_t* pVLen);
|
||||
int32_t streamStateParTagGetKVByCur_rocksdb(SStreamStateCur* pCur, int64_t* pGroupId, const void** pVal,
|
||||
int32_t* pVLen);
|
||||
|
||||
// parname cf
|
||||
int32_t streamStatePutParName_rocksdb(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]);
|
||||
int32_t streamStateGetParName_rocksdb(SStreamState* pState, int64_t groupId, void** pVal);
|
||||
int32_t streamStateDeleteParName_rocksdb(SStreamState* pState, int64_t groupId);
|
||||
|
||||
void streamStateDestroy_rocksdb(SStreamState* pState, bool remove);
|
||||
|
||||
// default cf
|
||||
int32_t streamDefaultPut_rocksdb(SStreamState* pState, const void* key, void* pVal, int32_t pVLen);
|
||||
int32_t streamDefaultGet_rocksdb(SStreamState* pState, const void* key, void** pVal, int32_t* pVLen);
|
||||
|
|
|
@ -153,7 +153,6 @@ void taskDbUnRefChkp(STaskDbWrapper* pTaskDb, int64_t chkp);
|
|||
int32_t chkpAddExtraInfo(char* pChkpIdDir, int64_t chkpId, int64_t processId);
|
||||
int32_t chkpLoadExtraInfo(char* pChkpIdDir, int64_t* chkpId, int64_t* processId);
|
||||
|
||||
#define GEN_COLUMN_FAMILY_NAME(name, idstr, SUFFIX) sprintf(name, "%s_%s", idstr, (SUFFIX));
|
||||
int32_t copyFiles(const char* src, const char* dst);
|
||||
uint32_t nextPow2(uint32_t x);
|
||||
|
||||
|
@ -1156,13 +1155,17 @@ int32_t chkpMayDelObsolete(void* arg, int64_t chkpId, char* path) {
|
|||
|
||||
taosArrayDestroy(pBackend->chkpSaved);
|
||||
pBackend->chkpSaved = chkpDup;
|
||||
chkpDup = NULL;
|
||||
|
||||
TAOS_UNUSED(taosThreadRwlockUnlock(&pBackend->chkpDirLock));
|
||||
|
||||
for (int i = 0; i < taosArrayGetSize(chkpDel); i++) {
|
||||
int64_t id = *(int64_t*)taosArrayGet(chkpDel, i);
|
||||
char tbuf[256] = {0};
|
||||
sprintf(tbuf, "%s%scheckpoint%" PRId64 "", path, TD_DIRSEP, id);
|
||||
if (snprintf(tbuf, sizeof(tbuf), "%s%scheckpoint%" PRId64 "", path, TD_DIRSEP, id) >= sizeof(tbuf)) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
TAOS_CHECK_GOTO(code, NULL, _exception);
|
||||
}
|
||||
|
||||
stInfo("backend remove obsolete checkpoint: %s", tbuf);
|
||||
if (taosIsDir(tbuf)) {
|
||||
|
@ -1187,12 +1190,17 @@ int chkpIdComp(const void* a, const void* b) {
|
|||
}
|
||||
int32_t taskDbLoadChkpInfo(STaskDbWrapper* pBackend) {
|
||||
int32_t code = 0;
|
||||
char* pChkpDir = taosMemoryCalloc(1, 256);
|
||||
int32_t nBytes = 0;
|
||||
int32_t cap = 256;
|
||||
char* pChkpDir = taosMemoryCalloc(1, cap);
|
||||
if (pChkpDir == NULL) {
|
||||
return terrno;
|
||||
}
|
||||
|
||||
sprintf(pChkpDir, "%s%s%s", pBackend->path, TD_DIRSEP, "checkpoints");
|
||||
nBytes = snprintf(pChkpDir, cap, "%s%s%s", pBackend->path, TD_DIRSEP, "checkpoints");
|
||||
if (nBytes >= cap) {
|
||||
return TSDB_CODE_OUT_OF_RANGE;
|
||||
}
|
||||
if (!taosIsDir(pChkpDir)) {
|
||||
taosMemoryFree(pChkpDir);
|
||||
return 0;
|
||||
|
@ -1413,12 +1421,18 @@ int32_t taskDbDestroySnap(void* arg, SArray* pSnapInfo) {
|
|||
if (pSnapInfo == NULL) return 0;
|
||||
SStreamMeta* pMeta = arg;
|
||||
int32_t code = 0;
|
||||
int32_t cap = 256;
|
||||
int32_t nBytes = 0;
|
||||
streamMutexLock(&pMeta->backendMutex);
|
||||
|
||||
char buf[128] = {0};
|
||||
char buf[256] = {0};
|
||||
for (int i = 0; i < taosArrayGetSize(pSnapInfo); i++) {
|
||||
SStreamTaskSnap* pSnap = taosArrayGet(pSnapInfo, i);
|
||||
sprintf(buf, "0x%" PRIx64 "-0x%x", pSnap->streamId, (int32_t)pSnap->taskId);
|
||||
nBytes = snprintf(buf, cap, "0x%" PRIx64 "-0x%x", pSnap->streamId, (int32_t)pSnap->taskId);
|
||||
if (nBytes <= 0 || nBytes >= cap) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
break;
|
||||
}
|
||||
STaskDbWrapper** pTaskDb = taosHashGet(pMeta->pTaskDbUnique, buf, strlen(buf));
|
||||
if (pTaskDb == NULL || *pTaskDb == NULL) {
|
||||
stWarn("stream backend:%p failed to find task db, streamId:% " PRId64 "", pMeta, pSnap->streamId);
|
||||
|
@ -1430,7 +1444,7 @@ int32_t taskDbDestroySnap(void* arg, SArray* pSnapInfo) {
|
|||
taskDbUnRefChkp(*pTaskDb, pSnap->chkpId);
|
||||
}
|
||||
streamMutexUnlock(&pMeta->backendMutex);
|
||||
return 0;
|
||||
return code;
|
||||
}
|
||||
#ifdef BUILD_NO_CALL
|
||||
int32_t streamBackendAddInUseChkp(void* arg, int64_t chkpId) {
|
||||
|
@ -1685,9 +1699,6 @@ void streamBackendDelCompare(void* backend, void* arg) {
|
|||
taosMemoryFree(node);
|
||||
}
|
||||
}
|
||||
#ifdef BUILD_NO_CALL
|
||||
void streamStateDestroy_rocksdb(SStreamState* pState, bool remove) { streamStateCloseBackend(pState, remove); }
|
||||
#endif
|
||||
void destroyRocksdbCfInst(RocksdbCfInst* inst) {
|
||||
int cfLen = sizeof(ginitDict) / sizeof(ginitDict[0]);
|
||||
if (inst->pHandle) {
|
||||
|
@ -1712,7 +1723,7 @@ void destroyRocksdbCfInst(RocksdbCfInst* inst) {
|
|||
}
|
||||
|
||||
// |key|-----value------|
|
||||
// |key|ttl|len|userData|
|
||||
// |key|ttl|len|userData
|
||||
|
||||
int defaultKeyComp(void* state, const char* aBuf, size_t aLen, const char* bBuf, size_t bLen) {
|
||||
int len = aLen < bLen ? aLen : bLen;
|
||||
|
@ -2447,43 +2458,50 @@ void taskDbDestroyChkpOpt(STaskDbWrapper* pTaskDb) {
|
|||
|
||||
int32_t taskDbBuildFullPath(char* path, char* key, char** dbFullPath, char** stateFullPath) {
|
||||
int32_t code = 0;
|
||||
char* statePath = taosMemoryCalloc(1, strlen(path) + 128);
|
||||
int32_t cap = strlen(path) + 128, nBytes = 0;
|
||||
char* statePath = NULL;
|
||||
char* dbPath = NULL;
|
||||
|
||||
statePath = taosMemoryCalloc(1, cap);
|
||||
if (statePath == NULL) {
|
||||
return terrno;
|
||||
TAOS_CHECK_GOTO(terrno, NULL, _err);
|
||||
}
|
||||
|
||||
nBytes = snprintf(statePath, cap, "%s%s%s", path, TD_DIRSEP, key);
|
||||
if (nBytes < 0 || nBytes >= cap) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
sprintf(statePath, "%s%s%s", path, TD_DIRSEP, key);
|
||||
if (!taosDirExist(statePath)) {
|
||||
code = taosMulMkDir(statePath);
|
||||
if (code != 0) {
|
||||
code = TAOS_SYSTEM_ERROR(errno);
|
||||
stError("failed to create dir: %s, reason:%s", statePath, tstrerror(code));
|
||||
taosMemoryFree(statePath);
|
||||
return code;
|
||||
}
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
char* dbPath = taosMemoryCalloc(1, strlen(statePath) + 128);
|
||||
dbPath = taosMemoryCalloc(1, cap);
|
||||
if (dbPath == NULL) {
|
||||
taosMemoryFree(statePath);
|
||||
return terrno;
|
||||
TAOS_CHECK_GOTO(terrno, NULL, _err);
|
||||
}
|
||||
nBytes = snprintf(dbPath, cap, "%s%s%s", statePath, TD_DIRSEP, "state");
|
||||
if (nBytes < 0 || nBytes >= cap) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
sprintf(dbPath, "%s%s%s", statePath, TD_DIRSEP, "state");
|
||||
if (!taosDirExist(dbPath)) {
|
||||
code = taosMulMkDir(dbPath);
|
||||
if (code != 0) {
|
||||
code = TAOS_SYSTEM_ERROR(errno);
|
||||
stError("failed to create dir: %s, reason:%s", dbPath, tstrerror(code));
|
||||
taosMemoryFree(statePath);
|
||||
taosMemoryFree(dbPath);
|
||||
return code;
|
||||
}
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
*dbFullPath = dbPath;
|
||||
*stateFullPath = statePath;
|
||||
return 0;
|
||||
_err:
|
||||
stError("failed to create dir: %s, reason:%s", dbPath, tstrerror(code));
|
||||
|
||||
taosMemoryFree(statePath);
|
||||
taosMemoryFree(dbPath);
|
||||
return code;
|
||||
}
|
||||
|
||||
void taskDbUpdateChkpId(void* pTaskDb, int64_t chkpId) {
|
||||
|
@ -2864,6 +2882,7 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
|
|||
int64_t streamId;
|
||||
int32_t taskId, dummy = 0;
|
||||
char suffix[64] = {0};
|
||||
int32_t code = 0;
|
||||
|
||||
rocksdb_options_t** cfOpts = taosMemoryCalloc(nCf, sizeof(rocksdb_options_t*));
|
||||
RocksdbCfParam* params = taosMemoryCalloc(nCf, sizeof(RocksdbCfParam));
|
||||
|
@ -2873,6 +2892,7 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
|
|||
for (int i = 0; i < nCf; i++) {
|
||||
char* cf = cfs[i];
|
||||
char funcname[64] = {0};
|
||||
|
||||
cfOpts[i] = rocksdb_options_create_copy(handle->dbOpt);
|
||||
if (i == 0) continue;
|
||||
if (3 == sscanf(cf, "0x%" PRIx64 "-%d_%s", &streamId, &taskId, funcname)) {
|
||||
|
@ -2909,7 +2929,7 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
|
|||
taosMemoryFree(params);
|
||||
taosMemoryFree(cfOpts);
|
||||
// fix other leak
|
||||
return -1;
|
||||
return TSDB_CODE_THIRDPARTY_ERROR;
|
||||
} else {
|
||||
stDebug("succ to open rocksdb cf");
|
||||
}
|
||||
|
@ -2930,7 +2950,12 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
|
|||
char funcname[64] = {0};
|
||||
if (3 == sscanf(cf, "0x%" PRIx64 "-%d_%s", &streamId, &taskId, funcname)) {
|
||||
char idstr[128] = {0};
|
||||
sprintf(idstr, "0x%" PRIx64 "-%d", streamId, taskId);
|
||||
int32_t nBytes = snprintf(idstr, sizeof(idstr), "0x%" PRIx64 "-%d", streamId, taskId);
|
||||
if (nBytes <= 0 || nBytes >= sizeof(idstr)) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
stError("failed to open cf since %s", tstrerror(code));
|
||||
return code;
|
||||
}
|
||||
|
||||
int idx = streamStateGetCfIdx(NULL, funcname);
|
||||
|
||||
|
@ -2997,117 +3022,7 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
|
|||
taosMemoryFree(cfOpts);
|
||||
return 0;
|
||||
}
|
||||
#ifdef BUILD_NO_CALL
|
||||
int streamStateOpenBackend(void* backend, SStreamState* pState) {
|
||||
taosAcquireRef(streamBackendId, pState->streamBackendRid);
|
||||
SBackendWrapper* handle = backend;
|
||||
SBackendCfWrapper* pBackendCfWrapper = taosMemoryCalloc(1, sizeof(SBackendCfWrapper));
|
||||
|
||||
streamMutexLock(&handle->cfMutex);
|
||||
RocksdbCfInst** ppInst = taosHashGet(handle->cfInst, pState->pTdbState->idstr, strlen(pState->pTdbState->idstr) + 1);
|
||||
if (ppInst != NULL && *ppInst != NULL) {
|
||||
RocksdbCfInst* inst = *ppInst;
|
||||
pBackendCfWrapper->rocksdb = inst->db;
|
||||
pBackendCfWrapper->pHandle = (void**)inst->pHandle;
|
||||
pBackendCfWrapper->writeOpts = inst->wOpt;
|
||||
pBackendCfWrapper->readOpts = inst->rOpt;
|
||||
pBackendCfWrapper->cfOpts = (void**)(inst->cfOpt);
|
||||
pBackendCfWrapper->dbOpt = handle->dbOpt;
|
||||
pBackendCfWrapper->param = inst->param;
|
||||
pBackendCfWrapper->pBackend = handle;
|
||||
pBackendCfWrapper->pComparNode = inst->pCompareNode;
|
||||
streamMutexUnlock(&handle->cfMutex);
|
||||
pBackendCfWrapper->backendId = pState->streamBackendRid;
|
||||
memcpy(pBackendCfWrapper->idstr, pState->pTdbState->idstr, sizeof(pState->pTdbState->idstr));
|
||||
|
||||
int64_t id = taosAddRef(streamBackendCfWrapperId, pBackendCfWrapper);
|
||||
pState->pTdbState->backendCfWrapperId = id;
|
||||
pState->pTdbState->pBackendCfWrapper = pBackendCfWrapper;
|
||||
stInfo("succ to open state %p on backendWrapper, %p, %s", pState, pBackendCfWrapper, pBackendCfWrapper->idstr);
|
||||
|
||||
inst->pHandle = NULL;
|
||||
inst->cfOpt = NULL;
|
||||
inst->param = NULL;
|
||||
|
||||
inst->wOpt = NULL;
|
||||
inst->rOpt = NULL;
|
||||
return 0;
|
||||
}
|
||||
streamMutexUnlock(&handle->cfMutex);
|
||||
|
||||
char* err = NULL;
|
||||
int cfLen = sizeof(ginitDict) / sizeof(ginitDict[0]);
|
||||
|
||||
RocksdbCfParam* param = taosMemoryCalloc(cfLen, sizeof(RocksdbCfParam));
|
||||
const rocksdb_options_t** cfOpt = taosMemoryCalloc(cfLen, sizeof(rocksdb_options_t*));
|
||||
for (int i = 0; i < cfLen; i++) {
|
||||
cfOpt[i] = rocksdb_options_create_copy(handle->dbOpt);
|
||||
// refactor later
|
||||
rocksdb_block_based_table_options_t* tableOpt = rocksdb_block_based_options_create();
|
||||
rocksdb_block_based_options_set_block_cache(tableOpt, handle->cache);
|
||||
rocksdb_block_based_options_set_partition_filters(tableOpt, 1);
|
||||
|
||||
rocksdb_filterpolicy_t* filter = rocksdb_filterpolicy_create_bloom(15);
|
||||
rocksdb_block_based_options_set_filter_policy(tableOpt, filter);
|
||||
|
||||
rocksdb_options_set_block_based_table_factory((rocksdb_options_t*)cfOpt[i], tableOpt);
|
||||
|
||||
param[i].tableOpt = tableOpt;
|
||||
};
|
||||
|
||||
rocksdb_comparator_t** pCompare = taosMemoryCalloc(cfLen, sizeof(rocksdb_comparator_t*));
|
||||
for (int i = 0; i < cfLen; i++) {
|
||||
SCfInit* cf = &ginitDict[i];
|
||||
|
||||
rocksdb_comparator_t* compare = rocksdb_comparator_create(NULL, cf->destroyCmp, cf->cmpKey, cf->cmpName);
|
||||
rocksdb_options_set_comparator((rocksdb_options_t*)cfOpt[i], compare);
|
||||
pCompare[i] = compare;
|
||||
}
|
||||
rocksdb_column_family_handle_t** cfHandle = taosMemoryCalloc(cfLen, sizeof(rocksdb_column_family_handle_t*));
|
||||
pBackendCfWrapper->rocksdb = handle->db;
|
||||
pBackendCfWrapper->pHandle = (void**)cfHandle;
|
||||
pBackendCfWrapper->writeOpts = rocksdb_writeoptions_create();
|
||||
pBackendCfWrapper->readOpts = rocksdb_readoptions_create();
|
||||
pBackendCfWrapper->cfOpts = (void**)cfOpt;
|
||||
pBackendCfWrapper->dbOpt = handle->dbOpt;
|
||||
pBackendCfWrapper->param = param;
|
||||
pBackendCfWrapper->pBackend = handle;
|
||||
pBackendCfWrapper->backendId = pState->streamBackendRid;
|
||||
taosThreadRwlockInit(&pBackendCfWrapper->rwLock, NULL);
|
||||
SCfComparator compare = {.comp = pCompare, .numOfComp = cfLen};
|
||||
pBackendCfWrapper->pComparNode = streamBackendAddCompare(handle, &compare);
|
||||
rocksdb_writeoptions_disable_WAL(pBackendCfWrapper->writeOpts, 1);
|
||||
memcpy(pBackendCfWrapper->idstr, pState->pTdbState->idstr, sizeof(pState->pTdbState->idstr));
|
||||
|
||||
int64_t id = taosAddRef(streamBackendCfWrapperId, pBackendCfWrapper);
|
||||
pState->pTdbState->backendCfWrapperId = id;
|
||||
pState->pTdbState->pBackendCfWrapper = pBackendCfWrapper;
|
||||
stInfo("succ to open state %p on backendWrapper %p %s", pState, pBackendCfWrapper, pBackendCfWrapper->idstr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void streamStateCloseBackend(SStreamState* pState, bool remove) {
|
||||
SBackendCfWrapper* wrapper = pState->pTdbState->pBackendCfWrapper;
|
||||
SBackendWrapper* pHandle = wrapper->pBackend;
|
||||
|
||||
stInfo("start to close state on backend: %p", pHandle);
|
||||
|
||||
streamMutexLock(&pHandle->cfMutex);
|
||||
RocksdbCfInst** ppInst = taosHashGet(pHandle->cfInst, wrapper->idstr, strlen(pState->pTdbState->idstr) + 1);
|
||||
if (ppInst != NULL && *ppInst != NULL) {
|
||||
RocksdbCfInst* inst = *ppInst;
|
||||
taosMemoryFree(inst);
|
||||
taosHashRemove(pHandle->cfInst, pState->pTdbState->idstr, strlen(pState->pTdbState->idstr) + 1);
|
||||
}
|
||||
streamMutexUnlock(&pHandle->cfMutex);
|
||||
|
||||
char* status[] = {"close", "drop"};
|
||||
stInfo("start to %s state %p on backendWrapper %p %s", status[remove == false ? 0 : 1], pState, wrapper,
|
||||
wrapper->idstr);
|
||||
wrapper->remove |= remove; // update by other pState
|
||||
taosReleaseRef(streamBackendCfWrapperId, pState->pTdbState->backendCfWrapperId);
|
||||
}
|
||||
#endif
|
||||
void streamStateDestroyCompar(void* arg) {
|
||||
SCfComparator* comp = (SCfComparator*)arg;
|
||||
for (int i = 0; i < comp->numOfComp; i++) {
|
||||
|
@ -3386,7 +3301,8 @@ int32_t streamStateGetFirst_rocksdb(SStreamState* pState, SWinKey* key) {
|
|||
return streamStateDel_rocksdb(pState, &tmp);
|
||||
}
|
||||
|
||||
int32_t streamStateFillGetGroupKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen) {
|
||||
int32_t streamStateFillGetGroupKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal,
|
||||
int32_t* pVLen) {
|
||||
if (!pCur) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -4377,7 +4293,9 @@ void streamStateParTagSeekKeyNext_rocksdb(SStreamState* pState, const int64_t gr
|
|||
}
|
||||
}
|
||||
|
||||
int32_t streamStateParTagGetKVByCur_rocksdb(SStreamStateCur* pCur, int64_t* pGroupId, const void** pVal, int32_t* pVLen) {
|
||||
int32_t streamStateParTagGetKVByCur_rocksdb(SStreamStateCur* pCur, int64_t* pGroupId, const void** pVal,
|
||||
int32_t* pVLen) {
|
||||
stDebug("streamStateFillGetKVByCur_rocksdb");
|
||||
if (!pCur) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -4719,7 +4637,7 @@ int32_t compareHashTableImpl(SHashObj* p1, SHashObj* p2, SArray* diff) {
|
|||
if (fname == NULL) {
|
||||
return terrno;
|
||||
}
|
||||
TAOS_UNUSED(strncpy(fname, name, len));
|
||||
tstrncpy(fname, name, strlen(name));
|
||||
if (taosArrayPush(diff, &fname) == NULL) {
|
||||
taosMemoryFree(fname);
|
||||
return terrno;
|
||||
|
@ -4743,17 +4661,32 @@ int32_t compareHashTable(SHashObj* p1, SHashObj* p2, SArray* add, SArray* del) {
|
|||
void hashTableToDebug(SHashObj* pTbl, char** buf) {
|
||||
size_t sz = taosHashGetSize(pTbl);
|
||||
int32_t total = 0;
|
||||
char* p = taosMemoryCalloc(1, sz * 16 + 4);
|
||||
int32_t cap = sz * 16 + 4;
|
||||
|
||||
char* p = taosMemoryCalloc(1, cap);
|
||||
if (p == NULL) {
|
||||
stError("failed to alloc memory for stream snapshot debug info");
|
||||
return;
|
||||
}
|
||||
|
||||
void* pIter = taosHashIterate(pTbl, NULL);
|
||||
while (pIter) {
|
||||
size_t len = 0;
|
||||
char* name = taosHashGetKey(pIter, &len);
|
||||
char* tname = taosMemoryCalloc(1, len + 1);
|
||||
memcpy(tname, name, len);
|
||||
total += sprintf(p + total, "%s,", tname);
|
||||
if (name == NULL || len <= 0) {
|
||||
pIter = taosHashIterate(pTbl, pIter);
|
||||
continue;
|
||||
}
|
||||
int32_t left = cap - strlen(p);
|
||||
int32_t nBytes = snprintf(p + total, left, "%s,", name);
|
||||
if (nBytes <= 0 || nBytes >= left) {
|
||||
stError("failed to debug snapshot info since %s", tstrerror(TSDB_CODE_OUT_OF_RANGE));
|
||||
taosMemoryFree(p);
|
||||
return;
|
||||
}
|
||||
|
||||
pIter = taosHashIterate(pTbl, pIter);
|
||||
taosMemoryFree(tname);
|
||||
total += nBytes;
|
||||
}
|
||||
if (total > 0) {
|
||||
p[total - 1] = 0;
|
||||
|
@ -4764,13 +4697,30 @@ void strArrayDebugInfo(SArray* pArr, char** buf) {
|
|||
int32_t sz = taosArrayGetSize(pArr);
|
||||
if (sz <= 0) return;
|
||||
|
||||
char* p = (char*)taosMemoryCalloc(1, 64 + sz * 64);
|
||||
int32_t total = 0;
|
||||
int32_t code = 0;
|
||||
int32_t total = 0, nBytes = 0;
|
||||
int32_t cap = 64 + sz * 64;
|
||||
|
||||
char* p = (char*)taosMemoryCalloc(1, cap);
|
||||
if (p == NULL) {
|
||||
stError("failed to alloc memory for stream snapshot debug info");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sz; i++) {
|
||||
char* name = taosArrayGetP(pArr, i);
|
||||
total += sprintf(p + total, "%s,", name);
|
||||
int32_t left = cap - strlen(p);
|
||||
nBytes = snprintf(p + total, left, "%s,", name);
|
||||
if (nBytes <= 0 || nBytes >= left) {
|
||||
code = TSDB_CODE_OUT_OF_RANGE;
|
||||
stError("failed to debug snapshot info since %s", tstrerror(code));
|
||||
taosMemoryFree(p);
|
||||
return;
|
||||
}
|
||||
|
||||
total += nBytes;
|
||||
}
|
||||
|
||||
p[total - 1] = 0;
|
||||
|
||||
*buf = p;
|
||||
|
@ -4780,16 +4730,16 @@ void dbChkpDebugInfo(SDbChkp* pDb) {
|
|||
char* p[4] = {NULL};
|
||||
|
||||
hashTableToDebug(pDb->pSstTbl[pDb->idx], &p[0]);
|
||||
stTrace("chkp previous file: [%s]", p[0]);
|
||||
if (p[0]) stTrace("chkp previous file: [%s]", p[0]);
|
||||
|
||||
hashTableToDebug(pDb->pSstTbl[1 - pDb->idx], &p[1]);
|
||||
stTrace("chkp curr file: [%s]", p[1]);
|
||||
if (p[1]) stTrace("chkp curr file: [%s]", p[1]);
|
||||
|
||||
strArrayDebugInfo(pDb->pAdd, &p[2]);
|
||||
stTrace("chkp newly addded file: [%s]", p[2]);
|
||||
if (p[2]) stTrace("chkp newly addded file: [%s]", p[2]);
|
||||
|
||||
strArrayDebugInfo(pDb->pDel, &p[3]);
|
||||
stTrace("chkp newly deleted file: [%s]", p[3]);
|
||||
if (p[3]) stTrace("chkp newly deleted file: [%s]", p[3]);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
taosMemoryFree(p[i]);
|
||||
|
@ -4881,7 +4831,7 @@ int32_t dbChkpGetDelta(SDbChkp* p, int64_t chkpId, SArray* list) {
|
|||
return terrno;
|
||||
}
|
||||
|
||||
TAOS_UNUSED(strncpy(fname, name, len));
|
||||
tstrncpy(fname, name, strlen(name));
|
||||
if (taosArrayPush(p->pAdd, &fname) == NULL) {
|
||||
taosMemoryFree(fname);
|
||||
TAOS_UNUSED(taosThreadRwlockUnlock(&p->rwLock));
|
||||
|
@ -5356,7 +5306,8 @@ SStreamStateCur* streamStateSeekKeyPrev_rocksdb(SStreamState* pState, const SWin
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen) {
|
||||
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamState* pState, SStreamStateCur* pCur, SWinKey* pKey,
|
||||
const void** pVal, int32_t* pVLen) {
|
||||
if (!pCur) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -292,6 +292,7 @@ int32_t streamTaskSetDb(SStreamMeta* pMeta, SStreamTask* pTask, const char* key)
|
|||
void* p = taskDbAddRef(*ppBackend);
|
||||
if (p == NULL) {
|
||||
stError("s-task:0x%x failed to ref backend", pTask->id.taskId);
|
||||
streamMutexUnlock(&pMeta->backendMutex);
|
||||
return TSDB_CODE_FAILED;
|
||||
}
|
||||
|
||||
|
@ -946,7 +947,6 @@ int32_t streamMetaUnregisterTask(SStreamMeta* pMeta, int64_t streamId, int32_t t
|
|||
pTask->info.delaySchedParam = 0;
|
||||
}
|
||||
|
||||
|
||||
int64_t refId = pTask->id.refId;
|
||||
int32_t ret = taosRemoveRef(streamTaskRefPool, refId);
|
||||
if (ret != 0) {
|
||||
|
|
|
@ -120,7 +120,8 @@ SStreamState* streamStateOpen(const char* path, void* pTask, int64_t streamId, i
|
|||
SStreamTask* pStreamTask = pTask;
|
||||
pState->streamId = streamId;
|
||||
pState->taskId = taskId;
|
||||
TAOS_UNUSED(tsnprintf(pState->pTdbState->idstr, sizeof(pState->pTdbState->idstr), "0x%" PRIx64 "-0x%x", pState->streamId, pState->taskId));
|
||||
TAOS_UNUSED(tsnprintf(pState->pTdbState->idstr, sizeof(pState->pTdbState->idstr), "0x%" PRIx64 "-0x%x",
|
||||
pState->streamId, pState->taskId));
|
||||
|
||||
code = streamTaskSetDb(pStreamTask->pMeta, pTask, pState->pTdbState->idstr);
|
||||
QUERY_CHECK_CODE(code, lino, _end);
|
||||
|
@ -539,7 +540,6 @@ int32_t streamStateDeleteParName(SStreamState* pState, int64_t groupId) {
|
|||
|
||||
void streamStateDestroy(SStreamState* pState, bool remove) {
|
||||
streamFileStateDestroy(pState->pFileState);
|
||||
// streamStateDestroy_rocksdb(pState, remove);
|
||||
tSimpleHashCleanup(pState->parNameMap);
|
||||
// do nothong
|
||||
taosMemoryFreeClear(pState->pTdbState);
|
||||
|
@ -584,7 +584,8 @@ int32_t streamStateCountWinAddIfNotExist(SStreamState* pState, SSessionKey* pKey
|
|||
return getCountWinResultBuff(pState->pFileState, pKey, winCount, ppVal, pVLen, pWinCode);
|
||||
}
|
||||
|
||||
int32_t streamStateCountWinAdd(SStreamState* pState, SSessionKey* pKey, COUNT_TYPE winCount, void** pVal, int32_t* pVLen) {
|
||||
int32_t streamStateCountWinAdd(SStreamState* pState, SSessionKey* pKey, COUNT_TYPE winCount, void** pVal,
|
||||
int32_t* pVLen) {
|
||||
return createCountWinResultBuff(pState->pFileState, pKey, winCount, pVal, pVLen);
|
||||
}
|
||||
|
||||
|
@ -605,9 +606,7 @@ SStreamStateCur* streamStateGroupGetCur(SStreamState* pState) {
|
|||
return pCur;
|
||||
}
|
||||
|
||||
void streamStateGroupCurNext(SStreamStateCur* pCur) {
|
||||
streamFileStateGroupCurNext(pCur);
|
||||
}
|
||||
void streamStateGroupCurNext(SStreamStateCur* pCur) { streamFileStateGroupCurNext(pCur); }
|
||||
|
||||
int32_t streamStateGroupGetKVByCur(SStreamStateCur* pCur, int64_t* pKey, void** pVal, int32_t* pVLen) {
|
||||
if (pVal != NULL) {
|
||||
|
@ -616,13 +615,9 @@ int32_t streamStateGroupGetKVByCur(SStreamStateCur* pCur, int64_t* pKey, void**
|
|||
return streamFileStateGroupGetKVByCur(pCur, pKey, pVal, pVLen);
|
||||
}
|
||||
|
||||
void streamStateClearExpiredState(SStreamState* pState) {
|
||||
clearExpiredState(pState->pFileState);
|
||||
}
|
||||
void streamStateClearExpiredState(SStreamState* pState) { clearExpiredState(pState->pFileState); }
|
||||
|
||||
void streamStateSetFillInfo(SStreamState* pState) {
|
||||
setFillInfo(pState->pFileState);
|
||||
}
|
||||
void streamStateSetFillInfo(SStreamState* pState) { setFillInfo(pState->pFileState); }
|
||||
|
||||
int32_t streamStateGetPrev(SStreamState* pState, const SWinKey* pKey, SWinKey* pResKey, void** pVal, int32_t* pVLen,
|
||||
int32_t* pWinCode) {
|
||||
|
|
|
@ -52,7 +52,7 @@ int32_t tdbOpen(const char *dbname, int32_t szPage, int32_t pages, TDB **ppDb, i
|
|||
|
||||
pDb->encryptAlgorithm = encryptAlgorithm;
|
||||
if (encryptKey != NULL) {
|
||||
strncpy(pDb->encryptKey, encryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(pDb->encryptKey, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
}
|
||||
|
||||
ret = tdbPCacheOpen(szPage, pages, &(pDb->pCache));
|
||||
|
|
|
@ -459,7 +459,7 @@ static char *tdbEncryptPage(SPager *pPager, char *pPageData, int32_t pageSize, c
|
|||
opts.source = pPageData + count;
|
||||
opts.result = packetData;
|
||||
opts.unitLen = 128;
|
||||
strncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
int32_t newLen = CBC_Encrypt(&opts);
|
||||
|
||||
|
@ -927,7 +927,7 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage
|
|||
opts.source = pPage->pData + count;
|
||||
opts.result = packetData;
|
||||
opts.unitLen = 128;
|
||||
strncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN);
|
||||
tstrncpy(opts.key, encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
int newLen = CBC_Decrypt(&opts);
|
||||
|
||||
|
|
|
@ -200,8 +200,8 @@ bool tfsIsSameFile(const STfsFile *pFile1, const STfsFile *pFile2) {
|
|||
if (pFile1->did.level != pFile2->did.level) return false;
|
||||
if (pFile1->did.id != pFile2->did.id) return false;
|
||||
char nameBuf1[TMPNAME_LEN], nameBuf2[TMPNAME_LEN];
|
||||
(void)strncpy(nameBuf1, pFile1->rname, TMPNAME_LEN);
|
||||
(void)strncpy(nameBuf2, pFile2->rname, TMPNAME_LEN);
|
||||
tstrncpy(nameBuf1, pFile1->rname, TMPNAME_LEN);
|
||||
tstrncpy(nameBuf2, pFile2->rname, TMPNAME_LEN);
|
||||
nameBuf1[TMPNAME_LEN - 1] = 0;
|
||||
nameBuf2[TMPNAME_LEN - 1] = 0;
|
||||
TAOS_UNUSED(taosRealPath(nameBuf1, NULL, TMPNAME_LEN));
|
||||
|
@ -573,7 +573,7 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) {
|
|||
TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG);
|
||||
}
|
||||
|
||||
strncpy(pCfg->dir, dirName, TSDB_FILENAME_LEN);
|
||||
tstrncpy(pCfg->dir, dirName, TSDB_FILENAME_LEN);
|
||||
|
||||
TAOS_RETURN(0);
|
||||
}
|
||||
|
|
|
@ -332,7 +332,7 @@ _exit:
|
|||
wError("vgId:%d, %s failed at line %d since %s", pWal->cfg.vgId, __func__, lino, tstrerror(code));
|
||||
}
|
||||
|
||||
TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
static FORCE_INLINE int32_t walCheckAndRoll(SWal *pWal) {
|
||||
|
@ -621,7 +621,7 @@ static FORCE_INLINE int32_t walWriteImpl(SWal *pWal, int64_t index, tmsg_t msgTy
|
|||
opts.source = newBody;
|
||||
opts.result = newBodyEncrypted;
|
||||
opts.unitLen = 16;
|
||||
TAOS_UNUSED(strncpy((char *)opts.key, pWal->cfg.encryptKey, ENCRYPT_KEY_LEN));
|
||||
tstrncpy((char *)opts.key, pWal->cfg.encryptKey, ENCRYPT_KEY_LEN + 1);
|
||||
|
||||
int32_t count = CBC_Encrypt(&opts);
|
||||
|
||||
|
@ -689,8 +689,13 @@ _exit:
|
|||
|
||||
static int32_t walInitWriteFile(SWal *pWal) {
|
||||
TdFilePtr pIdxTFile, pLogTFile;
|
||||
int64_t fileFirstVer = -1;
|
||||
int32_t code = 0;
|
||||
SWalFileInfo *pRet = taosArrayGetLast(pWal->fileInfoSet);
|
||||
int64_t fileFirstVer = pRet->firstVer;
|
||||
if (pRet == NULL) {
|
||||
fileFirstVer = pWal->vers.lastVer + 1;
|
||||
}
|
||||
fileFirstVer = pRet->firstVer;
|
||||
|
||||
char fnameStr[WAL_FILE_LEN];
|
||||
walBuildIdxName(pWal, fileFirstVer, fnameStr);
|
||||
|
@ -707,6 +712,13 @@ static int32_t walInitWriteFile(SWal *pWal) {
|
|||
// switch file
|
||||
pWal->pIdxFile = pIdxTFile;
|
||||
pWal->pLogFile = pLogTFile;
|
||||
if (taosArrayGetSize(pWal->fileInfoSet) == 0) {
|
||||
code = walRollFileInfo(pWal);
|
||||
if (code < 0) {
|
||||
wError("vgId:%d, failed to roll file info while init write file since %s", pWal->cfg.vgId, terrstr());
|
||||
TAOS_RETURN(code);
|
||||
}
|
||||
}
|
||||
pWal->writeCur = taosArrayGetSize(pWal->fileInfoSet) - 1;
|
||||
|
||||
TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||
|
|
|
@ -120,33 +120,20 @@ int32_t taosStr2int64(const char *str, int64_t *val) {
|
|||
if (str == NULL || val == NULL) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
errno = 0;
|
||||
char *endptr = NULL;
|
||||
int64_t ret = strtoll(str, &endptr, 10);
|
||||
if (errno == ERANGE && (ret == LLONG_MAX || ret == LLONG_MIN)) {
|
||||
if (errno != 0) {
|
||||
return TAOS_SYSTEM_ERROR(errno);
|
||||
} else if (errno == EINVAL && ret == 0) {
|
||||
} else {
|
||||
if (endptr == str) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
} else {
|
||||
}
|
||||
*val = ret;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int16(const char *str, int16_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
int64_t tmp = 0;
|
||||
int32_t code = taosStr2int64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > INT16_MAX || tmp < INT16_MIN) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int16_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int32(const char *str, int32_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
|
@ -161,6 +148,20 @@ int32_t taosStr2int32(const char *str, int32_t *val) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
int32_t taosStr2int16(const char *str, int16_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
int64_t tmp = 0;
|
||||
int32_t code = taosStr2int64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > INT16_MAX || tmp < INT16_MIN) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int16_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int8(const char *str, int8_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
|
@ -177,6 +178,70 @@ int32_t taosStr2int8(const char *str, int8_t *val) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint64(const char *str, uint64_t *val) {
|
||||
if (str == NULL || val == NULL) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
char *endptr = NULL;
|
||||
errno = 0;
|
||||
uint64_t ret = strtoull(str, &endptr, 10);
|
||||
|
||||
if (errno != 0) {
|
||||
return TAOS_SYSTEM_ERROR(errno);
|
||||
} else {
|
||||
if (endptr == str) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
*val = ret;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint32(const char *str, uint32_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT32_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int32_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint16(const char *str, uint16_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT16_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int16_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint8(const char *str, uint8_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT8_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int8_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t tasoUcs4Compare(TdUcs4 *f1_ucs4, TdUcs4 *f2_ucs4, int32_t bytes) {
|
||||
if ((f1_ucs4 == NULL || f2_ucs4 == NULL)) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
|
@ -510,7 +575,8 @@ int32_t taosMbsToWchars(TdWchar *pWchars, const char *pStrs, int32_t size) {
|
|||
|
||||
int32_t taosWcharToMb(char *pStr, TdWchar wchar) {
|
||||
OS_PARAM_CHECK(pStr);
|
||||
return wctomb(pStr, wchar); }
|
||||
return wctomb(pStr, wchar);
|
||||
}
|
||||
|
||||
char *taosStrCaseStr(const char *str, const char *pattern) {
|
||||
if (str == NULL) {
|
||||
|
|
|
@ -154,3 +154,483 @@ TEST(osStringTests, ostsnprintfTests) {
|
|||
EXPECT_EQ(ret, 11);
|
||||
EXPECT_STREQ(buffer, "Float: 3.14");
|
||||
}
|
||||
TEST(osStringTests, osStr2Int64) {
|
||||
int64_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2int64(NULL, &val);
|
||||
assert(result == TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2int64("123", NULL);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2int64("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2int64("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%lld", LLONG_MAX);
|
||||
result = taosStr2int64(large_num, &val);
|
||||
assert(result == 0);
|
||||
assert(val == LLONG_MAX);
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%lld", LLONG_MIN);
|
||||
result = taosStr2int64(large_num, &val);
|
||||
assert(result == 0);
|
||||
assert(val == LLONG_MIN);
|
||||
|
||||
result = taosStr2int64("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int64("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2int64("12345", &val);
|
||||
assert(result == 0);
|
||||
assert(val == 12345);
|
||||
|
||||
result = taosStr2int64("-12345", &val);
|
||||
assert(result == 0);
|
||||
assert(val == -12345);
|
||||
|
||||
result = taosStr2int64("0", &val);
|
||||
assert(result == 0);
|
||||
assert(val == 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2int64(" 12345", &val);
|
||||
assert(result == 0);
|
||||
assert(val == 12345);
|
||||
|
||||
result = taosStr2int64("12345 ", &val);
|
||||
assert(result == 0);
|
||||
assert(val == 12345);
|
||||
}
|
||||
TEST(osStringTests, osStr2int32) {
|
||||
int32_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2int32(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2int32("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2int32("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2int32("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT_MAX);
|
||||
result = taosStr2int32(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT_MAX);
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT_MIN);
|
||||
result = taosStr2int32(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT_MIN);
|
||||
|
||||
// 测试大于 INT32 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT_MAX + 1);
|
||||
result = taosStr2int32(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT_MIN - 1);
|
||||
result = taosStr2int32(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
|
||||
result = taosStr2int32("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int32("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2int32("12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2int32("-12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, -12345);
|
||||
|
||||
result = taosStr2int32("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2int32(" 12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2int32("12345 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
}
|
||||
|
||||
TEST(osStringTests, taosStr2int16) {
|
||||
int16_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2int16(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2int16("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2int16("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2int16("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT16_MAX);
|
||||
result = taosStr2int16(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT16_MAX);
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT16_MIN);
|
||||
result = taosStr2int16(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT16_MIN);
|
||||
|
||||
// 测试大于 INT16 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT16_MAX + 1);
|
||||
result = taosStr2int16(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT16_MIN - 1);
|
||||
result = taosStr2int16(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
result = taosStr2int16("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int16("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2int16("12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2int16("-12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, -12345);
|
||||
|
||||
result = taosStr2int16("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2int16(" 12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2int16("12345 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
}
|
||||
|
||||
|
||||
TEST(osStringTests, taosStr2int8) {
|
||||
int8_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2int8(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2int8("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2int8("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2int8("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT8_MAX);
|
||||
result = taosStr2int8(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT8_MAX);
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%d", INT8_MIN);
|
||||
result = taosStr2int8(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, INT8_MIN);
|
||||
|
||||
// 测试大于 INT8 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT8_MAX + 1);
|
||||
result = taosStr2int8(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
snprintf(large_num, sizeof(large_num), "%lld", (long long)INT8_MIN - 1);
|
||||
result = taosStr2int8(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
result = taosStr2int8("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int8("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2int8("123", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int8("-123", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, -123);
|
||||
|
||||
result = taosStr2int8("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2int8(" 123", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2int8("123 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
}
|
||||
|
||||
TEST(osStringTests, osStr2Uint64) {
|
||||
uint64_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2Uint64(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2Uint64("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2Uint64("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2Uint64("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%llu", ULLONG_MAX);
|
||||
result = taosStr2Uint64(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, ULLONG_MAX);
|
||||
|
||||
result = taosStr2Uint64("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint64("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2Uint64("12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint64("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2Uint64(" 12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint64("12345 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
}
|
||||
|
||||
TEST(osStringTests, taosStr2Uint32) {
|
||||
uint32_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2Uint32(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2Uint32("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2Uint32("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2Uint32("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%u", UINT32_MAX);
|
||||
result = taosStr2Uint32(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, UINT32_MAX);
|
||||
|
||||
// 测试大于 UINT32 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%llu", (unsigned long long)UINT32_MAX + 1);
|
||||
result = taosStr2Uint32(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
result = taosStr2Uint32("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint32("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2Uint32("12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint32("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2Uint32(" 12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint32("12345 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
}
|
||||
|
||||
TEST(osStringTests, taosStr2Uint16) {
|
||||
uint16_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2Uint16(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2Uint16("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2Uint16("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2Uint16("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%u", UINT16_MAX);
|
||||
result = taosStr2Uint16(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, UINT16_MAX);
|
||||
|
||||
// 测试大于 UINT16 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%llu", (unsigned long long)UINT16_MAX + 1);
|
||||
result = taosStr2Uint16(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
result = taosStr2Uint16("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint16("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2Uint16("12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint16("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2Uint16(" 12345", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
|
||||
result = taosStr2Uint16("12345 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 12345);
|
||||
}
|
||||
|
||||
TEST(osStringTests, taosStr2Uint8) {
|
||||
uint8_t val;
|
||||
int32_t result;
|
||||
|
||||
// 测试空指针输入
|
||||
result = taosStr2Uint8(NULL, &val);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
result = taosStr2Uint8("123", NULL);
|
||||
ASSERT_EQ(result, TSDB_CODE_INVALID_PARA);
|
||||
|
||||
// 测试无效输入
|
||||
result = taosStr2Uint8("abc", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
result = taosStr2Uint8("", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
|
||||
// 测试超出范围的值
|
||||
char large_num[50];
|
||||
snprintf(large_num, sizeof(large_num), "%u", UINT8_MAX);
|
||||
result = taosStr2Uint8(large_num, &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, UINT8_MAX);
|
||||
|
||||
// 测试大于 UINT8 范围的值
|
||||
snprintf(large_num, sizeof(large_num), "%llu", (unsigned long long)UINT8_MAX + 1);
|
||||
result = taosStr2Uint8(large_num, &val);
|
||||
ASSERT_EQ(result, TAOS_SYSTEM_ERROR(ERANGE));
|
||||
|
||||
result = taosStr2Uint8("123abc", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint8("abc123", &val);
|
||||
ASSERT_NE(result, 0);
|
||||
// 测试有效的整数字符串
|
||||
result = taosStr2Uint8("123", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint8("0", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 0);
|
||||
|
||||
// 测试带空格的字符串
|
||||
result = taosStr2Uint8(" 123", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
|
||||
result = taosStr2Uint8("123 ", &val);
|
||||
ASSERT_EQ(result, 0);
|
||||
ASSERT_EQ(val, 123);
|
||||
}
|
||||
|
||||
|
|
|
@ -152,11 +152,13 @@ static int32_t cfgCheckAndSetDir(SConfigItem *pItem, const char *inputDir) {
|
|||
}
|
||||
|
||||
static int32_t cfgSetBool(SConfigItem *pItem, const char *value, ECfgSrcType stype) {
|
||||
int32_t code = 0;
|
||||
bool tmp = false;
|
||||
if (strcasecmp(value, "true") == 0) {
|
||||
tmp = true;
|
||||
}
|
||||
if (atoi(value) > 0) {
|
||||
int32_t val = 0;
|
||||
if ((code = taosStr2int32(value, &val)) == 0 && val > 0) {
|
||||
tmp = true;
|
||||
}
|
||||
|
||||
|
@ -308,6 +310,7 @@ static int32_t cfgSetLocale(SConfigItem *pItem, const char *value, ECfgSrcType s
|
|||
|
||||
static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary,
|
||||
const char *disable, ECfgSrcType stype) {
|
||||
int32_t code = 0;
|
||||
(void)taosThreadMutexLock(&pCfg->lock);
|
||||
|
||||
SConfigItem *pItem = cfgGetItem(pCfg, name);
|
||||
|
@ -328,20 +331,40 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value,
|
|||
|
||||
SDiskCfg cfg = {0};
|
||||
tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir));
|
||||
cfg.level = level ? atoi(level) : 0;
|
||||
cfg.primary = primary ? atoi(primary) : 1;
|
||||
cfg.disable = disable ? atoi(disable) : 0;
|
||||
|
||||
if (level == NULL || strlen(level) == 0) {
|
||||
cfg.level = 0;
|
||||
} else {
|
||||
code = taosStr2int32(level, &cfg.level);
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
if (primary == NULL || strlen(primary) == 0) {
|
||||
cfg.primary = 1;
|
||||
} else {
|
||||
code = taosStr2int32(primary, &cfg.primary);
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
if (disable == NULL || strlen(disable) == 0) {
|
||||
cfg.disable = 0;
|
||||
} else {
|
||||
code = taosStr2int8(disable, &cfg.disable);
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
void *ret = taosArrayPush(pItem->array, &cfg);
|
||||
if (ret == NULL) {
|
||||
(void)taosThreadMutexUnlock(&pCfg->lock);
|
||||
|
||||
TAOS_RETURN(terrno);
|
||||
code = terrno;
|
||||
TAOS_CHECK_GOTO(code, NULL, _err);
|
||||
}
|
||||
|
||||
pItem->stype = stype;
|
||||
(void)taosThreadMutexUnlock(&pCfg->lock);
|
||||
|
||||
TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||
_err:
|
||||
(void)taosThreadMutexUnlock(&pCfg->lock);
|
||||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
static int32_t cfgUpdateDebugFlagItem(SConfig *pCfg, const char *name, bool resetArray) {
|
||||
|
@ -365,7 +388,7 @@ static int32_t cfgUpdateDebugFlagItem(SConfig *pCfg, const char *name, bool rese
|
|||
if (pDebugFlagItem == NULL) return -1;
|
||||
if (pDebugFlagItem->array != NULL) {
|
||||
SLogVar logVar = {0};
|
||||
(void)strncpy(logVar.name, name, TSDB_LOG_VAR_LEN - 1);
|
||||
tstrncpy(logVar.name, name, TSDB_LOG_VAR_LEN);
|
||||
if (NULL == taosArrayPush(pDebugFlagItem->array, &logVar)) {
|
||||
TAOS_RETURN(terrno);
|
||||
}
|
||||
|
@ -462,6 +485,7 @@ void cfgLock(SConfig *pCfg) {
|
|||
void cfgUnLock(SConfig *pCfg) { (void)taosThreadMutexUnlock(&pCfg->lock); }
|
||||
|
||||
int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *pVal, bool isServer) {
|
||||
int32_t code = 0;
|
||||
ECfgDynType dynType = isServer ? CFG_DYN_SERVER : CFG_DYN_CLIENT;
|
||||
|
||||
cfgLock(pCfg);
|
||||
|
@ -493,8 +517,9 @@ int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *p
|
|||
}
|
||||
} break;
|
||||
case CFG_DTYPE_BOOL: {
|
||||
int32_t ival = (int32_t)atoi(pVal);
|
||||
if (ival != 0 && ival != 1) {
|
||||
int32_t ival = 0;
|
||||
code = taosStr2int32(pVal, &ival);
|
||||
if (code != 0 || (ival != 0 && ival != 1)) {
|
||||
uError("cfg:%s, type:%s value:%d out of range[0, 1]", pItem->name, cfgDtypeStr(pItem->dtype), ival);
|
||||
cfgUnLock(pCfg);
|
||||
TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
|
||||
|
@ -949,7 +974,8 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) {
|
|||
for (size_t j = 0; j < sz; ++j) {
|
||||
SDiskCfg *pCfg = taosArrayGet(pItem->array, j);
|
||||
if (dump) {
|
||||
(void)printf("%s %s %s l:%d p:%d d:%"PRIi8"\n", src, name, pCfg->dir, pCfg->level, pCfg->primary, pCfg->disable);
|
||||
(void)printf("%s %s %s l:%d p:%d d:%" PRIi8 "\n", src, name, pCfg->dir, pCfg->level, pCfg->primary,
|
||||
pCfg->disable);
|
||||
} else {
|
||||
uInfo("%s %s %s l:%d p:%d d:%" PRIi8, src, name, pCfg->dir, pCfg->level, pCfg->primary, pCfg->disable);
|
||||
}
|
||||
|
@ -986,7 +1012,7 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) {
|
|||
name = value = value2 = value3 = value4 = NULL;
|
||||
olen = vlen = vlen2 = vlen3 = vlen4 = 0;
|
||||
|
||||
strncpy(line, *pEnv, sizeof(line) - 1);
|
||||
tstrncpy(line, *pEnv, sizeof(line));
|
||||
pEnv++;
|
||||
if (taosEnvToCfg(line, line) < 0) {
|
||||
uTrace("failed to convert env to cfg:%s", line);
|
||||
|
@ -1031,7 +1057,7 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) {
|
|||
int32_t index = 0;
|
||||
if (envCmd == NULL) TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||
while (envCmd[index] != NULL) {
|
||||
strncpy(buf, envCmd[index], sizeof(buf) - 1);
|
||||
tstrncpy(buf, envCmd[index], sizeof(buf));
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
if (taosEnvToCfg(buf, buf) < 0) {
|
||||
uTrace("failed to convert env to cfg:%s", buf);
|
||||
|
@ -1482,7 +1508,7 @@ int32_t cfgGetApollUrl(const char **envCmd, const char *envFile, char *apolloUrl
|
|||
char **pEnv = environ;
|
||||
line[1023] = 0;
|
||||
while (*pEnv != NULL) {
|
||||
strncpy(line, *pEnv, sizeof(line) - 1);
|
||||
tstrncpy(line, *pEnv, sizeof(line));
|
||||
pEnv++;
|
||||
if (strncmp(line, "TAOS_APOLLO_URL", 14) == 0) {
|
||||
char *p = strchr(line, '=');
|
||||
|
|
|
@ -525,6 +525,64 @@ bool tIsValidFileName(const char *fileName, const char *pattern) {
|
|||
|
||||
bool tIsValidFilePath(const char *filePath, const char *pattern) {
|
||||
const char *filePathPattern = "^[a-zA-Z0-9:/\\_.-]+$";
|
||||
|
||||
return tIsValidFileName(filePath, pattern ? pattern : filePathPattern);
|
||||
}
|
||||
|
||||
bool taosIsBigChar(char c) {
|
||||
if (c >= 'A' && c <= 'Z') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool taosIsSmallChar(char c) {
|
||||
if (c >= 'a' && c <= 'z') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool taosIsNumberChar(char c) {
|
||||
if (c >= '0' && c <= '9') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool taosIsSpecialChar(char c) {
|
||||
switch (c) {
|
||||
case '!':
|
||||
case '@':
|
||||
case '#':
|
||||
case '$':
|
||||
case '%':
|
||||
case '^':
|
||||
case '&':
|
||||
case '*':
|
||||
case '(':
|
||||
case ')':
|
||||
case '-':
|
||||
case '_':
|
||||
case '+':
|
||||
case '=':
|
||||
case '[':
|
||||
case ']':
|
||||
case '{':
|
||||
case '}':
|
||||
case ':':
|
||||
case ';':
|
||||
case '>':
|
||||
case '<':
|
||||
case '?':
|
||||
case '|':
|
||||
case '~':
|
||||
case ',':
|
||||
case '.':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@
|
|||
#include "taoserror.h"
|
||||
|
||||
int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
||||
int32_t code = 0;
|
||||
if (vstr == NULL) {
|
||||
return terrno = TSDB_CODE_INVALID_VERSION_STRING;
|
||||
}
|
||||
|
@ -31,7 +32,10 @@ int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
|||
if (vstr[spos] != '.') {
|
||||
tmp[spos - tpos] = vstr[spos];
|
||||
} else {
|
||||
vnum[vpos] = atoi(tmp);
|
||||
code = taosStr2int32(tmp, &vnum[vpos]);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
memset(tmp, 0, sizeof(tmp));
|
||||
vpos++;
|
||||
tpos = spos + 1;
|
||||
|
@ -39,7 +43,10 @@ int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
|||
}
|
||||
|
||||
if ('\0' != tmp[0] && vpos < 4) {
|
||||
vnum[vpos] = atoi(tmp);
|
||||
code = taosStr2int32(tmp, &vnum[vpos]);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
if (vnum[0] <= 0) {
|
||||
|
|
|
@ -40,9 +40,9 @@ class TDTestCase(TBase):
|
|||
def test_common_user_privileges(self):
|
||||
self.prepare_data()
|
||||
# create user
|
||||
self.create_user("test", "test")
|
||||
self.create_user("test", "test12@#*")
|
||||
# check user 'test' privileges
|
||||
testconn = taos.connect(user='test', password='test')
|
||||
testconn = taos.connect(user='test', password='test12@#*')
|
||||
cursor = testconn.cursor()
|
||||
testSql = TDSql()
|
||||
testSql.init(cursor)
|
||||
|
@ -87,9 +87,9 @@ class TDTestCase(TBase):
|
|||
def test_common_user_with_createdb_privileges(self):
|
||||
self.prepare_data()
|
||||
# create user
|
||||
self.create_user("test", "test")
|
||||
self.create_user("test", "test12@#*")
|
||||
# check user 'test' privileges
|
||||
testconn = taos.connect(user='test', password='test')
|
||||
testconn = taos.connect(user='test', password='test12@#*')
|
||||
cursor = testconn.cursor()
|
||||
testSql = TDSql()
|
||||
testSql.init(cursor)
|
||||
|
@ -133,8 +133,8 @@ class TDTestCase(TBase):
|
|||
testSql.checkRows(2)
|
||||
|
||||
# create another user 'test1'
|
||||
self.create_user("test1", "test1")
|
||||
test1conn = taos.connect(user='test1', password='test1')
|
||||
self.create_user("test1", "test12@#*^%")
|
||||
test1conn = taos.connect(user='test1', password='test12@#*^%')
|
||||
cursor1 = test1conn.cursor()
|
||||
test1Sql = TDSql()
|
||||
test1Sql.init(cursor1)
|
||||
|
|
|
@ -305,9 +305,9 @@ class TDTestCase(TBase):
|
|||
"""
|
||||
try:
|
||||
# create new user and grant create database priviledge
|
||||
tdSql.execute("create user test pass 'test';")
|
||||
tdSql.execute("create user test pass 'ab45*&TC';")
|
||||
tdSql.execute("alter user test createdb 1;")
|
||||
conn = taos.connect(user="test", password="test")
|
||||
conn = taos.connect(user="test", password="ab45*&TC")
|
||||
cursor = conn.cursor()
|
||||
# create database and tables with new user
|
||||
tdLog.info("Prepare data for test case test_abnormal_drop_table_with_non_root_user")
|
||||
|
|
|
@ -26,10 +26,10 @@ class TDTestCase:
|
|||
def run(self):
|
||||
print("==============step1")
|
||||
try:
|
||||
tdSql.execute("create user abc pass '123456'")
|
||||
tdSql.execute("create user abc pass '123456rf@#'")
|
||||
except Exception as e:
|
||||
tdLog.exit(e)
|
||||
print("create user abc pass '123456'")
|
||||
print("create user abc pass '123456rf@#'")
|
||||
|
||||
print("==============step2")
|
||||
try:
|
||||
|
|
|
@ -267,7 +267,7 @@ void createUsers(TAOS *taos, const char *host, char *qstr) {
|
|||
}
|
||||
|
||||
// alter pass for users
|
||||
sprintf(qstr, "alter user %s pass 'taos'", users[i]);
|
||||
sprintf(qstr, "alter user %s pass 'taos@123'", users[i]);
|
||||
queryDB(taos, qstr);
|
||||
}
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ void passVerTestMulti(const char *host, char *qstr) {
|
|||
queryDB(taos[0], "create table if not exists demo2.stb (ts timestamp, c1 int) tags(t1 int)");
|
||||
queryDB(taos[0], "create table if not exists demo3.stb (ts timestamp, c1 int) tags(t1 int)");
|
||||
|
||||
strcpy(qstr, "alter user root pass 'taos'");
|
||||
strcpy(qstr, "alter user root pass 'taos@123'");
|
||||
queryDB(taos[0], qstr);
|
||||
|
||||
// calculate the nPassVerNotified for root and users
|
||||
|
@ -345,7 +345,7 @@ void sysInfoTest(TAOS *taosRoot, const char *host, char *qstr) {
|
|||
char userName[USER_LEN] = "user0";
|
||||
|
||||
for (int i = 0; i < nRoot; ++i) {
|
||||
taos[i] = taos_connect(host, "user0", "taos", NULL, 0);
|
||||
taos[i] = taos_connect(host, "user0", "taos@123", NULL, 0);
|
||||
if (taos[i] == NULL) {
|
||||
fprintf(stderr, "failed to connect to server, reason:%s\n", "null taos" /*taos_errstr(taos)*/);
|
||||
exit(1);
|
||||
|
@ -427,7 +427,7 @@ _loop:
|
|||
printf("\n\n%s:%d LOOP %d, nTestUsers:%d\n", __func__, __LINE__, nLoop, nTestUsers);
|
||||
for (int i = 0; i < nTestUsers; ++i) {
|
||||
// sprintf(users[i], "user%d", i);
|
||||
taosu[i] = taos_connect(host, users[i], "taos", NULL, 0);
|
||||
taosu[i] = taos_connect(host, users[i], "taos@123", NULL, 0);
|
||||
if (taosu[i] == NULL) {
|
||||
printf("failed to connect to server, user:%s, reason:%s\n", users[i], "null taos" /*taos_errstr(taos)*/);
|
||||
exit(1);
|
||||
|
@ -476,7 +476,7 @@ _loop:
|
|||
nUserDropped = 0;
|
||||
for (int i = 0; i < nTestUsers; ++i) {
|
||||
sprintf(users[i], "user%d", i);
|
||||
sprintf(qstr, "CREATE USER %s PASS 'taos'", users[i]);
|
||||
sprintf(qstr, "CREATE USER %s PASS 'taos@123'", users[i]);
|
||||
fprintf(stderr, "%s:%d create user:%s\n", __func__, __LINE__, users[i]);
|
||||
queryDB(taos, qstr);
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ if $data(2)[2] != follower then
|
|||
endi
|
||||
|
||||
print =============== create user
|
||||
sql create user user1 PASS 'user1'
|
||||
sql create user user1 PASS 'user1@#xy'
|
||||
sql select * from information_schema.ins_users
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
|
|
|
@ -68,7 +68,7 @@ if $leaderExist != 1 then
|
|||
endi
|
||||
|
||||
print =============== step3: create user
|
||||
sql create user user1 PASS 'user1'
|
||||
sql create user user1 PASS 'user121$*'
|
||||
sql select * from information_schema.ins_users
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
|
|
|
@ -8,7 +8,7 @@ system sh/deploy.sh -n dnode1 -i 1
|
|||
system sh/cfg.sh -n dnode1 -c udf -v 1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sql connect
|
||||
sql alter user root pass 'taosdata2'
|
||||
sql alter user root pass '12s34(*&xx'
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ sql create mnode on dnode 3
|
|||
sleep 3000
|
||||
|
||||
print =============== create user
|
||||
sql create user user1 PASS 'user1'
|
||||
sql create user user1 PASS 'usersdf1$*'
|
||||
sql select * from information_schema.ins_users
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
|
|
|
@ -11,8 +11,8 @@ system sh/exec.sh -n dnode1 -s start
|
|||
sql connect
|
||||
|
||||
print =============== create user1
|
||||
sql create user user1 PASS 'user1'
|
||||
sql create user user2 PASS 'user2'
|
||||
sql create user user1 PASS 'use@##r1$*'
|
||||
sql create user user2 PASS 'use&*r2$*'
|
||||
sql select * from information_schema.ins_users
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
|
|
|
@ -4,8 +4,8 @@ system sh/exec.sh -n dnode1 -s start
|
|||
sql connect
|
||||
|
||||
print ============= step1
|
||||
sql create user u_read pass 'taosdata1'
|
||||
sql create user u_write pass 'taosdata1'
|
||||
sql create user u_read pass 'tbx12F132!'
|
||||
sql create user u_write pass 'tbx12145&*'
|
||||
|
||||
sql alter user u_read pass 'taosdata'
|
||||
sql alter user u_write pass 'taosdata'
|
||||
|
@ -15,6 +15,164 @@ if $rows != 3 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
# invalid password format
|
||||
|
||||
sql_error create user user_p1 pass 'taosdata1'
|
||||
sql_error create user user_p1 pass 'taosdata2'
|
||||
sql_error create user user_p1 pass '!@#$%^&3'
|
||||
sql_error create user user_p1 pass '1234564'
|
||||
sql_error create user user_p1 pass 'taosdataa'
|
||||
sql_error create user user_p1 pass 'taosdatab'
|
||||
sql_error create user user_p1 pass '!@#$%^&c'
|
||||
sql_error create user user_p1 pass '123456d'
|
||||
sql_error create user user_p1 pass 'taosdataE'
|
||||
sql_error create user user_p1 pass 'taosdataF'
|
||||
sql_error create user user_p1 pass '!@#$%^&G'
|
||||
sql_error create user user_p1 pass '12333315H'
|
||||
sql_error create user user_p1 pass 'aaaaaaaat1'
|
||||
sql_error create user user_p1 pass 'TTTTTTTTT2'
|
||||
sql_error create user user_p1 pass '!@#$%^&!3'
|
||||
sql_error create user user_p1 pass '12345654'
|
||||
sql_error create user user_p1 pass 'taosdatata'
|
||||
sql_error create user user_p1 pass 'TAOSDATATb'
|
||||
sql_error create user user_p1 pass '!@#$%^&!c'
|
||||
sql_error create user user_p1 pass '1234565d'
|
||||
sql_error create user user_p1 pass 'taosdatatE'
|
||||
sql_error create user user_p1 pass 'TAOSDATATF'
|
||||
sql_error create user user_p1 pass '!@#$$*!G'
|
||||
sql_error create user user_p1 pass '1234565H'
|
||||
sql_error create user user_p1 pass 'taosdataaosdata!'
|
||||
sql_error create user user_p1 pass 'taosdataaosdata@'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#'
|
||||
sql_error create user user_p1 pass '!@#$%^&'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#@'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*##'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#$'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#%'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#^'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#&'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#*'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#('
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#)'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#-'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#_'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#+'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#='
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#['
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#]'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#{'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#}'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#:'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#;'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#>'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#<'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#?'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#|'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#~'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#,'
|
||||
sql_error create user user_p1 pass '!@#$%^&@*#.'
|
||||
sql_error create user user_p1 pass 'tbd1234TTT\'
|
||||
sql_error create user user_p1 pass 'tbd1234TTT/'
|
||||
sql_error create user user_p1 pass 'tbd1234TTT`'
|
||||
sql_error create user user_p1 pass 'taosdatax'
|
||||
sql_error create user user_p1 pass 'taosdatay'
|
||||
|
||||
sql_error create user user_p1 pass 'abcd!@1'
|
||||
sql create user user_p2 pass 'abcd!@12'
|
||||
sql create user user_p3 pass 'abcd!@123'
|
||||
sql create user user_p4 pass 'abcd!@1234'
|
||||
sql create user user_p5 pass 'abcd!@12345'
|
||||
sql create user user_p6 pass 'abcd!@123456'
|
||||
sql create user user_p7 pass 'abcd!@1234567'
|
||||
sql create user user_p8 pass 'abcd!@123456789'
|
||||
sql create user user_p9 pass 'abcd!@1234567890'
|
||||
sql_error create user user_p10 pass 'abcd!@1234567890T'
|
||||
sql drop user user_p2
|
||||
sql drop user user_p3
|
||||
sql drop user user_p4
|
||||
sql drop user user_p5
|
||||
sql drop user user_p6
|
||||
sql drop user user_p7
|
||||
sql drop user user_p8
|
||||
sql drop user user_p9
|
||||
|
||||
sql create user user_p1 pass 'xt12!@cd'
|
||||
|
||||
sql_error alter user user_p1 pass 'abcd!@1'
|
||||
sql alter user user_p1 pass 'abcd!@12'
|
||||
sql alter user user_p1 pass 'abcd!@123'
|
||||
sql alter user user_p1 pass 'abcd!@1234'
|
||||
sql alter user user_p1 pass 'abcd!@12345'
|
||||
sql alter user user_p1 pass 'abcd!@123456'
|
||||
sql alter user user_p1 pass 'abcd!@1234567'
|
||||
sql alter user user_p1 pass 'abcd!@123456789'
|
||||
sql alter user user_p1 pass 'abcd!@1234567890'
|
||||
sql_error user user_p1 pass 'abcd!@1234567890T'
|
||||
sql_error alter user user_p1 pass 'taosdata1'
|
||||
sql_error alter user user_p1 pass 'taosdata2'
|
||||
sql_error alter user user_p1 pass '!@#$%^&3'
|
||||
sql_error alter user user_p1 pass '1234564'
|
||||
sql_error alter user user_p1 pass 'taosdataa'
|
||||
sql_error alter user user_p1 pass 'taosdatab'
|
||||
sql_error alter user user_p1 pass '!@#$%^&c'
|
||||
sql_error alter user user_p1 pass '123456d'
|
||||
sql_error alter user user_p1 pass 'taosdataE'
|
||||
sql_error alter user user_p1 pass 'taosdataF'
|
||||
sql_error alter user user_p1 pass '!@#$%^&G'
|
||||
sql_error alter user user_p1 pass '12334515H'
|
||||
sql_error alter user user_p1 pass 'aasfdsft1'
|
||||
sql_error alter user user_p1 pass 'TAOSDATAT2'
|
||||
sql_error alter user user_p1 pass '!@#$%^&!3'
|
||||
sql_error alter user user_p1 pass '12345654'
|
||||
sql_error alter user user_p1 pass 'taosdatata'
|
||||
sql_error alter user user_p1 pass 'TAOSDATATb'
|
||||
sql_error alter user user_p1 pass '!@#$%^&!c'
|
||||
sql_error alter user user_p1 pass '1234565d'
|
||||
sql_error alter user user_p1 pass 'taosdatatE'
|
||||
sql_error alter user user_p1 pass 'TAOSDATATF'
|
||||
sql_error alter user user_p1 pass '*%^^%###!G'
|
||||
sql_error alter user user_p1 pass '1234565H'
|
||||
sql_error alter user user_p1 pass 'taosdataaosdata!'
|
||||
sql_error alter user user_p1 pass 'taosdataaosdata@'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#'
|
||||
sql_error alter user user_p1 pass '!@#$%^&'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#@'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*##'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#$'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#%'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#^'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#&'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#*'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#('
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#)'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#-'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#_'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#+'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#='
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#['
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#]'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#{'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#}'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#:'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#;'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#>'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#<'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#?'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#|'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#~'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#,'
|
||||
sql_error alter user user_p1 pass '!@#$%^&@*#.'
|
||||
sql_error alter user user_p1 pass 'tbd1234TTT\'
|
||||
sql_error alter user user_p1 pass 'tbd1234TTT/'
|
||||
sql_error alter user user_p1 pass 'tbd1234TTT`'
|
||||
sql_error alter user user_p1 pass 'taosdatax'
|
||||
sql_error alter user user_p1 pass 'taosdatay'
|
||||
|
||||
sql drop user user_p1
|
||||
|
||||
sql create user user_px pass 'taosdata'
|
||||
sql drop user user_px
|
||||
|
||||
print ============= step2
|
||||
print user u_read login
|
||||
sql close
|
||||
|
@ -54,7 +212,7 @@ sql create user oroot pass 'taosdata'
|
|||
sql_error create user $user PASS 'abcd012345678901234567891234567890abcd012345678901234567891234567890abcd012345678901234567891234567890abcd012345678901234567891234567890123'
|
||||
sql_error create userabcd012345678901234567891234567890abcd01234567890123456789123456789 PASS 'taosdata'
|
||||
sql_error create user abcd0123456789012345678901234567890111 PASS '123'
|
||||
sql create user abc01234567890123456789 PASS '123'
|
||||
sql create user abc01234567890123456789 PASS '123xyzYDE'
|
||||
|
||||
sql show users
|
||||
if $rows != 5 then
|
||||
|
@ -84,4 +242,34 @@ sql_error REVOKE all ON *.* from o_root;
|
|||
sql_error GRANT read,write ON *.* to o_root;
|
||||
sql_error REVOKE read,write ON *.* from o_root;
|
||||
|
||||
|
||||
sql create user u01 pass 'taosdata1!'
|
||||
sql create user u02 pass 'taosdata1@'
|
||||
sql create user u03 pass 'taosdata1#'
|
||||
# sql create user u04 pass 'taosdata1$'
|
||||
sql create user u05 pass 'taosdata1%'
|
||||
sql create user u06 pass 'taosdata1^'
|
||||
sql create user u07 pass 'taosdata1&'
|
||||
sql create user u08 pass 'taosdata1*'
|
||||
sql create user u09 pass 'taosdata1('
|
||||
sql create user u10 pass 'taosdata1)'
|
||||
sql create user u11 pass 'taosdata1-'
|
||||
sql create user u12 pass 'taosdata1_'
|
||||
sql create user u13 pass 'taosdata1+'
|
||||
sql create user u14 pass 'taosdata1='
|
||||
sql create user u15 pass 'taosdata1['
|
||||
sql create user u16 pass 'taosdata1]'
|
||||
sql create user u17 pass 'taosdata1{'
|
||||
sql create user u18 pass 'taosdata1}'
|
||||
sql create user u19 pass 'taosdata1:'
|
||||
sql create user u20 pass 'taosdata1;'
|
||||
sql create user u21 pass 'taosdata1>'
|
||||
sql create user u22 pass 'taosdata1<'
|
||||
sql create user u23 pass 'taosdata1?'
|
||||
sql create user u24 pass 'taosdata1|'
|
||||
sql create user u25 pass 'taosdata1~'
|
||||
sql create user u26 pass 'taosdata1,'
|
||||
sql create user u27 pass 'taosdata1.'
|
||||
|
||||
return
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -17,8 +17,8 @@ if $rows != 5 then
|
|||
endi
|
||||
|
||||
print =============== create users
|
||||
sql create user user1 PASS 'user1'
|
||||
sql create user user2 PASS 'user2'
|
||||
sql create user user1 PASS '123124(*&xx)'
|
||||
sql create user user2 PASS '1234(*&xx'
|
||||
sql select * from information_schema.ins_users
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
|
|
|
@ -4,8 +4,8 @@ system sh/exec.sh -n dnode1 -s start
|
|||
sql connect
|
||||
|
||||
print ============= step1
|
||||
sql create user u_read pass 'taosdata1' host '127.0.0.1/24','192.168.1.0/24'
|
||||
sql create user u_write pass 'taosdata1' host '127.0.0.1','192.168.1.0'
|
||||
sql create user u_read pass 'taosdata1xad@#' host '127.0.0.1/24','192.168.1.0/24'
|
||||
sql create user u_write pass 'taosdata1TadBD' host '127.0.0.1','192.168.1.0'
|
||||
|
||||
sql alter user u_read add host '3.3.3.4/24'
|
||||
sql_error alter user u_write drop host '4.4.4.5/25'
|
||||
|
@ -16,8 +16,8 @@ if $rows != 3 then
|
|||
endi
|
||||
|
||||
print ============= step2
|
||||
sql_error create user read1 pass 'taosdata1' host '127.0.0/24'
|
||||
sql_error create user write1 pass 'taosdata1' host '4.4.4.4/33'
|
||||
sql_error create user read1 pass 'taosdata1XR' host '127.0.0/24'
|
||||
sql_error create user write1 pass 'TZtaosdata1' host '4.4.4.4/33'
|
||||
|
||||
sql show users
|
||||
if $rows != 3 then
|
||||
|
|
|
@ -114,7 +114,7 @@ class TDTestCase:
|
|||
consumer_dict = {
|
||||
"group.id": "g1",
|
||||
"td.connect.user": self.user_name,
|
||||
"td.connect.pass": "test",
|
||||
"td.connect.pass": "123456rf@#",
|
||||
"auto.offset.reset": "earliest"
|
||||
}
|
||||
consumer = Consumer(consumer_dict)
|
||||
|
@ -167,7 +167,7 @@ class TDTestCase:
|
|||
|
||||
def create_user(self):
|
||||
tdSql.execute(f'create topic {self.topic_name} as database {self.dbnames[0]}')
|
||||
tdSql.execute(f'create user {self.user_name} pass "test"')
|
||||
tdSql.execute(f'create user {self.user_name} pass "123456rf@#"')
|
||||
|
||||
def run(self):
|
||||
self.prepare_data()
|
||||
|
|
|
@ -158,7 +158,7 @@ class TDTestCase:
|
|||
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
|
||||
tdSql.prepare()
|
||||
# time.sleep(2)
|
||||
tdSql.query("create user testpy pass 'testpy'")
|
||||
tdSql.query("create user testpy pass 'testpy243#@'")
|
||||
tdSql.query("alter user testpy createdb 1")
|
||||
|
||||
#hostname = socket.gethostname()
|
||||
|
@ -175,7 +175,7 @@ class TDTestCase:
|
|||
checkNetworkStatus = ['0: unavailable', '1: network ok', '2: service ok', '3: service degraded', '4: exiting']
|
||||
netrole = ['client', 'server']
|
||||
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy243#@', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
'k':'', 't':'', 'n':'', 'l':'1024', 'N':'100', 'V':'', 'd':'db', 'w':'30', '-help':'', '-usage':'', '?':''}
|
||||
|
||||
keyDict['h'] = self.hostname
|
||||
|
|
|
@ -134,7 +134,7 @@ class TDTestCase:
|
|||
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
|
||||
tdSql.prepare()
|
||||
# time.sleep(2)
|
||||
tdSql.query("create user testpy pass 'testpy'")
|
||||
tdSql.query("create user testpy pass 'testpy243#@'")
|
||||
|
||||
#hostname = socket.gethostname()
|
||||
#tdLog.info ("hostname: %s" % hostname)
|
||||
|
@ -150,7 +150,7 @@ class TDTestCase:
|
|||
checkNetworkStatus = ['0: unavailable', '1: network ok', '2: service ok', '3: service degraded', '4: exiting']
|
||||
netrole = ['client', 'server']
|
||||
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy243#@', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
'k':'', 't':'', 'n':'', 'l':'1024', 'N':'100', 'V':'', 'd':'db', 'w':'30', '-help':'', '-usage':'', '?':''}
|
||||
|
||||
keyDict['h'] = self.hostname
|
||||
|
|
|
@ -133,7 +133,7 @@ class TDTestCase:
|
|||
|
||||
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
|
||||
tdSql.prepare()
|
||||
tdSql.query("create user testpy pass 'testpy'")
|
||||
tdSql.query("create user testpy pass 'testpy243#@'")
|
||||
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
|
@ -146,7 +146,7 @@ class TDTestCase:
|
|||
checkNetworkStatus = ['0: unavailable', '1: network ok', '2: service ok', '3: service degraded', '4: exiting']
|
||||
netrole = ['client', 'server']
|
||||
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy243#@', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
'k':'', 't':'', 'n':'', 'l':'1024', 'N':'100', 'V':'', 'd':'db', 'w':'30', '-help':'', '-usage':'', '?':''}
|
||||
|
||||
keyDict['h'] = self.hostname
|
||||
|
|
|
@ -132,7 +132,7 @@ class TDTestCase:
|
|||
|
||||
def preData(self):
|
||||
# database\stb\tb\chiild-tb\rows\topics
|
||||
tdSql.execute("create user testpy pass 'testpy'")
|
||||
tdSql.execute("create user testpy pass 'testpy243#@'")
|
||||
tdSql.execute("drop database if exists db0;")
|
||||
tdSql.execute("create database db0 wal_retention_period 3600;")
|
||||
tdSql.execute("use db0;")
|
||||
|
|
|
@ -182,14 +182,14 @@ class TDTestCase:
|
|||
for i in range(self.users_count):
|
||||
user = User()
|
||||
user.name = f"user_test{i}"
|
||||
user.passwd = f"taosdata{i}"
|
||||
user.passwd = f"taosdata@1{i}"
|
||||
user.db_set = set()
|
||||
self.users.append(user)
|
||||
return self.users
|
||||
|
||||
@property
|
||||
def __passwd_list(self):
|
||||
return [f"taosdata{i}" for i in range(self.users_count) ]
|
||||
return [f"taosdata@1{i}" for i in range(self.users_count) ]
|
||||
|
||||
@property
|
||||
def __privilege(self):
|
||||
|
@ -210,34 +210,34 @@ class TDTestCase:
|
|||
|
||||
def create_user_err(self):
|
||||
sqls = [
|
||||
"create users u1 pass 'u1passwd' ",
|
||||
"create user '' pass 'u1passwd' ",
|
||||
"create user pass 'u1passwd' ",
|
||||
"create user u1 pass u1passwd ",
|
||||
"create user u1 password 'u1passwd' ",
|
||||
"create user u1 pass u1passwd ",
|
||||
"create users u1 pass 'u1Passwd' ",
|
||||
"create user '' pass 'u1Passwd' ",
|
||||
"create user pass 'u1Passwd' ",
|
||||
"create user u1 pass u1Passwd ",
|
||||
"create user u1 password 'u1Passwd' ",
|
||||
"create user u1 pass u1Passwd ",
|
||||
"create user u1 pass '' ",
|
||||
"create user u1 pass ' ' ",
|
||||
"create user u1 pass ",
|
||||
"create user u1 u2 pass 'u1passwd' 'u2passwd' ",
|
||||
"create user u1 u2 pass 'u1passwd', 'u2passwd' ",
|
||||
"create user u1, u2 pass 'u1passwd', 'u2passwd' ",
|
||||
"create user u1, u2 pass 'u1passwd' 'u2passwd' ",
|
||||
"create user u1 u2 pass 'u1Passwd' 'u2passwd' ",
|
||||
"create user u1 u2 pass 'u1Passwd', 'u2passwd' ",
|
||||
"create user u1, u2 pass 'u1Passwd', 'u2passwd' ",
|
||||
"create user u1, u2 pass 'u1Passwd' 'u2passwd' ",
|
||||
# length of user_name must <= 23
|
||||
"create user u12345678901234567890123 pass 'u1passwd' " ,
|
||||
"create user u12345678901234567890123 pass 'u1Passwd' " ,
|
||||
# length of passwd must <= 128
|
||||
"create user u1 pass 'u12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678' " ,
|
||||
# password must have not " ' ~ ` \
|
||||
"create user u1 pass 'u1passwd\\' " ,
|
||||
"create user u1 pass 'u1passwd~' " ,
|
||||
"create user u1 pass 'u1passwd\"' " ,
|
||||
"create user u1 pass 'u1passwd\'' " ,
|
||||
"create user u1 pass 'u1passwd`' " ,
|
||||
"create user u1 pass 'u1Passwd\\' " ,
|
||||
"create user u1 pass 'u1Passwd~' " ,
|
||||
"create user u1 pass 'u1Passwd\"' " ,
|
||||
"create user u1 pass 'u1Passwd\'' " ,
|
||||
"create user u1 pass 'u1Passwd`' " ,
|
||||
# must after create a user named u1
|
||||
"create user u1 pass 'u1passwd' " ,
|
||||
"create user u1 pass 'u1Passwd' " ,
|
||||
]
|
||||
|
||||
tdSql.execute("create user u1 pass 'u1passwd' ")
|
||||
tdSql.execute("create user u1 pass 'u1Passwd' ")
|
||||
for sql in sqls:
|
||||
tdSql.error(sql)
|
||||
|
||||
|
@ -258,12 +258,12 @@ class TDTestCase:
|
|||
|
||||
def alter_pass_err(self): # sourcery skip: remove-redundant-fstring
|
||||
sqls = [
|
||||
f"alter users {self.__user_list[0]} pass 'newpass' " ,
|
||||
f"alter users {self.__user_list[0]} pass 'newpassT1' " ,
|
||||
f"alter user {self.__user_list[0]} pass '' " ,
|
||||
f"alter user {self.__user_list[0]} pass ' ' " ,
|
||||
f"alter user anyuser pass 'newpass' " ,
|
||||
f"alter user anyuser pass 'newpassT1' " ,
|
||||
f"alter user {self.__user_list[0]} pass " ,
|
||||
f"alter user {self.__user_list[0]} password 'newpass' " ,
|
||||
f"alter user {self.__user_list[0]} password 'newpassT1' " ,
|
||||
]
|
||||
for sql in sqls:
|
||||
tdSql.error(sql)
|
||||
|
@ -649,7 +649,7 @@ class TDTestCase:
|
|||
# user = conn
|
||||
# 不能创建用户
|
||||
tdLog.printNoPrefix("==========step4.1: normal user can not create user")
|
||||
user.error("create use utest1 pass 'utest1pass'")
|
||||
user.error("create use utest1 pass 'utest1Pass'")
|
||||
# 可以查看用户
|
||||
tdLog.printNoPrefix("==========step4.2: normal user can show user")
|
||||
user.query("show users")
|
||||
|
|
|
@ -80,16 +80,16 @@ class TDTestCase:
|
|||
for user_name in ['jiacy1_all', 'jiacy1_read', 'jiacy1_write', 'jiacy1_none', 'jiacy0_all', 'jiacy0_read',
|
||||
'jiacy0_write', 'jiacy0_none']:
|
||||
if 'jiacy1' in user_name.lower():
|
||||
tdSql.execute(f'create user {user_name} pass "123" sysinfo 1')
|
||||
tdSql.execute(f'create user {user_name} pass "123abc!@#" sysinfo 1')
|
||||
elif 'jiacy0' in user_name.lower():
|
||||
tdSql.execute(f'create user {user_name} pass "123" sysinfo 0')
|
||||
tdSql.execute(f'create user {user_name} pass "123abc!@#" sysinfo 0')
|
||||
for user_name in ['jiacy1_all', 'jiacy1_read', 'jiacy0_all', 'jiacy0_read']:
|
||||
tdSql.execute(f'grant read on db to {user_name}')
|
||||
for user_name in ['jiacy1_all', 'jiacy1_write', 'jiacy0_all', 'jiacy0_write']:
|
||||
tdSql.execute(f'grant write on db to {user_name}')
|
||||
|
||||
def user_privilege_check(self):
|
||||
jiacy1_read_conn = taos.connect(user='jiacy1_read', password='123')
|
||||
jiacy1_read_conn = taos.connect(user='jiacy1_read', password='123abc!@#')
|
||||
sql = "create table ntb (ts timestamp,c0 int)"
|
||||
expectErrNotOccured = True
|
||||
try:
|
||||
|
@ -107,14 +107,14 @@ class TDTestCase:
|
|||
pass
|
||||
|
||||
def drop_topic(self):
|
||||
jiacy1_all_conn = taos.connect(user='jiacy1_all', password='123')
|
||||
jiacy1_read_conn = taos.connect(user='jiacy1_read', password='123')
|
||||
jiacy1_write_conn = taos.connect(user='jiacy1_write', password='123')
|
||||
jiacy1_none_conn = taos.connect(user='jiacy1_none', password='123')
|
||||
jiacy0_all_conn = taos.connect(user='jiacy0_all', password='123')
|
||||
jiacy0_read_conn = taos.connect(user='jiacy0_read', password='123')
|
||||
jiacy0_write_conn = taos.connect(user='jiacy0_write', password='123')
|
||||
jiacy0_none_conn = taos.connect(user='jiacy0_none', password='123')
|
||||
jiacy1_all_conn = taos.connect(user='jiacy1_all', password='123abc!@#')
|
||||
jiacy1_read_conn = taos.connect(user='jiacy1_read', password='123abc!@#')
|
||||
jiacy1_write_conn = taos.connect(user='jiacy1_write', password='123abc!@#')
|
||||
jiacy1_none_conn = taos.connect(user='jiacy1_none', password='123abc!@#')
|
||||
jiacy0_all_conn = taos.connect(user='jiacy0_all', password='123abc!@#')
|
||||
jiacy0_read_conn = taos.connect(user='jiacy0_read', password='123abc!@#')
|
||||
jiacy0_write_conn = taos.connect(user='jiacy0_write', password='123abc!@#')
|
||||
jiacy0_none_conn = taos.connect(user='jiacy0_none', password='123abc!@#')
|
||||
tdSql.execute('create topic root_db as select * from db.stb')
|
||||
for user in [jiacy1_all_conn, jiacy1_read_conn, jiacy0_all_conn, jiacy0_read_conn]:
|
||||
user.execute(f'create topic db_jiacy as select * from db.stb')
|
||||
|
@ -149,7 +149,7 @@ class TDTestCase:
|
|||
tdSql.execute('create topic db_topic as select * from db.stb')
|
||||
tdSql.execute('grant subscribe on db_topic to jiacy1_all')
|
||||
print("build consumer")
|
||||
tmq = Consumer({"group.id": "tg2", "td.connect.user": "jiacy1_all", "td.connect.pass": "123",
|
||||
tmq = Consumer({"group.id": "tg2", "td.connect.user": "jiacy1_all", "td.connect.pass": "123abc!@#",
|
||||
"enable.auto.commit": "true"})
|
||||
print("build topic list")
|
||||
tmq.subscribe(["db_topic"])
|
||||
|
|
|
@ -58,7 +58,7 @@ class TDTestCase:
|
|||
self.stbnum_grant = 200
|
||||
|
||||
def create_user(self):
|
||||
tdSql.execute(f'create user {self.user_name} pass "test"')
|
||||
tdSql.execute(f'create user {self.user_name} pass "test123@#$"')
|
||||
tdSql.execute(f'grant read on {self.dbnames[0]}.{self.stbname} with t2 = "Beijing" to {self.user_name}')
|
||||
tdSql.execute(f'grant write on {self.dbnames[1]}.{self.stbname} with t1 = 2 to {self.user_name}')
|
||||
|
||||
|
@ -75,7 +75,7 @@ class TDTestCase:
|
|||
tdSql.execute(f'create table {self.stbname}_grant_{i} (ts timestamp, c0 int) tags(t0 int)')
|
||||
|
||||
def user_read_privilege_check(self, dbname):
|
||||
testconn = taos.connect(user='test', password='test')
|
||||
testconn = taos.connect(user='test', password='test123@#$')
|
||||
expectErrNotOccured = False
|
||||
|
||||
try:
|
||||
|
@ -94,7 +94,7 @@ class TDTestCase:
|
|||
pass
|
||||
|
||||
def user_write_privilege_check(self, dbname):
|
||||
testconn = taos.connect(user='test', password='test')
|
||||
testconn = taos.connect(user='test', password='test123@#$')
|
||||
expectErrNotOccured = False
|
||||
|
||||
try:
|
||||
|
@ -110,7 +110,7 @@ class TDTestCase:
|
|||
pass
|
||||
|
||||
def user_privilege_error_check(self):
|
||||
testconn = taos.connect(user='test', password='test')
|
||||
testconn = taos.connect(user='test', password='test123@#$')
|
||||
expectErrNotOccured = False
|
||||
|
||||
sql_list = [f"alter talbe {self.dbnames[0]}.stb_1 set t2 = 'Wuhan'",
|
||||
|
|
|
@ -21,7 +21,7 @@ class TDTestCase:
|
|||
self.setsql = TDSetSql()
|
||||
# user info
|
||||
self.username = 'test'
|
||||
self.password = 'test'
|
||||
self.password = 'test123@#$'
|
||||
# db info
|
||||
self.dbname = "user_privilege_all_db"
|
||||
self.stbname = 'stb'
|
||||
|
|
|
@ -19,7 +19,7 @@ class TDTestCase:
|
|||
# user info
|
||||
self.userNum = 100
|
||||
self.basic_username = "user"
|
||||
self.password = "pwd"
|
||||
self.password = "test123@#$"
|
||||
|
||||
# db info
|
||||
self.dbname = "user_privilege_multi_users"
|
||||
|
|
|
@ -20,7 +20,7 @@ class TDTestCase:
|
|||
self.setsql = TDSetSql()
|
||||
# user info
|
||||
self.username = 'test'
|
||||
self.password = 'test'
|
||||
self.password = 'test123@#$'
|
||||
# db info
|
||||
self.dbname = "user_privilege_show"
|
||||
self.stbname = 'stb'
|
||||
|
|
|
@ -231,7 +231,7 @@ class TDTestCase:
|
|||
"""
|
||||
self.prepare_data()
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
# grant all db permission to user
|
||||
tdSql.execute("grant all on view_db.* to view_test;")
|
||||
|
@ -271,7 +271,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db write and view all
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data(conn)
|
||||
|
@ -302,7 +302,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db write and view read
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data()
|
||||
|
@ -338,7 +338,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db write and view alter
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data()
|
||||
|
@ -362,7 +362,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db read and view all
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data()
|
||||
|
@ -388,7 +388,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db read and view alter
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data()
|
||||
|
@ -413,7 +413,7 @@ class TDTestCase:
|
|||
"""This test case is used to verify the view permission with db read and view read
|
||||
"""
|
||||
username = "view_test"
|
||||
password = "test"
|
||||
password = "test123@#$"
|
||||
self.create_user(username, password)
|
||||
conn = taos.connect(user=username, password=password)
|
||||
self.prepare_data()
|
||||
|
|
|
@ -40,7 +40,7 @@ class TDTestCase:
|
|||
|
||||
def preData(self):
|
||||
# database\stb\tb\chiild-tb\rows\topics
|
||||
tdSql.execute("create user testpy pass 'testpy'")
|
||||
tdSql.execute("create user testpy pass 'test123@#$'")
|
||||
tdSql.execute("drop database if exists db0;")
|
||||
tdSql.execute("create database db0 WAL_RETENTION_PERIOD -1 WAL_RETENTION_SIZE -1 ;")
|
||||
tdSql.execute("use db0;")
|
||||
|
|
|
@ -33,7 +33,7 @@ class TDTestCase:
|
|||
self.colname_length_boundary = self.boundary.COL_KEY_MAX_LENGTH
|
||||
self.tagname_length_boundary = self.boundary.TAG_KEY_MAX_LENGTH
|
||||
self.username_length_boundary = 23
|
||||
self.password_length_boundary = 31
|
||||
self.password_length_boundary = 14
|
||||
def dbname_length_check(self):
|
||||
dbname_length = randint(1,self.dbname_length_boundary-1)
|
||||
for dbname in [tdCom.get_long_name(self.dbname_length_boundary),tdCom.get_long_name(dbname_length)]:
|
||||
|
@ -120,27 +120,31 @@ class TDTestCase:
|
|||
def username_length_check(self):
|
||||
username_length = randint(1,self.username_length_boundary-1)
|
||||
for username in [tdCom.get_long_name(username_length),tdCom.get_long_name(self.username_length_boundary)]:
|
||||
tdSql.execute(f'create user {username} pass "123"')
|
||||
tdSql.execute(f'create user {username} pass "test123@#$"')
|
||||
tdSql.query('show users')
|
||||
for user in tdSql.queryResult:
|
||||
if user[0].lower() != 'root':
|
||||
tdSql.checkEqual(user[0],username)
|
||||
tdSql.execute(f'drop user {username}')
|
||||
username = tdCom.get_long_name(self.username_length_boundary+1)
|
||||
tdSql.error(f'create user {username} pass "123"')
|
||||
tdSql.error(f'create user {username} pass "test123@#$"')
|
||||
if "Name or password too long" in tdSql.error_info:
|
||||
tdLog.info("error info is true!")
|
||||
else:
|
||||
tdLog.exit("error info is not true")
|
||||
|
||||
def password_length_check(self):
|
||||
password_length = randint(1,self.password_length_boundary-1)
|
||||
password_length = randint(8,self.password_length_boundary-1)
|
||||
index = 0
|
||||
for password in [tdCom.get_long_name(password_length),tdCom.get_long_name(self.password_length_boundary)]:
|
||||
username = tdCom.get_long_name(3)
|
||||
tdSql.execute(f'create user {username} pass "{password}"')
|
||||
index += 1
|
||||
username = tdCom.get_long_name(12) + str(index)
|
||||
tdSql.execute(f'create user {username} pass "{password}@1"')
|
||||
index += 1
|
||||
username = tdCom.get_long_name(12) + str(index)
|
||||
password = tdCom.get_long_name(self.password_length_boundary+1)
|
||||
tdSql.error(f'create user {username} pass "{password}"')
|
||||
if "Name or password too long" in tdSql.error_info:
|
||||
tdSql.error(f'create user {username} pass "{password}@1"')
|
||||
if "Invalid password format" in tdSql.error_info:
|
||||
tdLog.info("error info is true!")
|
||||
else:
|
||||
tdLog.exit("error info is not true")
|
||||
|
|
|
@ -104,7 +104,7 @@ class TDTestCase:
|
|||
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
|
||||
tdSql.prepare()
|
||||
# time.sleep(2)
|
||||
tdSql.query("create user testpy pass 'testpy'")
|
||||
tdSql.query("create user testpy pass 'test123@#$'")
|
||||
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
|
@ -117,7 +117,7 @@ class TDTestCase:
|
|||
checkNetworkStatus = ['0: unavailable', '1: network ok', '2: service ok', '3: service degraded', '4: exiting']
|
||||
netrole = ['client', 'server']
|
||||
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'testpy', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
keyDict = {'h':'', 'P':'6030', 'p':'test123@#$', 'u':'testpy', 'a':'', 'A':'', 'c':'', 'C':'', 's':'', 'r':'', 'f':'', \
|
||||
'k':'', 't':'', 'n':'', 'l':'1024', 'N':'100', 'V':'', 'd':'db', 'w':'30', '-help':'', '-usage':'', '?':''}
|
||||
|
||||
keyDict['h'] = self.hostname
|
||||
|
|
|
@ -500,7 +500,7 @@ class TDTestCase:
|
|||
tdSql.execute('create stable sel_null.join_stable(`时间戳` timestamp, c1 int) tags(`标签1` int)', queryTimes=1)
|
||||
tdSql.query('select a.值 from sel_null.stable1 a join sel_null.join_stable b on a.ts = 时间戳;', queryTimes=1)
|
||||
tdSql.query('select a.值 from sel_null.stable1 a join sel_null.join_stable b on a.ts = b.时间戳;', queryTimes=1)
|
||||
tdSql.execute('create user user1 pass "asd"', queryTimes=1)
|
||||
tdSql.execute('create user user1 pass "asdxtz@#12"', queryTimes=1)
|
||||
tdSql.execute('grant write on sel_null.stable1 with 标签1 = 1 to user1',queryTimes=1)
|
||||
tdSql.execute('select count(*) from sel_null.stable1 state_window(值)', queryTimes=1)
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ class TDTestCase:
|
|||
"batchNum": 5000
|
||||
}
|
||||
username="user1"
|
||||
passwd="123"
|
||||
passwd="test123@#$"
|
||||
|
||||
dnodeNumbers=int(dnodeNumbers)
|
||||
mnodeNums=int(mnodeNums)
|
||||
|
|
|
@ -163,15 +163,15 @@ class TDTestCase:
|
|||
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
|
||||
|
||||
for i in range(5):
|
||||
clusterComCreate.createUser(newTdSql,f"user{i}",f"pass{i}")
|
||||
userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"pass{i}")
|
||||
clusterComCreate.alterUser(userTdSql,f"user{i}",f"pass{i+1}")
|
||||
clusterComCreate.createUser(newTdSql,f"user{i}",f"passwd@{i}")
|
||||
userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"passwd@{i}")
|
||||
clusterComCreate.alterUser(userTdSql,f"user{i}",f"passwd@{i+1}")
|
||||
clusterComCreate.deleteUser(newTdSql,f"user{i}")
|
||||
for j in range(5):
|
||||
i=100
|
||||
clusterComCreate.createUser(newTdSql,f"user{i}",f"pass{i}")
|
||||
userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"pass{i}")
|
||||
clusterComCreate.alterUser(userTdSql,f"user{i}",f"pass{i+1}")
|
||||
clusterComCreate.createUser(newTdSql,f"user{i}",f"passwd@{i}")
|
||||
userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"passwd@{i}")
|
||||
clusterComCreate.alterUser(userTdSql,f"user{i}",f"passwd@{i+1}")
|
||||
clusterComCreate.deleteUser(newTdSql,f"user{i}")
|
||||
|
||||
for tr in threads:
|
||||
|
|
|
@ -13,9 +13,9 @@ class TDTestCase:
|
|||
self.conn = conn
|
||||
tdSql.init(conn.cursor(), False)
|
||||
self.passwd = {'root':'taosdata',
|
||||
'test':'test'}
|
||||
'test':'test123@#$'}
|
||||
def prepare_user(self):
|
||||
tdSql.execute(f"create user test pass 'test' sysinfo 1")
|
||||
tdSql.execute(f"create user test pass 'test123@#$' sysinfo 1")
|
||||
|
||||
def test_connect_user(self, uname):
|
||||
try:
|
||||
|
|
|
@ -1436,7 +1436,7 @@ int sml_td22900_Test() {
|
|||
int sml_td24070_Test() {
|
||||
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
|
||||
TAOS_RES *pRes = taos_query(taos, "CREATE user test_db pass 'test'");
|
||||
TAOS_RES *pRes = taos_query(taos, "CREATE user test_db pass 'test@123'");
|
||||
ASSERT(taos_errno(pRes) == 0);
|
||||
taos_free_result(pRes);
|
||||
|
||||
|
@ -1460,7 +1460,7 @@ int sml_td24070_Test() {
|
|||
|
||||
|
||||
// test db privilege
|
||||
taos = taos_connect("localhost", "test_db", "test", NULL, 0);
|
||||
taos = taos_connect("localhost", "test_db", "test@123", NULL, 0);
|
||||
const char* sql[] = {"stb2,t1=1,dataModelName=t0 f1=283i32 1632299372000"};
|
||||
|
||||
pRes = taos_query(taos, "use td24070_read");
|
||||
|
@ -1491,11 +1491,11 @@ int sml_td24070_Test() {
|
|||
// test stable privilege
|
||||
taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
|
||||
pRes = taos_query(taos, "CREATE user test_stb_read pass 'test'");
|
||||
pRes = taos_query(taos, "CREATE user test_stb_read pass 'test@123'");
|
||||
ASSERT(taos_errno(pRes) == 0);
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_query(taos, "CREATE user test_stb_write pass 'test'");
|
||||
pRes = taos_query(taos, "CREATE user test_stb_write pass 'test@123'");
|
||||
ASSERT(taos_errno(pRes) == 0);
|
||||
taos_free_result(pRes);
|
||||
|
||||
|
@ -1508,7 +1508,7 @@ int sml_td24070_Test() {
|
|||
taos_free_result(pRes);
|
||||
taos_close(taos);
|
||||
|
||||
taos = taos_connect("localhost", "test_stb_read", "test", "td24070_write", 0);
|
||||
taos = taos_connect("localhost", "test_stb_read", "test@123", "td24070_write", 0);
|
||||
const char* sql1[] = {"stb2,t1=1,dataModelName=t0 f1=283i32 1632299373000"};
|
||||
|
||||
pRes = taos_schemaless_insert(taos, (char **)sql1, sizeof(sql1) / sizeof(sql1[0]), TSDB_SML_LINE_PROTOCOL,
|
||||
|
@ -1520,7 +1520,7 @@ int sml_td24070_Test() {
|
|||
taos_free_result(pRes);
|
||||
taos_close(taos);
|
||||
|
||||
taos = taos_connect("localhost", "test_stb_write", "test", "td24070_write", 0);
|
||||
taos = taos_connect("localhost", "test_stb_write", "test@123", "td24070_write", 0);
|
||||
const char* sql2[] = {"stb2,t1=1,dataModelName=t0 f1=283i32 1632299373000"};
|
||||
|
||||
pRes = taos_schemaless_insert(taos, (char **)sql2, sizeof(sql2) / sizeof(sql2[0]), TSDB_SML_LINE_PROTOCOL,
|
||||
|
@ -1536,11 +1536,11 @@ int sml_td24070_Test() {
|
|||
// test table privilege
|
||||
taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
|
||||
pRes = taos_query(taos, "CREATE user test_tb_read pass 'test'");
|
||||
pRes = taos_query(taos, "CREATE user test_tb_read pass 'test@123'");
|
||||
ASSERT(taos_errno(pRes) == 0);
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_query(taos, "CREATE user test_tb_write pass 'test'");
|
||||
pRes = taos_query(taos, "CREATE user test_tb_write pass 'test@123'");
|
||||
ASSERT(taos_errno(pRes) == 0);
|
||||
taos_free_result(pRes);
|
||||
|
||||
|
@ -1553,7 +1553,7 @@ int sml_td24070_Test() {
|
|||
taos_free_result(pRes);
|
||||
taos_close(taos);
|
||||
|
||||
taos = taos_connect("localhost", "test_tb_read", "test", "td24070_write", 0);
|
||||
taos = taos_connect("localhost", "test_tb_read", "test@123", "td24070_write", 0);
|
||||
const char* sql3[] = {"stb2,t1=1,dataModelName=t0 f1=283i32 1632299374000"};
|
||||
|
||||
|
||||
|
@ -1566,7 +1566,7 @@ int sml_td24070_Test() {
|
|||
taos_free_result(pRes);
|
||||
taos_close(taos);
|
||||
|
||||
taos = taos_connect("localhost", "test_tb_write", "test", "td24070_write", 0);
|
||||
taos = taos_connect("localhost", "test_tb_write", "test@123", "td24070_write", 0);
|
||||
const char* sql4[] = {"stb2,t1=1,dataModelName=t0 f1=283i32 1632299374000"};
|
||||
|
||||
pRes = taos_schemaless_insert(taos, (char **)sql4, sizeof(sql4) / sizeof(sql4[0]), TSDB_SML_LINE_PROTOCOL,
|
||||
|
|
Loading…
Reference in New Issue