Merge branch 'main' into lihui3.0/test
This commit is contained in:
commit
a291b430bd
|
@ -0,0 +1,47 @@
|
||||||
|
# 贡献者契约行为准则
|
||||||
|
|
||||||
|
[](code_of_conduct.md)
|
||||||
|
|
||||||
|
## 我们的承诺
|
||||||
|
|
||||||
|
为了营造一个开放和热情的环境,作为贡献者和维护者,我们承诺让每个人参与我们的项目和社区成为一种无骚扰的体验,无论年龄、体型、残疾、种族、性别特征、性别认同和表达、经验水平、教育、社会经济地位、国籍、个人外表、种族、宗教或性认同和取向如何。
|
||||||
|
|
||||||
|
## 我们的标准
|
||||||
|
|
||||||
|
有助于创造积极环境的行为示例包括:
|
||||||
|
|
||||||
|
- 使用热情和包容的语言
|
||||||
|
- 尊重不同的观点和经历
|
||||||
|
- 优雅地接受建设性的批评
|
||||||
|
- 专注于对社区最有利的事情
|
||||||
|
- 对其他社区成员表示同情
|
||||||
|
|
||||||
|
参与者不可接受的行为示例包括:
|
||||||
|
|
||||||
|
- 使用性感的语言或图像以及不受欢迎的性关注或进步
|
||||||
|
- 拖钓、侮辱/贬损评论以及人身或政治攻击
|
||||||
|
- 公共或私人骚扰
|
||||||
|
- 未经明确许可发布他人的私人信息,例如物理地址或电子地址
|
||||||
|
- 在专业环境中可能被合理认为不适当的其他行为
|
||||||
|
|
||||||
|
## 我们的责任
|
||||||
|
|
||||||
|
项目维护人员负责阐明可接受行为的标准,并期望针对任何不可接受行为的情况采取适当和公平的纠正措施。
|
||||||
|
|
||||||
|
项目维护者有权利和责任删除、编辑或拒绝评论、提交、代码、wiki 编辑、问题和其他不符合本行为准则的贡献,或暂时或永久禁止任何贡献者从事他们认为不适当、威胁、冒犯或有害的其他行为。
|
||||||
|
|
||||||
|
## 范围
|
||||||
|
|
||||||
|
本行为准则适用于所有项目空间,也适用于个人在公共场所代表项目或其社区时。 代表项目或社区的示例包括使用官方项目电子邮件地址、通过官方社交媒体帐户发布信息或在在线或离线活动中担任指定代表。 项目的表示可以由项目维护者进一步定义和澄清。
|
||||||
|
|
||||||
|
## 执法
|
||||||
|
|
||||||
|
可以通过 support@taosdata.com 联系项目团队来报告辱骂、骚扰或其他不可接受的行为。 所有投诉都将被审查和调查,并将产生被认为必要且适合具体情况的回应。 项目团队有义务对事件的报告者保密。 具体执行政策的更多细节可能会单独发布。
|
||||||
|
|
||||||
|
不善意遵守或执行行为准则的项目维护者可能会面临由项目领导的其他成员确定的临时或永久影响。
|
||||||
|
|
||||||
|
## 来源
|
||||||
|
|
||||||
|
本行为准则改编自贡献者公约 1.4 版,可在 https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 获取
|
||||||
|
|
||||||
|
有关此行为准则的常见问题的答案,请参阅 https://www.contributor-covenant.org/faq
|
|
@ -313,7 +313,8 @@ def pre_test_build_win() {
|
||||||
bat '''
|
bat '''
|
||||||
cd %WIN_CONNECTOR_ROOT%
|
cd %WIN_CONNECTOR_ROOT%
|
||||||
python.exe -m pip install --upgrade pip
|
python.exe -m pip install --upgrade pip
|
||||||
python -m pip install .
|
python -m pip uninstall taospy -y
|
||||||
|
python -m pip install taospy==2.7.6
|
||||||
xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
|
xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
|
||||||
'''
|
'''
|
||||||
return 1
|
return 1
|
||||||
|
@ -331,8 +332,6 @@ def run_win_test() {
|
||||||
bat '''
|
bat '''
|
||||||
echo "windows test ..."
|
echo "windows test ..."
|
||||||
cd %WIN_CONNECTOR_ROOT%
|
cd %WIN_CONNECTOR_ROOT%
|
||||||
python.exe -m pip install --upgrade pip
|
|
||||||
python -m pip install .
|
|
||||||
xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
|
xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
|
||||||
ls -l C:\\Windows\\System32\\taos.dll
|
ls -l C:\\Windows\\System32\\taos.dll
|
||||||
time /t
|
time /t
|
||||||
|
@ -461,7 +460,7 @@ pipeline {
|
||||||
cd ${WKC}/tests/parallel_test
|
cd ${WKC}/tests/parallel_test
|
||||||
export DEFAULT_RETRY_TIME=2
|
export DEFAULT_RETRY_TIME=2
|
||||||
date
|
date
|
||||||
''' + timeout_cmd + ''' time ./run.sh -e -m /home/m.json -t cases.task -b ${BRANCH_NAME}_${BUILD_ID} -l ${WKDIR}/log -o 480 ''' + extra_param + '''
|
''' + timeout_cmd + ''' time ./run.sh -e -m /home/m.json -t cases.task -b ${BRANCH_NAME}_${BUILD_ID} -l ${WKDIR}/log -o 600 ''' + extra_param + '''
|
||||||
'''
|
'''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# taos-tools
|
# taos-tools
|
||||||
ExternalProject_Add(taos-tools
|
ExternalProject_Add(taos-tools
|
||||||
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
||||||
GIT_TAG d4b3967
|
GIT_TAG ad1a32b
|
||||||
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
||||||
BINARY_DIR ""
|
BINARY_DIR ""
|
||||||
#BUILD_IN_SOURCE TRUE
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
|
|
@ -41,7 +41,7 @@ TDengine 知识地图中涵盖了 TDengine 的各种知识点,揭示了各概
|
||||||
<td style={{padding:'1em 3em',border:0}}><img src={official_account} alt="TDengine 微信公众号" width="200" /></td>
|
<td style={{padding:'1em 3em',border:0}}><img src={official_account} alt="TDengine 微信公众号" width="200" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr align="center">
|
<tr align="center">
|
||||||
<td style={{padding:'1em 3em',border:0}}>加入“物联网大数据技术群”<br/>与大家进行技术交流</td>
|
<td style={{padding:'1em 3em',border:0}}>加入 TDengine 微信群<br/>了解学习最新物联网技术</td>
|
||||||
<td style={{padding:'1em 3em',border:0}}>关注 TDengine 视频号<br/>收看技术直播与教学视频</td>
|
<td style={{padding:'1em 3em',border:0}}>关注 TDengine 视频号<br/>收看技术直播与教学视频</td>
|
||||||
<td style={{padding:'1em 3em',border:0}}>关注 TDengine 公众号<br/>阅读技术文章与行业案例</td>
|
<td style={{padding:'1em 3em',border:0}}>关注 TDengine 公众号<br/>阅读技术文章与行业案例</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -248,11 +248,11 @@ NULLS 语法用来指定 NULL 值在排序中输出的位置。NULLS LAST 是升
|
||||||
|
|
||||||
LIMIT 控制输出条数,OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。LIMIT 5 OFFSET 2 可以简写为 LIMIT 2, 5,都输出第 3 行到第 7 行数据。
|
LIMIT 控制输出条数,OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。LIMIT 5 OFFSET 2 可以简写为 LIMIT 2, 5,都输出第 3 行到第 7 行数据。
|
||||||
|
|
||||||
在有 PARTITION BY 子句时,LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。
|
在有 PARTITION BY/GROUP BY 子句时,LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。
|
||||||
|
|
||||||
## SLIMIT
|
## SLIMIT
|
||||||
|
|
||||||
SLIMIT 和 PARTITION BY 子句一起使用,用来控制输出的分片的数量。SLIMIT 5 SOFFSET 2 可以简写为 SLIMIT 2, 5,都表示输出第 3 个到第 7 个分片。
|
SLIMIT 和 PARTITION BY/GROUP BY 子句一起使用,用来控制输出的分片的数量。SLIMIT 5 SOFFSET 2 可以简写为 SLIMIT 2, 5,都表示输出第 3 个到第 7 个分片。
|
||||||
|
|
||||||
需要注意,如果有 ORDER BY 子句,则输出只有一个分片。
|
需要注意,如果有 ORDER BY 子句,则输出只有一个分片。
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,8 @@ extern char *tsSvrCrashReportUri;
|
||||||
|
|
||||||
// query buffer management
|
// query buffer management
|
||||||
extern int32_t tsQueryBufferSize; // maximum allowed usage buffer size in MB for each data node during query processing
|
extern int32_t tsQueryBufferSize; // maximum allowed usage buffer size in MB for each data node during query processing
|
||||||
extern int64_t tsQueryBufferSizeBytes; // maximum allowed usage buffer size in byte for each data node
|
extern int64_t tsQueryBufferSizeBytes; // maximum allowed usage buffer size in byte for each data node
|
||||||
|
extern int32_t tsCacheLazyLoadThreshold; // cost threshold for last/last_row loading cache as much as possible
|
||||||
|
|
||||||
// query client
|
// query client
|
||||||
extern int32_t tsQueryPolicy;
|
extern int32_t tsQueryPolicy;
|
||||||
|
@ -145,10 +146,10 @@ extern char tsUdfdResFuncs[];
|
||||||
extern char tsUdfdLdLibPath[];
|
extern char tsUdfdLdLibPath[];
|
||||||
|
|
||||||
// schemaless
|
// schemaless
|
||||||
extern char tsSmlChildTableName[];
|
extern char tsSmlChildTableName[];
|
||||||
extern char tsSmlTagName[];
|
extern char tsSmlTagName[];
|
||||||
//extern bool tsSmlDataFormat;
|
// extern bool tsSmlDataFormat;
|
||||||
//extern int32_t tsSmlBatchSize;
|
// extern int32_t tsSmlBatchSize;
|
||||||
|
|
||||||
// wal
|
// wal
|
||||||
extern int64_t tsWalFsyncDataSizeLimit;
|
extern int64_t tsWalFsyncDataSizeLimit;
|
||||||
|
|
|
@ -845,6 +845,7 @@ typedef struct {
|
||||||
int8_t cacheLast;
|
int8_t cacheLast;
|
||||||
int8_t replications;
|
int8_t replications;
|
||||||
int32_t sstTrigger;
|
int32_t sstTrigger;
|
||||||
|
int32_t minRows;
|
||||||
} SAlterDbReq;
|
} SAlterDbReq;
|
||||||
|
|
||||||
int32_t tSerializeSAlterDbReq(void* buf, int32_t bufLen, SAlterDbReq* pReq);
|
int32_t tSerializeSAlterDbReq(void* buf, int32_t bufLen, SAlterDbReq* pReq);
|
||||||
|
@ -1135,6 +1136,7 @@ typedef struct {
|
||||||
int64_t numOfInsertSuccessReqs;
|
int64_t numOfInsertSuccessReqs;
|
||||||
int64_t numOfBatchInsertReqs;
|
int64_t numOfBatchInsertReqs;
|
||||||
int64_t numOfBatchInsertSuccessReqs;
|
int64_t numOfBatchInsertSuccessReqs;
|
||||||
|
int32_t numOfCachedTables;
|
||||||
} SVnodeLoad;
|
} SVnodeLoad;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -1316,6 +1318,9 @@ typedef struct {
|
||||||
int8_t strict;
|
int8_t strict;
|
||||||
int8_t cacheLast;
|
int8_t cacheLast;
|
||||||
int64_t reserved[8];
|
int64_t reserved[8];
|
||||||
|
// 1st modification
|
||||||
|
int16_t sttTrigger;
|
||||||
|
int32_t minRows;
|
||||||
} SAlterVnodeConfigReq;
|
} SAlterVnodeConfigReq;
|
||||||
|
|
||||||
int32_t tSerializeSAlterVnodeConfigReq(void* buf, int32_t bufLen, SAlterVnodeConfigReq* pReq);
|
int32_t tSerializeSAlterVnodeConfigReq(void* buf, int32_t bufLen, SAlterVnodeConfigReq* pReq);
|
||||||
|
|
|
@ -143,10 +143,11 @@ typedef struct SSyncFSM {
|
||||||
void* data;
|
void* data;
|
||||||
|
|
||||||
int32_t (*FpCommitCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
int32_t (*FpCommitCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
||||||
|
SyncIndex (*FpAppliedIndexCb)(const struct SSyncFSM* pFsm);
|
||||||
int32_t (*FpPreCommitCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
int32_t (*FpPreCommitCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
||||||
void (*FpRollBackCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
void (*FpRollBackCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
||||||
|
|
||||||
void (*FpRestoreFinishCb)(const struct SSyncFSM* pFsm);
|
void (*FpRestoreFinishCb)(const struct SSyncFSM* pFsm, const SyncIndex commitIdx);
|
||||||
void (*FpReConfigCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SReConfigCbMeta* pMeta);
|
void (*FpReConfigCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SReConfigCbMeta* pMeta);
|
||||||
void (*FpLeaderTransferCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
void (*FpLeaderTransferCb)(const struct SSyncFSM* pFsm, SRpcMsg* pMsg, const SFsmCbMeta* pMeta);
|
||||||
bool (*FpApplyQueueEmptyCb)(const struct SSyncFSM* pFsm);
|
bool (*FpApplyQueueEmptyCb)(const struct SSyncFSM* pFsm);
|
||||||
|
|
|
@ -240,6 +240,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_MND_TOO_MANY_USERS TAOS_DEF_ERROR_CODE(0, 0x0355)
|
#define TSDB_CODE_MND_TOO_MANY_USERS TAOS_DEF_ERROR_CODE(0, 0x0355)
|
||||||
#define TSDB_CODE_MND_INVALID_ALTER_OPER TAOS_DEF_ERROR_CODE(0, 0x0356)
|
#define TSDB_CODE_MND_INVALID_ALTER_OPER TAOS_DEF_ERROR_CODE(0, 0x0356)
|
||||||
#define TSDB_CODE_MND_AUTH_FAILURE TAOS_DEF_ERROR_CODE(0, 0x0357)
|
#define TSDB_CODE_MND_AUTH_FAILURE TAOS_DEF_ERROR_CODE(0, 0x0357)
|
||||||
|
#define TSDB_CODE_MND_USER_NOT_AVAILABLE TAOS_DEF_ERROR_CODE(0, 0x0358)
|
||||||
|
|
||||||
// mnode-stable-part1
|
// mnode-stable-part1
|
||||||
#define TSDB_CODE_MND_STB_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0360)
|
#define TSDB_CODE_MND_STB_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0360)
|
||||||
|
@ -541,7 +542,8 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_SYN_BATCH_ERROR TAOS_DEF_ERROR_CODE(0, 0x0913)
|
#define TSDB_CODE_SYN_BATCH_ERROR TAOS_DEF_ERROR_CODE(0, 0x0913)
|
||||||
#define TSDB_CODE_SYN_RESTORING TAOS_DEF_ERROR_CODE(0, 0x0914)
|
#define TSDB_CODE_SYN_RESTORING TAOS_DEF_ERROR_CODE(0, 0x0914)
|
||||||
#define TSDB_CODE_SYN_INVALID_SNAPSHOT_MSG TAOS_DEF_ERROR_CODE(0, 0x0915) // internal
|
#define TSDB_CODE_SYN_INVALID_SNAPSHOT_MSG TAOS_DEF_ERROR_CODE(0, 0x0915) // internal
|
||||||
#define TSDB_CODE_SYN_BUFFER_FULL TAOS_DEF_ERROR_CODE(0, 0x0916) //
|
#define TSDB_CODE_SYN_BUFFER_FULL TAOS_DEF_ERROR_CODE(0, 0x0916)
|
||||||
|
#define TSDB_CODE_SYN_WRITE_STALL TAOS_DEF_ERROR_CODE(0, 0x0917)
|
||||||
#define TSDB_CODE_SYN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x09FF)
|
#define TSDB_CODE_SYN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x09FF)
|
||||||
|
|
||||||
// tq
|
// tq
|
||||||
|
@ -641,7 +643,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_PAR_INCORRECT_NUM_OF_COL TAOS_DEF_ERROR_CODE(0, 0x2634)
|
#define TSDB_CODE_PAR_INCORRECT_NUM_OF_COL TAOS_DEF_ERROR_CODE(0, 0x2634)
|
||||||
#define TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL TAOS_DEF_ERROR_CODE(0, 0x2635)
|
#define TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL TAOS_DEF_ERROR_CODE(0, 0x2635)
|
||||||
#define TSDB_CODE_PAR_OFFSET_LESS_ZERO TAOS_DEF_ERROR_CODE(0, 0x2637)
|
#define TSDB_CODE_PAR_OFFSET_LESS_ZERO TAOS_DEF_ERROR_CODE(0, 0x2637)
|
||||||
#define TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY TAOS_DEF_ERROR_CODE(0, 0x2638)
|
#define TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY TAOS_DEF_ERROR_CODE(0, 0x2638)
|
||||||
#define TSDB_CODE_PAR_INVALID_TOPIC_QUERY TAOS_DEF_ERROR_CODE(0, 0x2639)
|
#define TSDB_CODE_PAR_INVALID_TOPIC_QUERY TAOS_DEF_ERROR_CODE(0, 0x2639)
|
||||||
#define TSDB_CODE_PAR_INVALID_DROP_STABLE TAOS_DEF_ERROR_CODE(0, 0x263A)
|
#define TSDB_CODE_PAR_INVALID_DROP_STABLE TAOS_DEF_ERROR_CODE(0, 0x263A)
|
||||||
#define TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE TAOS_DEF_ERROR_CODE(0, 0x263B)
|
#define TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE TAOS_DEF_ERROR_CODE(0, 0x263B)
|
||||||
|
|
|
@ -55,6 +55,8 @@ void *taosLRUCacheValue(SLRUCache *cache, LRUHandle *handle);
|
||||||
size_t taosLRUCacheGetUsage(SLRUCache *cache);
|
size_t taosLRUCacheGetUsage(SLRUCache *cache);
|
||||||
size_t taosLRUCacheGetPinnedUsage(SLRUCache *cache);
|
size_t taosLRUCacheGetPinnedUsage(SLRUCache *cache);
|
||||||
|
|
||||||
|
int32_t taosLRUCacheGetElems(SLRUCache *cache);
|
||||||
|
|
||||||
void taosLRUCacheSetCapacity(SLRUCache *cache, size_t capacity);
|
void taosLRUCacheSetCapacity(SLRUCache *cache, size_t capacity);
|
||||||
size_t taosLRUCacheGetCapacity(SLRUCache *cache);
|
size_t taosLRUCacheGetCapacity(SLRUCache *cache);
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
########################################################
|
########################################################
|
||||||
# #
|
# #
|
||||||
# TDengine Configuration #
|
# Configuration #
|
||||||
# Any questions, please email support@taosdata.com #
|
# Any questions, please email support@taosdata.com #
|
||||||
# #
|
# #
|
||||||
########################################################
|
########################################################
|
||||||
|
|
||||||
######### 0. Client only configurations #############
|
######### 0. Client only configurations #############
|
||||||
|
|
||||||
# The interval for TDengine CLI to send heartbeat to mnode
|
# The interval for CLI to send heartbeat to mnode
|
||||||
# shellActivityTimer 3
|
# shellActivityTimer 3
|
||||||
|
|
||||||
|
|
||||||
############### 1. Cluster End point ############################
|
############### 1. Cluster End point ############################
|
||||||
|
|
||||||
# The end point of the first dnode in the cluster to be connected to when this dnode or a TDengine CLI `taos` is started
|
# The end point of the first dnode in the cluster to be connected to when this dnode or a CLI `taos` is started
|
||||||
# firstEp hostname:6030
|
# firstEp hostname:6030
|
||||||
|
|
||||||
# The end point of the second dnode to be connected to if the firstEp is not available
|
# The end point of the second dnode to be connected to if the firstEp is not available
|
||||||
|
@ -40,10 +40,10 @@
|
||||||
# temporary file's directory, if you are using Windows platform please change to Windows path
|
# temporary file's directory, if you are using Windows platform please change to Windows path
|
||||||
# tempDir /tmp/
|
# tempDir /tmp/
|
||||||
|
|
||||||
# Switch for allowing TDengine to collect and report service usage information
|
# Switch for allowing to collect and report service usage information
|
||||||
# telemetryReporting 1
|
# telemetryReporting 1
|
||||||
|
|
||||||
# Switch for allowing TDengine to collect and report crash information
|
# Switch for allowing to collect and report crash information
|
||||||
# crashReporting 1
|
# crashReporting 1
|
||||||
|
|
||||||
# The maximum number of vnodes supported by this dnode
|
# The maximum number of vnodes supported by this dnode
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#!/usr/bin/expect
|
#!/usr/bin/expect
|
||||||
set packgeName [lindex $argv 0]
|
set packageName [lindex $argv 0]
|
||||||
set packageSuffix [lindex $argv 1]
|
set packageSuffix [lindex $argv 1]
|
||||||
set timeout 3
|
set timeout 3
|
||||||
if { ${packageSuffix} == "deb" } {
|
if { ${packageSuffix} == "deb" } {
|
||||||
spawn dpkg -i ${packgeName}
|
spawn dpkg -i ${packageName}
|
||||||
} elseif { ${packageSuffix} == "rpm"} {
|
} elseif { ${packageSuffix} == "rpm"} {
|
||||||
spawn rpm -ivh ${packgeName}
|
spawn rpm -ivh ${packageName}
|
||||||
}
|
}
|
||||||
expect "*one:"
|
expect "*one:"
|
||||||
send "\r"
|
send "\r"
|
||||||
|
|
|
@ -25,7 +25,7 @@ sourcePath="nas"
|
||||||
cpuType="x64"
|
cpuType="x64"
|
||||||
lite="true"
|
lite="true"
|
||||||
packageType="tar"
|
packageType="tar"
|
||||||
subFile="taos.tar.gz"
|
subFile="package.tar.gz"
|
||||||
while getopts "m:c:f:l:s:o:t:v:h" opt; do
|
while getopts "m:c:f:l:s:o:t:v:h" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
m)
|
m)
|
||||||
|
@ -79,9 +79,9 @@ GREEN_UNDERLINE='\033[4;32m'
|
||||||
NC='\033[0m'
|
NC='\033[0m'
|
||||||
|
|
||||||
if [[ ${verMode} = "enterprise" ]];then
|
if [[ ${verMode} = "enterprise" ]];then
|
||||||
prePackag="TDengine-enterprise-${testFile}"
|
prePackage="TDengine-enterprise-${testFile}"
|
||||||
elif [ ${verMode} = "community" ];then
|
elif [ ${verMode} = "community" ];then
|
||||||
prePackag="TDengine-${testFile}"
|
prePackage="TDengine-${testFile}"
|
||||||
fi
|
fi
|
||||||
if [ ${lite} = "true" ];then
|
if [ ${lite} = "true" ];then
|
||||||
packageLite="-Lite"
|
packageLite="-Lite"
|
||||||
|
@ -92,10 +92,10 @@ if [[ "$packageType" = "tar" ]] ;then
|
||||||
packageType="tar.gz"
|
packageType="tar.gz"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
tdPath="${prePackag}-${version}"
|
tdPath="${prePackage}-${version}"
|
||||||
originTdpPath="${prePackag}-${originversion}"
|
originTdpPath="${prePackage}-${originversion}"
|
||||||
|
|
||||||
packgeName="${tdPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
packageName="${tdPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
||||||
originPackageName="${originTdpPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
originPackageName="${originTdpPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
||||||
|
|
||||||
if [ "$testFile" == "server" ] ;then
|
if [ "$testFile" == "server" ] ;then
|
||||||
|
@ -105,13 +105,13 @@ elif [ ${testFile} = "client" ];then
|
||||||
elif [ ${testFile} = "tools" ];then
|
elif [ ${testFile} = "tools" ];then
|
||||||
tdPath="taosTools-${version}"
|
tdPath="taosTools-${version}"
|
||||||
originTdpPath="taosTools-${originversion}"
|
originTdpPath="taosTools-${originversion}"
|
||||||
packgeName="${tdPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
packageName="${tdPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
||||||
originPackageName="${originTdpPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
originPackageName="${originTdpPath}-Linux-${cpuType}${packageLite}.${packageType}"
|
||||||
installCmd="install-taostools.sh"
|
installCmd="install-tools.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "tdPath:${tdPath},originTdpPath:${originTdpPath},packgeName:${packgeName},originPackageName:${originPackageName}"
|
echo "tdPath:${tdPath},originTdpPath:${originTdpPath},packageName:${packageName},originPackageName:${originPackageName}"
|
||||||
function cmdInstall {
|
function cmdInstall {
|
||||||
command=$1
|
command=$1
|
||||||
if command -v ${command} ;then
|
if command -v ${command} ;then
|
||||||
|
@ -206,7 +206,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [[ ${packgeName} =~ "server" ]] ;then
|
if [[ ${packageName} =~ "server" ]] ;then
|
||||||
echoColor BD " pkill -9 taosd "
|
echoColor BD " pkill -9 taosd "
|
||||||
pkill -9 taosd
|
pkill -9 taosd
|
||||||
fi
|
fi
|
||||||
|
@ -232,25 +232,25 @@ if [ -d ${installPath}/${tdPath} ] ;then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echoColor G "===== download installPackage ====="
|
echoColor G "===== download installPackage ====="
|
||||||
cd ${installPath} && wgetFile ${packgeName} ${version} ${sourcePath}
|
cd ${installPath} && wgetFile ${packageName} ${version} ${sourcePath}
|
||||||
cd ${oriInstallPath} && wgetFile ${originPackageName} ${originversion} ${sourcePath}
|
cd ${oriInstallPath} && wgetFile ${originPackageName} ${originversion} ${sourcePath}
|
||||||
|
|
||||||
|
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
cp -r ${scriptDir}/debRpmAutoInstall.sh .
|
cp -r ${scriptDir}/debRpmAutoInstall.sh .
|
||||||
|
|
||||||
packageSuffix=$(echo ${packgeName} | awk -F '.' '{print $NF}')
|
packageSuffix=$(echo ${packageName} | awk -F '.' '{print $NF}')
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f debRpmAutoInstall.sh ];then
|
if [ ! -f debRpmAutoInstall.sh ];then
|
||||||
echo '#!/usr/bin/expect ' > debRpmAutoInstall.sh
|
echo '#!/usr/bin/expect ' > debRpmAutoInstall.sh
|
||||||
echo 'set packgeName [lindex $argv 0]' >> debRpmAutoInstall.sh
|
echo 'set packageName [lindex $argv 0]' >> debRpmAutoInstall.sh
|
||||||
echo 'set packageSuffix [lindex $argv 1]' >> debRpmAutoInstall.sh
|
echo 'set packageSuffix [lindex $argv 1]' >> debRpmAutoInstall.sh
|
||||||
echo 'set timeout 3 ' >> debRpmAutoInstall.sh
|
echo 'set timeout 3 ' >> debRpmAutoInstall.sh
|
||||||
echo 'if { ${packageSuffix} == "deb" } {' >> debRpmAutoInstall.sh
|
echo 'if { ${packageSuffix} == "deb" } {' >> debRpmAutoInstall.sh
|
||||||
echo ' spawn dpkg -i ${packgeName} ' >> debRpmAutoInstall.sh
|
echo ' spawn dpkg -i ${packageName} ' >> debRpmAutoInstall.sh
|
||||||
echo '} elseif { ${packageSuffix} == "rpm"} {' >> debRpmAutoInstall.sh
|
echo '} elseif { ${packageSuffix} == "rpm"} {' >> debRpmAutoInstall.sh
|
||||||
echo ' spawn rpm -ivh ${packgeName}' >> debRpmAutoInstall.sh
|
echo ' spawn rpm -ivh ${packageName}' >> debRpmAutoInstall.sh
|
||||||
echo '}' >> debRpmAutoInstall.sh
|
echo '}' >> debRpmAutoInstall.sh
|
||||||
echo 'expect "*one:"' >> debRpmAutoInstall.sh
|
echo 'expect "*one:"' >> debRpmAutoInstall.sh
|
||||||
echo 'send "\r"' >> debRpmAutoInstall.sh
|
echo 'send "\r"' >> debRpmAutoInstall.sh
|
||||||
|
@ -261,25 +261,25 @@ fi
|
||||||
|
|
||||||
echoColor G "===== instal Package ====="
|
echoColor G "===== instal Package ====="
|
||||||
|
|
||||||
if [[ ${packgeName} =~ "deb" ]];then
|
if [[ ${packageName} =~ "deb" ]];then
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
dpkg -r taostools
|
dpkg -r taostools
|
||||||
dpkg -r tdengine
|
dpkg -r tdengine
|
||||||
if [[ ${packgeName} =~ "TDengine" ]];then
|
if [[ ${packageName} =~ "TDengine" ]];then
|
||||||
echoColor BD "./debRpmAutoInstall.sh ${packgeName} ${packageSuffix}" && chmod 755 debRpmAutoInstall.sh && ./debRpmAutoInstall.sh ${packgeName} ${packageSuffix}
|
echoColor BD "./debRpmAutoInstall.sh ${packageName} ${packageSuffix}" && chmod 755 debRpmAutoInstall.sh && ./debRpmAutoInstall.sh ${packageName} ${packageSuffix}
|
||||||
else
|
else
|
||||||
echoColor BD "dpkg -i ${packgeName}" && dpkg -i ${packgeName}
|
echoColor BD "dpkg -i ${packageName}" && dpkg -i ${packageName}
|
||||||
fi
|
fi
|
||||||
elif [[ ${packgeName} =~ "rpm" ]];then
|
elif [[ ${packageName} =~ "rpm" ]];then
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
sudo rpm -e tdengine
|
sudo rpm -e tdengine
|
||||||
sudo rpm -e taostools
|
sudo rpm -e taostools
|
||||||
if [[ ${packgeName} =~ "TDengine" ]];then
|
if [[ ${packageName} =~ "TDengine" ]];then
|
||||||
echoColor BD "./debRpmAutoInstall.sh ${packgeName} ${packageSuffix}" && chmod 755 debRpmAutoInstall.sh && ./debRpmAutoInstall.sh ${packgeName} ${packageSuffix}
|
echoColor BD "./debRpmAutoInstall.sh ${packageName} ${packageSuffix}" && chmod 755 debRpmAutoInstall.sh && ./debRpmAutoInstall.sh ${packageName} ${packageSuffix}
|
||||||
else
|
else
|
||||||
echoColor BD "rpm -ivh ${packgeName}" && rpm -ivh ${packgeName}
|
echoColor BD "rpm -ivh ${packageName}" && rpm -ivh ${packageName}
|
||||||
fi
|
fi
|
||||||
elif [[ ${packgeName} =~ "tar" ]];then
|
elif [[ ${packageName} =~ "tar" ]];then
|
||||||
echoColor G "===== check installPackage File of tar ====="
|
echoColor G "===== check installPackage File of tar ====="
|
||||||
cd ${oriInstallPath}
|
cd ${oriInstallPath}
|
||||||
if [ ! -f {originPackageName} ];then
|
if [ ! -f {originPackageName} ];then
|
||||||
|
@ -290,7 +290,7 @@ elif [[ ${packgeName} =~ "tar" ]];then
|
||||||
echoColor BD "tar -xf ${originPackageName}" && tar -xf ${originPackageName}
|
echoColor BD "tar -xf ${originPackageName}" && tar -xf ${originPackageName}
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
echoColor YD "unzip the new installation package"
|
echoColor YD "unzip the new installation package"
|
||||||
echoColor BD "tar -xf ${packgeName}" && tar -xf ${packgeName}
|
echoColor BD "tar -xf ${packageName}" && tar -xf ${packageName}
|
||||||
|
|
||||||
if [ ${testFile} != "tools" ] ;then
|
if [ ${testFile} != "tools" ] ;then
|
||||||
cd ${installPath}/${tdPath} && tar xf ${subFile}
|
cd ${installPath}/${tdPath} && tar xf ${subFile}
|
||||||
|
@ -326,15 +326,15 @@ fi
|
||||||
|
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
|
|
||||||
if [[ ${packgeName} =~ "Lite" ]] || ([[ ${packgeName} =~ "x64" ]] && [[ ${packgeName} =~ "client" ]]) || ([[ ${packgeName} =~ "deb" ]] && [[ ${packgeName} =~ "server" ]]) || ([[ ${packgeName} =~ "rpm" ]] && [[ ${packgeName} =~ "server" ]]) ;then
|
if [[ ${packageName} =~ "Lite" ]] || ([[ ${packageName} =~ "x64" ]] && [[ ${packageName} =~ "client" ]]) || ([[ ${packageName} =~ "deb" ]] && [[ ${packageName} =~ "server" ]]) || ([[ ${packageName} =~ "rpm" ]] && [[ ${packageName} =~ "server" ]]) ;then
|
||||||
echoColor G "===== install taos-tools when package is lite or client ====="
|
echoColor G "===== install taos-tools when package is lite or client ====="
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
if [ ! -f "taosTools-2.1.3-Linux-x64.tar.gz " ];then
|
if [ ! -f "taosTools-2.1.3-Linux-x64.tar.gz " ];then
|
||||||
wgetFile taosTools-2.1.3-Linux-x64.tar.gz v2.1.3 web
|
wgetFile taosTools-2.1.3-Linux-x64.tar.gz v2.1.3 web
|
||||||
tar xf taosTools-2.1.3-Linux-x64.tar.gz
|
tar xf taosTools-2.1.3-Linux-x64.tar.gz
|
||||||
fi
|
fi
|
||||||
cd taosTools-2.1.3 && bash install-taostools.sh
|
cd taosTools-2.1.3 && bash install-tools.sh
|
||||||
elif ([[ ${packgeName} =~ "arm64" ]] && [[ ${packgeName} =~ "client" ]]);then
|
elif ([[ ${packageName} =~ "arm64" ]] && [[ ${packageName} =~ "client" ]]);then
|
||||||
echoColor G "===== install taos-tools arm when package is arm64-client ====="
|
echoColor G "===== install taos-tools arm when package is arm64-client ====="
|
||||||
cd ${installPath}
|
cd ${installPath}
|
||||||
if [ ! -f "taosTools-2.1.3-Linux-x64.tar.gz " ];then
|
if [ ! -f "taosTools-2.1.3-Linux-x64.tar.gz " ];then
|
||||||
|
@ -342,37 +342,37 @@ elif ([[ ${packgeName} =~ "arm64" ]] && [[ ${packgeName} =~ "client" ]]);then
|
||||||
tar xf taosTools-2.1.3-Linux-arm64.tar.gz
|
tar xf taosTools-2.1.3-Linux-arm64.tar.gz
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd taosTools-2.1.3 && bash install-taostools.sh
|
cd taosTools-2.1.3 && bash install-tools.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echoColor G "===== start TDengine ====="
|
echoColor G "===== start TDengine ====="
|
||||||
|
|
||||||
if [[ ${packgeName} =~ "server" ]] ;then
|
if [[ ${packageName} =~ "server" ]] ;then
|
||||||
echoColor BD " rm -rf /var/lib/taos/* && systemctl restart taosd "
|
echoColor BD " rm -rf /var/lib/taos/* && systemctl restart taosd "
|
||||||
rm -rf /var/lib/taos/*
|
rm -rf /var/lib/taos/*
|
||||||
systemctl restart taosd
|
systemctl restart taosd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf ${installPath}/${packgeName}
|
rm -rf ${installPath}/${packageName}
|
||||||
rm -rf ${installPath}/${tdPath}/
|
rm -rf ${installPath}/${tdPath}/
|
||||||
|
|
||||||
# if ([[ ${packgeName} =~ "Lite" ]] && [[ ${packgeName} =~ "tar" ]]) || [[ ${packgeName} =~ "client" ]] ;then
|
# if ([[ ${packageName} =~ "Lite" ]] && [[ ${packageName} =~ "tar" ]]) || [[ ${packageName} =~ "client" ]] ;then
|
||||||
# echoColor G "===== install taos-tools when package is lite or client ====="
|
# echoColor G "===== install taos-tools when package is lite or client ====="
|
||||||
# cd ${installPath}
|
# cd ${installPath}
|
||||||
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
||||||
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
||||||
# cd taosTools-2.1.2 && bash install-taostools.sh
|
# cd taosTools-2.1.2 && bash install-tools.sh
|
||||||
# elif [[ ${packgeName} =~ "Lite" ]] && [[ ${packgeName} =~ "deb" ]] ;then
|
# elif [[ ${packageName} =~ "Lite" ]] && [[ ${packageName} =~ "deb" ]] ;then
|
||||||
# echoColor G "===== install taos-tools when package is lite or client ====="
|
# echoColor G "===== install taos-tools when package is lite or client ====="
|
||||||
# cd ${installPath}
|
# cd ${installPath}
|
||||||
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
||||||
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
||||||
# cd taosTools-2.1.2 && bash install-taostools.sh
|
# cd taosTools-2.1.2 && bash install-tools.sh
|
||||||
# elif [[ ${packgeName} =~ "Lite" ]] && [[ ${packgeName} =~ "rpm" ]] ;then
|
# elif [[ ${packageName} =~ "Lite" ]] && [[ ${packageName} =~ "rpm" ]] ;then
|
||||||
# echoColor G "===== install taos-tools when package is lite or client ====="
|
# echoColor G "===== install taos-tools when package is lite or client ====="
|
||||||
# cd ${installPath}
|
# cd ${installPath}
|
||||||
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
# wgetFile taosTools-2.1.2-Linux-x64.tar.gz .
|
||||||
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
# tar xf taosTools-2.1.2-Linux-x64.tar.gz
|
||||||
# cd taosTools-2.1.2 && bash install-taostools.sh
|
# cd taosTools-2.1.2 && bash install-tools.sh
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ productName="TDengine"
|
||||||
emailName="taosdata.com"
|
emailName="taosdata.com"
|
||||||
uninstallScript="rmtaos"
|
uninstallScript="rmtaos"
|
||||||
historyFile="taos_history"
|
historyFile="taos_history"
|
||||||
tarName="taos.tar.gz"
|
tarName="package.tar.gz"
|
||||||
dataDir="/var/lib/taos"
|
dataDir="/var/lib/taos"
|
||||||
logDir="/var/log/taos"
|
logDir="/var/log/taos"
|
||||||
configDir="/etc/taos"
|
configDir="/etc/taos"
|
||||||
|
@ -222,24 +222,24 @@ function install_bin() {
|
||||||
${csudo}cp -r ${script_dir}/bin/* ${install_main_dir}/bin && ${csudo}chmod 0555 ${install_main_dir}/bin/*
|
${csudo}cp -r ${script_dir}/bin/* ${install_main_dir}/bin && ${csudo}chmod 0555 ${install_main_dir}/bin/*
|
||||||
|
|
||||||
#Make link
|
#Make link
|
||||||
[ -x ${install_main_dir}/bin/${clientName} ] && ${csudo}ln -s ${install_main_dir}/bin/${clientName} ${bin_link_dir}/${clientName} || :
|
[ -x ${install_main_dir}/bin/${clientName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${clientName} ${bin_link_dir}/${clientName} || :
|
||||||
[ -x ${install_main_dir}/bin/${serverName} ] && ${csudo}ln -s ${install_main_dir}/bin/${serverName} ${bin_link_dir}/${serverName} || :
|
[ -x ${install_main_dir}/bin/${serverName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${serverName} ${bin_link_dir}/${serverName} || :
|
||||||
[ -x ${install_main_dir}/bin/${udfdName} ] && ${csudo}ln -s ${install_main_dir}/bin/${udfdName} ${bin_link_dir}/${udfdName} || :
|
[ -x ${install_main_dir}/bin/${udfdName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${udfdName} ${bin_link_dir}/${udfdName} || :
|
||||||
[ -x ${install_main_dir}/bin/${adapterName} ] && ${csudo}ln -s ${install_main_dir}/bin/${adapterName} ${bin_link_dir}/${adapterName} || :
|
[ -x ${install_main_dir}/bin/${adapterName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${adapterName} ${bin_link_dir}/${adapterName} || :
|
||||||
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${demoName} || :
|
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${demoName} || :
|
||||||
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${benchmarkName} || :
|
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${benchmarkName} || :
|
||||||
[ -x ${install_main_dir}/bin/${dumpName} ] && ${csudo}ln -s ${install_main_dir}/bin/${dumpName} ${bin_link_dir}/${dumpName} || :
|
[ -x ${install_main_dir}/bin/${dumpName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${dumpName} ${bin_link_dir}/${dumpName} || :
|
||||||
[ -x ${install_main_dir}/bin/${xname} ] && ${csudo}ln -s ${install_main_dir}/bin/${xname} ${bin_link_dir}/${xname} || :
|
[ -x ${install_main_dir}/bin/${xname} ] && ${csudo}ln -sf ${install_main_dir}/bin/${xname} ${bin_link_dir}/${xname} || :
|
||||||
[ -x ${install_main_dir}/bin/${explorerName} ] && ${csudo}ln -s ${install_main_dir}/bin/${explorerName} ${bin_link_dir}/${explorerName} || :
|
[ -x ${install_main_dir}/bin/${explorerName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${explorerName} ${bin_link_dir}/${explorerName} || :
|
||||||
[ -x ${install_main_dir}/bin/TDinsight.sh ] && ${csudo}ln -s ${install_main_dir}/bin/TDinsight.sh ${bin_link_dir}/TDinsight.sh || :
|
[ -x ${install_main_dir}/bin/TDinsight.sh ] && ${csudo}ln -sf ${install_main_dir}/bin/TDinsight.sh ${bin_link_dir}/TDinsight.sh || :
|
||||||
[ -x ${install_main_dir}/bin/remove.sh ] && ${csudo}ln -s ${install_main_dir}/bin/remove.sh ${bin_link_dir}/${uninstallScript} || :
|
[ -x ${install_main_dir}/bin/remove.sh ] && ${csudo}ln -sf ${install_main_dir}/bin/remove.sh ${bin_link_dir}/${uninstallScript} || :
|
||||||
[ -x ${install_main_dir}/bin/set_core.sh ] && ${csudo}ln -s ${install_main_dir}/bin/set_core.sh ${bin_link_dir}/set_core || :
|
[ -x ${install_main_dir}/bin/set_core.sh ] && ${csudo}ln -sf ${install_main_dir}/bin/set_core.sh ${bin_link_dir}/set_core || :
|
||||||
|
|
||||||
if [ "$verMode" == "cluster" ] && [ "$clientName" != "$clientName2" ]; then
|
if [ "$verMode" == "cluster" ] && [ "$clientName" != "$clientName2" ]; then
|
||||||
[ -x ${install_main_dir}/bin/${clientName} ] && ${csudo}ln -s ${install_main_dir}/bin/${clientName} ${bin_link_dir}/${clientName2} || :
|
[ -x ${install_main_dir}/bin/${clientName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${clientName} ${bin_link_dir}/${clientName2} || :
|
||||||
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -s ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${benchmarkName2} || :
|
[ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${benchmarkName2} || :
|
||||||
[ -x ${install_main_dir}/bin/${dumpName} ] && ${csudo}ln -s ${install_main_dir}/bin/${dumpName} ${bin_link_dir}/${dumpName2} || :
|
[ -x ${install_main_dir}/bin/${dumpName} ] && ${csudo}ln -sf ${install_main_dir}/bin/${dumpName} ${bin_link_dir}/${dumpName2} || :
|
||||||
[ -x ${install_main_dir}/bin/remove.sh ] && ${csudo}ln -s ${install_main_dir}/bin/remove.sh ${bin_link_dir}/${uninstallScript2} || :
|
[ -x ${install_main_dir}/bin/remove.sh ] && ${csudo}ln -sf ${install_main_dir}/bin/remove.sh ${bin_link_dir}/${uninstallScript2} || :
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,14 +250,14 @@ function install_lib() {
|
||||||
#${csudo}rm -rf ${v15_java_app_dir} || :
|
#${csudo}rm -rf ${v15_java_app_dir} || :
|
||||||
${csudo}cp -rf ${script_dir}/driver/* ${install_main_dir}/driver && ${csudo}chmod 777 ${install_main_dir}/driver/*
|
${csudo}cp -rf ${script_dir}/driver/* ${install_main_dir}/driver && ${csudo}chmod 777 ${install_main_dir}/driver/*
|
||||||
|
|
||||||
${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
|
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
|
||||||
${csudo}ln -s ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
|
${csudo}ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
|
||||||
|
|
||||||
[ -f ${install_main_dir}/driver/libtaosws.so ] && ${csudo}ln -sf ${install_main_dir}/driver/libtaosws.so ${lib_link_dir}/libtaosws.so || :
|
[ -f ${install_main_dir}/driver/libtaosws.so ] && ${csudo}ln -sf ${install_main_dir}/driver/libtaosws.so ${lib_link_dir}/libtaosws.so || :
|
||||||
|
|
||||||
if [[ -d ${lib64_link_dir} && ! -e ${lib64_link_dir}/libtaos.so ]]; then
|
if [[ -d ${lib64_link_dir} && ! -e ${lib64_link_dir}/libtaos.so ]]; then
|
||||||
${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 || :
|
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 || :
|
||||||
${csudo}ln -s ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so || :
|
${csudo}ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so || :
|
||||||
|
|
||||||
[ -f ${install_main_dir}/libtaosws.so ] && ${csudo}ln -sf ${install_main_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || :
|
[ -f ${install_main_dir}/libtaosws.so ] && ${csudo}ln -sf ${install_main_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || :
|
||||||
fi
|
fi
|
||||||
|
@ -347,10 +347,10 @@ function install_header() {
|
||||||
[ -f ${inc_link_dir}/taosws.h ] && ${csudo}rm -f ${inc_link_dir}/taosws.h || :
|
[ -f ${inc_link_dir}/taosws.h ] && ${csudo}rm -f ${inc_link_dir}/taosws.h || :
|
||||||
|
|
||||||
${csudo}cp -f ${script_dir}/inc/* ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/*
|
${csudo}cp -f ${script_dir}/inc/* ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/*
|
||||||
${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
|
${csudo}ln -sf ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h
|
${csudo}ln -sf ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
|
${csudo}ln -sf ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h
|
${csudo}ln -sf ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h
|
||||||
|
|
||||||
[ -f ${install_main_dir}/include/taosws.h ] && ${csudo}ln -sf ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h || :
|
[ -f ${install_main_dir}/include/taosws.h ] && ${csudo}ln -sf ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h || :
|
||||||
}
|
}
|
||||||
|
@ -511,7 +511,7 @@ function install_adapter_config() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -f ${cfg_install_dir}/${adapterName}.toml ] &&
|
[ -f ${cfg_install_dir}/${adapterName}.toml ] &&
|
||||||
${csudo}ln -s ${cfg_install_dir}/${adapterName}.toml ${install_main_dir}/cfg/${adapterName}.toml
|
${csudo}ln -sf ${cfg_install_dir}/${adapterName}.toml ${install_main_dir}/cfg/${adapterName}.toml
|
||||||
|
|
||||||
[ ! -z $1 ] && return 0 || : # only install client
|
[ ! -z $1 ] && return 0 || : # only install client
|
||||||
|
|
||||||
|
@ -527,7 +527,7 @@ function install_config() {
|
||||||
${csudo}cp -f ${script_dir}/cfg/${configFile} ${cfg_install_dir}/${configFile}.new
|
${csudo}cp -f ${script_dir}/cfg/${configFile} ${cfg_install_dir}/${configFile}.new
|
||||||
fi
|
fi
|
||||||
|
|
||||||
${csudo}ln -s ${cfg_install_dir}/${configFile} ${install_main_dir}/cfg
|
${csudo}ln -sf ${cfg_install_dir}/${configFile} ${install_main_dir}/cfg
|
||||||
|
|
||||||
[ ! -z $1 ] && return 0 || : # only install client
|
[ ! -z $1 ] && return 0 || : # only install client
|
||||||
|
|
||||||
|
@ -573,13 +573,13 @@ function install_log() {
|
||||||
${csudo}rm -rf ${log_dir} || :
|
${csudo}rm -rf ${log_dir} || :
|
||||||
${csudo}mkdir -p ${log_dir} && ${csudo}chmod 777 ${log_dir}
|
${csudo}mkdir -p ${log_dir} && ${csudo}chmod 777 ${log_dir}
|
||||||
|
|
||||||
${csudo}ln -s ${log_dir} ${install_main_dir}/log
|
${csudo}ln -sf ${log_dir} ${install_main_dir}/log
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_data() {
|
function install_data() {
|
||||||
${csudo}mkdir -p ${data_dir}
|
${csudo}mkdir -p ${data_dir}
|
||||||
|
|
||||||
${csudo}ln -s ${data_dir} ${install_main_dir}/data
|
${csudo}ln -sf ${data_dir} ${install_main_dir}/data
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_connector() {
|
function install_connector() {
|
||||||
|
@ -862,21 +862,21 @@ function updateProduct() {
|
||||||
openresty_work=false
|
openresty_work=false
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${cfg_install_dir}/${configFile}"
|
echo -e "${GREEN_DARK}To configure ${productName2} ${NC}: edit ${cfg_install_dir}/${configFile}"
|
||||||
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To configure Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
echo -e "${GREEN_DARK}To configure ${clientName2} Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Adatper ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ${csudo}service ${serverName} start${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ./${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ./${serverName}${NC}"
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start ${clientName} Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: taosadapter &${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ${openresty_work} = 'true' ]; then
|
if [ ${openresty_work} = 'true' ]; then
|
||||||
|
@ -887,7 +887,7 @@ function updateProduct() {
|
||||||
|
|
||||||
if ((${prompt_force} == 1)); then
|
if ((${prompt_force} == 1)); then
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${RED}Please run '${serverName} --force-keep-file' at first time for the exist ${productName} $exist_version!${NC}"
|
echo -e "${RED}Please run '${serverName} --force-keep-file' at first time for the exist ${productName2} $exist_version!${NC}"
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
echo -e "\033[44;32;1m${productName2} is updated successfully!${NC}"
|
echo -e "\033[44;32;1m${productName2} is updated successfully!${NC}"
|
||||||
|
@ -944,21 +944,21 @@ function installProduct() {
|
||||||
|
|
||||||
# Ask if to start the service
|
# Ask if to start the service
|
||||||
echo
|
echo
|
||||||
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${cfg_install_dir}/${configFile}"
|
echo -e "${GREEN_DARK}To configure ${productName2} ${NC}: edit ${cfg_install_dir}/${configFile}"
|
||||||
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To configure Taos Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
echo -e "${GREEN_DARK}To configure ${clientName2} Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adatper ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ${csudo}service ${serverName} start${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName2} ${NC}: ${serverName}${NC}"
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start ${clientName2} Adapter ${NC}: taosadapter &${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "$firstEp" ]; then
|
if [ ! -z "$firstEp" ]; then
|
||||||
|
@ -970,24 +970,24 @@ function installProduct() {
|
||||||
tmpPort=""
|
tmpPort=""
|
||||||
fi
|
fi
|
||||||
if [[ "$tmpPort" != "" ]]; then
|
if [[ "$tmpPort" != "" ]]; then
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: ${clientName} -h $tmpFqdn -P $tmpPort${GREEN_DARK} to login into cluster, then${NC}"
|
echo -e "${GREEN_DARK}To access ${productName2} ${NC}: ${clientName2} -h $tmpFqdn -P $tmpPort${GREEN_DARK} to login into cluster, then${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: ${clientName} -h $tmpFqdn${GREEN_DARK} to login into cluster, then${NC}"
|
echo -e "${GREEN_DARK}To access ${productName2} ${NC}: ${clientName2} -h $tmpFqdn${GREEN_DARK} to login into cluster, then${NC}"
|
||||||
fi
|
fi
|
||||||
echo -e "${GREEN_DARK}execute ${NC}: create dnode 'newDnodeFQDN:port'; ${GREEN_DARK}to add this new node${NC}"
|
echo -e "${GREEN_DARK}execute ${NC}: create dnode 'newDnodeFQDN:port'; ${GREEN_DARK}to add this new node${NC}"
|
||||||
echo
|
echo
|
||||||
elif [ ! -z "$serverFqdn" ]; then
|
elif [ ! -z "$serverFqdn" ]; then
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: ${clientName} -h $serverFqdn${GREEN_DARK} to login into ${productName} server${NC}"
|
echo -e "${GREEN_DARK}To access ${productName2} ${NC}: ${clientName2} -h $serverFqdn${GREEN_DARK} to login into ${productName2} server${NC}"
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\033[44;32;1m${productName} is installed successfully!${NC}"
|
echo -e "\033[44;32;1m${productName2} is installed successfully!${NC}"
|
||||||
echo
|
echo
|
||||||
else # Only install client
|
else # Only install client
|
||||||
install_bin
|
install_bin
|
||||||
install_config
|
install_config
|
||||||
echo
|
echo
|
||||||
echo -e "\033[44;32;1m${productName} client is installed successfully!${NC}"
|
echo -e "\033[44;32;1m${productName2} client is installed successfully!${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
touch ~/.${historyFile}
|
touch ~/.${historyFile}
|
||||||
|
|
|
@ -17,7 +17,7 @@ serverName="taosd"
|
||||||
clientName="taos"
|
clientName="taos"
|
||||||
uninstallScript="rmtaos"
|
uninstallScript="rmtaos"
|
||||||
configFile="taos.cfg"
|
configFile="taos.cfg"
|
||||||
tarName="taos.tar.gz"
|
tarName="package.tar.gz"
|
||||||
|
|
||||||
osType=Linux
|
osType=Linux
|
||||||
pagMode=full
|
pagMode=full
|
||||||
|
|
|
@ -606,23 +606,23 @@ function update_TDengine() {
|
||||||
|
|
||||||
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${configDir}/${configFile}"
|
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${configDir}/${configFile}"
|
||||||
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To configure Taos Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
echo -e "${GREEN_DARK}To configure Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adatper ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -658,23 +658,23 @@ function install_TDengine() {
|
||||||
echo
|
echo
|
||||||
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${configDir}/${configFile}"
|
echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${configDir}/${configFile}"
|
||||||
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${configDir}/taosadapter.toml ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To configure Taos Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
echo -e "${GREEN_DARK}To configure Adapter ${NC}: edit ${configDir}/taosadapter.toml"
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}systemctl start ${serverName}${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: ${csudo}systemctl start taosadapter ${NC}"
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${csudo}service ${serverName} start${NC}"
|
||||||
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${service_config_dir}/taosadapter.service ] && [ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: ${csudo}service taosadapter start${NC}"
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ clientName2="${12}"
|
||||||
productName="TDengine"
|
productName="TDengine"
|
||||||
clientName="taos"
|
clientName="taos"
|
||||||
configFile="taos.cfg"
|
configFile="taos.cfg"
|
||||||
tarName="taos.tar.gz"
|
tarName="package.tar.gz"
|
||||||
|
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
script_dir="$(dirname $(readlink -f $0))"
|
script_dir="$(dirname $(readlink -f $0))"
|
||||||
|
|
|
@ -28,7 +28,7 @@ productName="TDengine"
|
||||||
serverName="taosd"
|
serverName="taosd"
|
||||||
clientName="taos"
|
clientName="taos"
|
||||||
configFile="taos.cfg"
|
configFile="taos.cfg"
|
||||||
tarName="taos.tar.gz"
|
tarName="package.tar.gz"
|
||||||
dumpName="taosdump"
|
dumpName="taosdump"
|
||||||
benchmarkName="taosBenchmark"
|
benchmarkName="taosBenchmark"
|
||||||
toolsName="taostools"
|
toolsName="taostools"
|
||||||
|
@ -171,22 +171,22 @@ if [ -n "${taostools_bin_files}" ]; then
|
||||||
&& cp ${taostools_bin_files} ${taostools_install_dir}/bin \
|
&& cp ${taostools_bin_files} ${taostools_install_dir}/bin \
|
||||||
&& chmod a+x ${taostools_install_dir}/bin/* || :
|
&& chmod a+x ${taostools_install_dir}/bin/* || :
|
||||||
|
|
||||||
if [ -f ${top_dir}/tools/taos-tools/packaging/tools/install-taostools.sh ]; then
|
if [ -f ${top_dir}/tools/taos-tools/packaging/tools/install-tools.sh ]; then
|
||||||
cp ${top_dir}/tools/taos-tools/packaging/tools/install-taostools.sh \
|
cp ${top_dir}/tools/taos-tools/packaging/tools/install-tools.sh \
|
||||||
${taostools_install_dir}/ > /dev/null \
|
${taostools_install_dir}/ > /dev/null \
|
||||||
&& chmod a+x ${taostools_install_dir}/install-taostools.sh \
|
&& chmod a+x ${taostools_install_dir}/install-tools.sh \
|
||||||
|| echo -e "failed to copy install-taostools.sh"
|
|| echo -e "failed to copy install-tools.sh"
|
||||||
else
|
else
|
||||||
echo -e "install-taostools.sh not found"
|
echo -e "install-tools.sh not found"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ${top_dir}/tools/taos-tools/packaging/tools/uninstall-taostools.sh ]; then
|
if [ -f ${top_dir}/tools/taos-tools/packaging/tools/uninstall-tools.sh ]; then
|
||||||
cp ${top_dir}/tools/taos-tools/packaging/tools/uninstall-taostools.sh \
|
cp ${top_dir}/tools/taos-tools/packaging/tools/uninstall-tools.sh \
|
||||||
${taostools_install_dir}/ > /dev/null \
|
${taostools_install_dir}/ > /dev/null \
|
||||||
&& chmod a+x ${taostools_install_dir}/uninstall-taostools.sh \
|
&& chmod a+x ${taostools_install_dir}/uninstall-tools.sh \
|
||||||
|| echo -e "failed to copy uninstall-taostools.sh"
|
|| echo -e "failed to copy uninstall-tools.sh"
|
||||||
else
|
else
|
||||||
echo -e "uninstall-taostools.sh not found"
|
echo -e "uninstall-tools.sh not found"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ${build_dir}/lib/libavro.so.23.0.0 ]; then
|
if [ -f ${build_dir}/lib/libavro.so.23.0.0 ]; then
|
||||||
|
|
|
@ -530,7 +530,7 @@ function install_service_on_sysvinit() {
|
||||||
function clean_service_on_systemd() {
|
function clean_service_on_systemd() {
|
||||||
taosd_service_config="${service_config_dir}/taosd.service"
|
taosd_service_config="${service_config_dir}/taosd.service"
|
||||||
|
|
||||||
# taosd service already is stoped before install in preinst script
|
# taosd service already is stopped before install in preinst script
|
||||||
#if systemctl is-active --quiet taosd; then
|
#if systemctl is-active --quiet taosd; then
|
||||||
# echo "TDengine is running, stopping it..."
|
# echo "TDengine is running, stopping it..."
|
||||||
# ${csudo}systemctl stop taosd &> /dev/null || echo &> /dev/null
|
# ${csudo}systemctl stop taosd &> /dev/null || echo &> /dev/null
|
||||||
|
|
|
@ -72,7 +72,7 @@ New Features:
|
||||||
|
|
||||||
taos-1.4.13 (Released on 2018-12-14)
|
taos-1.4.13 (Released on 2018-12-14)
|
||||||
Bugs Fixed:
|
Bugs Fixed:
|
||||||
- Clients failed to connect to server due to unexpected and invalid packets recieved by the server.
|
- Clients failed to connect to server due to unexpected and invalid packets received by the server.
|
||||||
Features Added:
|
Features Added:
|
||||||
- Add support to HikariCP in TSDB JDBC driver.
|
- Add support to HikariCP in TSDB JDBC driver.
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ read -p "Please enter link directory such as /var/lib/taos/tsdb: " linkDir
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
if [ ! -d $linkDir ]; then
|
if [ ! -d $linkDir ]; then
|
||||||
read -p "Paht not exists, please enter the correct link path:" linkDir
|
read -p "Path not exists, please enter the correct link path:" linkDir
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
|
@ -28,12 +28,12 @@ for linkFile in $(find -L $linkDir -xtype l); do
|
||||||
if [ -z "${dirHash["$dirName"]}" ]; then
|
if [ -z "${dirHash["$dirName"]}" ]; then
|
||||||
read -p "Please enter the directory to replace ${dirName}:" newDir
|
read -p "Please enter the directory to replace ${dirName}:" newDir
|
||||||
|
|
||||||
read -p "Do you want to replcace all[y/N]?" replcaceAll
|
read -p "Do you want to replace all[y/N]?" replaceAll
|
||||||
if [[ ( "${replcaceAll}" == "y") || ( "${replcaceAll}" == "Y") ]]; then
|
if [[ ( "${replaceAll}" == "y") || ( "${replaceAll}" == "Y") ]]; then
|
||||||
dirHash["$dirName"]="$newDir"
|
dirHash["$dirName"]="$newDir"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Replcace the file
|
# Replace the file
|
||||||
ln -sf "${newDir}/${baseName}" "${linkFile}"
|
ln -sf "${newDir}/${baseName}" "${linkFile}"
|
||||||
done
|
done
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
[Setup]
|
[Setup]
|
||||||
VersionInfoVersion={#MyAppVersion}
|
VersionInfoVersion={#MyAppVersion}
|
||||||
AppId={{A0F7A93C-79C4-485D-B2B8-F0D03DF42FAB}
|
AppId={{A0F7A93C-79C4-485D-B2B8-F0D03DF42FAB}
|
||||||
AppName={#MyAppName}
|
AppName={#CusName}
|
||||||
AppVersion={#MyAppVersion}
|
AppVersion={#MyAppVersion}
|
||||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
AppPublisher={#MyAppPublisher}
|
AppPublisher={#MyAppPublisher}
|
||||||
|
@ -64,8 +64,8 @@ Source: {#MyAppSourceDir}\taosdump.exe; DestDir: "{app}"; DestName: "{#CusPrompt
|
||||||
|
|
||||||
|
|
||||||
[run]
|
[run]
|
||||||
Filename: {sys}\sc.exe; Parameters: "create taosd start= DEMAND binPath= ""C:\\{#CusName}\\taosd.exe --win_service""" ; Flags: runhidden
|
Filename: {sys}\sc.exe; Parameters: "create taosd start= DEMAND binPath= ""C:\\TDengine\\taosd.exe --win_service""" ; Flags: runhidden
|
||||||
Filename: {sys}\sc.exe; Parameters: "create taosadapter start= DEMAND binPath= ""C:\\{#CusName}\\taosadapter.exe""" ; Flags: runhidden
|
Filename: {sys}\sc.exe; Parameters: "create taosadapter start= DEMAND binPath= ""C:\\TDengine\\taosadapter.exe""" ; Flags: runhidden
|
||||||
|
|
||||||
[UninstallRun]
|
[UninstallRun]
|
||||||
RunOnceId: "stoptaosd"; Filename: {sys}\sc.exe; Parameters: "stop taosd" ; Flags: runhidden
|
RunOnceId: "stoptaosd"; Filename: {sys}\sc.exe; Parameters: "stop taosd" ; Flags: runhidden
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
TDengine is a high-efficient, scalable, high-available distributed time-series database, which makes a lot of optimizations on inserting and querying data, which is far more efficient than normal regular databases. So TDengine can meet the high requirements of IOT and other areas on storing and querying a large amount of data.
|
TDengine is an open-source, cloud-native time-series database optimized for Internet of Things (IoT), Connected Cars, and Industrial IoT. With its built-in caching, stream processing, and data subscription capabilities, TDengine offers a simplified solution for time-series data processing.
|
||||||
|
|
||||||
TDengine will be installed under C:\TDengine, users can modify configuration file C:\TDengine\cfg\taos.cfg, set the log file path or other parameters.
|
TDengine will be installed under C:\TDengine, users can modify configuration file C:\TDengine\cfg\taos.cfg, set the log file path or other parameters.
|
||||||
To start/stop TDengine with administrator privileges: sc start/stop taosd
|
To start/stop TDengine with administrator privileges: sc start/stop taosd
|
||||||
|
|
|
@ -194,6 +194,7 @@ static char* processCreateStb(SMqMetaRsp* metaRsp) {
|
||||||
SDecoder coder;
|
SDecoder coder;
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
|
|
||||||
|
uDebug("processCreateStb called");
|
||||||
// decode and process req
|
// decode and process req
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
||||||
|
@ -203,7 +204,7 @@ static char* processCreateStb(SMqMetaRsp* metaRsp) {
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
string = buildCreateTableJson(&req.schemaRow, &req.schemaTag, req.name, req.suid, TSDB_SUPER_TABLE);
|
string = buildCreateTableJson(&req.schemaRow, &req.schemaTag, req.name, req.suid, TSDB_SUPER_TABLE);
|
||||||
|
uDebug("processCreateStb %s", string);
|
||||||
_err:
|
_err:
|
||||||
tDecoderClear(&coder);
|
tDecoderClear(&coder);
|
||||||
return string;
|
return string;
|
||||||
|
@ -213,6 +214,7 @@ static char* processAlterStb(SMqMetaRsp* metaRsp) {
|
||||||
SVCreateStbReq req = {0};
|
SVCreateStbReq req = {0};
|
||||||
SDecoder coder;
|
SDecoder coder;
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
|
uDebug("processAlterStb called");
|
||||||
|
|
||||||
// decode and process req
|
// decode and process req
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
|
@ -223,6 +225,7 @@ static char* processAlterStb(SMqMetaRsp* metaRsp) {
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
string = buildAlterSTableJson(req.alterOriData, req.alterOriDataLen);
|
string = buildAlterSTableJson(req.alterOriData, req.alterOriDataLen);
|
||||||
|
uDebug("processAlterStb %s", string);
|
||||||
|
|
||||||
_err:
|
_err:
|
||||||
tDecoderClear(&coder);
|
tDecoderClear(&coder);
|
||||||
|
@ -346,6 +349,7 @@ static char* processCreateTable(SMqMetaRsp* metaRsp) {
|
||||||
SVCreateTbReq* pCreateReq;
|
SVCreateTbReq* pCreateReq;
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
// decode
|
// decode
|
||||||
|
uDebug("processCreateTable called");
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
||||||
tDecoderInit(&decoder, data, len);
|
tDecoderInit(&decoder, data, len);
|
||||||
|
@ -359,9 +363,9 @@ static char* processCreateTable(SMqMetaRsp* metaRsp) {
|
||||||
if (pCreateReq->type == TSDB_CHILD_TABLE) {
|
if (pCreateReq->type == TSDB_CHILD_TABLE) {
|
||||||
string = buildCreateCTableJson(req.pReqs, req.nReqs);
|
string = buildCreateCTableJson(req.pReqs, req.nReqs);
|
||||||
} else if (pCreateReq->type == TSDB_NORMAL_TABLE) {
|
} else if (pCreateReq->type == TSDB_NORMAL_TABLE) {
|
||||||
string =
|
string = buildCreateTableJson(&pCreateReq->ntb.schemaRow, NULL, pCreateReq->name, pCreateReq->uid, TSDB_NORMAL_TABLE);
|
||||||
buildCreateTableJson(&pCreateReq->ntb.schemaRow, NULL, pCreateReq->name, pCreateReq->uid, TSDB_NORMAL_TABLE);
|
|
||||||
}
|
}
|
||||||
|
uDebug("processCreateTable :%s", string);
|
||||||
}
|
}
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -377,6 +381,7 @@ _exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* processAutoCreateTable(STaosxRsp* rsp) {
|
static char* processAutoCreateTable(STaosxRsp* rsp) {
|
||||||
|
uDebug("processAutoCreateTable called");
|
||||||
if (rsp->createTableNum <= 0) {
|
if (rsp->createTableNum <= 0) {
|
||||||
uError("WriteRaw:processAutoCreateTable rsp->createTableNum <= 0");
|
uError("WriteRaw:processAutoCreateTable rsp->createTableNum <= 0");
|
||||||
goto _exit;
|
goto _exit;
|
||||||
|
@ -402,7 +407,7 @@ static char* processAutoCreateTable(STaosxRsp* rsp) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string = buildCreateCTableJson(pCreateReq, rsp->createTableNum);
|
string = buildCreateCTableJson(pCreateReq, rsp->createTableNum);
|
||||||
|
uDebug("processAutoCreateTable :%s", string);
|
||||||
_exit:
|
_exit:
|
||||||
for (int i = 0; i < rsp->createTableNum; i++) {
|
for (int i = 0; i < rsp->createTableNum; i++) {
|
||||||
tDecoderClear(&decoder[i]);
|
tDecoderClear(&decoder[i]);
|
||||||
|
@ -422,6 +427,7 @@ static char* processAlterTable(SMqMetaRsp* metaRsp) {
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
cJSON* json = NULL;
|
cJSON* json = NULL;
|
||||||
|
|
||||||
|
uDebug("processAlterTable called");
|
||||||
// decode
|
// decode
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
||||||
|
@ -527,6 +533,7 @@ static char* processAlterTable(SMqMetaRsp* metaRsp) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
string = cJSON_PrintUnformatted(json);
|
string = cJSON_PrintUnformatted(json);
|
||||||
|
uDebug("processAlterTable :%s", string);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
cJSON_Delete(json);
|
cJSON_Delete(json);
|
||||||
|
@ -539,6 +546,7 @@ static char* processDropSTable(SMqMetaRsp* metaRsp) {
|
||||||
SVDropStbReq req = {0};
|
SVDropStbReq req = {0};
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
cJSON* json = NULL;
|
cJSON* json = NULL;
|
||||||
|
uDebug("processDropSTable called");
|
||||||
|
|
||||||
// decode
|
// decode
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
|
@ -560,7 +568,7 @@ static char* processDropSTable(SMqMetaRsp* metaRsp) {
|
||||||
cJSON_AddItemToObject(json, "tableName", tableName);
|
cJSON_AddItemToObject(json, "tableName", tableName);
|
||||||
|
|
||||||
string = cJSON_PrintUnformatted(json);
|
string = cJSON_PrintUnformatted(json);
|
||||||
|
uDebug("processDropSTable :%s", string);
|
||||||
_exit:
|
_exit:
|
||||||
cJSON_Delete(json);
|
cJSON_Delete(json);
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
|
@ -573,6 +581,7 @@ static char* processDeleteTable(SMqMetaRsp* metaRsp) {
|
||||||
cJSON* json = NULL;
|
cJSON* json = NULL;
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
|
|
||||||
|
uDebug("processDeleteTable called");
|
||||||
// decode and process req
|
// decode and process req
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
||||||
|
@ -599,7 +608,7 @@ static char* processDeleteTable(SMqMetaRsp* metaRsp) {
|
||||||
cJSON_AddItemToObject(json, "sql", sqlJson);
|
cJSON_AddItemToObject(json, "sql", sqlJson);
|
||||||
|
|
||||||
string = cJSON_PrintUnformatted(json);
|
string = cJSON_PrintUnformatted(json);
|
||||||
|
uDebug("processDeleteTable :%s", string);
|
||||||
_exit:
|
_exit:
|
||||||
cJSON_Delete(json);
|
cJSON_Delete(json);
|
||||||
tDecoderClear(&coder);
|
tDecoderClear(&coder);
|
||||||
|
@ -612,6 +621,7 @@ static char* processDropTable(SMqMetaRsp* metaRsp) {
|
||||||
char* string = NULL;
|
char* string = NULL;
|
||||||
cJSON* json = NULL;
|
cJSON* json = NULL;
|
||||||
|
|
||||||
|
uDebug("processDropTable called");
|
||||||
// decode
|
// decode
|
||||||
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead));
|
||||||
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead);
|
||||||
|
@ -641,7 +651,7 @@ static char* processDropTable(SMqMetaRsp* metaRsp) {
|
||||||
cJSON_AddItemToObject(json, "tableNameList", tableNameList);
|
cJSON_AddItemToObject(json, "tableNameList", tableNameList);
|
||||||
|
|
||||||
string = cJSON_PrintUnformatted(json);
|
string = cJSON_PrintUnformatted(json);
|
||||||
|
uDebug("processDropTable :%s", string);
|
||||||
_exit:
|
_exit:
|
||||||
cJSON_Delete(json);
|
cJSON_Delete(json);
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
|
@ -655,6 +665,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
|
|
||||||
|
uDebug("taosCreateStb called");
|
||||||
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -698,6 +709,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pReq.source = TD_REQ_FROM_TAOX;
|
pReq.source = TD_REQ_FROM_TAOX;
|
||||||
pReq.igExists = true;
|
pReq.igExists = true;
|
||||||
|
|
||||||
|
uDebug("taosCreateStb name:%s suid:%"PRId64" processSuid:%"PRId64, req.name, req.suid, pReq.suid);
|
||||||
STscObj* pTscObj = pRequest->pTscObj;
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
SName tableName;
|
SName tableName;
|
||||||
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
||||||
|
@ -744,6 +756,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
|
|
||||||
|
uDebug("taosDropStb called");
|
||||||
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -768,6 +781,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pReq.source = TD_REQ_FROM_TAOX;
|
pReq.source = TD_REQ_FROM_TAOX;
|
||||||
pReq.suid = processSuid(req.suid, pRequest->pDb);
|
pReq.suid = processSuid(req.suid, pRequest->pDb);
|
||||||
|
|
||||||
|
uDebug("taosDropStb name:%s suid:%"PRId64" processSuid:%"PRId64, req.name, req.suid, pReq.suid);
|
||||||
STscObj* pTscObj = pRequest->pTscObj;
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
SName tableName = {0};
|
SName tableName = {0};
|
||||||
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
||||||
|
@ -825,6 +839,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
SHashObj* pVgroupHashmap = NULL;
|
SHashObj* pVgroupHashmap = NULL;
|
||||||
|
|
||||||
|
uDebug("taosCreateTable called");
|
||||||
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -884,7 +899,10 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
if (pCreateReq->type == TSDB_CHILD_TABLE) {
|
if (pCreateReq->type == TSDB_CHILD_TABLE) {
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
SName sName = {0};
|
SName sName = {0};
|
||||||
|
tb_uid_t oldSuid = pCreateReq->ctb.suid;
|
||||||
pCreateReq->ctb.suid = processSuid(pCreateReq->ctb.suid, pRequest->pDb);
|
pCreateReq->ctb.suid = processSuid(pCreateReq->ctb.suid, pRequest->pDb);
|
||||||
|
uDebug("taosCreateTable name:%s sname:%s suid:%"PRId64" processSuid:%"PRId64, pCreateReq->name, pCreateReq->ctb.stbName, pCreateReq->ctb.suid, oldSuid);
|
||||||
|
|
||||||
toName(pTscObj->acctId, pRequest->pDb, pCreateReq->ctb.stbName, &sName);
|
toName(pTscObj->acctId, pRequest->pDb, pCreateReq->ctb.stbName, &sName);
|
||||||
code = catalogGetTableMeta(pCatalog, &conn, &sName, &pTableMeta);
|
code = catalogGetTableMeta(pCatalog, &conn, &sName, &pTableMeta);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -979,6 +997,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
SHashObj* pVgroupHashmap = NULL;
|
SHashObj* pVgroupHashmap = NULL;
|
||||||
|
|
||||||
|
uDebug("taosDropTable called");
|
||||||
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -1023,6 +1042,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pDropReq = req.pReqs + iReq;
|
pDropReq = req.pReqs + iReq;
|
||||||
pDropReq->igNotExists = true;
|
pDropReq->igNotExists = true;
|
||||||
pDropReq->suid = processSuid(pDropReq->suid, pRequest->pDb);
|
pDropReq->suid = processSuid(pDropReq->suid, pRequest->pDb);
|
||||||
|
uDebug("taosDropTable name:%s suid:%"PRId64" processSuid:%"PRId64, pDropReq->name, pDropReq->suid, pDropReq->suid);
|
||||||
|
|
||||||
SVgroupInfo pInfo = {0};
|
SVgroupInfo pInfo = {0};
|
||||||
SName pName = {0};
|
SName pName = {0};
|
||||||
|
@ -1114,6 +1134,7 @@ static int32_t taosDeleteData(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
SDecoder coder = {0};
|
SDecoder coder = {0};
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
uDebug("taosDeleteData called");
|
||||||
// decode and process req
|
// decode and process req
|
||||||
void* data = POINTER_SHIFT(meta, sizeof(SMsgHead));
|
void* data = POINTER_SHIFT(meta, sizeof(SMsgHead));
|
||||||
int32_t len = metaLen - sizeof(SMsgHead);
|
int32_t len = metaLen - sizeof(SMsgHead);
|
||||||
|
@ -1151,6 +1172,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
SArray* pArray = NULL;
|
SArray* pArray = NULL;
|
||||||
SVgDataBlocks* pVgData = NULL;
|
SVgDataBlocks* pVgData = NULL;
|
||||||
|
|
||||||
|
uDebug("taosAlterTable called");
|
||||||
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0);
|
||||||
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -1196,6 +1218,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uDebug("taosAlterTable name:%s", req.tbName);
|
||||||
pArray = taosArrayInit(1, sizeof(void*));
|
pArray = taosArrayInit(1, sizeof(void*));
|
||||||
if (NULL == pArray) {
|
if (NULL == pArray) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
@ -1261,6 +1284,7 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
SHashObj* pVgHash = NULL;
|
SHashObj* pVgHash = NULL;
|
||||||
|
uDebug("taos_write_raw_block_with_fields called");
|
||||||
|
|
||||||
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
||||||
if (!pRequest) {
|
if (!pRequest) {
|
||||||
|
@ -1280,6 +1304,7 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
|
||||||
tstrncpy(pName.dbname, pRequest->pDb, sizeof(pName.dbname));
|
tstrncpy(pName.dbname, pRequest->pDb, sizeof(pName.dbname));
|
||||||
tstrncpy(pName.tname, tbname, sizeof(pName.tname));
|
tstrncpy(pName.tname, tbname, sizeof(pName.tname));
|
||||||
|
|
||||||
|
uDebug("taos_write_raw_block_with_fields name:%s", tbname);
|
||||||
struct SCatalog* pCatalog = NULL;
|
struct SCatalog* pCatalog = NULL;
|
||||||
code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -1342,6 +1367,7 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
SHashObj* pVgHash = NULL;
|
SHashObj* pVgHash = NULL;
|
||||||
|
|
||||||
|
uDebug("taos_write_raw_block called");
|
||||||
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
||||||
if (!pRequest) {
|
if (!pRequest) {
|
||||||
uError("WriteRaw:createRequest error request is null");
|
uError("WriteRaw:createRequest error request is null");
|
||||||
|
@ -1360,6 +1386,7 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
|
||||||
tstrncpy(pName.dbname, pRequest->pDb, sizeof(pName.dbname));
|
tstrncpy(pName.dbname, pRequest->pDb, sizeof(pName.dbname));
|
||||||
tstrncpy(pName.tname, tbname, sizeof(pName.tname));
|
tstrncpy(pName.tname, tbname, sizeof(pName.tname));
|
||||||
|
|
||||||
|
uDebug("taos_write_raw_block name:%s", tbname);
|
||||||
struct SCatalog* pCatalog = NULL;
|
struct SCatalog* pCatalog = NULL;
|
||||||
code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -1423,6 +1450,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
SMqRspObj rspObj = {0};
|
SMqRspObj rspObj = {0};
|
||||||
SDecoder decoder = {0};
|
SDecoder decoder = {0};
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
|
uDebug("tmqWriteRawDataImpl called");
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
||||||
|
@ -1468,7 +1496,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
||||||
uDebug("raw data block num:%d\n", rspObj.rsp.blockNum);
|
uDebug("tmqWriteRawDataImpl raw data block num:%d", rspObj.rsp.blockNum);
|
||||||
while (++rspObj.resIter < rspObj.rsp.blockNum) {
|
while (++rspObj.resIter < rspObj.rsp.blockNum) {
|
||||||
SRetrieveTableRsp* pRetrieve = (SRetrieveTableRsp*)taosArrayGetP(rspObj.rsp.blockData, rspObj.resIter);
|
SRetrieveTableRsp* pRetrieve = (SRetrieveTableRsp*)taosArrayGetP(rspObj.rsp.blockData, rspObj.resIter);
|
||||||
if (!rspObj.rsp.withSchema) {
|
if (!rspObj.rsp.withSchema) {
|
||||||
|
@ -1483,7 +1511,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
uDebug("raw data tbname:%s\n", tbName);
|
uDebug("tmqWriteRawDataImpl raw data tbname:%s", tbName);
|
||||||
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
||||||
strcpy(pName.dbname, pRequest->pDb);
|
strcpy(pName.dbname, pRequest->pDb);
|
||||||
strcpy(pName.tname, tbName);
|
strcpy(pName.tname, tbName);
|
||||||
|
@ -1556,6 +1584,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
SDecoder decoder = {0};
|
SDecoder decoder = {0};
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
SVCreateTbReq* pCreateReqDst = NULL;
|
SVCreateTbReq* pCreateReqDst = NULL;
|
||||||
|
uDebug("tmqWriteRawMetaDataImpl called");
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0);
|
||||||
|
@ -1602,7 +1631,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
}
|
}
|
||||||
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
||||||
|
|
||||||
uDebug("raw data block num:%d\n", rspObj.rsp.blockNum);
|
uDebug("tmqWriteRawMetaDataImpl raw data block num:%d", rspObj.rsp.blockNum);
|
||||||
while (++rspObj.resIter < rspObj.rsp.blockNum) {
|
while (++rspObj.resIter < rspObj.rsp.blockNum) {
|
||||||
SRetrieveTableRsp* pRetrieve = (SRetrieveTableRsp*)taosArrayGetP(rspObj.rsp.blockData, rspObj.resIter);
|
SRetrieveTableRsp* pRetrieve = (SRetrieveTableRsp*)taosArrayGetP(rspObj.rsp.blockData, rspObj.resIter);
|
||||||
if (!rspObj.rsp.withSchema) {
|
if (!rspObj.rsp.withSchema) {
|
||||||
|
@ -1617,7 +1646,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
uDebug("raw data tbname:%s\n", tbName);
|
uDebug("tmqWriteRawMetaDataImpl raw data tbname:%s\n", tbName);
|
||||||
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
||||||
strcpy(pName.dbname, pRequest->pDb);
|
strcpy(pName.dbname, pRequest->pDb);
|
||||||
strcpy(pName.tname, tbName);
|
strcpy(pName.tname, tbName);
|
||||||
|
@ -1726,6 +1755,7 @@ end:
|
||||||
}
|
}
|
||||||
|
|
||||||
char* tmq_get_json_meta(TAOS_RES* res) {
|
char* tmq_get_json_meta(TAOS_RES* res) {
|
||||||
|
uDebug("tmq_get_json_meta called");
|
||||||
if (!TD_RES_TMQ_META(res) && !TD_RES_TMQ_METADATA(res)) {
|
if (!TD_RES_TMQ_META(res) && !TD_RES_TMQ_METADATA(res)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1760,6 +1790,7 @@ char* tmq_get_json_meta(TAOS_RES* res) {
|
||||||
void tmq_free_json_meta(char* jsonMeta) { taosMemoryFreeClear(jsonMeta); }
|
void tmq_free_json_meta(char* jsonMeta) { taosMemoryFreeClear(jsonMeta); }
|
||||||
|
|
||||||
int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
|
uDebug("tmq_get_raw called");
|
||||||
if (!raw || !res) {
|
if (!raw || !res) {
|
||||||
return TSDB_CODE_INVALID_PARA;
|
return TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
@ -1768,6 +1799,7 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
raw->raw = pMetaRspObj->metaRsp.metaRsp;
|
raw->raw = pMetaRspObj->metaRsp.metaRsp;
|
||||||
raw->raw_len = pMetaRspObj->metaRsp.metaRspLen;
|
raw->raw_len = pMetaRspObj->metaRsp.metaRspLen;
|
||||||
raw->raw_type = pMetaRspObj->metaRsp.resMsgType;
|
raw->raw_type = pMetaRspObj->metaRsp.resMsgType;
|
||||||
|
uDebug("tmq_get_raw meta");
|
||||||
} else if (TD_RES_TMQ(res)) {
|
} else if (TD_RES_TMQ(res)) {
|
||||||
SMqRspObj* rspObj = ((SMqRspObj*)res);
|
SMqRspObj* rspObj = ((SMqRspObj*)res);
|
||||||
|
|
||||||
|
@ -1787,6 +1819,7 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
raw->raw = buf;
|
raw->raw = buf;
|
||||||
raw->raw_len = len;
|
raw->raw_len = len;
|
||||||
raw->raw_type = RES_TYPE__TMQ;
|
raw->raw_type = RES_TYPE__TMQ;
|
||||||
|
uDebug("tmq_get_raw data");
|
||||||
} else if (TD_RES_TMQ_METADATA(res)) {
|
} else if (TD_RES_TMQ_METADATA(res)) {
|
||||||
SMqTaosxRspObj* rspObj = ((SMqTaosxRspObj*)res);
|
SMqTaosxRspObj* rspObj = ((SMqTaosxRspObj*)res);
|
||||||
|
|
||||||
|
@ -1806,19 +1839,23 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
raw->raw = buf;
|
raw->raw = buf;
|
||||||
raw->raw_len = len;
|
raw->raw_len = len;
|
||||||
raw->raw_type = RES_TYPE__TMQ_METADATA;
|
raw->raw_type = RES_TYPE__TMQ_METADATA;
|
||||||
|
uDebug("tmq_get_raw meta data");
|
||||||
} else {
|
} else {
|
||||||
|
uError("tmq_get_raw error:%d", *(int8_t*)res);
|
||||||
return TSDB_CODE_TMQ_INVALID_MSG;
|
return TSDB_CODE_TMQ_INVALID_MSG;
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tmq_free_raw(tmq_raw_data raw) {
|
void tmq_free_raw(tmq_raw_data raw) {
|
||||||
|
uDebug("tmq_free_raw raw_type:%d", raw.raw_type);
|
||||||
if (raw.raw_type == RES_TYPE__TMQ || raw.raw_type == RES_TYPE__TMQ_METADATA) {
|
if (raw.raw_type == RES_TYPE__TMQ || raw.raw_type == RES_TYPE__TMQ_METADATA) {
|
||||||
taosMemoryFree(raw.raw);
|
taosMemoryFree(raw.raw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tmq_write_raw(TAOS* taos, tmq_raw_data raw) {
|
int32_t tmq_write_raw(TAOS* taos, tmq_raw_data raw) {
|
||||||
|
uDebug("tmq_write_raw called");
|
||||||
if (!taos) {
|
if (!taos) {
|
||||||
return TSDB_CODE_INVALID_PARA;
|
return TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1213,6 +1213,12 @@ static int32_t smlParseLineBottom(SSmlHandle *info) {
|
||||||
static int32_t smlInsertData(SSmlHandle *info) {
|
static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
if(info->pRequest->dbList == NULL){
|
||||||
|
info->pRequest->dbList = taosArrayInit(1, TSDB_DB_FNAME_LEN);
|
||||||
|
}
|
||||||
|
void* data = taosArrayReserve(info->pRequest->dbList, 1);
|
||||||
|
memcpy(data, info->pRequest->pDb, TSDB_DB_FNAME_LEN > strlen(info->pRequest->pDb) ? strlen(info->pRequest->pDb) : TSDB_DB_FNAME_LEN);
|
||||||
|
|
||||||
SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashIterate(info->childTables, NULL);
|
SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashIterate(info->childTables, NULL);
|
||||||
while (oneTable) {
|
while (oneTable) {
|
||||||
SSmlTableInfo *tableData = *oneTable;
|
SSmlTableInfo *tableData = *oneTable;
|
||||||
|
@ -1221,6 +1227,11 @@ static int32_t smlInsertData(SSmlHandle *info) {
|
||||||
tstrncpy(pName.dbname, info->pRequest->pDb, sizeof(pName.dbname));
|
tstrncpy(pName.dbname, info->pRequest->pDb, sizeof(pName.dbname));
|
||||||
memcpy(pName.tname, tableData->childTableName, strlen(tableData->childTableName));
|
memcpy(pName.tname, tableData->childTableName, strlen(tableData->childTableName));
|
||||||
|
|
||||||
|
if(info->pRequest->tableList == NULL){
|
||||||
|
info->pRequest->tableList = taosArrayInit(1, sizeof(SName));
|
||||||
|
}
|
||||||
|
taosArrayPush(info->pRequest->tableList, &pName);
|
||||||
|
|
||||||
SRequestConnInfo conn = {0};
|
SRequestConnInfo conn = {0};
|
||||||
conn.pTrans = info->taos->pAppInfo->pTransporter;
|
conn.pTrans = info->taos->pAppInfo->pTransporter;
|
||||||
conn.requestId = info->pRequest->requestId;
|
conn.requestId = info->pRequest->requestId;
|
||||||
|
@ -1422,6 +1433,7 @@ static int smlProcess(SSmlHandle *info, char *lines[], char *rawLine, char *rawL
|
||||||
do {
|
do {
|
||||||
code = smlModifyDBSchemas(info);
|
code = smlModifyDBSchemas(info);
|
||||||
if (code == 0) break;
|
if (code == 0) break;
|
||||||
|
taosMsleep(200);
|
||||||
} while (retryNum++ < taosHashGetSize(info->superTables) * MAX_RETRY_TIMES);
|
} while (retryNum++ < taosHashGetSize(info->superTables) * MAX_RETRY_TIMES);
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
|
@ -1446,62 +1458,75 @@ TAOS_RES *taos_schemaless_insert_inner(TAOS *taos, char *lines[], char *rawLine,
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
SRequestObj *request = NULL;
|
||||||
|
SSmlHandle *info = NULL;
|
||||||
|
while(1){
|
||||||
|
request = (SRequestObj *)createRequest(*(int64_t *)taos, TSDB_SQL_INSERT, reqid);
|
||||||
|
if (request == NULL) {
|
||||||
|
uError("SML:taos_schemaless_insert error request is null");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
SRequestObj *request = (SRequestObj *)createRequest(*(int64_t *)taos, TSDB_SQL_INSERT, reqid);
|
info = smlBuildSmlInfo(taos);
|
||||||
if (request == NULL) {
|
if (info == NULL) {
|
||||||
uError("SML:taos_schemaless_insert error request is null");
|
request->code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return NULL;
|
uError("SML:taos_schemaless_insert error SSmlHandle is null");
|
||||||
|
return (TAOS_RES *)request;
|
||||||
|
}
|
||||||
|
info->pRequest = request;
|
||||||
|
info->isRawLine = rawLine != NULL;
|
||||||
|
info->ttl = ttl;
|
||||||
|
info->precision = precision;
|
||||||
|
info->protocol = (TSDB_SML_PROTOCOL_TYPE)protocol;
|
||||||
|
info->msgBuf.buf = info->pRequest->msgBuf;
|
||||||
|
info->msgBuf.len = ERROR_MSG_BUF_DEFAULT_SIZE;
|
||||||
|
info->lineNum = numLines;
|
||||||
|
|
||||||
|
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
||||||
|
if (request->pDb == NULL) {
|
||||||
|
request->code = TSDB_CODE_PAR_DB_NOT_SPECIFIED;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "Database not specified", NULL);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protocol < TSDB_SML_LINE_PROTOCOL || protocol > TSDB_SML_JSON_PROTOCOL) {
|
||||||
|
request->code = TSDB_CODE_SML_INVALID_PROTOCOL_TYPE;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "protocol invalidate", NULL);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protocol == TSDB_SML_LINE_PROTOCOL &&
|
||||||
|
(precision < TSDB_SML_TIMESTAMP_NOT_CONFIGURED || precision > TSDB_SML_TIMESTAMP_NANO_SECONDS)) {
|
||||||
|
request->code = TSDB_CODE_SML_INVALID_PRECISION_TYPE;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "precision invalidate for line protocol", NULL);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protocol == TSDB_SML_JSON_PROTOCOL) {
|
||||||
|
numLines = 1;
|
||||||
|
} else if (numLines <= 0) {
|
||||||
|
request->code = TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
smlBuildInvalidDataMsg(&msg, "line num is invalid", NULL);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
code = smlProcess(info, lines, rawLine, rawLineEnd, numLines);
|
||||||
|
request->code = code;
|
||||||
|
info->cost.endTime = taosGetTimestampUs();
|
||||||
|
info->cost.code = code;
|
||||||
|
smlPrintStatisticInfo(info);
|
||||||
|
if(code == TSDB_CODE_TDB_INVALID_TABLE_SCHEMA_VER || code == TSDB_CODE_SDB_OBJ_CREATING){
|
||||||
|
refreshMeta(request->pTscObj, request);
|
||||||
|
uInfo("SML:%"PRIx64" ver is old retry or object is creating code:%d", info->id, code);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
info = NULL;
|
||||||
|
taos_free_result(request);
|
||||||
|
request = NULL;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSmlHandle *info = smlBuildSmlInfo(taos);
|
|
||||||
if (info == NULL) {
|
|
||||||
request->code = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
uError("SML:taos_schemaless_insert error SSmlHandle is null");
|
|
||||||
return (TAOS_RES *)request;
|
|
||||||
}
|
|
||||||
info->pRequest = request;
|
|
||||||
info->isRawLine = rawLine != NULL;
|
|
||||||
info->ttl = ttl;
|
|
||||||
info->precision = precision;
|
|
||||||
info->protocol = (TSDB_SML_PROTOCOL_TYPE)protocol;
|
|
||||||
info->msgBuf.buf = info->pRequest->msgBuf;
|
|
||||||
info->msgBuf.len = ERROR_MSG_BUF_DEFAULT_SIZE;
|
|
||||||
info->lineNum = numLines;
|
|
||||||
|
|
||||||
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
|
||||||
if (request->pDb == NULL) {
|
|
||||||
request->code = TSDB_CODE_PAR_DB_NOT_SPECIFIED;
|
|
||||||
smlBuildInvalidDataMsg(&msg, "Database not specified", NULL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protocol < TSDB_SML_LINE_PROTOCOL || protocol > TSDB_SML_JSON_PROTOCOL) {
|
|
||||||
request->code = TSDB_CODE_SML_INVALID_PROTOCOL_TYPE;
|
|
||||||
smlBuildInvalidDataMsg(&msg, "protocol invalidate", NULL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protocol == TSDB_SML_LINE_PROTOCOL &&
|
|
||||||
(precision < TSDB_SML_TIMESTAMP_NOT_CONFIGURED || precision > TSDB_SML_TIMESTAMP_NANO_SECONDS)) {
|
|
||||||
request->code = TSDB_CODE_SML_INVALID_PRECISION_TYPE;
|
|
||||||
smlBuildInvalidDataMsg(&msg, "precision invalidate for line protocol", NULL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protocol == TSDB_SML_JSON_PROTOCOL) {
|
|
||||||
numLines = 1;
|
|
||||||
} else if (numLines <= 0) {
|
|
||||||
request->code = TSDB_CODE_SML_INVALID_DATA;
|
|
||||||
smlBuildInvalidDataMsg(&msg, "line num is invalid", NULL);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = smlProcess(info, lines, rawLine, rawLineEnd, numLines);
|
|
||||||
request->code = code;
|
|
||||||
info->cost.endTime = taosGetTimestampUs();
|
|
||||||
info->cost.code = code;
|
|
||||||
smlPrintStatisticInfo(info);
|
|
||||||
|
|
||||||
end:
|
end:
|
||||||
smlDestroyInfo(info);
|
smlDestroyInfo(info);
|
||||||
return (TAOS_RES *)request;
|
return (TAOS_RES *)request;
|
||||||
|
|
|
@ -436,7 +436,7 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
|
||||||
// bind data
|
// bind data
|
||||||
ret = smlBuildCol(info->currTableDataCtx, info->currSTableMeta->schema, &kv, cnt + 1);
|
ret = smlBuildCol(info->currTableDataCtx, info->currSTableMeta->schema, &kv, cnt + 1);
|
||||||
if (unlikely(ret != TSDB_CODE_SUCCESS)) {
|
if (unlikely(ret != TSDB_CODE_SUCCESS)) {
|
||||||
uError("smlBuildCol error, retry");
|
uDebug("smlBuildCol error, retry");
|
||||||
info->dataFormat = false;
|
info->dataFormat = false;
|
||||||
info->reRun = true;
|
info->reRun = true;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -582,8 +582,10 @@ int32_t smlParseInfluxString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLine
|
||||||
.i = ts,
|
.i = ts,
|
||||||
.length = (size_t)tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes};
|
.length = (size_t)tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes};
|
||||||
if (info->dataFormat) {
|
if (info->dataFormat) {
|
||||||
smlBuildCol(info->currTableDataCtx, info->currSTableMeta->schema, &kv, 0);
|
ret = smlBuildCol(info->currTableDataCtx, info->currSTableMeta->schema, &kv, 0);
|
||||||
smlBuildRow(info->currTableDataCtx);
|
if(ret != TSDB_CODE_SUCCESS){return ret;}
|
||||||
|
ret = smlBuildRow(info->currTableDataCtx);
|
||||||
|
if(ret != TSDB_CODE_SUCCESS){return ret;}
|
||||||
clearColValArray(info->currTableDataCtx->pValues);
|
clearColValArray(info->currTableDataCtx->pValues);
|
||||||
} else {
|
} else {
|
||||||
taosArraySet(elements->colArray, 0, &kv);
|
taosArraySet(elements->colArray, 0, &kv);
|
||||||
|
|
|
@ -1243,7 +1243,6 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) {
|
||||||
/*pRspWrapper->vgHandle = pVg;*/
|
/*pRspWrapper->vgHandle = pVg;*/
|
||||||
/*pRspWrapper->topicHandle = pTopic;*/
|
/*pRspWrapper->topicHandle = pTopic;*/
|
||||||
taosWriteQitem(tmq->mqueue, pRspWrapper);
|
taosWriteQitem(tmq->mqueue, pRspWrapper);
|
||||||
tsem_post(&tmq->rspSem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
goto CREATE_MSG_FAIL;
|
goto CREATE_MSG_FAIL;
|
||||||
|
@ -1923,7 +1922,7 @@ TAOS_RES* tmq_consumer_poll(tmq_t* tmq, int64_t timeout) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (atomic_load_8(&tmq->status) == TMQ_CONSUMER_STATUS__RECOVER) {
|
while (atomic_load_8(&tmq->status) == TMQ_CONSUMER_STATUS__RECOVER) {
|
||||||
int32_t retryCnt = 0;
|
int32_t retryCnt = 0;
|
||||||
while (TSDB_CODE_MND_CONSUMER_NOT_READY == tmqAskEp(tmq, false)) {
|
while (TSDB_CODE_MND_CONSUMER_NOT_READY == tmqAskEp(tmq, false)) {
|
||||||
if (retryCnt++ > 40) {
|
if (retryCnt++ > 40) {
|
||||||
|
|
|
@ -233,6 +233,7 @@ static const SSysDbTableSchema vgroupsSchema[] = {
|
||||||
{.name = "v4_dnode", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
{.name = "v4_dnode", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||||
{.name = "v4_status", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
{.name = "v4_status", .bytes = 9 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
{.name = "cacheload", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
{.name = "cacheload", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||||
|
{.name = "cacheTables", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||||
{.name = "tsma", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
{.name = "tsma", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||||
// {.name = "compact_start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
// {.name = "compact_start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
||||||
};
|
};
|
||||||
|
|
|
@ -2044,8 +2044,8 @@ char* dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf)
|
||||||
if (len >= size - 1) return dumpBuf;
|
if (len >= size - 1) return dumpBuf;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
// len += snprintf(dumpBuf + len, size - len, " %15lf |", *(double*)var);
|
len += snprintf(dumpBuf + len, size - len, " %15f |", *(double*)var);
|
||||||
// if (len >= size - 1) return dumpBuf;
|
if (len >= size - 1) return dumpBuf;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
len += snprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
||||||
|
|
|
@ -154,6 +154,7 @@ char tsTagFilterCache = 0;
|
||||||
// positive value (in MB)
|
// positive value (in MB)
|
||||||
int32_t tsQueryBufferSize = -1;
|
int32_t tsQueryBufferSize = -1;
|
||||||
int64_t tsQueryBufferSizeBytes = -1;
|
int64_t tsQueryBufferSizeBytes = -1;
|
||||||
|
int32_t tsCacheLazyLoadThreshold = 500;
|
||||||
|
|
||||||
int32_t tsDiskCfgNum = 0;
|
int32_t tsDiskCfgNum = 0;
|
||||||
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
|
SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0};
|
||||||
|
@ -497,6 +498,8 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
|
|
||||||
if (cfgAddBool(pCfg, "disableStream", tsDisableStream, 0) != 0) return -1;
|
if (cfgAddBool(pCfg, "disableStream", tsDisableStream, 0) != 0) return -1;
|
||||||
|
|
||||||
|
if (cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, 0) != 0) return -1;
|
||||||
|
|
||||||
GRANT_CFG_ADD;
|
GRANT_CFG_ADD;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -824,6 +827,8 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
|
tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tsCacheLazyLoadThreshold = cfgGetItem(pCfg, "cacheLazyLoadThreshold")->i32;
|
||||||
|
|
||||||
tsDisableStream = cfgGetItem(pCfg, "disableStream")->bval;
|
tsDisableStream = cfgGetItem(pCfg, "disableStream")->bval;
|
||||||
|
|
||||||
GRANT_CFG_GET;
|
GRANT_CFG_GET;
|
||||||
|
|
|
@ -1070,7 +1070,8 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
||||||
if (tEncodeI64(&encoder, pload->totalStorage) < 0) return -1;
|
if (tEncodeI64(&encoder, pload->totalStorage) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, pload->compStorage) < 0) return -1;
|
if (tEncodeI64(&encoder, pload->compStorage) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, pload->pointsWritten) < 0) return -1;
|
if (tEncodeI64(&encoder, pload->pointsWritten) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, reserved) < 0) return -1;
|
if (tEncodeI32(&encoder, pload->numOfCachedTables) < 0) return -1;
|
||||||
|
if (tEncodeI32(&encoder, reserved) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, reserved) < 0) return -1;
|
if (tEncodeI64(&encoder, reserved) < 0) return -1;
|
||||||
if (tEncodeI64(&encoder, reserved) < 0) return -1;
|
if (tEncodeI64(&encoder, reserved) < 0) return -1;
|
||||||
}
|
}
|
||||||
|
@ -1148,7 +1149,8 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
|
||||||
if (tDecodeI64(&decoder, &vload.totalStorage) < 0) return -1;
|
if (tDecodeI64(&decoder, &vload.totalStorage) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &vload.compStorage) < 0) return -1;
|
if (tDecodeI64(&decoder, &vload.compStorage) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &vload.pointsWritten) < 0) return -1;
|
if (tDecodeI64(&decoder, &vload.pointsWritten) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &reserved) < 0) return -1;
|
if (tDecodeI32(&decoder, &vload.numOfCachedTables) < 0) return -1;
|
||||||
|
if (tDecodeI32(&decoder, (int32_t*)&reserved) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &reserved) < 0) return -1;
|
if (tDecodeI64(&decoder, &reserved) < 0) return -1;
|
||||||
if (tDecodeI64(&decoder, &reserved) < 0) return -1;
|
if (tDecodeI64(&decoder, &reserved) < 0) return -1;
|
||||||
if (taosArrayPush(pReq->pVloads, &vload) == NULL) {
|
if (taosArrayPush(pReq->pVloads, &vload) == NULL) {
|
||||||
|
@ -2219,6 +2221,10 @@ int32_t tSerializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
||||||
if (tEncodeI8(&encoder, pReq->cacheLast) < 0) return -1;
|
if (tEncodeI8(&encoder, pReq->cacheLast) < 0) return -1;
|
||||||
if (tEncodeI8(&encoder, pReq->replications) < 0) return -1;
|
if (tEncodeI8(&encoder, pReq->replications) < 0) return -1;
|
||||||
if (tEncodeI32(&encoder, pReq->sstTrigger) < 0) return -1;
|
if (tEncodeI32(&encoder, pReq->sstTrigger) < 0) return -1;
|
||||||
|
|
||||||
|
// 1st modification
|
||||||
|
if (tEncodeI32(&encoder, pReq->minRows) < 0) return -1;
|
||||||
|
|
||||||
tEndEncode(&encoder);
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
int32_t tlen = encoder.pos;
|
int32_t tlen = encoder.pos;
|
||||||
|
@ -2246,6 +2252,13 @@ int32_t tDeserializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
||||||
if (tDecodeI8(&decoder, &pReq->cacheLast) < 0) return -1;
|
if (tDecodeI8(&decoder, &pReq->cacheLast) < 0) return -1;
|
||||||
if (tDecodeI8(&decoder, &pReq->replications) < 0) return -1;
|
if (tDecodeI8(&decoder, &pReq->replications) < 0) return -1;
|
||||||
if (tDecodeI32(&decoder, &pReq->sstTrigger) < 0) return -1;
|
if (tDecodeI32(&decoder, &pReq->sstTrigger) < 0) return -1;
|
||||||
|
|
||||||
|
// 1st modification
|
||||||
|
if (!tDecodeIsEnd(&decoder)) {
|
||||||
|
if (tDecodeI32(&decoder, &pReq->minRows) < 0) return -1;
|
||||||
|
} else {
|
||||||
|
pReq->minRows = -1;
|
||||||
|
}
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
|
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
|
@ -4172,6 +4185,11 @@ int32_t tSerializeSAlterVnodeConfigReq(void *buf, int32_t bufLen, SAlterVnodeCon
|
||||||
for (int32_t i = 0; i < 8; ++i) {
|
for (int32_t i = 0; i < 8; ++i) {
|
||||||
if (tEncodeI64(&encoder, pReq->reserved[i]) < 0) return -1;
|
if (tEncodeI64(&encoder, pReq->reserved[i]) < 0) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1st modification
|
||||||
|
if (tEncodeI16(&encoder, pReq->sttTrigger) < 0) return -1;
|
||||||
|
if (tEncodeI32(&encoder, pReq->minRows) < 0) return -1;
|
||||||
|
|
||||||
tEndEncode(&encoder);
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
int32_t tlen = encoder.pos;
|
int32_t tlen = encoder.pos;
|
||||||
|
@ -4201,6 +4219,15 @@ int32_t tDeserializeSAlterVnodeConfigReq(void *buf, int32_t bufLen, SAlterVnodeC
|
||||||
if (tDecodeI64(&decoder, &pReq->reserved[i]) < 0) return -1;
|
if (tDecodeI64(&decoder, &pReq->reserved[i]) < 0) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1st modification
|
||||||
|
if (tDecodeIsEnd(&decoder)) {
|
||||||
|
pReq->sttTrigger = -1;
|
||||||
|
pReq->minRows = -1;
|
||||||
|
} else {
|
||||||
|
if (tDecodeI16(&decoder, &pReq->sttTrigger) < 0) return -1;
|
||||||
|
if (tDecodeI32(&decoder, &pReq->minRows) < 0) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -124,7 +124,7 @@ void vmCloseVnode(SVnodeMgmt *pMgmt, SVnodeObj *pVnode, bool commitAndRemoveWal)
|
||||||
vmFreeQueue(pMgmt, pVnode);
|
vmFreeQueue(pMgmt, pVnode);
|
||||||
|
|
||||||
if (commitAndRemoveWal) {
|
if (commitAndRemoveWal) {
|
||||||
dInfo("vgId:%d, commit data", pVnode->vgId);
|
dInfo("vgId:%d, commit data for vnode split", pVnode->vgId);
|
||||||
vnodeSyncCommit(pVnode->pImpl);
|
vnodeSyncCommit(pVnode->pImpl);
|
||||||
vnodeBegin(pVnode->pImpl);
|
vnodeBegin(pVnode->pImpl);
|
||||||
dInfo("vgId:%d, commit data finished", pVnode->vgId);
|
dInfo("vgId:%d, commit data finished", pVnode->vgId);
|
||||||
|
|
|
@ -359,6 +359,7 @@ typedef struct {
|
||||||
int8_t replica;
|
int8_t replica;
|
||||||
SVnodeGid vnodeGid[TSDB_MAX_REPLICA];
|
SVnodeGid vnodeGid[TSDB_MAX_REPLICA];
|
||||||
void* pTsma;
|
void* pTsma;
|
||||||
|
int32_t numOfCachedTables;
|
||||||
} SVgObj;
|
} SVgObj;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -543,7 +544,7 @@ void* tDecodeSMqConsumerObj(const void* buf, SMqConsumerObj* pConsumer
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t vgId;
|
int32_t vgId;
|
||||||
char* qmsg; //SubPlanToString
|
char* qmsg; // SubPlanToString
|
||||||
SEpSet epSet;
|
SEpSet epSet;
|
||||||
} SMqVgEp;
|
} SMqVgEp;
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,7 @@ typedef struct SMnode {
|
||||||
bool deploy;
|
bool deploy;
|
||||||
char *path;
|
char *path;
|
||||||
int64_t checkTime;
|
int64_t checkTime;
|
||||||
|
SyncIndex applied;
|
||||||
SSdb *pSdb;
|
SSdb *pSdb;
|
||||||
SArray *pSteps;
|
SArray *pSteps;
|
||||||
SQHandle *pQuery;
|
SQHandle *pQuery;
|
||||||
|
|
|
@ -725,6 +725,18 @@ static int32_t mndSetDbCfgFromAlterDbReq(SDbObj *pDb, SAlterDbReq *pAlter) {
|
||||||
terrno = 0;
|
terrno = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pAlter->sstTrigger > 0 && pAlter->sstTrigger != pDb->cfg.sstTrigger) {
|
||||||
|
pDb->cfg.sstTrigger = pAlter->sstTrigger;
|
||||||
|
pDb->vgVersion++;
|
||||||
|
terrno = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pAlter->minRows > 0 && pAlter->minRows != pDb->cfg.minRows) {
|
||||||
|
pDb->cfg.minRows = pAlter->minRows;
|
||||||
|
pDb->vgVersion++;
|
||||||
|
terrno = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -412,6 +412,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
||||||
if (pVgroup != NULL) {
|
if (pVgroup != NULL) {
|
||||||
if (pVload->syncState == TAOS_SYNC_STATE_LEADER) {
|
if (pVload->syncState == TAOS_SYNC_STATE_LEADER) {
|
||||||
pVgroup->cacheUsage = pVload->cacheUsage;
|
pVgroup->cacheUsage = pVload->cacheUsage;
|
||||||
|
pVgroup->numOfCachedTables = pVload->numOfCachedTables;
|
||||||
pVgroup->numOfTables = pVload->numOfTables;
|
pVgroup->numOfTables = pVload->numOfTables;
|
||||||
pVgroup->numOfTimeSeries = pVload->numOfTimeSeries;
|
pVgroup->numOfTimeSeries = pVload->numOfTimeSeries;
|
||||||
pVgroup->totalStorage = pVload->totalStorage;
|
pVgroup->totalStorage = pVload->totalStorage;
|
||||||
|
@ -440,7 +441,8 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
||||||
if (roleChanged) {
|
if (roleChanged) {
|
||||||
SDbObj *pDb = mndAcquireDb(pMnode, pVgroup->dbName);
|
SDbObj *pDb = mndAcquireDb(pMnode, pVgroup->dbName);
|
||||||
if (pDb != NULL && pDb->stateTs != curMs) {
|
if (pDb != NULL && pDb->stateTs != curMs) {
|
||||||
mInfo("db:%s, stateTs changed by status msg, old stateTs:%" PRId64 " new stateTs:%" PRId64, pDb->name, pDb->stateTs, curMs);
|
mInfo("db:%s, stateTs changed by status msg, old stateTs:%" PRId64 " new stateTs:%" PRId64, pDb->name,
|
||||||
|
pDb->stateTs, curMs);
|
||||||
pDb->stateTs = curMs;
|
pDb->stateTs = curMs;
|
||||||
}
|
}
|
||||||
mndReleaseDb(pMnode, pDb);
|
mndReleaseDb(pMnode, pDb);
|
||||||
|
|
|
@ -380,11 +380,13 @@ static int32_t mndInitSdb(SMnode *pMnode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndOpenSdb(SMnode *pMnode) {
|
static int32_t mndOpenSdb(SMnode *pMnode) {
|
||||||
|
int32_t code = 0;
|
||||||
if (!pMnode->deploy) {
|
if (!pMnode->deploy) {
|
||||||
return sdbReadFile(pMnode->pSdb);
|
code = sdbReadFile(pMnode->pSdb);
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomic_store_64(&pMnode->applied, pMnode->pSdb->commitIndex);
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mndCleanupSdb(SMnode *pMnode) {
|
static void mndCleanupSdb(SMnode *pMnode) {
|
||||||
|
|
|
@ -129,6 +129,14 @@ int32_t mndProcessWriteMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta
|
||||||
|
|
||||||
int32_t mndSyncCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
int32_t mndSyncCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
pMsg->info.conn.applyIndex = pMeta->index;
|
||||||
|
pMsg->info.conn.applyTerm = pMeta->term;
|
||||||
|
|
||||||
|
if (pMsg->code == 0) {
|
||||||
|
SMnode *pMnode = pFsm->data;
|
||||||
|
atomic_store_64(&pMnode->applied, pMsg->info.conn.applyIndex);
|
||||||
|
}
|
||||||
|
|
||||||
if (!syncUtilUserCommit(pMsg->msgType)) {
|
if (!syncUtilUserCommit(pMsg->msgType)) {
|
||||||
goto _out;
|
goto _out;
|
||||||
}
|
}
|
||||||
|
@ -140,6 +148,11 @@ _out:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SyncIndex mndSyncAppliedIndex(const SSyncFSM *pFSM) {
|
||||||
|
SMnode *pMnode = pFSM->data;
|
||||||
|
return atomic_load_64(&pMnode->applied);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t mndSyncGetSnapshot(const SSyncFSM *pFsm, SSnapshot *pSnapshot, void *pReaderParam, void **ppReader) {
|
int32_t mndSyncGetSnapshot(const SSyncFSM *pFsm, SSnapshot *pSnapshot, void *pReaderParam, void **ppReader) {
|
||||||
mInfo("start to read snapshot from sdb in atomic way");
|
mInfo("start to read snapshot from sdb in atomic way");
|
||||||
SMnode *pMnode = pFsm->data;
|
SMnode *pMnode = pFsm->data;
|
||||||
|
@ -153,7 +166,7 @@ static void mndSyncGetSnapshotInfo(const SSyncFSM *pFsm, SSnapshot *pSnapshot) {
|
||||||
sdbGetCommitInfo(pMnode->pSdb, &pSnapshot->lastApplyIndex, &pSnapshot->lastApplyTerm, &pSnapshot->lastConfigIndex);
|
sdbGetCommitInfo(pMnode->pSdb, &pSnapshot->lastApplyIndex, &pSnapshot->lastApplyTerm, &pSnapshot->lastConfigIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mndRestoreFinish(const SSyncFSM *pFsm) {
|
void mndRestoreFinish(const SSyncFSM *pFsm, const SyncIndex commitIdx) {
|
||||||
SMnode *pMnode = pFsm->data;
|
SMnode *pMnode = pFsm->data;
|
||||||
|
|
||||||
if (!pMnode->deploy) {
|
if (!pMnode->deploy) {
|
||||||
|
@ -167,6 +180,8 @@ void mndRestoreFinish(const SSyncFSM *pFsm) {
|
||||||
} else {
|
} else {
|
||||||
mInfo("vgId:1, sync restore finished");
|
mInfo("vgId:1, sync restore finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT(commitIdx == mndSyncAppliedIndex(pFsm));
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t mndSnapshotStartRead(const SSyncFSM *pFsm, void *pParam, void **ppReader) {
|
int32_t mndSnapshotStartRead(const SSyncFSM *pFsm, void *pParam, void **ppReader) {
|
||||||
|
@ -253,6 +268,7 @@ SSyncFSM *mndSyncMakeFsm(SMnode *pMnode) {
|
||||||
SSyncFSM *pFsm = taosMemoryCalloc(1, sizeof(SSyncFSM));
|
SSyncFSM *pFsm = taosMemoryCalloc(1, sizeof(SSyncFSM));
|
||||||
pFsm->data = pMnode;
|
pFsm->data = pMnode;
|
||||||
pFsm->FpCommitCb = mndSyncCommitMsg;
|
pFsm->FpCommitCb = mndSyncCommitMsg;
|
||||||
|
pFsm->FpAppliedIndexCb = mndSyncAppliedIndex;
|
||||||
pFsm->FpPreCommitCb = NULL;
|
pFsm->FpPreCommitCb = NULL;
|
||||||
pFsm->FpRollBackCb = NULL;
|
pFsm->FpRollBackCb = NULL;
|
||||||
pFsm->FpRestoreFinishCb = mndRestoreFinish;
|
pFsm->FpRestoreFinishCb = mndRestoreFinish;
|
||||||
|
|
|
@ -337,7 +337,11 @@ SUserObj *mndAcquireUser(SMnode *pMnode, const char *userName) {
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
SUserObj *pUser = sdbAcquire(pSdb, SDB_USER, userName);
|
SUserObj *pUser = sdbAcquire(pSdb, SDB_USER, userName);
|
||||||
if (pUser == NULL) {
|
if (pUser == NULL) {
|
||||||
terrno = TSDB_CODE_MND_USER_NOT_EXIST;
|
if (terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) {
|
||||||
|
terrno = TSDB_CODE_MND_USER_NOT_EXIST;
|
||||||
|
} else {
|
||||||
|
terrno = TSDB_CODE_MND_USER_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return pUser;
|
return pUser;
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,6 +319,8 @@ static void *mndBuildAlterVnodeConfigReq(SMnode *pMnode, SDbObj *pDb, SVgObj *pV
|
||||||
alterReq.walLevel = pDb->cfg.walLevel;
|
alterReq.walLevel = pDb->cfg.walLevel;
|
||||||
alterReq.strict = pDb->cfg.strict;
|
alterReq.strict = pDb->cfg.strict;
|
||||||
alterReq.cacheLast = pDb->cfg.cacheLast;
|
alterReq.cacheLast = pDb->cfg.cacheLast;
|
||||||
|
alterReq.sttTrigger = pDb->cfg.sstTrigger;
|
||||||
|
alterReq.minRows = pDb->cfg.minRows;
|
||||||
|
|
||||||
mInfo("vgId:%d, build alter vnode config req", pVgroup->vgId);
|
mInfo("vgId:%d, build alter vnode config req", pVgroup->vgId);
|
||||||
int32_t contLen = tSerializeSAlterVnodeConfigReq(NULL, 0, &alterReq);
|
int32_t contLen = tSerializeSAlterVnodeConfigReq(NULL, 0, &alterReq);
|
||||||
|
@ -801,6 +803,9 @@ static int32_t mndRetrieveVgroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p
|
||||||
int32_t cacheUsage = (int32_t)pVgroup->cacheUsage;
|
int32_t cacheUsage = (int32_t)pVgroup->cacheUsage;
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&cacheUsage, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)&cacheUsage, false);
|
||||||
|
|
||||||
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
colDataSetVal(pColInfo, numOfRows, (const char *)&pVgroup->numOfCachedTables, false);
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)&pVgroup->isTsma, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)&pVgroup->isTsma, false);
|
||||||
|
|
||||||
|
|
|
@ -198,9 +198,10 @@ int32_t tsdbRetrieveCacheRows(void *pReader, SSDataBlock *pResBlock, const int32
|
||||||
void *tsdbCacherowsReaderClose(void *pReader);
|
void *tsdbCacherowsReaderClose(void *pReader);
|
||||||
int32_t tsdbGetTableSchema(SVnode *pVnode, int64_t uid, STSchema **pSchema, int64_t *suid);
|
int32_t tsdbGetTableSchema(SVnode *pVnode, int64_t uid, STSchema **pSchema, int64_t *suid);
|
||||||
|
|
||||||
void tsdbCacheSetCapacity(SVnode *pVnode, size_t capacity);
|
void tsdbCacheSetCapacity(SVnode *pVnode, size_t capacity);
|
||||||
size_t tsdbCacheGetCapacity(SVnode *pVnode);
|
size_t tsdbCacheGetCapacity(SVnode *pVnode);
|
||||||
size_t tsdbCacheGetUsage(SVnode *pVnode);
|
size_t tsdbCacheGetUsage(SVnode *pVnode);
|
||||||
|
int32_t tsdbCacheGetElems(SVnode *pVnode);
|
||||||
|
|
||||||
// tq
|
// tq
|
||||||
typedef struct SMetaTableInfo {
|
typedef struct SMetaTableInfo {
|
||||||
|
@ -264,7 +265,7 @@ int32_t tqReaderSetTbUidList(STqReader *pReader, const SArray *tbUidList);
|
||||||
int32_t tqReaderAddTbUidList(STqReader *pReader, const SArray *tbUidList);
|
int32_t tqReaderAddTbUidList(STqReader *pReader, const SArray *tbUidList);
|
||||||
int32_t tqReaderRemoveTbUidList(STqReader *pReader, const SArray *tbUidList);
|
int32_t tqReaderRemoveTbUidList(STqReader *pReader, const SArray *tbUidList);
|
||||||
|
|
||||||
int32_t tqSeekVer(STqReader *pReader, int64_t ver, const char* id);
|
int32_t tqSeekVer(STqReader *pReader, int64_t ver, const char *id);
|
||||||
int32_t tqNextBlock(STqReader *pReader, SFetchRet *ret);
|
int32_t tqNextBlock(STqReader *pReader, SFetchRet *ret);
|
||||||
|
|
||||||
int32_t tqReaderSetSubmitReq2(STqReader *pReader, void *msgStr, int32_t msgLen, int64_t ver);
|
int32_t tqReaderSetSubmitReq2(STqReader *pReader, void *msgStr, int32_t msgLen, int64_t ver);
|
||||||
|
|
|
@ -706,6 +706,7 @@ typedef struct SMergeTree {
|
||||||
bool destroyLoadInfo;
|
bool destroyLoadInfo;
|
||||||
SSttBlockLoadInfo *pLoadInfo;
|
SSttBlockLoadInfo *pLoadInfo;
|
||||||
const char *idStr;
|
const char *idStr;
|
||||||
|
bool ignoreEarlierTs;
|
||||||
} SMergeTree;
|
} SMergeTree;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -748,9 +749,10 @@ struct SDiskDataBuilder {
|
||||||
|
|
||||||
int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFReader, uint64_t suid, uint64_t uid,
|
int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFReader, uint64_t suid, uint64_t uid,
|
||||||
STimeWindow *pTimeWindow, SVersionRange *pVerRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
STimeWindow *pTimeWindow, SVersionRange *pVerRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
||||||
bool destroyLoadInfo, const char *idStr);
|
bool destroyLoadInfo, const char *idStr, bool strictTimeRange);
|
||||||
void tMergeTreeAddIter(SMergeTree *pMTree, SLDataIter *pIter);
|
void tMergeTreeAddIter(SMergeTree *pMTree, SLDataIter *pIter);
|
||||||
bool tMergeTreeNext(SMergeTree *pMTree);
|
bool tMergeTreeNext(SMergeTree *pMTree);
|
||||||
|
bool tMergeTreeIgnoreEarlierTs(SMergeTree *pMTree);
|
||||||
TSDBROW tMergeTreeGetRow(SMergeTree *pMTree);
|
TSDBROW tMergeTreeGetRow(SMergeTree *pMTree);
|
||||||
void tMergeTreeClose(SMergeTree *pMTree);
|
void tMergeTreeClose(SMergeTree *pMTree);
|
||||||
|
|
||||||
|
@ -780,6 +782,7 @@ typedef struct SCacheRowsReader {
|
||||||
SDataFReader *pDataFReader;
|
SDataFReader *pDataFReader;
|
||||||
SDataFReader *pDataFReaderLast;
|
SDataFReader *pDataFReaderLast;
|
||||||
const char *idstr;
|
const char *idstr;
|
||||||
|
int64_t lastTs;
|
||||||
} SCacheRowsReader;
|
} SCacheRowsReader;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -169,18 +169,6 @@ int32_t tqSendMetaPollRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq,
|
||||||
int32_t tqPushDataRsp(STQ* pTq, STqPushEntry* pPushEntry) {
|
int32_t tqPushDataRsp(STQ* pTq, STqPushEntry* pPushEntry) {
|
||||||
SMqDataRsp* pRsp = &pPushEntry->dataRsp;
|
SMqDataRsp* pRsp = &pPushEntry->dataRsp;
|
||||||
|
|
||||||
#if 0
|
|
||||||
A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
|
|
||||||
A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
|
|
||||||
|
|
||||||
A(!pRsp->withSchema);
|
|
||||||
A(taosArrayGetSize(pRsp->blockSchema) == 0);
|
|
||||||
|
|
||||||
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
|
|
||||||
A(pRsp->rspOffset.version > pRsp->reqOffset.version);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
tEncodeSize(tEncodeSMqDataRsp, pRsp, len, code);
|
tEncodeSize(tEncodeSMqDataRsp, pRsp, len, code);
|
||||||
|
@ -224,22 +212,6 @@ int32_t tqPushDataRsp(STQ* pTq, STqPushEntry* pPushEntry) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tqSendDataRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const SMqDataRsp* pRsp) {
|
int32_t tqSendDataRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const SMqDataRsp* pRsp) {
|
||||||
#if 0
|
|
||||||
A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
|
|
||||||
A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
|
|
||||||
|
|
||||||
A(!pRsp->withSchema);
|
|
||||||
A(taosArrayGetSize(pRsp->blockSchema) == 0);
|
|
||||||
|
|
||||||
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
|
|
||||||
if (pRsp->blockNum > 0) {
|
|
||||||
A(pRsp->rspOffset.version > pRsp->reqOffset.version);
|
|
||||||
} else {
|
|
||||||
A(pRsp->rspOffset.version >= pRsp->reqOffset.version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
tEncodeSize(tEncodeSMqDataRsp, pRsp, len, code);
|
tEncodeSize(tEncodeSMqDataRsp, pRsp, len, code);
|
||||||
|
@ -282,25 +254,6 @@ int32_t tqSendDataRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, con
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tqSendTaosxRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const STaosxRsp* pRsp) {
|
int32_t tqSendTaosxRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const STaosxRsp* pRsp) {
|
||||||
#if 0
|
|
||||||
A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
|
|
||||||
A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
|
|
||||||
|
|
||||||
if (pRsp->withSchema) {
|
|
||||||
A(taosArrayGetSize(pRsp->blockSchema) == pRsp->blockNum);
|
|
||||||
} else {
|
|
||||||
A(taosArrayGetSize(pRsp->blockSchema) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
|
|
||||||
if (pRsp->blockNum > 0) {
|
|
||||||
A(pRsp->rspOffset.version > pRsp->reqOffset.version);
|
|
||||||
} else {
|
|
||||||
A(pRsp->rspOffset.version >= pRsp->reqOffset.version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
tEncodeSize(tEncodeSTaosxRsp, pRsp, len, code);
|
tEncodeSize(tEncodeSTaosxRsp, pRsp, len, code);
|
||||||
|
@ -429,18 +382,6 @@ static int32_t tqInitDataRsp(SMqDataRsp* pRsp, const SMqPollReq* pReq, int8_t su
|
||||||
}
|
}
|
||||||
|
|
||||||
pRsp->withTbName = 0;
|
pRsp->withTbName = 0;
|
||||||
#if 0
|
|
||||||
pRsp->withTbName = pReq->withTbName;
|
|
||||||
if (pRsp->withTbName) {
|
|
||||||
pRsp->blockTbName = taosArrayInit(0, sizeof(void*));
|
|
||||||
if (pRsp->blockTbName == NULL) {
|
|
||||||
// TODO free
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*A(subType == TOPIC_SUB_TYPE__COLUMN);*/
|
|
||||||
pRsp->withSchema = false;
|
pRsp->withSchema = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -983,12 +924,18 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
|
||||||
pTask->tbSink.vnode = pTq->pVnode;
|
pTask->tbSink.vnode = pTq->pVnode;
|
||||||
pTask->tbSink.tbSinkFunc = tqSinkToTablePipeline2;
|
pTask->tbSink.tbSinkFunc = tqSinkToTablePipeline2;
|
||||||
|
|
||||||
/*A(pTask->tbSink.pSchemaWrapper);*/
|
int32_t version = 1;
|
||||||
/*A(pTask->tbSink.pSchemaWrapper->pSchema);*/
|
SMetaInfo info = {0};
|
||||||
|
int32_t code = metaGetInfo(pTq->pVnode->pMeta, pTask->tbSink.stbUid, &info, NULL);
|
||||||
|
if (code == TSDB_CODE_SUCCESS) {
|
||||||
|
version = info.skmVer;
|
||||||
|
}
|
||||||
|
|
||||||
pTask->tbSink.pTSchema =
|
pTask->tbSink.pTSchema =
|
||||||
tBuildTSchema(pTask->tbSink.pSchemaWrapper->pSchema, pTask->tbSink.pSchemaWrapper->nCols, 1);
|
tBuildTSchema(pTask->tbSink.pSchemaWrapper->pSchema, pTask->tbSink.pSchemaWrapper->nCols, version);
|
||||||
ASSERT(pTask->tbSink.pTSchema);
|
if(pTask->tbSink.pTSchema == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
streamSetupTrigger(pTask);
|
streamSetupTrigger(pTask);
|
||||||
|
|
|
@ -113,7 +113,10 @@ int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffs
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(!(pRsp->withTbName || pRsp->withSchema));
|
if(pRsp->withTbName || pRsp->withSchema){
|
||||||
|
tqError("get column should not with meta:%d,%d", pRsp->withTbName, pRsp->withSchema);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,7 +265,9 @@ int tqPushMsg(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_t ver)
|
||||||
.msgLen = len,
|
.msgLen = len,
|
||||||
.ver = ver,
|
.ver = ver,
|
||||||
};
|
};
|
||||||
qStreamSetScanMemData(task, submit);
|
if(qStreamSetScanMemData(task, submit) != 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// here start to scan submit block to extract the subscribed data
|
// here start to scan submit block to extract the subscribed data
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
|
@ -707,7 +707,10 @@ int32_t tqRetrieveDataBlock2(SSDataBlock* pBlock, STqReader* pReader, SSubmitTbD
|
||||||
sourceIdx++;
|
sourceIdx++;
|
||||||
targetIdx++;
|
targetIdx++;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
for (int32_t i = 0; i < pCol->nVal; i++) {
|
||||||
|
colDataSetNULL(pColData, i);
|
||||||
|
}
|
||||||
|
targetIdx++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -749,7 +752,8 @@ int32_t tqRetrieveDataBlock2(SSDataBlock* pBlock, STqReader* pReader, SSubmitTbD
|
||||||
sourceIdx++;
|
sourceIdx++;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
colDataSetNULL(pColData, i);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -506,6 +506,11 @@ static int32_t getTableDelData(STbData *pMem, STbData *pIMem, SDelFReader *pDelR
|
||||||
SArray *aDelData) {
|
SArray *aDelData) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
|
if (pDelIdx) {
|
||||||
|
code = getTableDelDataFromDelIdx(pDelReader, pDelIdx, aDelData);
|
||||||
|
if (code) goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
if (pMem) {
|
if (pMem) {
|
||||||
code = getTableDelDataFromTbData(pMem, aDelData);
|
code = getTableDelDataFromTbData(pMem, aDelData);
|
||||||
if (code) goto _err;
|
if (code) goto _err;
|
||||||
|
@ -516,11 +521,6 @@ static int32_t getTableDelData(STbData *pMem, STbData *pIMem, SDelFReader *pDelR
|
||||||
if (code) goto _err;
|
if (code) goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDelIdx) {
|
|
||||||
code = getTableDelDataFromDelIdx(pDelReader, pDelIdx, aDelData);
|
|
||||||
if (code) goto _err;
|
|
||||||
}
|
|
||||||
|
|
||||||
_err:
|
_err:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -593,9 +593,10 @@ typedef struct {
|
||||||
SMergeTree mergeTree;
|
SMergeTree mergeTree;
|
||||||
SMergeTree *pMergeTree;
|
SMergeTree *pMergeTree;
|
||||||
SSttBlockLoadInfo *pLoadInfo;
|
SSttBlockLoadInfo *pLoadInfo;
|
||||||
|
int64_t lastTs;
|
||||||
} SFSLastNextRowIter;
|
} SFSLastNextRowIter;
|
||||||
|
|
||||||
static int32_t getNextRowFromFSLast(void *iter, TSDBROW **ppRow) {
|
static int32_t getNextRowFromFSLast(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlierTs) {
|
||||||
SFSLastNextRowIter *state = (SFSLastNextRowIter *)iter;
|
SFSLastNextRowIter *state = (SFSLastNextRowIter *)iter;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
|
@ -631,25 +632,39 @@ static int32_t getNextRowFromFSLast(void *iter, TSDBROW **ppRow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tMergeTreeOpen(&state->mergeTree, 1, *state->pDataFReader, state->suid, state->uid,
|
tMergeTreeOpen(&state->mergeTree, 1, *state->pDataFReader, state->suid, state->uid,
|
||||||
&(STimeWindow){.skey = TSKEY_MIN, .ekey = TSKEY_MAX},
|
&(STimeWindow){.skey = state->lastTs, .ekey = TSKEY_MAX},
|
||||||
&(SVersionRange){.minVer = 0, .maxVer = UINT64_MAX}, state->pLoadInfo, false, NULL);
|
&(SVersionRange){.minVer = 0, .maxVer = UINT64_MAX}, state->pLoadInfo, false, NULL, true);
|
||||||
state->pMergeTree = &state->mergeTree;
|
state->pMergeTree = &state->mergeTree;
|
||||||
bool hasVal = tMergeTreeNext(&state->mergeTree);
|
bool hasVal = tMergeTreeNext(&state->mergeTree);
|
||||||
if (!hasVal) {
|
if (!hasVal) {
|
||||||
|
if (tMergeTreeIgnoreEarlierTs(&state->mergeTree)) {
|
||||||
|
*pIgnoreEarlierTs = true;
|
||||||
|
*ppRow = NULL;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
state->state = SFSLASTNEXTROW_FILESET;
|
state->state = SFSLASTNEXTROW_FILESET;
|
||||||
goto _next_fileset;
|
goto _next_fileset;
|
||||||
}
|
}
|
||||||
state->state = SFSLASTNEXTROW_BLOCKROW;
|
state->state = SFSLASTNEXTROW_BLOCKROW;
|
||||||
}
|
}
|
||||||
case SFSLASTNEXTROW_BLOCKROW:
|
case SFSLASTNEXTROW_BLOCKROW: {
|
||||||
|
bool hasVal = false;
|
||||||
state->row = tMergeTreeGetRow(&state->mergeTree);
|
state->row = tMergeTreeGetRow(&state->mergeTree);
|
||||||
*ppRow = &state->row;
|
*ppRow = &state->row;
|
||||||
bool hasVal = tMergeTreeNext(&state->mergeTree);
|
hasVal = tMergeTreeNext(&state->mergeTree);
|
||||||
|
if (TSDBROW_TS(&state->row) <= state->lastTs) {
|
||||||
|
*pIgnoreEarlierTs = true;
|
||||||
|
*ppRow = NULL;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pIgnoreEarlierTs = false;
|
||||||
if (!hasVal) {
|
if (!hasVal) {
|
||||||
state->state = SFSLASTNEXTROW_FILESET;
|
state->state = SFSLASTNEXTROW_FILESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
break;
|
break;
|
||||||
|
@ -722,9 +737,10 @@ typedef struct SFSNextRowIter {
|
||||||
int32_t iRow;
|
int32_t iRow;
|
||||||
TSDBROW row;
|
TSDBROW row;
|
||||||
SSttBlockLoadInfo *pLoadInfo;
|
SSttBlockLoadInfo *pLoadInfo;
|
||||||
|
int64_t lastTs;
|
||||||
} SFSNextRowIter;
|
} SFSNextRowIter;
|
||||||
|
|
||||||
static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow) {
|
static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlierTs) {
|
||||||
SFSNextRowIter *state = (SFSNextRowIter *)iter;
|
SFSNextRowIter *state = (SFSNextRowIter *)iter;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
|
@ -816,12 +832,20 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow) {
|
||||||
SDataBlk block = {0};
|
SDataBlk block = {0};
|
||||||
|
|
||||||
tDataBlkReset(&block);
|
tDataBlkReset(&block);
|
||||||
// tBlockDataReset(&state->blockData);
|
|
||||||
tBlockDataReset(state->pBlockData);
|
tBlockDataReset(state->pBlockData);
|
||||||
|
|
||||||
tMapDataGetItemByIdx(&state->blockMap, state->iBlock, &block, tGetDataBlk);
|
tMapDataGetItemByIdx(&state->blockMap, state->iBlock, &block, tGetDataBlk);
|
||||||
/* code = tsdbReadBlockData(state->pDataFReader, &state->blockIdx, &block, &state->blockData, NULL, NULL);
|
if (block.maxKey.ts <= state->lastTs) {
|
||||||
*/
|
*pIgnoreEarlierTs = true;
|
||||||
|
if (state->pBlockData) {
|
||||||
|
tBlockDataDestroy(state->pBlockData);
|
||||||
|
state->pBlockData = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ppRow = NULL;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
*pIgnoreEarlierTs = false;
|
||||||
tBlockDataReset(state->pBlockData);
|
tBlockDataReset(state->pBlockData);
|
||||||
TABLEID tid = {.suid = state->suid, .uid = state->uid};
|
TABLEID tid = {.suid = state->suid, .uid = state->uid};
|
||||||
code = tBlockDataInit(state->pBlockData, &tid, state->pTSchema, NULL, 0);
|
code = tBlockDataInit(state->pBlockData, &tid, state->pTSchema, NULL, 0);
|
||||||
|
@ -931,16 +955,23 @@ typedef struct SMemNextRowIter {
|
||||||
SMEMNEXTROWSTATES state;
|
SMEMNEXTROWSTATES state;
|
||||||
STbData *pMem; // [input]
|
STbData *pMem; // [input]
|
||||||
STbDataIter iter; // mem buffer skip list iterator
|
STbDataIter iter; // mem buffer skip list iterator
|
||||||
|
int64_t lastTs;
|
||||||
// bool iterOpened;
|
// bool iterOpened;
|
||||||
// TSDBROW *curRow;
|
// TSDBROW *curRow;
|
||||||
} SMemNextRowIter;
|
} SMemNextRowIter;
|
||||||
|
|
||||||
static int32_t getNextRowFromMem(void *iter, TSDBROW **ppRow) {
|
static int32_t getNextRowFromMem(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlierTs) {
|
||||||
SMemNextRowIter *state = (SMemNextRowIter *)iter;
|
SMemNextRowIter *state = (SMemNextRowIter *)iter;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
*pIgnoreEarlierTs = false;
|
||||||
switch (state->state) {
|
switch (state->state) {
|
||||||
case SMEMNEXTROW_ENTER: {
|
case SMEMNEXTROW_ENTER: {
|
||||||
if (state->pMem != NULL) {
|
if (state->pMem != NULL) {
|
||||||
|
if (state->pMem->maxKey <= state->lastTs) {
|
||||||
|
*ppRow = NULL;
|
||||||
|
*pIgnoreEarlierTs = true;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
tsdbTbDataIterOpen(state->pMem, NULL, 1, &state->iter);
|
tsdbTbDataIterOpen(state->pMem, NULL, 1, &state->iter);
|
||||||
|
|
||||||
TSDBROW *pMemRow = tsdbTbDataIterGet(&state->iter);
|
TSDBROW *pMemRow = tsdbTbDataIterGet(&state->iter);
|
||||||
|
@ -1041,13 +1072,14 @@ static bool tsdbKeyDeleted(TSDBKEY *key, SArray *pSkyline, int64_t *iSkyline) {
|
||||||
return deleted;
|
return deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef int32_t (*_next_row_fn_t)(void *iter, TSDBROW **ppRow);
|
typedef int32_t (*_next_row_fn_t)(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlierTs);
|
||||||
typedef int32_t (*_next_row_clear_fn_t)(void *iter);
|
typedef int32_t (*_next_row_clear_fn_t)(void *iter);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
TSDBROW *pRow;
|
TSDBROW *pRow;
|
||||||
bool stop;
|
bool stop;
|
||||||
bool next;
|
bool next;
|
||||||
|
bool ignoreEarlierTs;
|
||||||
void *iter;
|
void *iter;
|
||||||
_next_row_fn_t nextRowFn;
|
_next_row_fn_t nextRowFn;
|
||||||
_next_row_clear_fn_t nextRowClearFn;
|
_next_row_clear_fn_t nextRowClearFn;
|
||||||
|
@ -1070,7 +1102,7 @@ typedef struct {
|
||||||
|
|
||||||
static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTsdb, STSchema *pTSchema, tb_uid_t suid,
|
static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTsdb, STSchema *pTSchema, tb_uid_t suid,
|
||||||
SSttBlockLoadInfo *pLoadInfo, STsdbReadSnap *pReadSnap, SDataFReader **pDataFReader,
|
SSttBlockLoadInfo *pLoadInfo, STsdbReadSnap *pReadSnap, SDataFReader **pDataFReader,
|
||||||
SDataFReader **pDataFReaderLast) {
|
SDataFReader **pDataFReaderLast, int64_t lastTs) {
|
||||||
int code = 0;
|
int code = 0;
|
||||||
|
|
||||||
STbData *pMem = NULL;
|
STbData *pMem = NULL;
|
||||||
|
@ -1131,6 +1163,7 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs
|
||||||
pIter->fsLastState.uid = uid;
|
pIter->fsLastState.uid = uid;
|
||||||
pIter->fsLastState.pLoadInfo = pLoadInfo;
|
pIter->fsLastState.pLoadInfo = pLoadInfo;
|
||||||
pIter->fsLastState.pDataFReader = pDataFReaderLast;
|
pIter->fsLastState.pDataFReader = pDataFReaderLast;
|
||||||
|
pIter->fsLastState.lastTs = lastTs;
|
||||||
|
|
||||||
pIter->fsState.state = SFSNEXTROW_FS;
|
pIter->fsState.state = SFSNEXTROW_FS;
|
||||||
pIter->fsState.pTsdb = pTsdb;
|
pIter->fsState.pTsdb = pTsdb;
|
||||||
|
@ -1141,17 +1174,19 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs
|
||||||
pIter->fsState.uid = uid;
|
pIter->fsState.uid = uid;
|
||||||
pIter->fsState.pLoadInfo = pLoadInfo;
|
pIter->fsState.pLoadInfo = pLoadInfo;
|
||||||
pIter->fsState.pDataFReader = pDataFReader;
|
pIter->fsState.pDataFReader = pDataFReader;
|
||||||
|
pIter->fsState.lastTs = lastTs;
|
||||||
|
|
||||||
pIter->input[0] = (TsdbNextRowState){&pIter->memRow, true, false, &pIter->memState, getNextRowFromMem, NULL};
|
pIter->input[0] = (TsdbNextRowState){&pIter->memRow, true, false, false, &pIter->memState, getNextRowFromMem, NULL};
|
||||||
pIter->input[1] = (TsdbNextRowState){&pIter->imemRow, true, false, &pIter->imemState, getNextRowFromMem, NULL};
|
pIter->input[1] = (TsdbNextRowState){&pIter->imemRow, true, false, false, &pIter->imemState, getNextRowFromMem, NULL};
|
||||||
pIter->input[2] = (TsdbNextRowState){&pIter->fsLastRow, false, true, &pIter->fsLastState, getNextRowFromFSLast,
|
pIter->input[2] = (TsdbNextRowState){
|
||||||
clearNextRowFromFSLast};
|
&pIter->fsLastRow, false, true, false, &pIter->fsLastState, getNextRowFromFSLast, clearNextRowFromFSLast};
|
||||||
pIter->input[3] =
|
pIter->input[3] =
|
||||||
(TsdbNextRowState){&pIter->fsRow, false, true, &pIter->fsState, getNextRowFromFS, clearNextRowFromFS};
|
(TsdbNextRowState){&pIter->fsRow, false, true, false, &pIter->fsState, getNextRowFromFS, clearNextRowFromFS};
|
||||||
|
|
||||||
if (pMem) {
|
if (pMem) {
|
||||||
pIter->memState.pMem = pMem;
|
pIter->memState.pMem = pMem;
|
||||||
pIter->memState.state = SMEMNEXTROW_ENTER;
|
pIter->memState.state = SMEMNEXTROW_ENTER;
|
||||||
|
pIter->memState.lastTs = lastTs;
|
||||||
pIter->input[0].stop = false;
|
pIter->input[0].stop = false;
|
||||||
pIter->input[0].next = true;
|
pIter->input[0].next = true;
|
||||||
}
|
}
|
||||||
|
@ -1159,6 +1194,7 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs
|
||||||
if (pIMem) {
|
if (pIMem) {
|
||||||
pIter->imemState.pMem = pIMem;
|
pIter->imemState.pMem = pIMem;
|
||||||
pIter->imemState.state = SMEMNEXTROW_ENTER;
|
pIter->imemState.state = SMEMNEXTROW_ENTER;
|
||||||
|
pIter->imemState.lastTs = lastTs;
|
||||||
pIter->input[1].stop = false;
|
pIter->input[1].stop = false;
|
||||||
pIter->input[1].next = true;
|
pIter->input[1].next = true;
|
||||||
}
|
}
|
||||||
|
@ -1186,12 +1222,12 @@ _err:
|
||||||
}
|
}
|
||||||
|
|
||||||
// iterate next row non deleted backward ts, version (from high to low)
|
// iterate next row non deleted backward ts, version (from high to low)
|
||||||
static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow) {
|
static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow, bool *pIgnoreEarlierTs) {
|
||||||
int code = 0;
|
int code = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
if (pIter->input[i].next && !pIter->input[i].stop) {
|
if (pIter->input[i].next && !pIter->input[i].stop) {
|
||||||
code = pIter->input[i].nextRowFn(pIter->input[i].iter, &pIter->input[i].pRow);
|
code = pIter->input[i].nextRowFn(pIter->input[i].iter, &pIter->input[i].pRow, &pIter->input[i].ignoreEarlierTs);
|
||||||
if (code) goto _err;
|
if (code) goto _err;
|
||||||
|
|
||||||
if (pIter->input[i].pRow == NULL) {
|
if (pIter->input[i].pRow == NULL) {
|
||||||
|
@ -1203,6 +1239,8 @@ static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow) {
|
||||||
|
|
||||||
if (pIter->input[0].stop && pIter->input[1].stop && pIter->input[2].stop && pIter->input[3].stop) {
|
if (pIter->input[0].stop && pIter->input[1].stop && pIter->input[2].stop && pIter->input[3].stop) {
|
||||||
*ppRow = NULL;
|
*ppRow = NULL;
|
||||||
|
*pIgnoreEarlierTs = (pIter->input[0].ignoreEarlierTs || pIter->input[1].ignoreEarlierTs ||
|
||||||
|
pIter->input[2].ignoreEarlierTs || pIter->input[3].ignoreEarlierTs);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1303,6 +1341,7 @@ static int32_t mergeLastRow(tb_uid_t uid, STsdb *pTsdb, bool *dup, SArray **ppCo
|
||||||
int16_t noneCol = 0;
|
int16_t noneCol = 0;
|
||||||
bool setNoneCol = false;
|
bool setNoneCol = false;
|
||||||
bool hasRow = false;
|
bool hasRow = false;
|
||||||
|
bool ignoreEarlierTs = false;
|
||||||
SArray *pColArray = NULL;
|
SArray *pColArray = NULL;
|
||||||
SColVal *pColVal = &(SColVal){0};
|
SColVal *pColVal = &(SColVal){0};
|
||||||
|
|
||||||
|
@ -1315,11 +1354,11 @@ static int32_t mergeLastRow(tb_uid_t uid, STsdb *pTsdb, bool *dup, SArray **ppCo
|
||||||
|
|
||||||
CacheNextRowIter iter = {0};
|
CacheNextRowIter iter = {0};
|
||||||
nextRowIterOpen(&iter, uid, pTsdb, pTSchema, pr->suid, pr->pLoadInfo, pr->pReadSnap, &pr->pDataFReader,
|
nextRowIterOpen(&iter, uid, pTsdb, pTSchema, pr->suid, pr->pLoadInfo, pr->pReadSnap, &pr->pDataFReader,
|
||||||
&pr->pDataFReaderLast);
|
&pr->pDataFReaderLast, pr->lastTs);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
TSDBROW *pRow = NULL;
|
TSDBROW *pRow = NULL;
|
||||||
nextRowIterGet(&iter, &pRow);
|
nextRowIterGet(&iter, &pRow, &ignoreEarlierTs);
|
||||||
|
|
||||||
if (!pRow) {
|
if (!pRow) {
|
||||||
break;
|
break;
|
||||||
|
@ -1419,7 +1458,12 @@ static int32_t mergeLastRow(tb_uid_t uid, STsdb *pTsdb, bool *dup, SArray **ppCo
|
||||||
// taosArrayDestroy(pColArray);
|
// taosArrayDestroy(pColArray);
|
||||||
//} else {
|
//} else {
|
||||||
if (!hasRow) {
|
if (!hasRow) {
|
||||||
taosArrayClear(pColArray);
|
if (ignoreEarlierTs) {
|
||||||
|
taosArrayDestroy(pColArray);
|
||||||
|
pColArray = NULL;
|
||||||
|
} else {
|
||||||
|
taosArrayClear(pColArray);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*ppColArray = pColArray;
|
*ppColArray = pColArray;
|
||||||
//}
|
//}
|
||||||
|
@ -1441,6 +1485,7 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCach
|
||||||
int16_t noneCol = 0;
|
int16_t noneCol = 0;
|
||||||
bool setNoneCol = false;
|
bool setNoneCol = false;
|
||||||
bool hasRow = false;
|
bool hasRow = false;
|
||||||
|
bool ignoreEarlierTs = false;
|
||||||
SArray *pColArray = NULL;
|
SArray *pColArray = NULL;
|
||||||
SColVal *pColVal = &(SColVal){0};
|
SColVal *pColVal = &(SColVal){0};
|
||||||
|
|
||||||
|
@ -1453,11 +1498,11 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCach
|
||||||
|
|
||||||
CacheNextRowIter iter = {0};
|
CacheNextRowIter iter = {0};
|
||||||
nextRowIterOpen(&iter, uid, pTsdb, pTSchema, pr->suid, pr->pLoadInfo, pr->pReadSnap, &pr->pDataFReader,
|
nextRowIterOpen(&iter, uid, pTsdb, pTSchema, pr->suid, pr->pLoadInfo, pr->pReadSnap, &pr->pDataFReader,
|
||||||
&pr->pDataFReaderLast);
|
&pr->pDataFReaderLast, pr->lastTs);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
TSDBROW *pRow = NULL;
|
TSDBROW *pRow = NULL;
|
||||||
nextRowIterGet(&iter, &pRow);
|
nextRowIterGet(&iter, &pRow, &ignoreEarlierTs);
|
||||||
|
|
||||||
if (!pRow) {
|
if (!pRow) {
|
||||||
break;
|
break;
|
||||||
|
@ -1557,7 +1602,12 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCach
|
||||||
// taosArrayDestroy(pColArray);
|
// taosArrayDestroy(pColArray);
|
||||||
//} else {
|
//} else {
|
||||||
if (!hasRow) {
|
if (!hasRow) {
|
||||||
taosArrayClear(pColArray);
|
if (ignoreEarlierTs) {
|
||||||
|
taosArrayDestroy(pColArray);
|
||||||
|
pColArray = NULL;
|
||||||
|
} else {
|
||||||
|
taosArrayClear(pColArray);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*ppLastArray = pColArray;
|
*ppLastArray = pColArray;
|
||||||
//}
|
//}
|
||||||
|
@ -1591,8 +1641,8 @@ int32_t tsdbCacheGetLastrowH(SLRUCache *pCache, tb_uid_t uid, SCacheRowsReader *
|
||||||
SArray *pArray = NULL;
|
SArray *pArray = NULL;
|
||||||
bool dup = false; // which is always false for now
|
bool dup = false; // which is always false for now
|
||||||
code = mergeLastRow(uid, pTsdb, &dup, &pArray, pr);
|
code = mergeLastRow(uid, pTsdb, &dup, &pArray, pr);
|
||||||
// if table's empty or error, set handle NULL and return
|
// if table's empty or error or ignore ignore earlier ts, set handle NULL and return
|
||||||
if (code < 0 /* || pArray == NULL*/) {
|
if (code < 0 || pArray == NULL) {
|
||||||
if (!dup && pArray) {
|
if (!dup && pArray) {
|
||||||
taosArrayDestroy(pArray);
|
taosArrayDestroy(pArray);
|
||||||
}
|
}
|
||||||
|
@ -1635,8 +1685,8 @@ int32_t tsdbCacheGetLastH(SLRUCache *pCache, tb_uid_t uid, SCacheRowsReader *pr,
|
||||||
if (!h) {
|
if (!h) {
|
||||||
SArray *pLastArray = NULL;
|
SArray *pLastArray = NULL;
|
||||||
code = mergeLast(uid, pTsdb, &pLastArray, pr);
|
code = mergeLast(uid, pTsdb, &pLastArray, pr);
|
||||||
// if table's empty or error, set handle NULL and return
|
// if table's empty or error or ignore ignore earlier ts, set handle NULL and return
|
||||||
if (code < 0 /* || pLastArray == NULL*/) {
|
if (code < 0 || pLastArray == NULL) {
|
||||||
taosThreadMutexUnlock(&pTsdb->lruMutex);
|
taosThreadMutexUnlock(&pTsdb->lruMutex);
|
||||||
|
|
||||||
*handle = NULL;
|
*handle = NULL;
|
||||||
|
@ -1682,6 +1732,15 @@ size_t tsdbCacheGetUsage(SVnode *pVnode) {
|
||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t tsdbCacheGetElems(SVnode *pVnode) {
|
||||||
|
int32_t elems = 0;
|
||||||
|
if (pVnode->pTsdb != NULL) {
|
||||||
|
elems = taosLRUCacheGetElems(pVnode->pTsdb->lruCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
return elems;
|
||||||
|
}
|
||||||
|
|
||||||
static void getBICacheKey(int32_t fid, int64_t commitID, char *key, int *len) {
|
static void getBICacheKey(int32_t fid, int64_t commitID, char *key, int *len) {
|
||||||
struct {
|
struct {
|
||||||
int32_t fid;
|
int32_t fid;
|
||||||
|
|
|
@ -199,6 +199,8 @@ int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList,
|
||||||
p->idstr = taosStrdup(idstr);
|
p->idstr = taosStrdup(idstr);
|
||||||
taosThreadMutexInit(&p->readerMutex, NULL);
|
taosThreadMutexInit(&p->readerMutex, NULL);
|
||||||
|
|
||||||
|
p->lastTs = INT64_MIN;
|
||||||
|
|
||||||
*pReader = p;
|
*pReader = p;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -330,6 +332,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
|
|
||||||
// retrieve the only one last row of all tables in the uid list.
|
// retrieve the only one last row of all tables in the uid list.
|
||||||
if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_SINGLE)) {
|
if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_SINGLE)) {
|
||||||
|
int64_t st = taosGetTimestampUs();
|
||||||
for (int32_t i = 0; i < pr->numOfTables; ++i) {
|
for (int32_t i = 0; i < pr->numOfTables; ++i) {
|
||||||
STableKeyInfo* pKeyInfo = &pr->pTableList[i];
|
STableKeyInfo* pKeyInfo = &pr->pTableList[i];
|
||||||
|
|
||||||
|
@ -347,6 +350,8 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
bool hasNotNullRow = true;
|
||||||
|
int64_t minTs = INT64_MAX;
|
||||||
for (int32_t k = 0; k < pr->numOfCols; ++k) {
|
for (int32_t k = 0; k < pr->numOfCols; ++k) {
|
||||||
int32_t slotId = slotIds[k];
|
int32_t slotId = slotIds[k];
|
||||||
|
|
||||||
|
@ -357,6 +362,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
hasRes = true;
|
hasRes = true;
|
||||||
p->ts = pCol->ts;
|
p->ts = pCol->ts;
|
||||||
p->colVal = pCol->colVal;
|
p->colVal = pCol->colVal;
|
||||||
|
minTs = pCol->ts;
|
||||||
|
|
||||||
// only set value for last row query
|
// only set value for last row query
|
||||||
if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST_ROW)) {
|
if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST_ROW)) {
|
||||||
|
@ -373,11 +379,17 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
|
|
||||||
if (pColVal->ts > p->ts) {
|
if (pColVal->ts > p->ts) {
|
||||||
if (!COL_VAL_IS_VALUE(&pColVal->colVal) && HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST)) {
|
if (!COL_VAL_IS_VALUE(&pColVal->colVal) && HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST)) {
|
||||||
|
if (!COL_VAL_IS_VALUE(&p->colVal)) {
|
||||||
|
hasNotNullRow = false;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
hasRes = true;
|
hasRes = true;
|
||||||
p->ts = pColVal->ts;
|
p->ts = pColVal->ts;
|
||||||
|
if (pColVal->ts < minTs && HASTYPE(pr->type, CACHESCAN_RETRIEVE_LAST)) {
|
||||||
|
minTs = pColVal->ts;
|
||||||
|
}
|
||||||
|
|
||||||
if (!IS_VAR_DATA_TYPE(pColVal->colVal.type)) {
|
if (!IS_VAR_DATA_TYPE(pColVal->colVal.type)) {
|
||||||
p->colVal = pColVal->colVal;
|
p->colVal = pColVal->colVal;
|
||||||
|
@ -394,6 +406,13 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasNotNullRow) {
|
||||||
|
double cost = (taosGetTimestampUs() - st) / 1000.0;
|
||||||
|
if (cost > tsCacheLazyLoadThreshold) {
|
||||||
|
pr->lastTs = minTs;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbCacheRelease(lruCache, h);
|
tsdbCacheRelease(lruCache, h);
|
||||||
|
@ -402,7 +421,6 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
||||||
if (hasRes) {
|
if (hasRes) {
|
||||||
saveOneRow(pLastCols, pResBlock, pr, slotIds, pRes, pr->idstr);
|
saveOneRow(pLastCols, pResBlock, pr, slotIds, pRes, pr->idstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_ALL)) {
|
} else if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_ALL)) {
|
||||||
for (int32_t i = pr->tableIndex; i < pr->numOfTables; ++i) {
|
for (int32_t i = pr->tableIndex; i < pr->numOfTables; ++i) {
|
||||||
STableKeyInfo* pKeyInfo = &pr->pTableList[i];
|
STableKeyInfo* pKeyInfo = &pr->pTableList[i];
|
||||||
|
|
|
@ -29,9 +29,11 @@ struct SLDataIter {
|
||||||
STimeWindow timeWindow;
|
STimeWindow timeWindow;
|
||||||
SVersionRange verRange;
|
SVersionRange verRange;
|
||||||
SSttBlockLoadInfo *pBlockLoadInfo;
|
SSttBlockLoadInfo *pBlockLoadInfo;
|
||||||
|
bool ignoreEarlierTs;
|
||||||
};
|
};
|
||||||
|
|
||||||
SSttBlockLoadInfo *tCreateLastBlockLoadInfo(STSchema *pSchema, int16_t *colList, int32_t numOfCols, int32_t numOfSttTrigger) {
|
SSttBlockLoadInfo *tCreateLastBlockLoadInfo(STSchema *pSchema, int16_t *colList, int32_t numOfCols,
|
||||||
|
int32_t numOfSttTrigger) {
|
||||||
SSttBlockLoadInfo *pLoadInfo = taosMemoryCalloc(numOfSttTrigger, sizeof(SSttBlockLoadInfo));
|
SSttBlockLoadInfo *pLoadInfo = taosMemoryCalloc(numOfSttTrigger, sizeof(SSttBlockLoadInfo));
|
||||||
if (pLoadInfo == NULL) {
|
if (pLoadInfo == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
@ -162,7 +164,8 @@ static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
||||||
pInfo->blockIndex[pInfo->currentLoadBlockIndex] = pIter->iSttBlk;
|
pInfo->blockIndex[pInfo->currentLoadBlockIndex] = pIter->iSttBlk;
|
||||||
pIter->iRow = (pIter->backward) ? pInfo->blockData[pInfo->currentLoadBlockIndex].nRow : -1;
|
pIter->iRow = (pIter->backward) ? pInfo->blockData[pInfo->currentLoadBlockIndex].nRow : -1;
|
||||||
|
|
||||||
tsdbDebug("last block index list:%d, %d, rowIndex:%d %s", pInfo->blockIndex[0], pInfo->blockIndex[1], pIter->iRow, idStr);
|
tsdbDebug("last block index list:%d, %d, rowIndex:%d %s", pInfo->blockIndex[0], pInfo->blockIndex[1], pIter->iRow,
|
||||||
|
idStr);
|
||||||
return &pInfo->blockData[pInfo->currentLoadBlockIndex];
|
return &pInfo->blockData[pInfo->currentLoadBlockIndex];
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -263,7 +266,7 @@ static int32_t binarySearchForStartRowIndex(uint64_t *uidList, int32_t num, uint
|
||||||
|
|
||||||
int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t iStt, int8_t backward, uint64_t suid,
|
int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t iStt, int8_t backward, uint64_t suid,
|
||||||
uint64_t uid, STimeWindow *pTimeWindow, SVersionRange *pRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
uint64_t uid, STimeWindow *pTimeWindow, SVersionRange *pRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
||||||
const char *idStr) {
|
const char *idStr, bool strictTimeRange) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
*pIter = taosMemoryCalloc(1, sizeof(SLDataIter));
|
*pIter = taosMemoryCalloc(1, sizeof(SLDataIter));
|
||||||
|
@ -340,6 +343,17 @@ int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t
|
||||||
if ((*pIter)->iSttBlk != -1) {
|
if ((*pIter)->iSttBlk != -1) {
|
||||||
(*pIter)->pSttBlk = taosArrayGet(pBlockLoadInfo->aSttBlk, (*pIter)->iSttBlk);
|
(*pIter)->pSttBlk = taosArrayGet(pBlockLoadInfo->aSttBlk, (*pIter)->iSttBlk);
|
||||||
(*pIter)->iRow = ((*pIter)->backward) ? (*pIter)->pSttBlk->nRow : -1;
|
(*pIter)->iRow = ((*pIter)->backward) ? (*pIter)->pSttBlk->nRow : -1;
|
||||||
|
|
||||||
|
if ((!backward) && ((strictTimeRange && (*pIter)->pSttBlk->minKey >= (*pIter)->timeWindow.ekey) ||
|
||||||
|
(!strictTimeRange && (*pIter)->pSttBlk->minKey > (*pIter)->timeWindow.ekey))) {
|
||||||
|
(*pIter)->pSttBlk = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backward && ((strictTimeRange && (*pIter)->pSttBlk->maxKey <= (*pIter)->timeWindow.skey) ||
|
||||||
|
(!strictTimeRange && (*pIter)->pSttBlk->maxKey < (*pIter)->timeWindow.skey))) {
|
||||||
|
(*pIter)->pSttBlk = NULL;
|
||||||
|
(*pIter)->ignoreEarlierTs = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
@ -421,7 +435,7 @@ static void findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
||||||
pBlockData->aUid != NULL) {
|
pBlockData->aUid != NULL) {
|
||||||
i = binarySearchForStartRowIndex((uint64_t *)pBlockData->aUid, pBlockData->nRow, pIter->uid, pIter->backward);
|
i = binarySearchForStartRowIndex((uint64_t *)pBlockData->aUid, pBlockData->nRow, pIter->uid, pIter->backward);
|
||||||
if (i == -1) {
|
if (i == -1) {
|
||||||
tsdbDebug("failed to find the data in pBlockData, uid:%"PRIu64" , %s", pIter->uid, idStr);
|
tsdbDebug("failed to find the data in pBlockData, uid:%" PRIu64 " , %s", pIter->uid, idStr);
|
||||||
pIter->iRow = -1;
|
pIter->iRow = -1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -508,7 +522,7 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set start row index
|
// set start row index
|
||||||
pIter->iRow = pIter->backward? pBlockData->nRow-1:0;
|
pIter->iRow = pIter->backward ? pBlockData->nRow - 1 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -551,7 +565,7 @@ static FORCE_INLINE int32_t tLDataIterDescCmprFn(const SRBTreeNode *p1, const SR
|
||||||
|
|
||||||
int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFReader, uint64_t suid, uint64_t uid,
|
int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFReader, uint64_t suid, uint64_t uid,
|
||||||
STimeWindow *pTimeWindow, SVersionRange *pVerRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
STimeWindow *pTimeWindow, SVersionRange *pVerRange, SSttBlockLoadInfo *pBlockLoadInfo,
|
||||||
bool destroyLoadInfo, const char *idStr) {
|
bool destroyLoadInfo, const char *idStr, bool strictTimeRange) {
|
||||||
pMTree->backward = backward;
|
pMTree->backward = backward;
|
||||||
pMTree->pIter = NULL;
|
pMTree->pIter = NULL;
|
||||||
pMTree->pIterList = taosArrayInit(4, POINTER_BYTES);
|
pMTree->pIterList = taosArrayInit(4, POINTER_BYTES);
|
||||||
|
@ -569,11 +583,12 @@ int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFRead
|
||||||
|
|
||||||
pMTree->pLoadInfo = pBlockLoadInfo;
|
pMTree->pLoadInfo = pBlockLoadInfo;
|
||||||
pMTree->destroyLoadInfo = destroyLoadInfo;
|
pMTree->destroyLoadInfo = destroyLoadInfo;
|
||||||
|
pMTree->ignoreEarlierTs = false;
|
||||||
|
|
||||||
for (int32_t i = 0; i < pFReader->pSet->nSttF; ++i) { // open all last file
|
for (int32_t i = 0; i < pFReader->pSet->nSttF; ++i) { // open all last file
|
||||||
struct SLDataIter *pIter = NULL;
|
struct SLDataIter *pIter = NULL;
|
||||||
code = tLDataIterOpen(&pIter, pFReader, i, pMTree->backward, suid, uid, pTimeWindow, pVerRange,
|
code = tLDataIterOpen(&pIter, pFReader, i, pMTree->backward, suid, uid, pTimeWindow, pVerRange,
|
||||||
&pMTree->pLoadInfo[i], pMTree->idStr);
|
&pMTree->pLoadInfo[i], pMTree->idStr, strictTimeRange);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto _end;
|
goto _end;
|
||||||
}
|
}
|
||||||
|
@ -583,6 +598,9 @@ int32_t tMergeTreeOpen(SMergeTree *pMTree, int8_t backward, SDataFReader *pFRead
|
||||||
taosArrayPush(pMTree->pIterList, &pIter);
|
taosArrayPush(pMTree->pIterList, &pIter);
|
||||||
tMergeTreeAddIter(pMTree, pIter);
|
tMergeTreeAddIter(pMTree, pIter);
|
||||||
} else {
|
} else {
|
||||||
|
if (!pMTree->ignoreEarlierTs) {
|
||||||
|
pMTree->ignoreEarlierTs = pIter->ignoreEarlierTs;
|
||||||
|
}
|
||||||
tLDataIterClose(pIter);
|
tLDataIterClose(pIter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -596,6 +614,8 @@ _end:
|
||||||
|
|
||||||
void tMergeTreeAddIter(SMergeTree *pMTree, SLDataIter *pIter) { tRBTreePut(&pMTree->rbt, (SRBTreeNode *)pIter); }
|
void tMergeTreeAddIter(SMergeTree *pMTree, SLDataIter *pIter) { tRBTreePut(&pMTree->rbt, (SRBTreeNode *)pIter); }
|
||||||
|
|
||||||
|
bool tMergeTreeIgnoreEarlierTs(SMergeTree *pMTree) { return pMTree->ignoreEarlierTs; }
|
||||||
|
|
||||||
bool tMergeTreeNext(SMergeTree *pMTree) {
|
bool tMergeTreeNext(SMergeTree *pMTree) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (pMTree->pIter) {
|
if (pMTree->pIter) {
|
||||||
|
|
|
@ -315,7 +315,7 @@ static int32_t ensureBlockScanInfoBuf(SBlockInfoBuf* pBuf, int32_t numOfTables)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBuf->numOfTables > 0) {
|
if (pBuf->numOfTables > 0) {
|
||||||
STableBlockScanInfo **p = (STableBlockScanInfo**)taosArrayPop(pBuf->pData);
|
STableBlockScanInfo** p = (STableBlockScanInfo**)taosArrayPop(pBuf->pData);
|
||||||
taosMemoryFree(*p);
|
taosMemoryFree(*p);
|
||||||
pBuf->numOfTables /= pBuf->numPerBucket;
|
pBuf->numOfTables /= pBuf->numPerBucket;
|
||||||
}
|
}
|
||||||
|
@ -919,7 +919,7 @@ static int32_t doLoadFileBlock(STsdbReader* pReader, SArray* pIndexList, SBlockN
|
||||||
pBlockNum->numOfBlocks += 1;
|
pBlockNum->numOfBlocks += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((pScanInfo->pBlockList != NULL )&& (taosArrayGetSize(pScanInfo->pBlockList) > 0)) {
|
if ((pScanInfo->pBlockList != NULL) && (taosArrayGetSize(pScanInfo->pBlockList) > 0)) {
|
||||||
numOfQTable += 1;
|
numOfQTable += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1798,7 +1798,7 @@ static bool nextRowFromLastBlocks(SLastBlockReader* pLastBlockReader, STableBloc
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
bool hasVal = tMergeTreeNext(&pLastBlockReader->mergeTree);
|
bool hasVal = tMergeTreeNext(&pLastBlockReader->mergeTree);
|
||||||
if (!hasVal) { // the next value will be the accessed key in stt
|
if (!hasVal) { // the next value will be the accessed key in stt
|
||||||
pScanInfo->lastKeyInStt += step;
|
pScanInfo->lastKeyInStt += step;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2481,7 +2481,7 @@ static bool initLastBlockReader(SLastBlockReader* pLBlockReader, STableBlockScan
|
||||||
pScanInfo->uid, pReader->idStr);
|
pScanInfo->uid, pReader->idStr);
|
||||||
int32_t code = tMergeTreeOpen(&pLBlockReader->mergeTree, (pLBlockReader->order == TSDB_ORDER_DESC),
|
int32_t code = tMergeTreeOpen(&pLBlockReader->mergeTree, (pLBlockReader->order == TSDB_ORDER_DESC),
|
||||||
pReader->pFileReader, pReader->suid, pScanInfo->uid, &w, &pLBlockReader->verRange,
|
pReader->pFileReader, pReader->suid, pScanInfo->uid, &w, &pLBlockReader->verRange,
|
||||||
pLBlockReader->pInfo, false, pReader->idStr);
|
pLBlockReader->pInfo, false, pReader->idStr, false);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3512,7 +3512,7 @@ static int32_t checkForNeighborFileBlock(STsdbReader* pReader, STableBlockScanIn
|
||||||
CHECK_FILEBLOCK_STATE* state) {
|
CHECK_FILEBLOCK_STATE* state) {
|
||||||
SFileBlockDumpInfo* pDumpInfo = &pReader->status.fBlockDumpInfo;
|
SFileBlockDumpInfo* pDumpInfo = &pReader->status.fBlockDumpInfo;
|
||||||
SBlockData* pBlockData = &pReader->status.fileBlockData;
|
SBlockData* pBlockData = &pReader->status.fileBlockData;
|
||||||
bool asc = ASCENDING_TRAVERSE(pReader->order);
|
bool asc = ASCENDING_TRAVERSE(pReader->order);
|
||||||
|
|
||||||
*state = CHECK_FILEBLOCK_QUIT;
|
*state = CHECK_FILEBLOCK_QUIT;
|
||||||
int32_t step = ASCENDING_TRAVERSE(pReader->order) ? 1 : -1;
|
int32_t step = ASCENDING_TRAVERSE(pReader->order) ? 1 : -1;
|
||||||
|
@ -3927,7 +3927,8 @@ int32_t tsdbSetTableList(STsdbReader* pReader, const void* pTableList, int32_t n
|
||||||
if (code) {
|
if (code) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
pReader->status.uidList.tableUidList = (uint64_t*)taosMemoryRealloc(pReader->status.uidList.tableUidList, sizeof(uint64_t) * num);
|
pReader->status.uidList.tableUidList =
|
||||||
|
(uint64_t*)taosMemoryRealloc(pReader->status.uidList.tableUidList, sizeof(uint64_t) * num);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosHashClear(pReader->status.pTableMap);
|
taosHashClear(pReader->status.pTableMap);
|
||||||
|
|
|
@ -198,7 +198,7 @@ static int32_t tsdbSnapCmprData(STsdbSnapReader* pReader, uint8_t** ppData) {
|
||||||
ASSERT(pReader->bData.nRow);
|
ASSERT(pReader->bData.nRow);
|
||||||
|
|
||||||
int32_t aBufN[5] = {0};
|
int32_t aBufN[5] = {0};
|
||||||
code = tCmprBlockData(&pReader->bData, TWO_STAGE_COMP, NULL, NULL, pReader->aBuf, aBufN);
|
code = tCmprBlockData(&pReader->bData, NO_COMPRESSION, NULL, NULL, pReader->aBuf, aBufN);
|
||||||
if (code) goto _exit;
|
if (code) goto _exit;
|
||||||
|
|
||||||
int32_t size = aBufN[0] + aBufN[1] + aBufN[2] + aBufN[3];
|
int32_t size = aBufN[0] + aBufN[1] + aBufN[2] + aBufN[3];
|
||||||
|
@ -276,7 +276,7 @@ static int32_t tsdbSnapReadTimeSeriesData(STsdbSnapReader* pReader, uint8_t** pp
|
||||||
code = tsdbSnapReadNextRow(pReader, &pRowInfo);
|
code = tsdbSnapReadNextRow(pReader, &pRowInfo);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
if (pReader->bData.nRow >= 4096) break;
|
if (pReader->bData.nRow >= 81920) break;
|
||||||
} while (pRowInfo);
|
} while (pRowInfo);
|
||||||
|
|
||||||
ASSERT(pReader->bData.nRow > 0);
|
ASSERT(pReader->bData.nRow > 0);
|
||||||
|
|
|
@ -382,6 +382,7 @@ int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad) {
|
||||||
pLoad->syncRestore = state.restored;
|
pLoad->syncRestore = state.restored;
|
||||||
pLoad->syncCanRead = state.canRead;
|
pLoad->syncCanRead = state.canRead;
|
||||||
pLoad->cacheUsage = tsdbCacheGetUsage(pVnode);
|
pLoad->cacheUsage = tsdbCacheGetUsage(pVnode);
|
||||||
|
pLoad->numOfCachedTables = tsdbCacheGetElems(pVnode);
|
||||||
pLoad->numOfTables = metaGetTbNum(pVnode->pMeta);
|
pLoad->numOfTables = metaGetTbNum(pVnode->pMeta);
|
||||||
pLoad->numOfTimeSeries = metaGetTimeSeriesNum(pVnode->pMeta);
|
pLoad->numOfTimeSeries = metaGetTimeSeriesNum(pVnode->pMeta);
|
||||||
pLoad->totalStorage = (int64_t)3 * 1073741824;
|
pLoad->totalStorage = (int64_t)3 * 1073741824;
|
||||||
|
|
|
@ -306,13 +306,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp
|
||||||
void *pReq;
|
void *pReq;
|
||||||
int32_t len;
|
int32_t len;
|
||||||
int32_t ret;
|
int32_t ret;
|
||||||
/*
|
|
||||||
if (!pVnode->inUse) {
|
|
||||||
terrno = TSDB_CODE_VND_NO_AVAIL_BUFPOOL;
|
|
||||||
vError("vgId:%d, not ready to write since %s", TD_VID(pVnode), terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (version <= pVnode->state.applied) {
|
if (version <= pVnode->state.applied) {
|
||||||
vError("vgId:%d, duplicate write request. version: %" PRId64 ", applied: %" PRId64 "", TD_VID(pVnode), version,
|
vError("vgId:%d, duplicate write request. version: %" PRId64 ", applied: %" PRId64 "", TD_VID(pVnode), version,
|
||||||
pVnode->state.applied);
|
pVnode->state.applied);
|
||||||
|
@ -326,8 +320,8 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp
|
||||||
ASSERT(pVnode->state.applyTerm <= pMsg->info.conn.applyTerm);
|
ASSERT(pVnode->state.applyTerm <= pMsg->info.conn.applyTerm);
|
||||||
ASSERT(pVnode->state.applied + 1 == version);
|
ASSERT(pVnode->state.applied + 1 == version);
|
||||||
|
|
||||||
pVnode->state.applied = version;
|
atomic_store_64(&pVnode->state.applied, version);
|
||||||
pVnode->state.applyTerm = pMsg->info.conn.applyTerm;
|
atomic_store_64(&pVnode->state.applyTerm, pMsg->info.conn.applyTerm);
|
||||||
|
|
||||||
if (!syncUtilUserCommit(pMsg->msgType)) goto _exit;
|
if (!syncUtilUserCommit(pMsg->msgType)) goto _exit;
|
||||||
|
|
||||||
|
@ -1541,6 +1535,14 @@ static int32_t vnodeProcessAlterConfigReq(SVnode *pVnode, int64_t version, void
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (req.sttTrigger != -1 && req.sttTrigger != pVnode->config.sttTrigger) {
|
||||||
|
pVnode->config.sttTrigger = req.sttTrigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.minRows != -1 && req.minRows != pVnode->config.tsdbCfg.minRows) {
|
||||||
|
pVnode->config.tsdbCfg.minRows = req.minRows;
|
||||||
|
}
|
||||||
|
|
||||||
if (walChanged) {
|
if (walChanged) {
|
||||||
walAlter(pVnode->pWal, &pVnode->config.walCfg);
|
walAlter(pVnode->pWal, &pVnode->config.walCfg);
|
||||||
}
|
}
|
||||||
|
@ -1656,7 +1658,7 @@ _err:
|
||||||
}
|
}
|
||||||
static int32_t vnodeProcessDropIndexReq(SVnode *pVnode, int64_t version, void *pReq, int32_t len, SRpcMsg *pRsp) {
|
static int32_t vnodeProcessDropIndexReq(SVnode *pVnode, int64_t version, void *pReq, int32_t len, SRpcMsg *pRsp) {
|
||||||
SDropIndexReq req = {0};
|
SDropIndexReq req = {0};
|
||||||
pRsp->msgType = TDMT_VND_CREATE_INDEX_RSP;
|
pRsp->msgType = TDMT_VND_DROP_INDEX_RSP;
|
||||||
pRsp->code = TSDB_CODE_SUCCESS;
|
pRsp->code = TSDB_CODE_SUCCESS;
|
||||||
pRsp->pCont = NULL;
|
pRsp->pCont = NULL;
|
||||||
pRsp->contLen = 0;
|
pRsp->contLen = 0;
|
||||||
|
@ -1665,6 +1667,7 @@ static int32_t vnodeProcessDropIndexReq(SVnode *pVnode, int64_t version, void *p
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metaDropIndexFromSTable(pVnode->pMeta, version, &req) < 0) {
|
if (metaDropIndexFromSTable(pVnode->pMeta, version, &req) < 0) {
|
||||||
pRsp->code = terrno;
|
pRsp->code = terrno;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -433,7 +433,23 @@ static int32_t vnodeSyncApplyMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsm
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSyncCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
static int32_t vnodeSyncCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
||||||
return vnodeSyncApplyMsg(pFsm, pMsg, pMeta);
|
if (pMsg->code == 0) {
|
||||||
|
return vnodeSyncApplyMsg(pFsm, pMsg, pMeta);
|
||||||
|
}
|
||||||
|
|
||||||
|
const STraceId *trace = &pMsg->info.traceId;
|
||||||
|
SVnode *pVnode = pFsm->data;
|
||||||
|
vnodePostBlockMsg(pVnode, pMsg);
|
||||||
|
|
||||||
|
SRpcMsg rsp = {.code = pMsg->code, .info = pMsg->info};
|
||||||
|
if (rsp.info.handle != NULL) {
|
||||||
|
tmsgSendRsp(&rsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
vGTrace("vgId:%d, msg:%p is freed, code:0x%x index:%" PRId64, TD_VID(pVnode), pMsg, rsp.code, pMeta->index);
|
||||||
|
rpcFreeCont(pMsg->pCont);
|
||||||
|
pMsg->pCont = NULL;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSyncPreCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
static int32_t vnodeSyncPreCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
||||||
|
@ -443,6 +459,11 @@ static int32_t vnodeSyncPreCommitMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SyncIndex vnodeSyncAppliedIndex(const SSyncFSM *pFSM) {
|
||||||
|
SVnode *pVnode = pFSM->data;
|
||||||
|
return atomic_load_64(&pVnode->state.applied);
|
||||||
|
}
|
||||||
|
|
||||||
static void vnodeSyncRollBackMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
static void vnodeSyncRollBackMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta *pMeta) {
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
vTrace("vgId:%d, rollback-cb is excuted, fsm:%p, index:%" PRId64 ", weak:%d, code:%d, state:%d %s, type:%s",
|
vTrace("vgId:%d, rollback-cb is excuted, fsm:%p, index:%" PRId64 ", weak:%d, code:%d, state:%d %s, type:%s",
|
||||||
|
@ -505,21 +526,26 @@ static int32_t vnodeSnapshotDoWrite(const SSyncFSM *pFsm, void *pWriter, void *p
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vnodeRestoreFinish(const SSyncFSM *pFsm) {
|
static void vnodeRestoreFinish(const SSyncFSM *pFsm, const SyncIndex commitIdx) {
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
|
SyncIndex appliedIdx = -1;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int32_t itemSize = tmsgGetQueueSize(&pVnode->msgCb, pVnode->config.vgId, APPLY_QUEUE);
|
appliedIdx = vnodeSyncAppliedIndex(pFsm);
|
||||||
if (itemSize == 0) {
|
ASSERT(appliedIdx <= commitIdx);
|
||||||
vInfo("vgId:%d, apply queue is empty, restore finish", pVnode->config.vgId);
|
if (appliedIdx == commitIdx) {
|
||||||
|
vInfo("vgId:%d, no items to be applied, restore finish", pVnode->config.vgId);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
vInfo("vgId:%d, restore not finish since %d items in apply queue", pVnode->config.vgId, itemSize);
|
vInfo("vgId:%d, restore not finish since %" PRId64 " items to be applied. commit-index:%" PRId64
|
||||||
|
", applied-index:%" PRId64,
|
||||||
|
pVnode->config.vgId, commitIdx - appliedIdx, commitIdx, appliedIdx);
|
||||||
taosMsleep(10);
|
taosMsleep(10);
|
||||||
}
|
}
|
||||||
} while (true);
|
} while (true);
|
||||||
|
|
||||||
walApplyVer(pVnode->pWal, pVnode->state.applied);
|
ASSERT(commitIdx == vnodeSyncAppliedIndex(pFsm));
|
||||||
|
walApplyVer(pVnode->pWal, commitIdx);
|
||||||
|
|
||||||
pVnode->restored = true;
|
pVnode->restored = true;
|
||||||
vInfo("vgId:%d, sync restore finished", pVnode->config.vgId);
|
vInfo("vgId:%d, sync restore finished", pVnode->config.vgId);
|
||||||
|
@ -569,6 +595,7 @@ static SSyncFSM *vnodeSyncMakeFsm(SVnode *pVnode) {
|
||||||
SSyncFSM *pFsm = taosMemoryCalloc(1, sizeof(SSyncFSM));
|
SSyncFSM *pFsm = taosMemoryCalloc(1, sizeof(SSyncFSM));
|
||||||
pFsm->data = pVnode;
|
pFsm->data = pVnode;
|
||||||
pFsm->FpCommitCb = vnodeSyncCommitMsg;
|
pFsm->FpCommitCb = vnodeSyncCommitMsg;
|
||||||
|
pFsm->FpAppliedIndexCb = vnodeSyncAppliedIndex;
|
||||||
pFsm->FpPreCommitCb = vnodeSyncPreCommitMsg;
|
pFsm->FpPreCommitCb = vnodeSyncPreCommitMsg;
|
||||||
pFsm->FpRollBackCb = vnodeSyncRollBackMsg;
|
pFsm->FpRollBackCb = vnodeSyncRollBackMsg;
|
||||||
pFsm->FpGetSnapshotInfo = vnodeSyncGetSnapshotInfo;
|
pFsm->FpGetSnapshotInfo = vnodeSyncGetSnapshotInfo;
|
||||||
|
|
|
@ -121,7 +121,8 @@ enum {
|
||||||
STREAM_RECOVER_STEP__NONE = 0,
|
STREAM_RECOVER_STEP__NONE = 0,
|
||||||
STREAM_RECOVER_STEP__PREPARE1,
|
STREAM_RECOVER_STEP__PREPARE1,
|
||||||
STREAM_RECOVER_STEP__PREPARE2,
|
STREAM_RECOVER_STEP__PREPARE2,
|
||||||
STREAM_RECOVER_STEP__SCAN,
|
STREAM_RECOVER_STEP__SCAN1,
|
||||||
|
STREAM_RECOVER_STEP__SCAN2,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -749,7 +750,7 @@ void clearResultRowInitFlag(SqlFunctionCtx* pCtx, int32_t numOfOutput);
|
||||||
|
|
||||||
SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pResultRowInfo, char* pData,
|
SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pResultRowInfo, char* pData,
|
||||||
int16_t bytes, bool masterscan, uint64_t groupId, SExecTaskInfo* pTaskInfo,
|
int16_t bytes, bool masterscan, uint64_t groupId, SExecTaskInfo* pTaskInfo,
|
||||||
bool isIntervalQuery, SAggSupporter* pSup);
|
bool isIntervalQuery, SAggSupporter* pSup, bool keepGroup);
|
||||||
// operator creater functions
|
// operator creater functions
|
||||||
// clang-format off
|
// clang-format off
|
||||||
SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
|
@ -992,19 +992,16 @@ const char* qExtractTbnameFromTask(qTaskInfo_t tinfo) {
|
||||||
|
|
||||||
SMqMetaRsp* qStreamExtractMetaMsg(qTaskInfo_t tinfo) {
|
SMqMetaRsp* qStreamExtractMetaMsg(qTaskInfo_t tinfo) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE);
|
|
||||||
return &pTaskInfo->streamInfo.metaRsp;
|
return &pTaskInfo->streamInfo.metaRsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t qStreamExtractPrepareUid(qTaskInfo_t tinfo) {
|
int64_t qStreamExtractPrepareUid(qTaskInfo_t tinfo) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE);
|
|
||||||
return pTaskInfo->streamInfo.prepareStatus.uid;
|
return pTaskInfo->streamInfo.prepareStatus.uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qStreamExtractOffset(qTaskInfo_t tinfo, STqOffsetVal* pOffset) {
|
int32_t qStreamExtractOffset(qTaskInfo_t tinfo, STqOffsetVal* pOffset) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE);
|
|
||||||
memcpy(pOffset, &pTaskInfo->streamInfo.lastStatus, sizeof(STqOffsetVal));
|
memcpy(pOffset, &pTaskInfo->streamInfo.lastStatus, sizeof(STqOffsetVal));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1040,20 +1037,12 @@ int32_t initQueryTableDataCondForTmq(SQueryTableDataCond* pCond, SSnapContext* s
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
int32_t qStreamScanMemData(qTaskInfo_t tinfo, const SSubmitReq* pReq, int64_t scanVer) {
|
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
|
||||||
ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE);
|
|
||||||
ASSERT(pTaskInfo->streamInfo.pReq == NULL);
|
|
||||||
pTaskInfo->streamInfo.pReq = pReq;
|
|
||||||
pTaskInfo->streamInfo.scanVer = scanVer;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t qStreamSetScanMemData(qTaskInfo_t tinfo, SPackedData submit) {
|
int32_t qStreamSetScanMemData(qTaskInfo_t tinfo, SPackedData submit) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
ASSERT((pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE )&& (pTaskInfo->streamInfo.submit.msgStr == NULL));
|
if((pTaskInfo->execModel != OPTR_EXEC_MODEL_QUEUE) || (pTaskInfo->streamInfo.submit.msgStr != NULL)){
|
||||||
|
qError("qStreamSetScanMemData err:%d,%p", pTaskInfo->execModel, pTaskInfo->streamInfo.submit.msgStr);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
qDebug("set the submit block for future scan");
|
qDebug("set the submit block for future scan");
|
||||||
|
|
||||||
pTaskInfo->streamInfo.submit = submit;
|
pTaskInfo->streamInfo.submit = submit;
|
||||||
|
@ -1063,7 +1052,6 @@ int32_t qStreamSetScanMemData(qTaskInfo_t tinfo, SPackedData submit) {
|
||||||
int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subType) {
|
int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subType) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
SOperatorInfo* pOperator = pTaskInfo->pRoot;
|
SOperatorInfo* pOperator = pTaskInfo->pRoot;
|
||||||
ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE);
|
|
||||||
pTaskInfo->streamInfo.prepareStatus = *pOffset;
|
pTaskInfo->streamInfo.prepareStatus = *pOffset;
|
||||||
pTaskInfo->streamInfo.returned = 0;
|
pTaskInfo->streamInfo.returned = 0;
|
||||||
|
|
||||||
|
@ -1076,7 +1064,10 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
|
|
||||||
// TODO add more check
|
// TODO add more check
|
||||||
if (pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) {
|
if (pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) {
|
||||||
ASSERT(pOperator->numOfDownstream == 1);
|
if(pOperator->numOfDownstream != 1){
|
||||||
|
qError("pOperator->numOfDownstream != 1:%d", pOperator->numOfDownstream);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
pOperator = pOperator->pDownstream[0];
|
pOperator = pOperator->pDownstream[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1087,6 +1078,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
pTSInfo->base.dataReader = NULL;
|
pTSInfo->base.dataReader = NULL;
|
||||||
// let's seek to the next version in wal file
|
// let's seek to the next version in wal file
|
||||||
if (tqSeekVer(pInfo->tqReader, pOffset->version + 1, pTaskInfo->id.str) < 0) {
|
if (tqSeekVer(pInfo->tqReader, pOffset->version + 1, pTaskInfo->id.str) < 0) {
|
||||||
|
qError("tqSeekVer failed ver:%" PRId64, pOffset->version + 1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
|
@ -1101,6 +1093,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
uid = pTableInfo->uid;
|
uid = pTableInfo->uid;
|
||||||
ts = INT64_MIN;
|
ts = INT64_MIN;
|
||||||
} else {
|
} else {
|
||||||
|
qError("uid == 0 and tablelist size is 0");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1110,11 +1103,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info;
|
STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info;
|
||||||
int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList);
|
int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList);
|
||||||
|
|
||||||
#ifndef NDEBUG
|
qDebug("switch to next table %" PRId64 " ts %" PRId64 "% "PRId64 " rows returned", uid, ts, pInfo->pTableScanOp->resultInfo.totalRows);
|
||||||
qDebug("switch to next table %" PRId64 " (cursor %d), %" PRId64 " rows returned", uid,
|
|
||||||
pTableScanInfo->currentTable, pInfo->pTableScanOp->resultInfo.totalRows);
|
|
||||||
pInfo->pTableScanOp->resultInfo.totalRows = 0;
|
pInfo->pTableScanOp->resultInfo.totalRows = 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (int32_t i = 0; i < numOfTables; i++) {
|
for (int32_t i = 0; i < numOfTables; i++) {
|
||||||
|
@ -1127,7 +1117,10 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO after dropping table, table may not found
|
// TODO after dropping table, table may not found
|
||||||
ASSERT(found);
|
if(!found){
|
||||||
|
qError("uid not found in tablelist %" PRId64, uid);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (pTableScanInfo->base.dataReader == NULL) {
|
if (pTableScanInfo->base.dataReader == NULL) {
|
||||||
STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0);
|
STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0);
|
||||||
|
@ -1136,7 +1129,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
if (tsdbReaderOpen(pTableScanInfo->base.readHandle.vnode, &pTableScanInfo->base.cond, pList, num,
|
if (tsdbReaderOpen(pTableScanInfo->base.readHandle.vnode, &pTableScanInfo->base.cond, pList, num,
|
||||||
pTableScanInfo->pResBlock, &pTableScanInfo->base.dataReader, NULL) < 0 ||
|
pTableScanInfo->pResBlock, &pTableScanInfo->base.dataReader, NULL) < 0 ||
|
||||||
pTableScanInfo->base.dataReader == NULL) {
|
pTableScanInfo->base.dataReader == NULL) {
|
||||||
ASSERT(0);
|
qError("tsdbReaderOpen failed. uid:%" PRIi64, pOffset->uid);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1151,7 +1145,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
qDebug("tsdb reader offset seek to uid %" PRId64 " ts %" PRId64 ", table cur set to %d , all table num %d", uid,
|
qDebug("tsdb reader offset seek to uid %" PRId64 " ts %" PRId64 ", table cur set to %d , all table num %d", uid,
|
||||||
ts, pTableScanInfo->currentTable, numOfTables);
|
ts, pTableScanInfo->currentTable, numOfTables);
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
qError("invalid pOffset->type:%d", pOffset->type);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
SStreamRawScanInfo* pInfo = pOperator->info;
|
SStreamRawScanInfo* pInfo = pOperator->info;
|
||||||
|
@ -1183,7 +1178,6 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
|
|
||||||
STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0);
|
STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0);
|
||||||
int32_t size = tableListGetSize(pTaskInfo->pTableInfoList);
|
int32_t size = tableListGetSize(pTaskInfo->pTableInfoList);
|
||||||
ASSERT(size == 1);
|
|
||||||
|
|
||||||
tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, NULL, &pInfo->dataReader, NULL);
|
tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, NULL, &pInfo->dataReader, NULL);
|
||||||
|
|
||||||
|
@ -1212,7 +1206,10 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
|
||||||
|
|
||||||
void qProcessRspMsg(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet) {
|
void qProcessRspMsg(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet) {
|
||||||
SMsgSendInfo* pSendInfo = (SMsgSendInfo*)pMsg->info.ahandle;
|
SMsgSendInfo* pSendInfo = (SMsgSendInfo*)pMsg->info.ahandle;
|
||||||
assert(pMsg->info.ahandle != NULL);
|
if(pMsg->info.ahandle == NULL){
|
||||||
|
qError("pMsg->info.ahandle is NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SDataBuf buf = {.len = pMsg->contLen, .pData = NULL};
|
SDataBuf buf = {.len = pMsg->contLen, .pData = NULL};
|
||||||
|
|
||||||
|
|
|
@ -195,8 +195,11 @@ SResultRow* getNewResultRow(SDiskbasedBuf* pResultBuf, int32_t* currentPageId, i
|
||||||
*/
|
*/
|
||||||
SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pResultRowInfo, char* pData,
|
SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pResultRowInfo, char* pData,
|
||||||
int16_t bytes, bool masterscan, uint64_t groupId, SExecTaskInfo* pTaskInfo,
|
int16_t bytes, bool masterscan, uint64_t groupId, SExecTaskInfo* pTaskInfo,
|
||||||
bool isIntervalQuery, SAggSupporter* pSup) {
|
bool isIntervalQuery, SAggSupporter* pSup, bool keepGroup) {
|
||||||
SET_RES_WINDOW_KEY(pSup->keyBuf, pData, bytes, groupId);
|
SET_RES_WINDOW_KEY(pSup->keyBuf, pData, bytes, groupId);
|
||||||
|
if (!keepGroup) {
|
||||||
|
*(uint64_t*)pSup->keyBuf = calcGroupId(pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes));
|
||||||
|
}
|
||||||
|
|
||||||
SResultRowPosition* p1 =
|
SResultRowPosition* p1 =
|
||||||
(SResultRowPosition*)tSimpleHashGet(pSup->pResultRowHashTable, pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes));
|
(SResultRowPosition*)tSimpleHashGet(pSup->pResultRowHashTable, pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes));
|
||||||
|
@ -1034,7 +1037,7 @@ void doSetTableGroupOutputBuf(SOperatorInfo* pOperator, int32_t numOfOutput, uin
|
||||||
int32_t* rowEntryInfoOffset = pOperator->exprSupp.rowEntryInfoOffset;
|
int32_t* rowEntryInfoOffset = pOperator->exprSupp.rowEntryInfoOffset;
|
||||||
|
|
||||||
SResultRow* pResultRow = doSetResultOutBufByKey(pAggInfo->aggSup.pResultBuf, pResultRowInfo, (char*)&groupId,
|
SResultRow* pResultRow = doSetResultOutBufByKey(pAggInfo->aggSup.pResultBuf, pResultRowInfo, (char*)&groupId,
|
||||||
sizeof(groupId), true, groupId, pTaskInfo, false, &pAggInfo->aggSup);
|
sizeof(groupId), true, groupId, pTaskInfo, false, &pAggInfo->aggSup, true);
|
||||||
/*
|
/*
|
||||||
* not assign result buffer yet, add new result buffer
|
* not assign result buffer yet, add new result buffer
|
||||||
* all group belong to one result set, and each group result has different group id so set the id to be one
|
* all group belong to one result set, and each group result has different group id so set the id to be one
|
||||||
|
|
|
@ -277,6 +277,7 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SSDataBlock* pBlock) {
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
int32_t num = 0;
|
int32_t num = 0;
|
||||||
|
uint64_t groupId = 0;
|
||||||
for (int32_t j = 0; j < pBlock->info.rows; ++j) {
|
for (int32_t j = 0; j < pBlock->info.rows; ++j) {
|
||||||
// Compare with the previous row of this column, and do not set the output buffer again if they are identical.
|
// Compare with the previous row of this column, and do not set the output buffer again if they are identical.
|
||||||
if (!pInfo->isInit) {
|
if (!pInfo->isInit) {
|
||||||
|
@ -473,6 +474,8 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode*
|
||||||
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
||||||
setOperatorInfo(pOperator, "GroupbyAggOperator", 0, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "GroupbyAggOperator", 0, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
||||||
|
|
||||||
|
pInfo->binfo.mergeResultBlock = pAggNode->mergeDataBlock;
|
||||||
|
|
||||||
pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, hashGroupbyAggregate, NULL, destroyGroupOperatorInfo,
|
pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, hashGroupbyAggregate, NULL, destroyGroupOperatorInfo,
|
||||||
optrDefaultBufFn, NULL);
|
optrDefaultBufFn, NULL);
|
||||||
code = appendDownstream(pOperator, &downstream, 1);
|
code = appendDownstream(pOperator, &downstream, 1);
|
||||||
|
@ -917,7 +920,7 @@ int32_t setGroupResultOutputBuf(SOperatorInfo* pOperator, SOptrBasicInfo* binfo,
|
||||||
SqlFunctionCtx* pCtx = pOperator->exprSupp.pCtx;
|
SqlFunctionCtx* pCtx = pOperator->exprSupp.pCtx;
|
||||||
|
|
||||||
SResultRow* pResultRow =
|
SResultRow* pResultRow =
|
||||||
doSetResultOutBufByKey(pBuf, pResultRowInfo, (char*)pData, bytes, true, groupId, pTaskInfo, false, pAggSup);
|
doSetResultOutBufByKey(pBuf, pResultRowInfo, (char*)pData, bytes, true, groupId, pTaskInfo, false, pAggSup, false);
|
||||||
assert(pResultRow != NULL);
|
assert(pResultRow != NULL);
|
||||||
|
|
||||||
setResultRowInitCtx(pResultRow, pCtx, numOfCols, pOperator->exprSupp.rowEntryInfoOffset);
|
setResultRowInitCtx(pResultRow, pCtx, numOfCols, pOperator->exprSupp.rowEntryInfoOffset);
|
||||||
|
|
|
@ -580,7 +580,7 @@ void setFunctionResultOutput(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo, SA
|
||||||
int64_t tid = 0;
|
int64_t tid = 0;
|
||||||
int64_t groupId = 0;
|
int64_t groupId = 0;
|
||||||
SResultRow* pRow = doSetResultOutBufByKey(pSup->pResultBuf, pResultRowInfo, (char*)&tid, sizeof(tid), true, groupId,
|
SResultRow* pRow = doSetResultOutBufByKey(pSup->pResultBuf, pResultRowInfo, (char*)&tid, sizeof(tid), true, groupId,
|
||||||
pTaskInfo, false, pSup);
|
pTaskInfo, false, pSup, true);
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||||
struct SResultRowEntryInfo* pEntry = getResultEntryInfo(pRow, i, rowEntryInfoOffset);
|
struct SResultRowEntryInfo* pEntry = getResultEntryInfo(pRow, i, rowEntryInfoOffset);
|
||||||
|
|
|
@ -1608,8 +1608,6 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) {
|
||||||
if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
||||||
if (pResult && pResult->info.rows > 0) {
|
if (pResult && pResult->info.rows > 0) {
|
||||||
qDebug("queue scan tsdb return %d rows min:%" PRId64 " max:%" PRId64, pResult->info.rows,
|
|
||||||
pResult->info.window.skey, pResult->info.window.ekey);
|
|
||||||
qDebug("queue scan tsdb return %d rows min:%" PRId64 " max:%" PRId64 " wal curVersion:%" PRId64, pResult->info.rows,
|
qDebug("queue scan tsdb return %d rows min:%" PRId64 " max:%" PRId64 " wal curVersion:%" PRId64, pResult->info.rows,
|
||||||
pResult->info.window.skey, pResult->info.window.ekey, pInfo->tqReader->pWalReader->curVersion);
|
pResult->info.window.skey, pResult->info.window.ekey, pInfo->tqReader->pWalReader->curVersion);
|
||||||
pTaskInfo->streamInfo.returned = 1;
|
pTaskInfo->streamInfo.returned = 1;
|
||||||
|
@ -1724,9 +1722,9 @@ static void setBlockGroupIdByUid(SStreamScanInfo* pInfo, SSDataBlock* pBlock) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doCheckUpdate(SStreamScanInfo* pInfo, TSKEY endKey) {
|
static void doCheckUpdate(SStreamScanInfo* pInfo, TSKEY endKey, SSDataBlock* pBlock) {
|
||||||
if (pInfo->pUpdateInfo) {
|
if (pInfo->pUpdateInfo) {
|
||||||
checkUpdateData(pInfo, true, pInfo->pRes, true);
|
checkUpdateData(pInfo, true, pBlock, true);
|
||||||
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, endKey);
|
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, endKey);
|
||||||
if (pInfo->pUpdateDataRes->info.rows > 0) {
|
if (pInfo->pUpdateDataRes->info.rows > 0) {
|
||||||
pInfo->updateResIndex = 0;
|
pInfo->updateResIndex = 0;
|
||||||
|
@ -1758,11 +1756,13 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
pTSInfo->base.cond.endVersion = pTaskInfo->streamInfo.fillHistoryVer1;
|
pTSInfo->base.cond.endVersion = pTaskInfo->streamInfo.fillHistoryVer1;
|
||||||
qDebug("stream recover step 1, from %" PRId64 " to %" PRId64, pTSInfo->base.cond.startVersion,
|
qDebug("stream recover step 1, from %" PRId64 " to %" PRId64, pTSInfo->base.cond.startVersion,
|
||||||
pTSInfo->base.cond.endVersion);
|
pTSInfo->base.cond.endVersion);
|
||||||
|
pTaskInfo->streamInfo.recoverStep = STREAM_RECOVER_STEP__SCAN1;
|
||||||
} else {
|
} else {
|
||||||
pTSInfo->base.cond.startVersion = pTaskInfo->streamInfo.fillHistoryVer1 + 1;
|
pTSInfo->base.cond.startVersion = pTaskInfo->streamInfo.fillHistoryVer1 + 1;
|
||||||
pTSInfo->base.cond.endVersion = pTaskInfo->streamInfo.fillHistoryVer2;
|
pTSInfo->base.cond.endVersion = pTaskInfo->streamInfo.fillHistoryVer2;
|
||||||
qDebug("stream recover step 2, from %" PRId64 " to %" PRId64, pTSInfo->base.cond.startVersion,
|
qDebug("stream recover step 2, from %" PRId64 " to %" PRId64, pTSInfo->base.cond.startVersion,
|
||||||
pTSInfo->base.cond.endVersion);
|
pTSInfo->base.cond.endVersion);
|
||||||
|
pTaskInfo->streamInfo.recoverStep = STREAM_RECOVER_STEP__SCAN2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*resetTableScanInfo(pTSInfo, pWin);*/
|
/*resetTableScanInfo(pTSInfo, pWin);*/
|
||||||
|
@ -1772,11 +1772,11 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
|
|
||||||
pTSInfo->scanTimes = 0;
|
pTSInfo->scanTimes = 0;
|
||||||
pTSInfo->currentGroupId = -1;
|
pTSInfo->currentGroupId = -1;
|
||||||
pTaskInfo->streamInfo.recoverStep = STREAM_RECOVER_STEP__SCAN;
|
|
||||||
pTaskInfo->streamInfo.recoverScanFinished = false;
|
pTaskInfo->streamInfo.recoverScanFinished = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pTaskInfo->streamInfo.recoverStep == STREAM_RECOVER_STEP__SCAN) {
|
if (pTaskInfo->streamInfo.recoverStep == STREAM_RECOVER_STEP__SCAN1 ||
|
||||||
|
pTaskInfo->streamInfo.recoverStep == STREAM_RECOVER_STEP__SCAN2) {
|
||||||
if (pInfo->blockRecoverContiCnt > 100) {
|
if (pInfo->blockRecoverContiCnt > 100) {
|
||||||
pInfo->blockRecoverTotCnt += pInfo->blockRecoverContiCnt;
|
pInfo->blockRecoverTotCnt += pInfo->blockRecoverContiCnt;
|
||||||
pInfo->blockRecoverContiCnt = 0;
|
pInfo->blockRecoverContiCnt = 0;
|
||||||
|
@ -1789,6 +1789,27 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
printDataBlock(pInfo->pRecoverRes, "scan recover");
|
printDataBlock(pInfo->pRecoverRes, "scan recover");
|
||||||
return pInfo->pRecoverRes;
|
return pInfo->pRecoverRes;
|
||||||
} break;
|
} break;
|
||||||
|
case STREAM_SCAN_FROM_UPDATERES: {
|
||||||
|
generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes);
|
||||||
|
prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex);
|
||||||
|
pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE;
|
||||||
|
return pInfo->pUpdateRes;
|
||||||
|
} break;
|
||||||
|
case STREAM_SCAN_FROM_DATAREADER_RANGE: {
|
||||||
|
SSDataBlock* pSDB = doRangeScan(pInfo, pInfo->pUpdateRes, pInfo->primaryTsIndex, &pInfo->updateResIndex);
|
||||||
|
if (pSDB) {
|
||||||
|
STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info;
|
||||||
|
uint64_t version = getReaderMaxVersion(pTableScanInfo->base.dataReader);
|
||||||
|
updateInfoSetScanRange(pInfo->pUpdateInfo, &pTableScanInfo->base.cond.twindows, pInfo->groupId, version);
|
||||||
|
pSDB->info.type = pInfo->scanMode == STREAM_SCAN_FROM_DATAREADER_RANGE ? STREAM_NORMAL : STREAM_PULL_DATA;
|
||||||
|
checkUpdateData(pInfo, true, pSDB, false);
|
||||||
|
// printDataBlock(pSDB, "stream scan update");
|
||||||
|
calBlockTbName(pInfo, pSDB);
|
||||||
|
return pSDB;
|
||||||
|
}
|
||||||
|
blockDataCleanup(pInfo->pUpdateDataRes);
|
||||||
|
pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE;
|
||||||
|
} break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1798,8 +1819,12 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
pInfo->blockRecoverContiCnt++;
|
pInfo->blockRecoverContiCnt++;
|
||||||
calBlockTbName(pInfo, pInfo->pRecoverRes);
|
calBlockTbName(pInfo, pInfo->pRecoverRes);
|
||||||
if (pInfo->pUpdateInfo) {
|
if (pInfo->pUpdateInfo) {
|
||||||
TSKEY maxTs = updateInfoFillBlockData(pInfo->pUpdateInfo, pInfo->pRecoverRes, pInfo->primaryTsIndex);
|
if (pTaskInfo->streamInfo.recoverStep == STREAM_RECOVER_STEP__SCAN1) {
|
||||||
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, maxTs);
|
TSKEY maxTs = updateInfoFillBlockData(pInfo->pUpdateInfo, pInfo->pRecoverRes, pInfo->primaryTsIndex);
|
||||||
|
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, maxTs);
|
||||||
|
} else {
|
||||||
|
doCheckUpdate(pInfo, pInfo->pRecoverRes->info.window.ekey, pInfo->pRecoverRes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (pInfo->pCreateTbRes->info.rows > 0) {
|
if (pInfo->pCreateTbRes->info.rows > 0) {
|
||||||
pInfo->scanMode = STREAM_SCAN_FROM_RES;
|
pInfo->scanMode = STREAM_SCAN_FROM_RES;
|
||||||
|
@ -1910,7 +1935,7 @@ FETCH_NEXT_BLOCK:
|
||||||
switch (pInfo->scanMode) {
|
switch (pInfo->scanMode) {
|
||||||
case STREAM_SCAN_FROM_RES: {
|
case STREAM_SCAN_FROM_RES: {
|
||||||
pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE;
|
pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE;
|
||||||
doCheckUpdate(pInfo, pInfo->pRes->info.window.ekey);
|
doCheckUpdate(pInfo, pInfo->pRes->info.window.ekey, pInfo->pRes);
|
||||||
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
|
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
|
||||||
pInfo->pRes->info.dataLoad = 1;
|
pInfo->pRes->info.dataLoad = 1;
|
||||||
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
|
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
|
||||||
|
@ -2011,7 +2036,7 @@ FETCH_NEXT_BLOCK:
|
||||||
return pInfo->pCreateTbRes;
|
return pInfo->pCreateTbRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
doCheckUpdate(pInfo, pBlockInfo->window.ekey);
|
doCheckUpdate(pInfo, pBlockInfo->window.ekey, pInfo->pRes);
|
||||||
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
|
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
|
||||||
pInfo->pRes->info.dataLoad = 1;
|
pInfo->pRes->info.dataLoad = 1;
|
||||||
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
|
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
|
||||||
|
|
|
@ -78,7 +78,7 @@ static int32_t setTimeWindowOutputBuf(SResultRowInfo* pResultRowInfo, STimeWindo
|
||||||
int32_t numOfOutput, int32_t* rowEntryInfoOffset, SAggSupporter* pAggSup,
|
int32_t numOfOutput, int32_t* rowEntryInfoOffset, SAggSupporter* pAggSup,
|
||||||
SExecTaskInfo* pTaskInfo) {
|
SExecTaskInfo* pTaskInfo) {
|
||||||
SResultRow* pResultRow = doSetResultOutBufByKey(pAggSup->pResultBuf, pResultRowInfo, (char*)&win->skey, TSDB_KEYSIZE,
|
SResultRow* pResultRow = doSetResultOutBufByKey(pAggSup->pResultBuf, pResultRowInfo, (char*)&win->skey, TSDB_KEYSIZE,
|
||||||
masterscan, tableGroupId, pTaskInfo, true, pAggSup);
|
masterscan, tableGroupId, pTaskInfo, true, pAggSup, true);
|
||||||
|
|
||||||
if (pResultRow == NULL) {
|
if (pResultRow == NULL) {
|
||||||
*pResult = NULL;
|
*pResult = NULL;
|
||||||
|
@ -939,7 +939,6 @@ static void hashIntervalAgg(SOperatorInfo* pOperatorInfo, SResultRowInfo* pResul
|
||||||
TSKEY ekey = ascScan ? win.ekey : win.skey;
|
TSKEY ekey = ascScan ? win.ekey : win.skey;
|
||||||
int32_t forwardRows =
|
int32_t forwardRows =
|
||||||
getNumOfRowsInTimeWindow(&pBlock->info, tsCols, startPos, ekey, binarySearchForKey, NULL, pInfo->inputOrder);
|
getNumOfRowsInTimeWindow(&pBlock->info, tsCols, startPos, ekey, binarySearchForKey, NULL, pInfo->inputOrder);
|
||||||
ASSERT(forwardRows > 0);
|
|
||||||
|
|
||||||
// prev time window not interpolation yet.
|
// prev time window not interpolation yet.
|
||||||
if (pInfo->timeWindowInterpo) {
|
if (pInfo->timeWindowInterpo) {
|
||||||
|
@ -4805,10 +4804,9 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) {
|
||||||
setInverFunction(pSup->pCtx, pOperator->exprSupp.numOfExprs, pBlock->info.type);
|
setInverFunction(pSup->pCtx, pOperator->exprSupp.numOfExprs, pBlock->info.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.id.groupId, pInfo->pUpdatedMap);
|
||||||
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey);
|
pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey);
|
||||||
pInfo->twAggSup.minTs = TMIN(pInfo->twAggSup.minTs, pBlock->info.window.skey);
|
pInfo->twAggSup.minTs = TMIN(pInfo->twAggSup.minTs, pBlock->info.window.skey);
|
||||||
|
|
||||||
doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.id.groupId, pInfo->pUpdatedMap);
|
|
||||||
}
|
}
|
||||||
pOperator->status = OP_RES_TO_RETURN;
|
pOperator->status = OP_RES_TO_RETURN;
|
||||||
removeDeleteResults(pInfo->pUpdatedMap, pInfo->pDelWins);
|
removeDeleteResults(pInfo->pUpdatedMap, pInfo->pDelWins);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "tudf.h"
|
#include "tudf.h"
|
||||||
#include "tudfInt.h"
|
#include "tudfInt.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
#include "tdatablock.h"
|
#include "tdatablock.h"
|
||||||
#include "tdataformat.h"
|
#include "tdataformat.h"
|
||||||
|
@ -527,6 +528,7 @@ int32_t udfdConnectToMnode() {
|
||||||
tstrncpy(connReq.passwd, pass, sizeof(connReq.passwd));
|
tstrncpy(connReq.passwd, pass, sizeof(connReq.passwd));
|
||||||
connReq.pid = taosGetPId();
|
connReq.pid = taosGetPId();
|
||||||
connReq.startTime = taosGetTimestampMs();
|
connReq.startTime = taosGetTimestampMs();
|
||||||
|
strcpy(connReq.sVer, version);
|
||||||
|
|
||||||
int32_t contLen = tSerializeSConnectReq(NULL, 0, &connReq);
|
int32_t contLen = tSerializeSConnectReq(NULL, 0, &connReq);
|
||||||
void *pReq = rpcMallocCont(contLen);
|
void *pReq = rpcMallocCont(contLen);
|
||||||
|
|
|
@ -1462,7 +1462,7 @@ SListCell* nodesListErase(SNodeList* pList, SListCell* pCell) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void nodesListInsertList(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
|
void nodesListInsertList(SNodeList* pTarget, SListCell* pPos, SNodeList* pSrc) {
|
||||||
if (NULL == pTarget || NULL == pPos || NULL == pSrc) {
|
if (NULL == pTarget || NULL == pPos || NULL == pSrc || NULL == pSrc->pHead) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,7 @@ alter_db_option(A) ::= REPLICA NK_INTEGER(B).
|
||||||
//alter_db_option(A) ::= STRICT NK_STRING(B). { A.type = DB_OPTION_STRICT; A.val = B; }
|
//alter_db_option(A) ::= STRICT NK_STRING(B). { A.type = DB_OPTION_STRICT; A.val = B; }
|
||||||
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
|
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
|
||||||
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B). { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
|
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B). { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
|
||||||
|
alter_db_option(A) ::= MINROWS NK_INTEGER(B). { A.type = DB_OPTION_MINROWS; A.val = B; }
|
||||||
|
|
||||||
%type integer_list { SNodeList* }
|
%type integer_list { SNodeList* }
|
||||||
%destructor integer_list { nodesDestroyList($$); }
|
%destructor integer_list { nodesDestroyList($$); }
|
||||||
|
|
|
@ -201,6 +201,7 @@ int32_t smlBuildCol(STableDataCxt* pTableCxt, SSchema* schema, void* data, int32
|
||||||
SSmlKv* kv = (SSmlKv*)data;
|
SSmlKv* kv = (SSmlKv*)data;
|
||||||
if(kv->keyLen != strlen(pColSchema->name) || memcmp(kv->key, pColSchema->name, kv->keyLen) != 0 || kv->type != pColSchema->type){
|
if(kv->keyLen != strlen(pColSchema->name) || memcmp(kv->key, pColSchema->name, kv->keyLen) != 0 || kv->type != pColSchema->type){
|
||||||
ret = TSDB_CODE_SML_INVALID_DATA;
|
ret = TSDB_CODE_SML_INVALID_DATA;
|
||||||
|
uError("SML smlBuildCol error col not same %s", pColSchema->name);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (kv->type == TSDB_DATA_TYPE_NCHAR) {
|
if (kv->type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
@ -344,6 +345,7 @@ int32_t smlBindData(SQuery* query, bool dataFormat, SArray* tags, SArray* colsSc
|
||||||
}
|
}
|
||||||
if (!taosMbsToUcs4(kv->value, kv->length, (TdUcs4*)pUcs4, pColSchema->bytes - VARSTR_HEADER_SIZE, &len)) {
|
if (!taosMbsToUcs4(kv->value, kv->length, (TdUcs4*)pUcs4, pColSchema->bytes - VARSTR_HEADER_SIZE, &len)) {
|
||||||
if (errno == E2BIG) {
|
if (errno == E2BIG) {
|
||||||
|
uError("sml bind taosMbsToUcs4 error, kv length:%d, bytes:%d", (int)kv->length, pColSchema->bytes);
|
||||||
buildInvalidOperationMsg(&pBuf, "value too long");
|
buildInvalidOperationMsg(&pBuf, "value too long");
|
||||||
ret = TSDB_CODE_PAR_VALUE_TOO_LONG;
|
ret = TSDB_CODE_PAR_VALUE_TOO_LONG;
|
||||||
goto end;
|
goto end;
|
||||||
|
|
|
@ -2501,8 +2501,7 @@ static int32_t translateTable(STranslateContext* pCxt, SNode* pTable) {
|
||||||
code = translateSubquery(pCxt, pTempTable->pSubquery);
|
code = translateSubquery(pCxt, pTempTable->pSubquery);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
if (QUERY_NODE_SELECT_STMT == nodeType(pTempTable->pSubquery) &&
|
if (QUERY_NODE_SELECT_STMT == nodeType(pTempTable->pSubquery) &&
|
||||||
((SSelectStmt*)pTempTable->pSubquery)->isEmptyResult &&
|
((SSelectStmt*)pTempTable->pSubquery)->isEmptyResult && isSelectStmt(pCxt->pCurrStmt)) {
|
||||||
isSelectStmt(pCxt->pCurrStmt)) {
|
|
||||||
((SSelectStmt*)pCxt->pCurrStmt)->isEmptyResult = true;
|
((SSelectStmt*)pCxt->pCurrStmt)->isEmptyResult = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2935,6 +2934,9 @@ static int32_t translateSelectList(STranslateContext* pCxt, SSelectStmt* pSelect
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = translateFillValues(pCxt, pSelect);
|
code = translateFillValues(pCxt, pSelect);
|
||||||
}
|
}
|
||||||
|
if (NULL == pSelect->pProjectionList || 0 >= pSelect->pProjectionList->length) {
|
||||||
|
code = TSDB_CODE_PAR_INVALID_SELECTED_EXPR;
|
||||||
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3370,8 +3372,8 @@ static int32_t checkLimit(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_OFFSET_LESS_ZERO);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_OFFSET_LESS_ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != pSelect->pSlimit && NULL == pSelect->pPartitionByList) {
|
if (NULL != pSelect->pSlimit && (NULL == pSelect->pPartitionByList && NULL == pSelect->pGroupByList)) {
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -4251,6 +4253,7 @@ static void buildAlterDbReq(STranslateContext* pCxt, SAlterDatabaseStmt* pStmt,
|
||||||
pReq->cacheLastSize = pStmt->pOptions->cacheLastSize;
|
pReq->cacheLastSize = pStmt->pOptions->cacheLastSize;
|
||||||
pReq->replications = pStmt->pOptions->replica;
|
pReq->replications = pStmt->pOptions->replica;
|
||||||
pReq->sstTrigger = pStmt->pOptions->sstTrigger;
|
pReq->sstTrigger = pStmt->pOptions->sstTrigger;
|
||||||
|
pReq->minRows = pStmt->pOptions->minRowsPerBlock;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5570,7 +5573,8 @@ static int32_t checkCreateTopic(STranslateContext* pCxt, SCreateTopicStmt* pStmt
|
||||||
|
|
||||||
if (QUERY_NODE_SELECT_STMT == nodeType(pStmt->pQuery)) {
|
if (QUERY_NODE_SELECT_STMT == nodeType(pStmt->pQuery)) {
|
||||||
SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
|
SSelectStmt* pSelect = (SSelectStmt*)pStmt->pQuery;
|
||||||
if (!pSelect->isDistinct && QUERY_NODE_REAL_TABLE == nodeType(pSelect->pFromTable) &&
|
if (!pSelect->isDistinct &&
|
||||||
|
(NULL != pSelect->pFromTable && QUERY_NODE_REAL_TABLE == nodeType(pSelect->pFromTable)) &&
|
||||||
NULL == pSelect->pGroupByList && NULL == pSelect->pLimit && NULL == pSelect->pSlimit &&
|
NULL == pSelect->pGroupByList && NULL == pSelect->pLimit && NULL == pSelect->pSlimit &&
|
||||||
NULL == pSelect->pOrderByList && NULL == pSelect->pPartitionByList) {
|
NULL == pSelect->pOrderByList && NULL == pSelect->pPartitionByList) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -103,8 +103,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
|
||||||
return "Incorrect TIMESTAMP value: %s";
|
return "Incorrect TIMESTAMP value: %s";
|
||||||
case TSDB_CODE_PAR_OFFSET_LESS_ZERO:
|
case TSDB_CODE_PAR_OFFSET_LESS_ZERO:
|
||||||
return "soffset/offset can not be less than 0";
|
return "soffset/offset can not be less than 0";
|
||||||
case TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY:
|
case TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY:
|
||||||
return "slimit/soffset only available for PARTITION BY query";
|
return "slimit/soffset only available for PARTITION/GROUP BY query";
|
||||||
case TSDB_CODE_PAR_INVALID_TOPIC_QUERY:
|
case TSDB_CODE_PAR_INVALID_TOPIC_QUERY:
|
||||||
return "Invalid topic query";
|
return "Invalid topic query";
|
||||||
case TSDB_CODE_PAR_INVALID_DROP_STABLE:
|
case TSDB_CODE_PAR_INVALID_DROP_STABLE:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -108,6 +108,7 @@ TEST_F(ParserInitialATest, alterDnode) {
|
||||||
* | REPLICA int_value -- todo: enum 1, 3, default 1, unit replica
|
* | REPLICA int_value -- todo: enum 1, 3, default 1, unit replica
|
||||||
* | WAL_LEVEL int_value -- enum 1, 2, default 1
|
* | WAL_LEVEL int_value -- enum 1, 2, default 1
|
||||||
* | STT_TRIGGER int_value -- rang [1, 16], default 8
|
* | STT_TRIGGER int_value -- rang [1, 16], default 8
|
||||||
|
* | MINROWS int_value -- rang [10, 1000], default 100
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
TEST_F(ParserInitialATest, alterDatabase) {
|
TEST_F(ParserInitialATest, alterDatabase) {
|
||||||
|
@ -133,6 +134,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
||||||
expect.cacheLastSize = -1;
|
expect.cacheLastSize = -1;
|
||||||
expect.replications = -1;
|
expect.replications = -1;
|
||||||
expect.sstTrigger = -1;
|
expect.sstTrigger = -1;
|
||||||
|
expect.minRows = -1;
|
||||||
};
|
};
|
||||||
auto setAlterDbBuffer = [&](int32_t buffer) { expect.buffer = buffer; };
|
auto setAlterDbBuffer = [&](int32_t buffer) { expect.buffer = buffer; };
|
||||||
auto setAlterDbPageSize = [&](int32_t pageSize) { expect.pageSize = pageSize; };
|
auto setAlterDbPageSize = [&](int32_t pageSize) { expect.pageSize = pageSize; };
|
||||||
|
@ -150,6 +152,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
||||||
auto setAlterDbCacheModel = [&](int8_t cacheModel) { expect.cacheLast = cacheModel; };
|
auto setAlterDbCacheModel = [&](int8_t cacheModel) { expect.cacheLast = cacheModel; };
|
||||||
auto setAlterDbReplica = [&](int8_t replications) { expect.replications = replications; };
|
auto setAlterDbReplica = [&](int8_t replications) { expect.replications = replications; };
|
||||||
auto setAlterDbSttTrigger = [&](int8_t sstTrigger) { expect.sstTrigger = sstTrigger; };
|
auto setAlterDbSttTrigger = [&](int8_t sstTrigger) { expect.sstTrigger = sstTrigger; };
|
||||||
|
auto setAlterDbMinRows = [&](int32_t minRows) { expect.minRows = minRows; };
|
||||||
|
|
||||||
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
||||||
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_ALTER_DATABASE_STMT);
|
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_ALTER_DATABASE_STMT);
|
||||||
|
@ -170,6 +173,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
||||||
ASSERT_EQ(req.cacheLast, expect.cacheLast);
|
ASSERT_EQ(req.cacheLast, expect.cacheLast);
|
||||||
ASSERT_EQ(req.replications, expect.replications);
|
ASSERT_EQ(req.replications, expect.replications);
|
||||||
ASSERT_EQ(req.sstTrigger, expect.sstTrigger);
|
ASSERT_EQ(req.sstTrigger, expect.sstTrigger);
|
||||||
|
ASSERT_EQ(req.minRows, expect.minRows);
|
||||||
});
|
});
|
||||||
|
|
||||||
const int32_t MINUTE_PER_DAY = MILLISECOND_PER_DAY / MILLISECOND_PER_MINUTE;
|
const int32_t MINUTE_PER_DAY = MILLISECOND_PER_DAY / MILLISECOND_PER_MINUTE;
|
||||||
|
@ -277,6 +281,15 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
||||||
setAlterDbSttTrigger(16);
|
setAlterDbSttTrigger(16);
|
||||||
run("ALTER DATABASE test STT_TRIGGER 16");
|
run("ALTER DATABASE test STT_TRIGGER 16");
|
||||||
clearAlterDbReq();
|
clearAlterDbReq();
|
||||||
|
|
||||||
|
initAlterDb("test");
|
||||||
|
setAlterDbMinRows(10);
|
||||||
|
run("ALTER DATABASE test MINROWS 10");
|
||||||
|
setAlterDbMinRows(50);
|
||||||
|
run("ALTER DATABASE test MINROWS 50");
|
||||||
|
setAlterDbMinRows(1000);
|
||||||
|
run("ALTER DATABASE test MINROWS 1000");
|
||||||
|
clearAlterDbReq();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserInitialATest, alterDatabaseSemanticCheck) {
|
TEST_F(ParserInitialATest, alterDatabaseSemanticCheck) {
|
||||||
|
|
|
@ -59,6 +59,8 @@ int32_t sclCreateColumnInfoData(SDataType *pType, int32_t numOfRows, SScalarPara
|
||||||
|
|
||||||
pParam->columnData = pColumnData;
|
pParam->columnData = pColumnData;
|
||||||
pParam->colAlloced = true;
|
pParam->colAlloced = true;
|
||||||
|
pParam->numOfRows = numOfRows;
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,6 +742,10 @@ int32_t sclExecFunction(SFunctionNode *node, SScalarCtx *ctx, SScalarParam *outp
|
||||||
SCL_ERR_JRET(code);
|
SCL_ERR_JRET(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rowNum == 0) {
|
||||||
|
goto _return;
|
||||||
|
}
|
||||||
|
|
||||||
code = (*ffpSet.process)(params, paramNum, output);
|
code = (*ffpSet.process)(params, paramNum, output);
|
||||||
if (code) {
|
if (code) {
|
||||||
sclError("scalar function exec failed, funcId:%d, code:%s", node->funcId, tstrerror(code));
|
sclError("scalar function exec failed, funcId:%d, code:%s", node->funcId, tstrerror(code));
|
||||||
|
|
|
@ -1055,9 +1055,9 @@ int32_t toISO8601Function(SScalarParam *pInput, int32_t inputNum, SScalarParam *
|
||||||
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
||||||
timeVal = timeVal / 1000;
|
timeVal = timeVal / 1000;
|
||||||
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
|
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
|
||||||
timeVal = timeVal / (1000 * 1000);
|
timeVal = timeVal / ((int64_t)(1000 * 1000));
|
||||||
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
|
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
|
||||||
timeVal = timeVal / (1000 * 1000 * 1000);
|
timeVal = timeVal / ((int64_t)(1000 * 1000 * 1000));
|
||||||
} else {
|
} else {
|
||||||
colDataSetNULL(pOutput->columnData, i);
|
colDataSetNULL(pOutput->columnData, i);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1317,19 +1317,19 @@ int32_t timeTruncateFunction(SScalarParam *pInput, int32_t inputNum, SScalarPara
|
||||||
case 86400000: { /* 1d */
|
case 86400000: { /* 1d */
|
||||||
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
||||||
if (ignoreTz) {
|
if (ignoreTz) {
|
||||||
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000)) % (86400L * 1000);
|
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000)) % (((int64_t)86400) * 1000);
|
||||||
} else {
|
} else {
|
||||||
timeVal = timeVal / 1000 / 86400 * 86400 * 1000;
|
timeVal = timeVal / 1000 / 86400 * 86400 * 1000;
|
||||||
}
|
}
|
||||||
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
|
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
|
||||||
if (ignoreTz) {
|
if (ignoreTz) {
|
||||||
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000000)) % (86400L * 1000000);
|
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000000)) % (((int64_t)86400) * 1000000);
|
||||||
} else {
|
} else {
|
||||||
timeVal = timeVal / 1000000 / 86400 * 86400 * 1000000;
|
timeVal = timeVal / 1000000 / 86400 * 86400 * 1000000;
|
||||||
}
|
}
|
||||||
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
|
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
|
||||||
if (ignoreTz) {
|
if (ignoreTz) {
|
||||||
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000000000)) % (86400L * 1000000000);
|
timeVal = timeVal - (timeVal + offsetFromTz(timezone, 1000000000)) % (((int64_t)86400) * 1000000000);
|
||||||
} else {
|
} else {
|
||||||
timeVal = timeVal / 1000000000 / 86400 * 86400 * 1000000000;
|
timeVal = timeVal / 1000000000 / 86400 * 86400 * 1000000000;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1082,21 +1082,15 @@ void syncNodePreClose(SSyncNode* pSyncNode) {
|
||||||
ASSERT(pSyncNode->pFsm != NULL);
|
ASSERT(pSyncNode->pFsm != NULL);
|
||||||
ASSERT(pSyncNode->pFsm->FpApplyQueueItems != NULL);
|
ASSERT(pSyncNode->pFsm->FpApplyQueueItems != NULL);
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int32_t aqItems = pSyncNode->pFsm->FpApplyQueueItems(pSyncNode->pFsm);
|
|
||||||
sTrace("vgId:%d, pre close, %d items in apply queue", pSyncNode->vgId, aqItems);
|
|
||||||
if (aqItems == 0 || aqItems == -1) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
taosMsleep(20);
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop elect timer
|
// stop elect timer
|
||||||
syncNodeStopElectTimer(pSyncNode);
|
syncNodeStopElectTimer(pSyncNode);
|
||||||
|
|
||||||
// stop heartbeat timer
|
// stop heartbeat timer
|
||||||
syncNodeStopHeartbeatTimer(pSyncNode);
|
syncNodeStopHeartbeatTimer(pSyncNode);
|
||||||
|
|
||||||
|
// stop ping timer
|
||||||
|
syncNodeStopPingTimer(pSyncNode);
|
||||||
|
|
||||||
// clean rsp
|
// clean rsp
|
||||||
syncRespCleanRsp(pSyncNode->pSyncRespMgr);
|
syncRespCleanRsp(pSyncNode->pSyncRespMgr);
|
||||||
}
|
}
|
||||||
|
@ -1120,10 +1114,11 @@ void syncNodeClose(SSyncNode* pSyncNode) {
|
||||||
if (pSyncNode == NULL) return;
|
if (pSyncNode == NULL) return;
|
||||||
sNInfo(pSyncNode, "sync close, node:%p", pSyncNode);
|
sNInfo(pSyncNode, "sync close, node:%p", pSyncNode);
|
||||||
|
|
||||||
|
syncRespCleanRsp(pSyncNode->pSyncRespMgr);
|
||||||
|
|
||||||
syncNodeStopPingTimer(pSyncNode);
|
syncNodeStopPingTimer(pSyncNode);
|
||||||
syncNodeStopElectTimer(pSyncNode);
|
syncNodeStopElectTimer(pSyncNode);
|
||||||
syncNodeStopHeartbeatTimer(pSyncNode);
|
syncNodeStopHeartbeatTimer(pSyncNode);
|
||||||
|
|
||||||
syncNodeLogReplMgrDestroy(pSyncNode);
|
syncNodeLogReplMgrDestroy(pSyncNode);
|
||||||
|
|
||||||
syncRespMgrDestroy(pSyncNode->pSyncRespMgr);
|
syncRespMgrDestroy(pSyncNode->pSyncRespMgr);
|
||||||
|
@ -2165,8 +2160,8 @@ int32_t syncNodeAppend(SSyncNode* ths, SSyncRaftEntry* pEntry) {
|
||||||
// append to log buffer
|
// append to log buffer
|
||||||
if (syncLogBufferAppend(ths->pLogBuf, ths, pEntry) < 0) {
|
if (syncLogBufferAppend(ths->pLogBuf, ths, pEntry) < 0) {
|
||||||
sError("vgId:%d, failed to enqueue sync log buffer, index:%" PRId64, ths->vgId, pEntry->index);
|
sError("vgId:%d, failed to enqueue sync log buffer, index:%" PRId64, ths->vgId, pEntry->index);
|
||||||
terrno = TSDB_CODE_SYN_BUFFER_FULL;
|
ASSERT(terrno != 0);
|
||||||
(void)syncLogFsmExecute(ths, ths->pFsm, ths->state, raftStoreGetTerm(ths), pEntry, TSDB_CODE_SYN_BUFFER_FULL);
|
(void)syncLogFsmExecute(ths, ths->pFsm, ths->state, raftStoreGetTerm(ths), pEntry, terrno);
|
||||||
syncEntryDestroy(pEntry);
|
syncEntryDestroy(pEntry);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,16 @@ int32_t syncLogBufferAppend(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEnt
|
||||||
SyncIndex index = pEntry->index;
|
SyncIndex index = pEntry->index;
|
||||||
|
|
||||||
if (index - pBuf->startIndex >= pBuf->size) {
|
if (index - pBuf->startIndex >= pBuf->size) {
|
||||||
sError("vgId:%d, failed to append due to sync log buffer full. index:%" PRId64 "", pNode->vgId, index);
|
terrno = TSDB_CODE_SYN_BUFFER_FULL;
|
||||||
|
sError("vgId:%d, failed to append since %s. index:%" PRId64 "", pNode->vgId, terrstr(), index);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncIndex appliedIndex = pNode->pFsm->FpAppliedIndexCb(pNode->pFsm);
|
||||||
|
if (pNode->restoreFinish && pBuf->commitIndex - appliedIndex >= pBuf->size) {
|
||||||
|
terrno = TSDB_CODE_SYN_WRITE_STALL;
|
||||||
|
sError("vgId:%d, failed to append since %s. index:%" PRId64 ", commit-index:%" PRId64 ", applied-index:%" PRId64,
|
||||||
|
pNode->vgId, terrstr(), index, pBuf->commitIndex, appliedIndex);
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,7 +484,7 @@ _out:
|
||||||
|
|
||||||
int32_t syncLogFsmExecute(SSyncNode* pNode, SSyncFSM* pFsm, ESyncState role, SyncTerm term, SSyncRaftEntry* pEntry,
|
int32_t syncLogFsmExecute(SSyncNode* pNode, SSyncFSM* pFsm, ESyncState role, SyncTerm term, SSyncRaftEntry* pEntry,
|
||||||
int32_t applyCode) {
|
int32_t applyCode) {
|
||||||
if ((pNode->replicaNum == 1) && pNode->restoreFinish && pNode->vgId != 1) {
|
if (pNode->replicaNum == 1 && pNode->restoreFinish && pNode->vgId != 1) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -587,10 +596,10 @@ _out:
|
||||||
// mark as restored if needed
|
// mark as restored if needed
|
||||||
if (!pNode->restoreFinish && pBuf->commitIndex >= pNode->commitIndex && pEntry != NULL &&
|
if (!pNode->restoreFinish && pBuf->commitIndex >= pNode->commitIndex && pEntry != NULL &&
|
||||||
currentTerm <= pEntry->term) {
|
currentTerm <= pEntry->term) {
|
||||||
pNode->pFsm->FpRestoreFinishCb(pNode->pFsm);
|
pNode->pFsm->FpRestoreFinishCb(pNode->pFsm, pBuf->commitIndex);
|
||||||
pNode->restoreFinish = true;
|
pNode->restoreFinish = true;
|
||||||
sInfo("vgId:%d, restore finished. log buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")", pNode->vgId,
|
sInfo("vgId:%d, restore finished. term:%" PRId64 ", log buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")",
|
||||||
pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
pNode->vgId, currentTerm, pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inBuf) {
|
if (!inBuf) {
|
||||||
|
|
|
@ -425,21 +425,6 @@ void cliHandleResp(SCliConn* conn) {
|
||||||
tDebug("%s conn %p ref by app", CONN_GET_INST_LABEL(conn), conn);
|
tDebug("%s conn %p ref by app", CONN_GET_INST_LABEL(conn), conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (TMSG_INFO(pHead->msgType - 1) != 0) {
|
|
||||||
// char buf[128] = {0};
|
|
||||||
// sprintf(buf, "%s", TMSG_INFO(pHead->msgType - 1));
|
|
||||||
// int* count = taosHashGet(pThrd->msgCount, TMSG_INFO(pHead->msgType - 1), strlen(TMSG_INFO(pHead->msgType - 1)));
|
|
||||||
// if (NULL == 0) {
|
|
||||||
// int localCount = 1;
|
|
||||||
// taosHashPut(pThrd->msgCount, TMSG_INFO(pHead->msgType - 1), strlen(TMSG_INFO(pHead->msgType - 1)), &localCount,
|
|
||||||
// sizeof(localCount));
|
|
||||||
// } else {
|
|
||||||
// int localCount = *count - 1;
|
|
||||||
// taosHashPut(pThrd->msgCount, TMSG_INFO(pHead->msgType - 1), strlen(TMSG_INFO(pHead->msgType - 1)), &localCount,
|
|
||||||
// sizeof(localCount));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
STraceId* trace = &transMsg.info.traceId;
|
STraceId* trace = &transMsg.info.traceId;
|
||||||
tGDebug("%s conn %p %s received from %s, local info:%s, len:%d, code str:%s", CONN_GET_INST_LABEL(conn), conn,
|
tGDebug("%s conn %p %s received from %s, local info:%s, len:%d, code str:%s", CONN_GET_INST_LABEL(conn), conn,
|
||||||
TMSG_INFO(pHead->msgType), conn->dst, conn->src, pHead->msgLen, tstrerror(transMsg.code));
|
TMSG_INFO(pHead->msgType), conn->dst, conn->src, pHead->msgLen, tstrerror(transMsg.code));
|
||||||
|
@ -1118,19 +1103,6 @@ void cliSend(SCliConn* pConn) {
|
||||||
msgLen = (int32_t)ntohl((uint32_t)(pHead->msgLen));
|
msgLen = (int32_t)ntohl((uint32_t)(pHead->msgLen));
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (tmsgIsValid(pHead->msgType)) {
|
|
||||||
// char buf[128] = {0};
|
|
||||||
// sprintf(buf, "%s", TMSG_INFO(pHead->msgType));
|
|
||||||
// int* count = taosHashGet(pThrd->msgCount, buf, sizeof(buf));
|
|
||||||
// if (NULL == 0) {
|
|
||||||
// int localCount = 1;
|
|
||||||
// taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
|
||||||
// } else {
|
|
||||||
// int localCount = *count + 1;
|
|
||||||
// taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
tGDebug("%s conn %p %s is sent to %s, local info %s, len:%d", CONN_GET_INST_LABEL(pConn), pConn,
|
tGDebug("%s conn %p %s is sent to %s, local info %s, len:%d", CONN_GET_INST_LABEL(pConn), pConn,
|
||||||
TMSG_INFO(pHead->msgType), pConn->dst, pConn->src, msgLen);
|
TMSG_INFO(pHead->msgType), pConn->dst, pConn->src, msgLen);
|
||||||
|
|
||||||
|
@ -1525,16 +1497,19 @@ void cliHandleReq(SCliMsg* pMsg, SCliThrd* pThrd) {
|
||||||
destroyCmsg(pMsg);
|
destroyCmsg(pMsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tmsgIsValid(pMsg->msg.msgType)) {
|
|
||||||
char buf[128] = {0};
|
if (rpcDebugFlag & DEBUG_TRACE) {
|
||||||
sprintf(buf, "%s", TMSG_INFO(pMsg->msg.msgType));
|
if (tmsgIsValid(pMsg->msg.msgType)) {
|
||||||
int* count = taosHashGet(pThrd->msgCount, buf, sizeof(buf));
|
char buf[128] = {0};
|
||||||
if (NULL == 0) {
|
sprintf(buf, "%s", TMSG_INFO(pMsg->msg.msgType));
|
||||||
int localCount = 1;
|
int* count = taosHashGet(pThrd->msgCount, buf, sizeof(buf));
|
||||||
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
if (NULL == 0) {
|
||||||
} else {
|
int localCount = 1;
|
||||||
int localCount = *count + 1;
|
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
||||||
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
} else {
|
||||||
|
int localCount = *count + 1;
|
||||||
|
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1782,18 +1757,20 @@ static void cliAsyncCb(uv_async_t* handle) {
|
||||||
QUEUE_MOVE(&item->qmsg, &wq);
|
QUEUE_MOVE(&item->qmsg, &wq);
|
||||||
taosThreadMutexUnlock(&item->mtx);
|
taosThreadMutexUnlock(&item->mtx);
|
||||||
|
|
||||||
void* pIter = taosHashIterate(pThrd->msgCount, NULL);
|
if (rpcDebugFlag & DEBUG_TRACE) {
|
||||||
while (pIter != NULL) {
|
void* pIter = taosHashIterate(pThrd->msgCount, NULL);
|
||||||
int* count = pIter;
|
while (pIter != NULL) {
|
||||||
size_t len = 0;
|
int* count = pIter;
|
||||||
char* key = taosHashGetKey(pIter, &len);
|
size_t len = 0;
|
||||||
if (*count != 0) {
|
char* key = taosHashGetKey(pIter, &len);
|
||||||
tDebug("key: %s count: %d", key, *count);
|
if (*count != 0) {
|
||||||
}
|
tDebug("key: %s count: %d", key, *count);
|
||||||
|
}
|
||||||
|
|
||||||
pIter = taosHashIterate(pThrd->msgCount, pIter);
|
pIter = taosHashIterate(pThrd->msgCount, pIter);
|
||||||
|
}
|
||||||
|
tDebug("all conn count: %d", pThrd->newConnCount);
|
||||||
}
|
}
|
||||||
tDebug("all conn count: %d", pThrd->newConnCount);
|
|
||||||
|
|
||||||
int8_t supportBatch = pTransInst->supportBatch;
|
int8_t supportBatch = pTransInst->supportBatch;
|
||||||
if (supportBatch == 0) {
|
if (supportBatch == 0) {
|
||||||
|
@ -2379,17 +2356,18 @@ int cliAppCb(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
|
||||||
tGTrace("%s conn %p extract epset from msg", CONN_GET_INST_LABEL(pConn), pConn);
|
tGTrace("%s conn %p extract epset from msg", CONN_GET_INST_LABEL(pConn), pConn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (rpcDebugFlag & DEBUG_TRACE) {
|
||||||
if (tmsgIsValid(pResp->msgType - 1)) {
|
if (tmsgIsValid(pResp->msgType - 1)) {
|
||||||
char buf[128] = {0};
|
char buf[128] = {0};
|
||||||
sprintf(buf, "%s", TMSG_INFO(pResp->msgType - 1));
|
sprintf(buf, "%s", TMSG_INFO(pResp->msgType - 1));
|
||||||
int* count = taosHashGet(pThrd->msgCount, buf, sizeof(buf));
|
int* count = taosHashGet(pThrd->msgCount, buf, sizeof(buf));
|
||||||
if (NULL == 0) {
|
if (NULL == 0) {
|
||||||
int localCount = 0;
|
int localCount = 0;
|
||||||
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
||||||
} else {
|
} else {
|
||||||
int localCount = *count - 1;
|
int localCount = *count - 1;
|
||||||
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
taosHashPut(pThrd->msgCount, buf, sizeof(buf), &localCount, sizeof(localCount));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pCtx->pSem != NULL) {
|
if (pCtx->pSem != NULL) {
|
||||||
|
|
|
@ -25,7 +25,15 @@
|
||||||
|
|
||||||
void taosSeedRand(uint32_t seed) { return srand(seed); }
|
void taosSeedRand(uint32_t seed) { return srand(seed); }
|
||||||
|
|
||||||
uint32_t taosRand(void) { return rand(); }
|
uint32_t taosRand(void) {
|
||||||
|
#ifdef WINDOWS
|
||||||
|
unsigned int pSeed;
|
||||||
|
rand_s(&pSeed);
|
||||||
|
return pSeed;
|
||||||
|
#else
|
||||||
|
return rand();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t taosRandR(uint32_t* pSeed) {
|
uint32_t taosRandR(uint32_t* pSeed) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
|
|
@ -184,6 +184,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_ACCTS, "Too many accounts")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_ALREADY_EXIST, "User already exists")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_ALREADY_EXIST, "User already exists")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_NOT_EXIST, "Invalid user")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_NOT_EXIST, "Invalid user")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_USER_FORMAT, "Invalid user format")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_USER_FORMAT, "Invalid user format")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_NOT_AVAILABLE, "User not available")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_PASS_FORMAT, "Invalid password format")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_PASS_FORMAT, "Invalid password format")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_NO_USER_FROM_CONN, "Can not get user from conn")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_NO_USER_FROM_CONN, "Can not get user from conn")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_USERS, "Too many users")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_USERS, "Too many users")
|
||||||
|
@ -211,8 +212,8 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_BUFSIZE, "Invalid func bufSize"
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_COMMENT, "Invalid func comment")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_COMMENT, "Invalid func comment")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_RETRIEVE, "Invalid func retrieve msg")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_RETRIEVE, "Invalid func retrieve msg")
|
||||||
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST, "Tag index already exists")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST, "index already exists")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_NOT_EXIST, "Tag index not exists")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_NOT_EXIST, "index not exist")
|
||||||
|
|
||||||
|
|
||||||
// mnode-db
|
// mnode-db
|
||||||
|
@ -301,9 +302,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_STREAMS, "Too many streams")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TARGET_TABLE, "Cannot write the same stable as other stream")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TARGET_TABLE, "Cannot write the same stable as other stream")
|
||||||
|
|
||||||
// mnode-sma
|
// mnode-sma
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "SMA already exists")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "index already exists")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_NOT_EXIST, "SMA does not exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_NOT_EXIST, "index not exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_SMA_OPTION, "Invalid sma option")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_SMA_OPTION, "Invalid sma index option")
|
||||||
|
|
||||||
// dnode
|
// dnode
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_OFFLINE, "Dnode is offline")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DNODE_OFFLINE, "Dnode is offline")
|
||||||
|
@ -411,7 +412,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_TABLE_LIMITED, "Table creation limite
|
||||||
// sync
|
// sync
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_TIMEOUT, "Sync timeout")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_TIMEOUT, "Sync timeout")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_IS_LEADER, "Sync is leader")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_IS_LEADER, "Sync is leader")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NOT_LEADER, "Sync not leader")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NOT_LEADER, "Sync leader is unreachable")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_ONE_REPLICA, "Sync one replica")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_ONE_REPLICA, "Sync one replica")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NOT_IN_NEW_CONFIG, "Sync not in new config")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NOT_IN_NEW_CONFIG, "Sync not in new config")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NEW_CONFIG_ERROR, "Sync new config error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NEW_CONFIG_ERROR, "Sync new config error")
|
||||||
|
@ -419,9 +420,10 @@ TAOS_DEFINE_ERROR(TSDB_CODE_SYN_RECONFIG_NOT_READY, "Sync not ready for re
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_PROPOSE_NOT_READY, "Sync not ready for propose")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_PROPOSE_NOT_READY, "Sync not ready for propose")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_STANDBY_NOT_READY, "Sync not ready for standby")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_STANDBY_NOT_READY, "Sync not ready for standby")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_BATCH_ERROR, "Sync batch error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_BATCH_ERROR, "Sync batch error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_RESTORING, "Sync is restoring")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_RESTORING, "Sync leader is restoring")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INVALID_SNAPSHOT_MSG, "Sync invalid snapshot msg")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INVALID_SNAPSHOT_MSG, "Sync invalid snapshot msg")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_BUFFER_FULL, "Sync buffer is full")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_BUFFER_FULL, "Sync buffer is full")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRITE_STALL, "Sync write stall")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INTERNAL_ERROR, "Sync internal error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INTERNAL_ERROR, "Sync internal error")
|
||||||
|
|
||||||
//tq
|
//tq
|
||||||
|
@ -514,7 +516,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_ONE_JSON_TAG, "Only one tag if ther
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_NUM_OF_COL, "Query block has incorrect number of result columns")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_NUM_OF_COL, "Query block has incorrect number of result columns")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL, "Incorrect TIMESTAMP value")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL, "Incorrect TIMESTAMP value")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_OFFSET_LESS_ZERO, "soffset/offset can not be less than 0")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_OFFSET_LESS_ZERO, "soffset/offset can not be less than 0")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY, "slimit/soffset only available for PARTITION BY query")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY, "slimit/soffset only available for PARTITION/GROUP BY query")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TOPIC_QUERY, "Invalid topic query")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TOPIC_QUERY, "Invalid topic query")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_STABLE, "Cannot drop super table in batch")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_STABLE, "Cannot drop super table in batch")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, "Start(end) time of query range required or time range too large")
|
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, "Start(end) time of query range required or time range too large")
|
||||||
|
|
|
@ -580,6 +580,16 @@ static size_t taosLRUCacheShardGetUsage(SLRUCacheShard *shard) {
|
||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t taosLRUCacheShardGetElems(SLRUCacheShard *shard) {
|
||||||
|
int32_t elems = 0;
|
||||||
|
|
||||||
|
taosThreadMutexLock(&shard->mutex);
|
||||||
|
elems = shard->table.elems;
|
||||||
|
taosThreadMutexUnlock(&shard->mutex);
|
||||||
|
|
||||||
|
return elems;
|
||||||
|
}
|
||||||
|
|
||||||
static size_t taosLRUCacheShardGetPinnedUsage(SLRUCacheShard *shard) {
|
static size_t taosLRUCacheShardGetPinnedUsage(SLRUCacheShard *shard) {
|
||||||
size_t usage = 0;
|
size_t usage = 0;
|
||||||
|
|
||||||
|
@ -755,6 +765,16 @@ size_t taosLRUCacheGetUsage(SLRUCache *cache) {
|
||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t taosLRUCacheGetElems(SLRUCache *cache) {
|
||||||
|
int32_t elems = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < cache->numShards; ++i) {
|
||||||
|
elems += taosLRUCacheShardGetElems(&cache->shards[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return elems;
|
||||||
|
}
|
||||||
|
|
||||||
size_t taosLRUCacheGetPinnedUsage(SLRUCache *cache) {
|
size_t taosLRUCacheGetPinnedUsage(SLRUCache *cache) {
|
||||||
size_t usage = 0;
|
size_t usage = 0;
|
||||||
|
|
||||||
|
|
|
@ -108,49 +108,49 @@ class TDTestCase:
|
||||||
tdLog.info("%s" % cmd)
|
tdLog.info("%s" % cmd)
|
||||||
os.system("%s" % cmd)
|
os.system("%s" % cmd)
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.stb2)")
|
tdSql.query("select count(*) from (select distinct(tbname) from stmt_db.stb2)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.stb2")
|
tdSql.query("select count(*) from stmt_db.stb2")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
tdSql.query("select * from information_schema.ins_databases")
|
tdSql.query("select * from information_schema.ins_databases where name='stmt_db'")
|
||||||
tdSql.checkData(2, 14, "us")
|
tdSql.checkData(0, 14, "us")
|
||||||
|
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.`stb2-2`)")
|
tdSql.query("select count(*) from (select distinct(tbname) from stmt_db.`stb2-2`)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.`stb2-2`")
|
tdSql.query("select count(*) from stmt_db.`stb2-2`")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
|
|
||||||
cmd = "%s -f ./5-taos-tools/taosbenchmark/json/rest_auto_create_table.json" %binPath
|
cmd = "%s -f ./5-taos-tools/taosbenchmark/json/rest_auto_create_table.json" %binPath
|
||||||
tdLog.info("%s" % cmd)
|
tdLog.info("%s" % cmd)
|
||||||
os.system("%s" % cmd)
|
os.system("%s" % cmd)
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.stb3)")
|
tdSql.query("select count(*) from (select distinct(tbname) from rest_db.stb3)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.stb3")
|
tdSql.query("select count(*) from rest_db.stb3")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
tdSql.query("select * from information_schema.ins_databases")
|
tdSql.query("select * from information_schema.ins_databases where name='rest_db'")
|
||||||
tdSql.checkData(2, 14, "ns")
|
tdSql.checkData(0, 14, "ns")
|
||||||
|
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.`stb3-2`)")
|
tdSql.query("select count(*) from (select distinct(tbname) from rest_db.`stb3-2`)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.`stb3-2`")
|
tdSql.query("select count(*) from rest_db.`stb3-2`")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
|
|
||||||
cmd = "%s -f ./5-taos-tools/taosbenchmark/json/sml_auto_create_table.json" %binPath
|
cmd = "%s -f ./5-taos-tools/taosbenchmark/json/sml_auto_create_table.json" %binPath
|
||||||
tdLog.info("%s" % cmd)
|
tdLog.info("%s" % cmd)
|
||||||
os.system("%s" % cmd)
|
os.system("%s" % cmd)
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.stb4)")
|
tdSql.query("select count(*) from (select distinct(tbname) from sml_db.stb4)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.stb4")
|
tdSql.query("select count(*) from sml_db.stb4")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
|
|
||||||
tdSql.execute("reset query cache")
|
tdSql.execute("reset query cache")
|
||||||
tdSql.query("select count(*) from (select distinct(tbname) from db.`stb4-2`)")
|
tdSql.query("select count(*) from (select distinct(tbname) from sml_db.`stb4-2`)")
|
||||||
tdSql.checkData(0, 0, 8)
|
tdSql.checkData(0, 0, 8)
|
||||||
tdSql.query("select count(*) from db.`stb4-2`")
|
tdSql.query("select count(*) from sml_db.`stb4-2`")
|
||||||
tdSql.checkData(0, 0, 160)
|
tdSql.checkData(0, 0, 160)
|
||||||
|
|
||||||
tAdapter.stop()
|
tAdapter.stop()
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"num_of_records_per_req": 10,
|
"num_of_records_per_req": 10,
|
||||||
"databases": [{
|
"databases": [{
|
||||||
"dbinfo": {
|
"dbinfo": {
|
||||||
"name": "db",
|
"name": "rest_db",
|
||||||
"drop": "yes",
|
"drop": "yes",
|
||||||
"replica": 1,
|
"replica": 1,
|
||||||
"precision": "ns",
|
"precision": "ns",
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"num_of_records_per_req": 10,
|
"num_of_records_per_req": 10,
|
||||||
"databases": [{
|
"databases": [{
|
||||||
"dbinfo": {
|
"dbinfo": {
|
||||||
"name": "db",
|
"name": "sml_db",
|
||||||
"drop": "yes",
|
"drop": "yes",
|
||||||
"replica": 1,
|
"replica": 1,
|
||||||
"precision": "ms",
|
"precision": "ms",
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"num_of_records_per_req": 10,
|
"num_of_records_per_req": 10,
|
||||||
"databases": [{
|
"databases": [{
|
||||||
"dbinfo": {
|
"dbinfo": {
|
||||||
"name": "db",
|
"name": "stmt_db",
|
||||||
"drop": "yes",
|
"drop": "yes",
|
||||||
"replica": 1,
|
"replica": 1,
|
||||||
"precision": "us",
|
"precision": "us",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -274,6 +274,7 @@ function run_thread() {
|
||||||
# echo "$thread_no ${line} DONE"
|
# echo "$thread_no ${line} DONE"
|
||||||
if [ $ret -eq 0 ]; then
|
if [ $ret -eq 0 ]; then
|
||||||
echo -e "$case_index \e[34m DONE <<<<< \e[0m ${case_info} \e[34m[${total_time}s]\e[0m \e[32m success\e[0m"
|
echo -e "$case_index \e[34m DONE <<<<< \e[0m ${case_info} \e[34m[${total_time}s]\e[0m \e[32m success\e[0m"
|
||||||
|
flock -x $lock_file -c "echo \"${case_info}|success|${total_time}\" >>${success_case_file}"
|
||||||
else
|
else
|
||||||
if [ ! -z ${web_server} ]; then
|
if [ ! -z ${web_server} ]; then
|
||||||
flock -x $lock_file -c "echo -e \"${hosts[index]} ret:${ret} ${line}\n ${web_server}/$test_log_dir/${case_file}.txt\" >>${failed_case_file}"
|
flock -x $lock_file -c "echo -e \"${hosts[index]} ret:${ret} ${line}\n ${web_server}/$test_log_dir/${case_file}.txt\" >>${failed_case_file}"
|
||||||
|
@ -365,6 +366,8 @@ lock_file=$log_dir/$$.lock
|
||||||
index_file=$log_dir/case_index.txt
|
index_file=$log_dir/case_index.txt
|
||||||
stat_file=$log_dir/stat.txt
|
stat_file=$log_dir/stat.txt
|
||||||
failed_case_file=$log_dir/failed.txt
|
failed_case_file=$log_dir/failed.txt
|
||||||
|
success_case_file=$log_dir/success.txt
|
||||||
|
|
||||||
echo "0" >$index_file
|
echo "0" >$index_file
|
||||||
|
|
||||||
i=0
|
i=0
|
||||||
|
|
|
@ -69,12 +69,19 @@ ulimit -c unlimited
|
||||||
|
|
||||||
md5sum /usr/lib/libtaos.so.1
|
md5sum /usr/lib/libtaos.so.1
|
||||||
md5sum /home/TDinternal/debug/build/lib/libtaos.so
|
md5sum /home/TDinternal/debug/build/lib/libtaos.so
|
||||||
|
|
||||||
|
#define taospy 2.7.6
|
||||||
|
pip3 list|grep taospy
|
||||||
|
pip3 uninstall taospy -y
|
||||||
|
pip3 install taospy==2.7.6
|
||||||
|
|
||||||
$TIMEOUT_CMD $cmd
|
$TIMEOUT_CMD $cmd
|
||||||
RET=$?
|
RET=$?
|
||||||
echo "cmd exit code: $RET"
|
echo "cmd exit code: $RET"
|
||||||
md5sum /usr/lib/libtaos.so.1
|
md5sum /usr/lib/libtaos.so.1
|
||||||
md5sum /home/TDinternal/debug/build/lib/libtaos.so
|
md5sum /home/TDinternal/debug/build/lib/libtaos.so
|
||||||
|
|
||||||
|
|
||||||
if [ $RET -ne 0 ]; then
|
if [ $RET -ne 0 ]; then
|
||||||
pwd
|
pwd
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -130,8 +130,6 @@ docker run \
|
||||||
-v ${SOURCEDIR}:/usr/local/src/ \
|
-v ${SOURCEDIR}:/usr/local/src/ \
|
||||||
-v "$TMP_DIR/thread_volume/$thread_no/sim:${SIM_DIR}" \
|
-v "$TMP_DIR/thread_volume/$thread_no/sim:${SIM_DIR}" \
|
||||||
-v ${TMP_DIR}/thread_volume/$thread_no/coredump:$coredump_dir \
|
-v ${TMP_DIR}/thread_volume/$thread_no/coredump:$coredump_dir \
|
||||||
-v $WORKDIR/taos-connector-python/taos:/usr/local/lib/python3.8/site-packages/taos:ro \
|
|
||||||
-v $WORKDIR/taos-connector-python/taosrest:/usr/local/lib/python3.8/site-packages/taosrest:ro \
|
|
||||||
--rm --ulimit core=-1 taos_test:v1.0 $CONTAINER_TESTDIR/tests/parallel_test/run_case.sh -d "$exec_dir" -c "$cmd" $extra_param
|
--rm --ulimit core=-1 taos_test:v1.0 $CONTAINER_TESTDIR/tests/parallel_test/run_case.sh -d "$exec_dir" -c "$cmd" $extra_param
|
||||||
ret=$?
|
ret=$?
|
||||||
exit $ret
|
exit $ret
|
||||||
|
|
|
@ -285,8 +285,6 @@ sql_error alter database db keep -1
|
||||||
|
|
||||||
print ============== modify minrows
|
print ============== modify minrows
|
||||||
sql_error alter database db minrows 8
|
sql_error alter database db minrows 8
|
||||||
sql_error alter database db minrows 200
|
|
||||||
sql_error alter database db minrows 11
|
|
||||||
sql_error alter database db minrows 8000
|
sql_error alter database db minrows 8000
|
||||||
sql_error alter database db minrows 8001
|
sql_error alter database db minrows 8001
|
||||||
|
|
||||||
|
|
|
@ -415,12 +415,12 @@ if $data03 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 limit 1;
|
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 slimit 1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 limit 20 offset 9990;
|
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 slimit 20 soffset 9990;
|
||||||
if $rows != 10 then
|
if $rows != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
sql drop database if exists db1;
|
||||||
|
sql create database db1 vgroups 1;
|
||||||
|
sql use db1;
|
||||||
|
sql create stable sta (ts timestamp, f1 int, f2 binary(200)) tags(t1 int, t2 int, t3 int);
|
||||||
|
sql create table tba1 using sta tags(1, 1, 1);
|
||||||
|
sql create table tba2 using sta tags(2, 2, 2);
|
||||||
|
sql create table tba3 using sta tags(3, 3, 3);
|
||||||
|
sql create table tba4 using sta tags(4, 4, 4);
|
||||||
|
sql create table tba5 using sta tags(5, 5, 5);
|
||||||
|
sql create table tba6 using sta tags(6, 6, 6);
|
||||||
|
sql create table tba7 using sta tags(7, 7, 7);
|
||||||
|
sql create table tba8 using sta tags(8, 8, 8);
|
||||||
|
sql create index index1 on sta (t2);
|
||||||
|
sql insert into tba1 values ('2022-04-26 15:15:01', 1, "a");
|
||||||
|
sql insert into tba1 values ('2022-04-26 15:15:02', 11, "a");
|
||||||
|
sql insert into tba2 values ('2022-04-26 15:15:01', 2, "a");
|
||||||
|
sql insert into tba2 values ('2022-04-26 15:15:02', 22, "a");
|
||||||
|
sql insert into tba3 values ('2022-04-26 15:15:01', 3, "a");
|
||||||
|
sql insert into tba4 values ('2022-04-26 15:15:01', 4, "a");
|
||||||
|
sql insert into tba5 values ('2022-04-26 15:15:01', 5, "a");
|
||||||
|
sql insert into tba6 values ('2022-04-26 15:15:01', 6, "a");
|
||||||
|
sql insert into tba7 values ('2022-04-26 15:15:01', 7, "a");
|
||||||
|
sql insert into tba8 values ('2022-04-26 15:15:01', 8, "a");
|
||||||
|
|
||||||
|
sql select t1,count(*) from sta group by t1 limit 1;
|
||||||
|
if $rows != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,count(*) from sta group by t1 slimit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select f1,count(*) from sta group by f1 limit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select f1,count(*) from sta group by f1 slimit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by t1, f1 limit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by t1, f1 slimit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by f1, t1 limit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by f1, t1 slimit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select t1,count(*) from sta group by t1 order by t1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,count(*) from sta group by t1 order by t1 slimit 1;
|
||||||
|
if $rows != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select f1,count(*) from sta group by f1 order by f1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select f1,count(*) from sta group by f1 order by f1 slimit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by t1, f1 order by t1,f1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by t1, f1 order by t1,f1 slimit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by f1, t1 order by f1,t1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by f1, t1 order by f1,t1 slimit 1;
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select t1,count(*) from sta group by t1 slimit 1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select f1,count(*) from sta group by f1 slimit 1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by t1, f1 slimit 1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select t1,f1,count(*) from sta group by f1, t1 slimit 1 limit 1;
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -0,0 +1,71 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
|
||||||
|
print ===== step1
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 50
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ===== step2
|
||||||
|
|
||||||
|
sql create database test vgroups 4;
|
||||||
|
sql use test;
|
||||||
|
sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create stream streams1 trigger at_once into streamt1 as select _wstart, count(*) c1, count(a) c2 from st interval(1s) ;
|
||||||
|
sql insert into t1 values(1648791211000,1,2,3);
|
||||||
|
sql insert into t1 values(1648791212000,2,2,3);
|
||||||
|
|
||||||
|
$loop_count = 0
|
||||||
|
loop0:
|
||||||
|
|
||||||
|
sleep 300
|
||||||
|
|
||||||
|
$loop_count = $loop_count + 1
|
||||||
|
if $loop_count == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print 1 select * from streamt1;
|
||||||
|
sql select * from streamt1;
|
||||||
|
|
||||||
|
if $rows != 2 then
|
||||||
|
print rows=$rows
|
||||||
|
goto loop0
|
||||||
|
endi
|
||||||
|
|
||||||
|
print drop stream streams1
|
||||||
|
sql drop stream streams1;
|
||||||
|
|
||||||
|
print alter table streamt1 add column c3 double
|
||||||
|
sql alter table streamt1 add column c3 double;
|
||||||
|
|
||||||
|
print create stream streams1 trigger at_once into streamt1 as select _wstart, count(*) c1, count(a) c2, avg(b) c3 from st interval(1s) ;
|
||||||
|
sql create stream streams1 trigger at_once into streamt1 as select _wstart, count(*) c1, count(a) c2, avg(b) c3 from st interval(1s) ;
|
||||||
|
|
||||||
|
sql insert into t2 values(1648791213000,1,2,3);
|
||||||
|
sql insert into t1 values(1648791214000,1,2,3);
|
||||||
|
|
||||||
|
$loop_count = 0
|
||||||
|
loop1:
|
||||||
|
|
||||||
|
sleep 300
|
||||||
|
|
||||||
|
$loop_count = $loop_count + 1
|
||||||
|
if $loop_count == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print 2 select * from streamt1;
|
||||||
|
sql select * from streamt1;
|
||||||
|
|
||||||
|
if $rows != 4 then
|
||||||
|
print rows=$rows
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ======over
|
||||||
|
|
||||||
|
system sh/stop_dnodes.sh
|
|
@ -11,27 +11,24 @@
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
|
import os
|
||||||
import taos
|
import random
|
||||||
|
import socket
|
||||||
|
import string
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import os
|
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
|
||||||
import socket
|
|
||||||
import subprocess
|
|
||||||
import random
|
|
||||||
import string
|
|
||||||
import random
|
|
||||||
|
|
||||||
|
import taos
|
||||||
from util.log import *
|
|
||||||
from util.sql import *
|
|
||||||
from util.cases import *
|
from util.cases import *
|
||||||
from util.common import *
|
from util.common import *
|
||||||
|
from util.dnodes import *
|
||||||
|
from util.dnodes import TDDnode, TDDnodes
|
||||||
|
from util.log import *
|
||||||
|
from util.sql import *
|
||||||
from util.sqlset import *
|
from util.sqlset import *
|
||||||
|
|
||||||
from util.dnodes import *
|
|
||||||
from util.dnodes import TDDnodes
|
|
||||||
from util.dnodes import TDDnode
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# -------------- util --------------------------
|
# -------------- util --------------------------
|
||||||
|
@ -41,13 +38,13 @@ def pathSize(path):
|
||||||
total_size = 0
|
total_size = 0
|
||||||
for dirpath, dirnames, filenames in os.walk(path):
|
for dirpath, dirnames, filenames in os.walk(path):
|
||||||
for i in filenames:
|
for i in filenames:
|
||||||
#use join to concatenate all the components of path
|
# use join to concatenate all the components of path
|
||||||
f = os.path.join(dirpath, i)
|
f = os.path.join(dirpath, i)
|
||||||
#use getsize to generate size in bytes and add it to the total size
|
# use getsize to generate size in bytes and add it to the total size
|
||||||
total_size += os.path.getsize(f)
|
total_size += os.path.getsize(f)
|
||||||
#print(dirpath)
|
# print(dirpath)
|
||||||
|
|
||||||
print(" %s %.02f MB"%(path, total_size/1024/1024))
|
print(" %s %.02f MB" % (path, total_size/1024/1024))
|
||||||
return total_size
|
return total_size
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -67,24 +64,27 @@ def pathSize(path):
|
||||||
# --------------- cluster ------------------------
|
# --------------- cluster ------------------------
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
class MyDnodes(TDDnodes):
|
class MyDnodes(TDDnodes):
|
||||||
def __init__(self ,dnodes_lists):
|
def __init__(self, dnodes_lists):
|
||||||
super(MyDnodes,self).__init__()
|
super(MyDnodes, self).__init__()
|
||||||
self.dnodes = dnodes_lists # dnode must be TDDnode instance
|
self.dnodes = dnodes_lists # dnode must be TDDnode instance
|
||||||
self.simDeployed = False
|
self.simDeployed = False
|
||||||
|
|
||||||
|
|
||||||
class TagCluster:
|
class TagCluster:
|
||||||
noConn = True
|
noConn = True
|
||||||
|
|
||||||
def init(self, conn, logSql, replicaVar=1):
|
def init(self, conn, logSql, replicaVar=1):
|
||||||
tdLog.debug(f"start to excute {__file__}")
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
self.TDDnodes = None
|
self.TDDnodes = None
|
||||||
self.depoly_cluster(5)
|
self.depoly_cluster(5)
|
||||||
self.master_dnode = self.TDDnodes.dnodes[0]
|
self.master_dnode = self.TDDnodes.dnodes[0]
|
||||||
self.host=self.master_dnode.cfgDict["fqdn"]
|
self.host = self.master_dnode.cfgDict["fqdn"]
|
||||||
conn1 = taos.connect(self.master_dnode.cfgDict["fqdn"] , config=self.master_dnode.cfgDir)
|
conn1 = taos.connect(
|
||||||
|
self.master_dnode.cfgDict["fqdn"], config=self.master_dnode.cfgDir)
|
||||||
tdSql.init(conn1.cursor())
|
tdSql.init(conn1.cursor())
|
||||||
|
|
||||||
|
|
||||||
def getBuildPath(self):
|
def getBuildPath(self):
|
||||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
@ -101,8 +101,7 @@ class TagCluster:
|
||||||
break
|
break
|
||||||
return buildPath
|
return buildPath
|
||||||
|
|
||||||
|
def depoly_cluster(self, dnodes_nums):
|
||||||
def depoly_cluster(self ,dnodes_nums):
|
|
||||||
|
|
||||||
testCluster = False
|
testCluster = False
|
||||||
valgrind = 0
|
valgrind = 0
|
||||||
|
@ -126,7 +125,7 @@ class TagCluster:
|
||||||
self.TDDnodes.setAsan(tdDnodes.getAsan())
|
self.TDDnodes.setAsan(tdDnodes.getAsan())
|
||||||
self.TDDnodes.stopAll()
|
self.TDDnodes.stopAll()
|
||||||
for dnode in self.TDDnodes.dnodes:
|
for dnode in self.TDDnodes.dnodes:
|
||||||
self.TDDnodes.deploy(dnode.index,{})
|
self.TDDnodes.deploy(dnode.index, {})
|
||||||
|
|
||||||
for dnode in self.TDDnodes.dnodes:
|
for dnode in self.TDDnodes.dnodes:
|
||||||
self.TDDnodes.starttaosd(dnode.index)
|
self.TDDnodes.starttaosd(dnode.index)
|
||||||
|
@ -136,7 +135,8 @@ class TagCluster:
|
||||||
sql = ""
|
sql = ""
|
||||||
for dnode in self.TDDnodes.dnodes[1:]:
|
for dnode in self.TDDnodes.dnodes[1:]:
|
||||||
# print(dnode.cfgDict)
|
# print(dnode.cfgDict)
|
||||||
dnode_id = dnode.cfgDict["fqdn"] + ":" +dnode.cfgDict["serverPort"]
|
dnode_id = dnode.cfgDict["fqdn"] + \
|
||||||
|
":" + dnode.cfgDict["serverPort"]
|
||||||
if dnode_first_host == "":
|
if dnode_first_host == "":
|
||||||
dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0]
|
dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0]
|
||||||
dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1]
|
dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1]
|
||||||
|
@ -150,7 +150,6 @@ class TagCluster:
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
tdLog.info(" create cluster done! ")
|
tdLog.info(" create cluster done! ")
|
||||||
|
|
||||||
|
|
||||||
def getConnection(self, dnode):
|
def getConnection(self, dnode):
|
||||||
host = dnode.cfgDict["fqdn"]
|
host = dnode.cfgDict["fqdn"]
|
||||||
port = dnode.cfgDict["serverPort"]
|
port = dnode.cfgDict["serverPort"]
|
||||||
|
@ -168,7 +167,7 @@ class TagCluster:
|
||||||
class PerfDB:
|
class PerfDB:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.sqls = []
|
self.sqls = []
|
||||||
self.spends= []
|
self.spends = []
|
||||||
|
|
||||||
# execute
|
# execute
|
||||||
def execute(self, sql):
|
def execute(self, sql):
|
||||||
|
@ -203,7 +202,7 @@ class TDTestCase:
|
||||||
self.tagCluster = TagCluster()
|
self.tagCluster = TagCluster()
|
||||||
self.tagCluster.init(conn, logSql, replicaVar)
|
self.tagCluster.init(conn, logSql, replicaVar)
|
||||||
self.lenBinary = 64
|
self.lenBinary = 64
|
||||||
self.lenNchar = 32
|
self.lenNchar = 32
|
||||||
|
|
||||||
# column
|
# column
|
||||||
self.column_dict = {
|
self.column_dict = {
|
||||||
|
@ -254,12 +253,12 @@ class TDTestCase:
|
||||||
def query(self, sql):
|
def query(self, sql):
|
||||||
return self.dbs[self.cur].query(sql)
|
return self.dbs[self.cur].query(sql)
|
||||||
|
|
||||||
def set_stb_sql(self,stbname,column_dict,tag_dict):
|
def set_stb_sql(self, stbname, column_dict, tag_dict):
|
||||||
column_sql = ''
|
column_sql = ''
|
||||||
tag_sql = ''
|
tag_sql = ''
|
||||||
for k,v in column_dict.items():
|
for k, v in column_dict.items():
|
||||||
column_sql += f"{k} {v}, "
|
column_sql += f"{k} {v}, "
|
||||||
for k,v in tag_dict.items():
|
for k, v in tag_dict.items():
|
||||||
tag_sql += f"{k} {v}, "
|
tag_sql += f"{k} {v}, "
|
||||||
create_stb_sql = f'create stable {stbname} ({column_sql[:-2]}) tags ({tag_sql[:-2]})'
|
create_stb_sql = f'create stable {stbname} ({column_sql[:-2]}) tags ({tag_sql[:-2]})'
|
||||||
return create_stb_sql
|
return create_stb_sql
|
||||||
|
@ -268,37 +267,41 @@ class TDTestCase:
|
||||||
def create_database(self, dbname, vgroups, replica):
|
def create_database(self, dbname, vgroups, replica):
|
||||||
sql = f'create database {dbname} vgroups {vgroups} replica {replica}'
|
sql = f'create database {dbname} vgroups {vgroups} replica {replica}'
|
||||||
tdSql.execute(sql)
|
tdSql.execute(sql)
|
||||||
#tdSql.execute(sql)
|
# tdSql.execute(sql)
|
||||||
tdSql.execute(f'use {dbname}')
|
tdSql.execute(f'use {dbname}')
|
||||||
|
|
||||||
# create stable and child tables
|
# create stable and child tables
|
||||||
def create_table(self, stbname, tbname, count):
|
def create_table(self, stbname, tbname, count):
|
||||||
# create stable
|
# create stable
|
||||||
create_table_sql = self.set_stb_sql(stbname, self.column_dict, self.tag_dict)
|
create_table_sql = self.set_stb_sql(
|
||||||
|
stbname, self.column_dict, self.tag_dict)
|
||||||
tdSql.execute(create_table_sql)
|
tdSql.execute(create_table_sql)
|
||||||
|
|
||||||
# create child table
|
# create child table
|
||||||
tdLog.info(f" start create {count} child tables.")
|
tdLog.info(f" start create {count} child tables.")
|
||||||
for i in range(count):
|
batchSql = ""
|
||||||
ti = i % 128
|
batchSize = 5000
|
||||||
binTxt = self.random_string(self.lenBinary)
|
for i in range(int(count/batchSize)):
|
||||||
tags = f'{ti},{ti},{i},{i},{ti},{ti},{i},{i},{i}.000{i},{i}.000{i},true,"{binTxt}","nch{i}",now'
|
batchSql = "create table"
|
||||||
sql = f'create table {tbname}{i} using {stbname} tags({tags})'
|
for j in range(batchSize):
|
||||||
tdSql.execute(sql)
|
ti = (i * batchSize + j) % 128
|
||||||
if i > 0 and i % 1000 == 0:
|
binTxt = self.random_string(self.lenBinary)
|
||||||
tdLog.info(f" child table count = {i}")
|
idx = i * batchSize + j
|
||||||
|
tags = f'{ti},{ti},{idx},{idx},{ti},{ti},{idx},{idx},{idx}.000{idx},{idx}.000{idx},true,"{binTxt}","nch{idx}",now'
|
||||||
tdLog.info(f" end create {count} child tables.")
|
sql = f'{tbname}{idx} using {stbname} tags({tags})'
|
||||||
|
batchSql = batchSql + " " + sql
|
||||||
|
tdSql.execute(batchSql)
|
||||||
|
tdLog.info(f" child table count = {i * batchSize}")
|
||||||
|
|
||||||
# create stable and child tables
|
# create stable and child tables
|
||||||
|
|
||||||
def create_tagidx(self, stbname):
|
def create_tagidx(self, stbname):
|
||||||
cnt = -1
|
cnt = -1
|
||||||
for key in self.tag_dict.keys():
|
for key in self.tag_dict.keys():
|
||||||
# first tag have default index, so skip
|
# first tag have default index, so skip
|
||||||
if cnt == -1:
|
if cnt == -1:
|
||||||
cnt = 0
|
cnt = 0
|
||||||
continue;
|
continue
|
||||||
sql = f'create index idx_{key} on {stbname} ({key})'
|
sql = f'create index idx_{key} on {stbname} ({key})'
|
||||||
tdLog.info(f" sql={sql}")
|
tdLog.info(f" sql={sql}")
|
||||||
tdSql.execute(sql)
|
tdSql.execute(sql)
|
||||||
|
@ -376,12 +379,12 @@ class TDTestCase:
|
||||||
self.query(sql)
|
self.query(sql)
|
||||||
tdSql.checkRows(4)
|
tdSql.checkRows(4)
|
||||||
|
|
||||||
|
|
||||||
# drop child table
|
# drop child table
|
||||||
|
|
||||||
def drop_tables(self, tbname, count):
|
def drop_tables(self, tbname, count):
|
||||||
# table d1 and d20 have verify data , so can not drop
|
# table d1 and d20 have verify data , so can not drop
|
||||||
start = random.randint(21, count/2)
|
start = random.randint(21, count/2)
|
||||||
end = random.randint(count/2 + 1, count - 1)
|
end = random.randint(count/2 + 1, count - 1)
|
||||||
for i in range(start, end):
|
for i in range(start, end):
|
||||||
sql = f'drop table {tbname}{i}'
|
sql = f'drop table {tbname}{i}'
|
||||||
tdSql.execute(sql)
|
tdSql.execute(sql)
|
||||||
|
@ -396,7 +399,7 @@ class TDTestCase:
|
||||||
# first tag have default index, so skip
|
# first tag have default index, so skip
|
||||||
if cnt == -1:
|
if cnt == -1:
|
||||||
cnt = 0
|
cnt = 0
|
||||||
continue;
|
continue
|
||||||
sql = f'drop index idx_{key}'
|
sql = f'drop index idx_{key}'
|
||||||
tdSql.execute(sql)
|
tdSql.execute(sql)
|
||||||
cnt += 1
|
cnt += 1
|
||||||
|
@ -408,17 +411,19 @@ class TDTestCase:
|
||||||
tdLog.info(f' drop {cnt} tag indexs ok.')
|
tdLog.info(f' drop {cnt} tag indexs ok.')
|
||||||
|
|
||||||
# show performance
|
# show performance
|
||||||
def show_performance(self, count) :
|
def show_performance(self, count):
|
||||||
db = self.dbs[0]
|
db = self.dbs[0]
|
||||||
db1 = self.dbs[1]
|
db1 = self.dbs[1]
|
||||||
cnt = len(db.sqls)
|
cnt = len(db.sqls)
|
||||||
cnt1 = len(db1.sqls)
|
cnt1 = len(db1.sqls)
|
||||||
if cnt != len(db1.sqls):
|
if cnt != len(db1.sqls):
|
||||||
tdLog.info(f" datebase sql count not equal. cnt={cnt} cnt1={cnt1}\n")
|
tdLog.info(
|
||||||
|
f" datebase sql count not equal. cnt={cnt} cnt1={cnt1}\n")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
tdLog.info(f" database sql cnt ={cnt}")
|
tdLog.info(f" database sql cnt ={cnt}")
|
||||||
print(f" ----------------- performance (child tables = {count})--------------------")
|
print(
|
||||||
|
f" ----------------- performance (child tables = {count})--------------------")
|
||||||
print(" No time(index) time(no-index) diff(col3-col2) rate(col2/col3) sql")
|
print(" No time(index) time(no-index) diff(col3-col2) rate(col2/col3) sql")
|
||||||
for i in range(cnt):
|
for i in range(cnt):
|
||||||
key = db.sqls[i]
|
key = db.sqls[i]
|
||||||
|
@ -427,12 +432,13 @@ class TDTestCase:
|
||||||
value1 = db1.spends[i]
|
value1 = db1.spends[i]
|
||||||
diff = value1 - value
|
diff = value1 - value
|
||||||
rate = value/value1*100
|
rate = value/value1*100
|
||||||
print(" %d %.3fs %.3fs %.3fs %d%% %s"%(i+1, value, value1, diff, rate, key))
|
print(" %d %.3fs %.3fs %.3fs %d%% %s" % (
|
||||||
|
i+1, value, value1, diff, rate, key))
|
||||||
print(" --------------------- end ------------------------")
|
print(" --------------------- end ------------------------")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def show_diskspace(self):
|
def show_diskspace(self):
|
||||||
#calc
|
# calc
|
||||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
projPath = ""
|
projPath = ""
|
||||||
if ("community" in selfPath):
|
if ("community" in selfPath):
|
||||||
|
@ -451,37 +457,35 @@ class TDTestCase:
|
||||||
idx_size = vnode2_size + vnode3_size
|
idx_size = vnode2_size + vnode3_size
|
||||||
noidx_size = vnode4_size + vnode5_size
|
noidx_size = vnode4_size + vnode5_size
|
||||||
|
|
||||||
print(" index = %.02f M"%(idx_size/1024/1024))
|
print(" index = %.02f M" % (idx_size/1024/1024))
|
||||||
print(" no-index = %.02f M"%(noidx_size/1024/1024))
|
print(" no-index = %.02f M" % (noidx_size/1024/1024))
|
||||||
print(" index/no-index = %.2f multiple"%(idx_size/noidx_size))
|
print(" index/no-index = %.2f multiple" % (idx_size/noidx_size))
|
||||||
|
|
||||||
print(" -------------------- end ------------------------")
|
print(" -------------------- end ------------------------")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main
|
# main
|
||||||
|
|
||||||
def testdb(self, dbname, stable, tbname, count, createidx):
|
def testdb(self, dbname, stable, tbname, count, createidx):
|
||||||
# cur
|
# cur
|
||||||
if createidx:
|
if createidx:
|
||||||
self.cur = 0
|
self.cur = 0
|
||||||
else :
|
else:
|
||||||
self.cur = 1
|
self.cur = 1
|
||||||
|
|
||||||
# do
|
# do
|
||||||
self.create_database(dbname, 2, 1)
|
self.create_database(dbname, 2, 1)
|
||||||
self.create_table(stable, tbname, count)
|
self.create_table(stable, tbname, count)
|
||||||
if(createidx):
|
if (createidx):
|
||||||
self.create_tagidx(stable)
|
self.create_tagidx(stable)
|
||||||
self.insert_data(tbname)
|
self.insert_data(tbname)
|
||||||
if(createidx):
|
if (createidx):
|
||||||
self.show_tagidx(dbname,stable)
|
self.show_tagidx(dbname, stable)
|
||||||
self.query_tagidx(stable)
|
self.query_tagidx(stable)
|
||||||
#self.drop_tables(tbname, count)
|
# self.drop_tables(tbname, count)
|
||||||
#if(createidx):
|
# if(createidx):
|
||||||
# self.drop_tagidx(dbname, stable)
|
# self.drop_tagidx(dbname, stable)
|
||||||
# query after delete , expect no crash
|
# query after delete , expect no crash
|
||||||
#self.query_tagidx(stable)
|
# self.query_tagidx(stable)
|
||||||
tdSql.execute(f'flush database {dbname}')
|
tdSql.execute(f'flush database {dbname}')
|
||||||
|
|
||||||
# run
|
# run
|
||||||
|
@ -511,10 +515,10 @@ class TDTestCase:
|
||||||
|
|
||||||
self.show_diskspace()
|
self.show_diskspace()
|
||||||
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.tagCluster.stop()
|
self.tagCluster.stop()
|
||||||
tdLog.success("%s successfully executed" % __file__)
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
tdCases.addWindows(__file__, TDTestCase())
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
tdCases.addLinux(__file__, TDTestCase())
|
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -716,8 +716,6 @@ class TDTestCase:
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(2)
|
||||||
|
|
||||||
# partition by col
|
# partition by col
|
||||||
tdSql.query(f"select c1 , mavg(c1,3) from {dbname}.stb1 partition by c1")
|
|
||||||
tdSql.checkRows(0)
|
|
||||||
tdSql.query(f"select c1 , mavg(c1,1) from {dbname}.stb1 partition by c1")
|
tdSql.query(f"select c1 , mavg(c1,1) from {dbname}.stb1 partition by c1")
|
||||||
tdSql.checkRows(40)
|
tdSql.checkRows(40)
|
||||||
tdSql.query(f"select c1, c2, c3, c4, mavg(c1,3) from {dbname}.stb1 partition by tbname ")
|
tdSql.query(f"select c1, c2, c3, c4, mavg(c1,3) from {dbname}.stb1 partition by tbname ")
|
||||||
|
|
|
@ -22,7 +22,7 @@ class TDTestCase:
|
||||||
tdSql.execute("insert into db.ctb using db.stb tags(1) (ts, c1) values (now, 1)")
|
tdSql.execute("insert into db.ctb using db.stb tags(1) (ts, c1) values (now, 1)")
|
||||||
|
|
||||||
tdSql.query("select count(*) from information_schema.ins_columns")
|
tdSql.query("select count(*) from information_schema.ins_columns")
|
||||||
tdSql.checkData(0, 0, 271)
|
tdSql.checkData(0, 0, 272)
|
||||||
|
|
||||||
tdSql.query("select * from information_schema.ins_columns where table_name = 'ntb'")
|
tdSql.query("select * from information_schema.ins_columns where table_name = 'ntb'")
|
||||||
tdSql.checkRows(14)
|
tdSql.checkRows(14)
|
||||||
|
|
|
@ -171,6 +171,7 @@ class TDTestCase:
|
||||||
if any(parm in condition.lower().strip() for parm in condition_exception):
|
if any(parm in condition.lower().strip() for parm in condition_exception):
|
||||||
|
|
||||||
print(f"case in {line}: ", end='')
|
print(f"case in {line}: ", end='')
|
||||||
|
print(f"condition : {condition}: ", end='')
|
||||||
return tdSql.error(self.sample_query_form(
|
return tdSql.error(self.sample_query_form(
|
||||||
sel=sel, func=func, col=col, m_comm=m_comm, k=k, r_comm=r_comm, alias=alias, fr=fr,
|
sel=sel, func=func, col=col, m_comm=m_comm, k=k, r_comm=r_comm, alias=alias, fr=fr,
|
||||||
table_expr=table_expr, condition=condition
|
table_expr=table_expr, condition=condition
|
||||||
|
@ -391,16 +392,6 @@ class TDTestCase:
|
||||||
self.checksample(**case25)
|
self.checksample(**case25)
|
||||||
case26 = {"k": 1000}
|
case26 = {"k": 1000}
|
||||||
self.checksample(**case26)
|
self.checksample(**case26)
|
||||||
case27 = {
|
|
||||||
"table_expr": f"{DBNAME}.stb1",
|
|
||||||
"condition": "group by tbname slimit 1 "
|
|
||||||
}
|
|
||||||
self.checksample(**case27) # with slimit
|
|
||||||
case28 = {
|
|
||||||
"table_expr": f"{DBNAME}.stb1",
|
|
||||||
"condition": "group by tbname slimit 1 soffset 1"
|
|
||||||
}
|
|
||||||
self.checksample(**case28) # with soffset
|
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ typedef struct {
|
||||||
const char *clientVersion;
|
const char *clientVersion;
|
||||||
char cusName[32];
|
char cusName[32];
|
||||||
char promptHeader[32];
|
char promptHeader[32];
|
||||||
const char* promptContinue;
|
char promptContinue[32];
|
||||||
const char* osname;
|
const char* osname;
|
||||||
int32_t promptSize;
|
int32_t promptSize;
|
||||||
char programVersion[256];
|
char programVersion[256];
|
||||||
|
|
|
@ -411,7 +411,9 @@ int32_t shellParseArgs(int32_t argc, char *argv[]) {
|
||||||
"Copyright (c) 2022 by %s, all rights reserved.\r\n\r\n";
|
"Copyright (c) 2022 by %s, all rights reserved.\r\n\r\n";
|
||||||
strcpy(shell.info.cusName, cusName);
|
strcpy(shell.info.cusName, cusName);
|
||||||
sprintf(shell.info.promptHeader, "%s> ", cusPrompt);
|
sprintf(shell.info.promptHeader, "%s> ", cusPrompt);
|
||||||
shell.info.promptContinue = TAOS_CONSOLE_PROMPT_CONTINUE;
|
char promptContinueFormat[32] = {0};
|
||||||
|
sprintf(promptContinueFormat, "%%%zus> ", strlen(cusPrompt));
|
||||||
|
sprintf(shell.info.promptContinue, promptContinueFormat, " ");
|
||||||
shell.info.promptSize = strlen(shell.info.promptHeader);
|
shell.info.promptSize = strlen(shell.info.promptHeader);
|
||||||
snprintf(shell.info.programVersion, sizeof(shell.info.programVersion),
|
snprintf(shell.info.programVersion, sizeof(shell.info.programVersion),
|
||||||
"version: %s compatible_version: %s\ngitinfo: %s\nbuildInfo: %s", version, compatible_version, gitinfo,
|
"version: %s compatible_version: %s\ngitinfo: %s\nbuildInfo: %s", version, compatible_version, gitinfo,
|
||||||
|
|
Loading…
Reference in New Issue