Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2027f477
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2027f477
编写于
5月 16, 2022
作者:
haoranc
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of github.com:taosdata/TDengine into test/chr/TD-14699
上级
bdb3cbc1
c2e006ac
变更
83
展开全部
隐藏空白更改
内联
并排
Showing
83 changed file
with
7452 addition
and
3374 deletion
+7452
-3374
cmake/bdb_CMakeLists.txt.in
cmake/bdb_CMakeLists.txt.in
+0
-0
cmake/cmake.define
cmake/cmake.define
+0
-19
cmake/cmake.options
cmake/cmake.options
+6
-0
contrib/CMakeLists.txt
contrib/CMakeLists.txt
+3
-3
contrib/test/CMakeLists.txt
contrib/test/CMakeLists.txt
+3
-3
include/common/tmsg.h
include/common/tmsg.h
+38
-0
include/libs/sync/sync.h
include/libs/sync/sync.h
+1
-0
include/util/taoserror.h
include/util/taoserror.h
+4
-0
include/util/tencode.h
include/util/tencode.h
+0
-1
include/util/tfreelist.h
include/util/tfreelist.h
+0
-60
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+2
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+6
-6
source/client/test/smlTest.cpp
source/client/test/smlTest.cpp
+11
-11
source/common/src/tmsg.c
source/common/src/tmsg.c
+110
-0
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+19
-2
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+2
-1
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+1
-0
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+4
-2
source/dnode/vnode/src/meta/metaEntry.c
source/dnode/vnode/src/meta/metaEntry.c
+3
-1
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+234
-0
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+2
-2
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+33
-64
source/dnode/vnode/src/tsdb/tsdbSma.c
source/dnode/vnode/src/tsdb/tsdbSma.c
+1
-1
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+72
-32
source/libs/catalog/src/catalog.c
source/libs/catalog/src/catalog.c
+0
-6
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+1
-0
source/libs/executor/src/executorimpl.c
source/libs/executor/src/executorimpl.c
+8
-266
source/libs/executor/src/joinoperator.c
source/libs/executor/src/joinoperator.c
+199
-0
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+18
-14
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+0
-4
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+35
-0
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+1
-1
source/libs/parser/src/parAuthenticator.c
source/libs/parser/src/parAuthenticator.c
+4
-3
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+21
-24
source/libs/parser/src/parInsertData.c
source/libs/parser/src/parInsertData.c
+1
-3
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+159
-13
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+2
-0
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+1
-1
source/libs/parser/test/parInitialATest.cpp
source/libs/parser/test/parInitialATest.cpp
+135
-15
source/libs/parser/test/parSelectTest.cpp
source/libs/parser/test/parSelectTest.cpp
+8
-2
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+2
-0
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+2
-1
source/libs/planner/src/planSpliter.c
source/libs/planner/src/planSpliter.c
+2
-2
source/libs/planner/test/planOtherTest.cpp
source/libs/planner/test/planOtherTest.cpp
+7
-1
source/libs/planner/test/planStateTest.cpp
source/libs/planner/test/planStateTest.cpp
+2
-2
source/libs/planner/test/planSubqueryTest.cpp
source/libs/planner/test/planSubqueryTest.cpp
+9
-3
source/libs/planner/test/planSysTbTest.cpp
source/libs/planner/test/planSysTbTest.cpp
+2
-2
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+6
-4
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+27
-0
source/libs/sync/inc/syncIndexMgr.h
source/libs/sync/inc/syncIndexMgr.h
+1
-0
source/libs/sync/inc/syncInt.h
source/libs/sync/inc/syncInt.h
+2
-1
source/libs/sync/inc/syncUtil.h
source/libs/sync/inc/syncUtil.h
+0
-1
source/libs/sync/src/syncAppendEntries.c
source/libs/sync/src/syncAppendEntries.c
+11
-6
source/libs/sync/src/syncCommit.c
source/libs/sync/src/syncCommit.c
+13
-8
source/libs/sync/src/syncIO.c
source/libs/sync/src/syncIO.c
+2
-0
source/libs/sync/src/syncIndexMgr.c
source/libs/sync/src/syncIndexMgr.c
+7
-0
source/libs/sync/src/syncMain.c
source/libs/sync/src/syncMain.c
+31
-6
source/libs/sync/src/syncRaftLog.c
source/libs/sync/src/syncRaftLog.c
+31
-28
source/libs/sync/test/CMakeLists.txt
source/libs/sync/test/CMakeLists.txt
+14
-0
source/libs/sync/test/syncConfigChangeTest.cpp
source/libs/sync/test/syncConfigChangeTest.cpp
+259
-0
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+12
-9
source/util/src/terror.c
source/util/src/terror.c
+4
-0
source/util/test/CMakeLists.txt
source/util/test/CMakeLists.txt
+7
-7
source/util/test/freelistTest.cpp
source/util/test/freelistTest.cpp
+0
-17
tests/script/tsim/tmq/basic1.sim
tests/script/tsim/tmq/basic1.sim
+288
-278
tests/script/tsim/tmq/basic1Of2Cons.sim
tests/script/tsim/tmq/basic1Of2Cons.sim
+382
-372
tests/script/tsim/tmq/basic2.sim
tests/script/tsim/tmq/basic2.sim
+229
-219
tests/script/tsim/tmq/basic2Of2Cons.sim
tests/script/tsim/tmq/basic2Of2Cons.sim
+318
-309
tests/script/tsim/tmq/basic2Of2ConsOverlap.sim
tests/script/tsim/tmq/basic2Of2ConsOverlap.sim
+17
-8
tests/script/tsim/tmq/basic3.sim
tests/script/tsim/tmq/basic3.sim
+288
-278
tests/script/tsim/tmq/basic3Of2Cons.sim
tests/script/tsim/tmq/basic3Of2Cons.sim
+393
-384
tests/script/tsim/tmq/basic4.sim
tests/script/tsim/tmq/basic4.sim
+226
-216
tests/script/tsim/tmq/basic4Of2Cons.sim
tests/script/tsim/tmq/basic4Of2Cons.sim
+328
-319
tests/script/tsim/tmq/prepareBasicEnv-1vgrp.sim
tests/script/tsim/tmq/prepareBasicEnv-1vgrp.sim
+88
-88
tests/script/tsim/tmq/prepareBasicEnv-4vgrp.sim
tests/script/tsim/tmq/prepareBasicEnv-4vgrp.sim
+88
-88
tests/system-test/2-query/nestedQuery.py
tests/system-test/2-query/nestedQuery.py
+2284
-0
tests/system-test/2-query/query_cols_tags_and_or.py
tests/system-test/2-query/query_cols_tags_and_or.py
+27
-15
tests/system-test/2-query/union.py
tests/system-test/2-query/union.py
+412
-0
tests/system-test/7-tmq/basic5.py
tests/system-test/7-tmq/basic5.py
+29
-23
tests/system-test/7-tmq/subscribeDb.py
tests/system-test/7-tmq/subscribeDb.py
+421
-94
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+2
-1
tests/test/c/tmqSim.c
tests/test/c/tmqSim.c
+30
-22
未找到文件。
cmake/bdb_CMakeLists.txt.in
.bak
→
cmake/bdb_CMakeLists.txt.in
浏览文件 @
2027f477
文件已移动
cmake/cmake.define
浏览文件 @
2027f477
...
@@ -14,25 +14,6 @@ MESSAGE(STATUS "Project binary files output path: " ${PROJECT_BINARY_DIR})
...
@@ -14,25 +14,6 @@ MESSAGE(STATUS "Project binary files output path: " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "Project executable files output path: " ${EXECUTABLE_OUTPUT_PATH})
MESSAGE(STATUS "Project executable files output path: " ${EXECUTABLE_OUTPUT_PATH})
MESSAGE(STATUS "Project library files output path: " ${LIBRARY_OUTPUT_PATH})
MESSAGE(STATUS "Project library files output path: " ${LIBRARY_OUTPUT_PATH})
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${TD_SOURCE_DIR}/.git")
# Update submodules as needed
option(GIT_SUBMODULE "Check submodules during build" ON)
if(GIT_SUBMODULE)
message(STATUS "Submodule update")
execute_process(COMMAND cd ${TD_SOURCE_DIR} && ${GIT_EXECUTABLE} submodule update --init --recursive
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMOD_RESULT)
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
message(WARNING "git submodule update --init --recursive failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
endif()
endif()
endif()
if(NOT EXISTS "${TD_SOURCE_DIR}/tools/taos-tools/CMakeLists.txt")
message(WARNING "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules manually if you need build them.")
endif()
if (NOT DEFINED TD_GRANT)
if (NOT DEFINED TD_GRANT)
SET(TD_GRANT FALSE)
SET(TD_GRANT FALSE)
endif()
endif()
...
...
cmake/cmake.options
浏览文件 @
2027f477
...
@@ -78,6 +78,12 @@ option(
...
@@ -78,6 +78,12 @@ option(
OFF
OFF
)
)
option(
BUILD_WITH_BDB
"If build with BDB"
OFF
)
option(
option(
BUILD_WITH_LUCENE
BUILD_WITH_LUCENE
"If build with lucene"
"If build with lucene"
...
...
contrib/CMakeLists.txt
浏览文件 @
2027f477
...
@@ -78,9 +78,9 @@ if(${BUILD_WITH_UV})
...
@@ -78,9 +78,9 @@ if(${BUILD_WITH_UV})
endif
(
${
BUILD_WITH_UV
}
)
endif
(
${
BUILD_WITH_UV
}
)
# bdb
# bdb
#
if(${BUILD_WITH_BDB})
if
(
${
BUILD_WITH_BDB
}
)
#
cat("${TD_SUPPORT_DIR}/bdb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
cat
(
"
${
TD_SUPPORT_DIR
}
/bdb_CMakeLists.txt.in"
${
CONTRIB_TMP_FILE
}
)
#
endif(${BUILD_WITH_BDB})
endif
(
${
BUILD_WITH_BDB
}
)
# sqlite
# sqlite
if
(
${
BUILD_WITH_SQLITE
}
)
if
(
${
BUILD_WITH_SQLITE
}
)
...
...
contrib/test/CMakeLists.txt
浏览文件 @
2027f477
...
@@ -7,9 +7,9 @@ if(${BUILD_WITH_LUCENE})
...
@@ -7,9 +7,9 @@ if(${BUILD_WITH_LUCENE})
add_subdirectory
(
lucene
)
add_subdirectory
(
lucene
)
endif
(
${
BUILD_WITH_LUCENE
}
)
endif
(
${
BUILD_WITH_LUCENE
}
)
#
if(${BUILD_WITH_BDB})
if
(
${
BUILD_WITH_BDB
}
)
#
add_subdirectory(bdb)
add_subdirectory
(
bdb
)
#
endif(${BUILD_WITH_BDB})
endif
(
${
BUILD_WITH_BDB
}
)
if
(
${
BUILD_WITH_SQLITE
}
)
if
(
${
BUILD_WITH_SQLITE
}
)
add_subdirectory
(
sqlite
)
add_subdirectory
(
sqlite
)
...
...
include/common/tmsg.h
浏览文件 @
2027f477
...
@@ -1670,6 +1670,7 @@ typedef struct SVDropStbReq {
...
@@ -1670,6 +1670,7 @@ typedef struct SVDropStbReq {
int32_t
tEncodeSVDropStbReq
(
SEncoder
*
pCoder
,
const
SVDropStbReq
*
pReq
);
int32_t
tEncodeSVDropStbReq
(
SEncoder
*
pCoder
,
const
SVDropStbReq
*
pReq
);
int32_t
tDecodeSVDropStbReq
(
SDecoder
*
pCoder
,
SVDropStbReq
*
pReq
);
int32_t
tDecodeSVDropStbReq
(
SDecoder
*
pCoder
,
SVDropStbReq
*
pReq
);
// TDMT_VND_CREATE_TABLE ==============
#define TD_CREATE_IF_NOT_EXISTS 0x1
#define TD_CREATE_IF_NOT_EXISTS 0x1
typedef
struct
SVCreateTbReq
{
typedef
struct
SVCreateTbReq
{
int32_t
flags
;
int32_t
flags
;
...
@@ -1759,6 +1760,43 @@ typedef struct {
...
@@ -1759,6 +1760,43 @@ typedef struct {
int32_t
tEncodeSVDropTbBatchRsp
(
SEncoder
*
pCoder
,
const
SVDropTbBatchRsp
*
pRsp
);
int32_t
tEncodeSVDropTbBatchRsp
(
SEncoder
*
pCoder
,
const
SVDropTbBatchRsp
*
pRsp
);
int32_t
tDecodeSVDropTbBatchRsp
(
SDecoder
*
pCoder
,
SVDropTbBatchRsp
*
pRsp
);
int32_t
tDecodeSVDropTbBatchRsp
(
SDecoder
*
pCoder
,
SVDropTbBatchRsp
*
pRsp
);
// TDMT_VND_ALTER_TABLE =====================
typedef
struct
{
const
char
*
tbName
;
int8_t
action
;
const
char
*
colName
;
// TSDB_ALTER_TABLE_ADD_COLUMN
int8_t
type
;
int8_t
flags
;
int32_t
bytes
;
// TSDB_ALTER_TABLE_DROP_COLUMN
// TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
int32_t
colModBytes
;
// TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
const
char
*
colNewName
;
// TSDB_ALTER_TABLE_UPDATE_TAG_VAL
const
char
*
tagName
;
int8_t
isNull
;
uint32_t
nTagVal
;
const
uint8_t
*
pTagVal
;
// TSDB_ALTER_TABLE_UPDATE_OPTIONS
int8_t
updateTTL
;
int32_t
newTTL
;
int8_t
updateComment
;
const
char
*
newComment
;
}
SVAlterTbReq
;
int32_t
tEncodeSVAlterTbReq
(
SEncoder
*
pEncoder
,
const
SVAlterTbReq
*
pReq
);
int32_t
tDecodeSVAlterTbReq
(
SDecoder
*
pDecoder
,
SVAlterTbReq
*
pReq
);
typedef
struct
{
int32_t
code
;
}
SVAlterTbRsp
;
int32_t
tEncodeSVAlterTbRsp
(
SEncoder
*
pEncoder
,
const
SVAlterTbRsp
*
pRsp
);
int32_t
tDecodeSVAlterTbRsp
(
SDecoder
*
pDecoder
,
SVAlterTbRsp
*
pRsp
);
// ======================
typedef
struct
{
typedef
struct
{
SMsgHead
head
;
SMsgHead
head
;
int64_t
uid
;
int64_t
uid
;
...
...
include/libs/sync/sync.h
浏览文件 @
2027f477
...
@@ -144,6 +144,7 @@ int32_t syncInit();
...
@@ -144,6 +144,7 @@ int32_t syncInit();
void
syncCleanUp
();
void
syncCleanUp
();
int64_t
syncOpen
(
const
SSyncInfo
*
pSyncInfo
);
int64_t
syncOpen
(
const
SSyncInfo
*
pSyncInfo
);
void
syncStart
(
int64_t
rid
);
void
syncStart
(
int64_t
rid
);
void
syncStartStandBy
(
int64_t
rid
);
void
syncStop
(
int64_t
rid
);
void
syncStop
(
int64_t
rid
);
int32_t
syncReconfig
(
int64_t
rid
,
const
SSyncCfg
*
pSyncCfg
);
int32_t
syncReconfig
(
int64_t
rid
,
const
SSyncCfg
*
pSyncCfg
);
ESyncState
syncGetMyRole
(
int64_t
rid
);
ESyncState
syncGetMyRole
(
int64_t
rid
);
...
...
include/util/taoserror.h
浏览文件 @
2027f477
...
@@ -323,6 +323,9 @@ int32_t* taosGetErrno();
...
@@ -323,6 +323,9 @@ int32_t* taosGetErrno();
#define TSDB_CODE_VND_SMA_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0516)
#define TSDB_CODE_VND_SMA_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0516)
#define TSDB_CODE_VND_HASH_MISMATCH TAOS_DEF_ERROR_CODE(0, 0x0517)
#define TSDB_CODE_VND_HASH_MISMATCH TAOS_DEF_ERROR_CODE(0, 0x0517)
#define TSDB_CODE_VND_TABLE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0518)
#define TSDB_CODE_VND_TABLE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0518)
#define TSDB_CODE_VND_INVALID_TABLE_ACTION TAOS_DEF_ERROR_CODE(0, 0x0519)
#define TSDB_CODE_VND_COL_ALREADY_EXISTS TAOS_DEF_ERROR_CODE(0, 0x051a)
#define TSDB_CODE_VND_TABLE_COL_NOT_EXISTS TAOS_DEF_ERROR_CODE(0, 0x051b)
// tsdb
// tsdb
#define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600)
#define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600)
...
@@ -639,6 +642,7 @@ int32_t* taosGetErrno();
...
@@ -639,6 +642,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_INVALID_INTERNAL_PK TAOS_DEF_ERROR_CODE(0, 0x2646)
#define TSDB_CODE_PAR_INVALID_INTERNAL_PK TAOS_DEF_ERROR_CODE(0, 0x2646)
#define TSDB_CODE_PAR_INVALID_TIMELINE_FUNC TAOS_DEF_ERROR_CODE(0, 0x2647)
#define TSDB_CODE_PAR_INVALID_TIMELINE_FUNC TAOS_DEF_ERROR_CODE(0, 0x2647)
#define TSDB_CODE_PAR_INVALID_PASSWD TAOS_DEF_ERROR_CODE(0, 0x2648)
#define TSDB_CODE_PAR_INVALID_PASSWD TAOS_DEF_ERROR_CODE(0, 0x2648)
#define TSDB_CODE_PAR_INVALID_ALTER_TABLE TAOS_DEF_ERROR_CODE(0, 0x2649)
//planner
//planner
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
...
...
include/util/tencode.h
浏览文件 @
2027f477
...
@@ -18,7 +18,6 @@
...
@@ -18,7 +18,6 @@
#include "tcoding.h"
#include "tcoding.h"
#include "tlist.h"
#include "tlist.h"
// #include "tfreelist.h"
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
...
...
include/util/tfreelist.h
已删除
100644 → 0
浏览文件 @
bdb3cbc1
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_UTIL_FREELIST_H_
#define _TD_UTIL_FREELIST_H_
#include "tlist.h"
#ifdef __cplusplus
extern
"C"
{
#endif
struct
SFreeListNode
{
TD_SLIST_NODE
(
SFreeListNode
);
char
payload
[];
};
typedef
TD_SLIST
(
SFreeListNode
)
SFreeList
;
#define TFL_MALLOC(PTR, TYPE, SIZE, LIST) \
do { \
void *ptr = taosMemoryMalloc((SIZE) + sizeof(struct SFreeListNode)); \
if (ptr) { \
TD_SLIST_PUSH((LIST), (struct SFreeListNode *)ptr); \
ptr = ((struct SFreeListNode *)ptr)->payload; \
(PTR) = (TYPE)(ptr); \
}else{ \
(PTR) = NULL; \
} \
}while(0);
#define tFreeListInit(pFL) TD_SLIST_INIT(pFL)
static
FORCE_INLINE
void
tFreeListClear
(
SFreeList
*
pFL
)
{
struct
SFreeListNode
*
pNode
;
for
(;;)
{
pNode
=
TD_SLIST_HEAD
(
pFL
);
if
(
pNode
==
NULL
)
break
;
TD_SLIST_POP
(
pFL
);
taosMemoryFree
(
pNode
);
}
}
#ifdef __cplusplus
}
#endif
#endif
/*_TD_UTIL_FREELIST_H_*/
\ No newline at end of file
source/client/src/clientImpl.c
浏览文件 @
2027f477
...
@@ -518,8 +518,9 @@ STscObj* taosConnectImpl(const char* user, const char* auth, const char* db, __t
...
@@ -518,8 +518,9 @@ STscObj* taosConnectImpl(const char* user, const char* auth, const char* db, __t
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
const
char
*
errorMsg
=
const
char
*
errorMsg
=
(
pRequest
->
code
==
TSDB_CODE_RPC_FQDN_ERROR
)
?
taos_errstr
(
pRequest
)
:
tstrerror
(
pRequest
->
code
);
(
pRequest
->
code
==
TSDB_CODE_RPC_FQDN_ERROR
)
?
taos_errstr
(
pRequest
)
:
tstrerror
(
pRequest
->
code
);
printf
(
"failed to connect to server, reason: %s
\n\n
"
,
errorMsg
);
fprintf
(
stderr
,
"failed to connect to server, reason: %s
\n\n
"
,
errorMsg
);
terrno
=
pRequest
->
code
;
destroyRequest
(
pRequest
);
destroyRequest
(
pRequest
);
taos_close
(
pTscObj
);
taos_close
(
pTscObj
);
pTscObj
=
NULL
;
pTscObj
=
NULL
;
...
...
source/client/src/clientSml.c
浏览文件 @
2027f477
...
@@ -1007,8 +1007,6 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
...
@@ -1007,8 +1007,6 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
while
(
*
sql
!=
'\0'
)
{
while
(
*
sql
!=
'\0'
)
{
// parse value
// parse value
if
(
*
sql
==
SPACE
)
{
if
(
*
sql
==
SPACE
)
{
valueLen
=
sql
-
value
;
sql
++
;
break
;
break
;
}
}
if
(
*
sql
==
EQUAL
)
{
if
(
*
sql
==
EQUAL
)
{
...
@@ -1017,9 +1015,7 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
...
@@ -1017,9 +1015,7 @@ static int32_t smlParseTelnetTags(const char* data, SArray *cols, SHashObj *dump
}
}
sql
++
;
sql
++
;
}
}
if
(
valueLen
==
0
){
valueLen
=
sql
-
value
;
valueLen
=
sql
-
value
;
}
if
(
valueLen
==
0
){
if
(
valueLen
==
0
){
smlBuildInvalidDataMsg
(
msg
,
"invalid value"
,
value
);
smlBuildInvalidDataMsg
(
msg
,
"invalid value"
,
value
);
...
@@ -1365,7 +1361,7 @@ static void smlDestroySTableMeta(SSmlSTableMeta *meta){
...
@@ -1365,7 +1361,7 @@ static void smlDestroySTableMeta(SSmlSTableMeta *meta){
static
void
smlDestroyCols
(
SArray
*
cols
)
{
static
void
smlDestroyCols
(
SArray
*
cols
)
{
if
(
!
cols
)
return
;
if
(
!
cols
)
return
;
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
cols
);
++
i
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
cols
);
++
i
)
{
void
*
kv
=
taosArrayGet
(
cols
,
i
);
void
*
kv
=
taosArrayGet
P
(
cols
,
i
);
taosMemoryFree
(
kv
);
taosMemoryFree
(
kv
);
}
}
}
}
...
@@ -2077,12 +2073,16 @@ static int32_t smlParseTelnetLine(SSmlHandle* info, void *data) {
...
@@ -2077,12 +2073,16 @@ static int32_t smlParseTelnetLine(SSmlHandle* info, void *data) {
if
(
ret
!=
TSDB_CODE_SUCCESS
){
if
(
ret
!=
TSDB_CODE_SUCCESS
){
uError
(
"SML:0x%"
PRIx64
" smlParseTelnetLine failed"
,
info
->
id
);
uError
(
"SML:0x%"
PRIx64
" smlParseTelnetLine failed"
,
info
->
id
);
smlDestroyTableInfo
(
info
,
tinfo
);
smlDestroyTableInfo
(
info
,
tinfo
);
smlDestroyCols
(
cols
);
taosArrayDestroy
(
cols
);
taosArrayDestroy
(
cols
);
return
ret
;
return
ret
;
}
}
if
(
taosArrayGetSize
(
tinfo
->
tags
)
<=
0
||
taosArrayGetSize
(
tinfo
->
tags
)
>
TSDB_MAX_TAGS
){
if
(
taosArrayGetSize
(
tinfo
->
tags
)
<=
0
||
taosArrayGetSize
(
tinfo
->
tags
)
>
TSDB_MAX_TAGS
){
smlBuildInvalidDataMsg
(
&
info
->
msgBuf
,
"invalidate tags length:[1,128]"
,
NULL
);
smlBuildInvalidDataMsg
(
&
info
->
msgBuf
,
"invalidate tags length:[1,128]"
,
NULL
);
smlDestroyTableInfo
(
info
,
tinfo
);
smlDestroyCols
(
cols
);
taosArrayDestroy
(
cols
);
return
TSDB_CODE_SML_INVALID_DATA
;
return
TSDB_CODE_SML_INVALID_DATA
;
}
}
taosHashClear
(
info
->
dumplicateKey
);
taosHashClear
(
info
->
dumplicateKey
);
...
...
source/client/test/smlTest.cpp
浏览文件 @
2027f477
...
@@ -516,8 +516,8 @@ TEST(testCase, smlProcess_influx_Test) {
...
@@ -516,8 +516,8 @@ TEST(testCase, smlProcess_influx_Test) {
int
ret
=
smlProcess
(
info
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]));
int
ret
=
smlProcess
(
info
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]));
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
TAOS_RES
*
res
=
taos_query
(
taos
,
"select * from t_6885c584b98481584ee13dac399e173d"
);
//
TAOS_RES *res = taos_query(taos, "select * from t_6885c584b98481584ee13dac399e173d");
ASSERT_NE
(
res
,
nullptr
);
//
ASSERT_NE(res, nullptr);
// int fieldNum = taos_field_count(res);
// int fieldNum = taos_field_count(res);
// ASSERT_EQ(fieldNum, 5);
// ASSERT_EQ(fieldNum, 5);
// int rowNum = taos_affected_rows(res);
// int rowNum = taos_affected_rows(res);
...
@@ -525,7 +525,7 @@ TEST(testCase, smlProcess_influx_Test) {
...
@@ -525,7 +525,7 @@ TEST(testCase, smlProcess_influx_Test) {
// for (int i = 0; i < rowNum; ++i) {
// for (int i = 0; i < rowNum; ++i) {
// TAOS_ROW rows = taos_fetch_row(res);
// TAOS_ROW rows = taos_fetch_row(res);
// }
// }
taos_free_result
(
res
);
//
taos_free_result(res);
destroyRequest
(
request
);
destroyRequest
(
request
);
smlDestroyInfo
(
info
);
smlDestroyInfo
(
info
);
}
}
...
@@ -605,8 +605,8 @@ TEST(testCase, smlProcess_telnet_Test) {
...
@@ -605,8 +605,8 @@ TEST(testCase, smlProcess_telnet_Test) {
int
ret
=
smlProcess
(
info
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]));
int
ret
=
smlProcess
(
info
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]));
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
TAOS_RES
*
res
=
taos_query
(
taos
,
"select * from t_8c30283b3c4131a071d1e16cf6d7094a"
);
//
TAOS_RES *res = taos_query(taos, "select * from t_8c30283b3c4131a071d1e16cf6d7094a");
ASSERT_NE
(
res
,
nullptr
);
//
ASSERT_NE(res, nullptr);
// int fieldNum = taos_field_count(res);
// int fieldNum = taos_field_count(res);
// ASSERT_EQ(fieldNum, 2);
// ASSERT_EQ(fieldNum, 2);
// int rowNum = taos_affected_rows(res);
// int rowNum = taos_affected_rows(res);
...
@@ -614,7 +614,7 @@ TEST(testCase, smlProcess_telnet_Test) {
...
@@ -614,7 +614,7 @@ TEST(testCase, smlProcess_telnet_Test) {
// for (int i = 0; i < rowNum; ++i) {
// for (int i = 0; i < rowNum; ++i) {
// TAOS_ROW rows = taos_fetch_row(res);
// TAOS_ROW rows = taos_fetch_row(res);
// }
// }
taos_free_result
(
res
);
//
taos_free_result(res);
// res = taos_query(taos, "select * from t_6931529054e5637ca92c78a1ad441961");
// res = taos_query(taos, "select * from t_6931529054e5637ca92c78a1ad441961");
// ASSERT_NE(res, nullptr);
// ASSERT_NE(res, nullptr);
...
@@ -670,16 +670,16 @@ TEST(testCase, smlProcess_json1_Test) {
...
@@ -670,16 +670,16 @@ TEST(testCase, smlProcess_json1_Test) {
int
ret
=
smlProcess
(
info
,
(
char
**
)(
&
sql
),
-
1
);
int
ret
=
smlProcess
(
info
,
(
char
**
)(
&
sql
),
-
1
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
TAOS_RES
*
res
=
taos_query
(
taos
,
"select * from t_cb27a7198d637b4f1c6464bd73f756a7"
);
//
TAOS_RES *res = taos_query(taos, "select * from t_cb27a7198d637b4f1c6464bd73f756a7");
ASSERT_NE
(
res
,
nullptr
);
//
ASSERT_NE(res, nullptr);
int
fieldNum
=
taos_field_count
(
res
);
//
int fieldNum = taos_field_count(res);
ASSERT_EQ
(
fieldNum
,
2
);
//
ASSERT_EQ(fieldNum, 2);
// int rowNum = taos_affected_rows(res);
// int rowNum = taos_affected_rows(res);
// ASSERT_EQ(rowNum, 1);
// ASSERT_EQ(rowNum, 1);
// for (int i = 0; i < rowNum; ++i) {
// for (int i = 0; i < rowNum; ++i) {
// TAOS_ROW rows = taos_fetch_row(res);
// TAOS_ROW rows = taos_fetch_row(res);
// }
// }
taos_free_result
(
res
);
//
taos_free_result(res);
destroyRequest
(
request
);
destroyRequest
(
request
);
smlDestroyInfo
(
info
);
smlDestroyInfo
(
info
);
}
}
...
...
source/common/src/tmsg.c
浏览文件 @
2027f477
...
@@ -4163,3 +4163,113 @@ void tFreeSSubmitRsp(SSubmitRsp *pRsp) {
...
@@ -4163,3 +4163,113 @@ void tFreeSSubmitRsp(SSubmitRsp *pRsp) {
taosMemoryFree
(
pRsp
);
taosMemoryFree
(
pRsp
);
}
}
int32_t
tEncodeSVAlterTbReq
(
SEncoder
*
pEncoder
,
const
SVAlterTbReq
*
pReq
)
{
if
(
tStartEncode
(
pEncoder
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
tbName
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pReq
->
action
)
<
0
)
return
-
1
;
switch
(
pReq
->
action
)
{
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pReq
->
type
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pReq
->
flags
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
pReq
->
bytes
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
colName
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
pReq
->
colModBytes
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
colNewName
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
tagName
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pReq
->
isNull
)
<
0
)
return
-
1
;
if
(
!
pReq
->
isNull
)
{
if
(
tEncodeBinary
(
pEncoder
,
pReq
->
pTagVal
,
pReq
->
nTagVal
)
<
0
)
return
-
1
;
}
break
;
case
TSDB_ALTER_TABLE_UPDATE_OPTIONS
:
if
(
tEncodeI8
(
pEncoder
,
pReq
->
updateTTL
)
<
0
)
return
-
1
;
if
(
pReq
->
updateTTL
)
{
if
(
tEncodeI32v
(
pEncoder
,
pReq
->
newTTL
)
<
0
)
return
-
1
;
}
if
(
tEncodeI8
(
pEncoder
,
pReq
->
updateComment
)
<
0
)
return
-
1
;
if
(
pReq
->
updateComment
)
{
if
(
tEncodeCStr
(
pEncoder
,
pReq
->
newComment
)
<
0
)
return
-
1
;
}
break
;
default:
break
;
}
tEndEncode
(
pEncoder
);
return
0
;
}
int32_t
tDecodeSVAlterTbReq
(
SDecoder
*
pDecoder
,
SVAlterTbReq
*
pReq
)
{
if
(
tStartDecode
(
pDecoder
)
<
0
)
return
-
1
;
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
tbName
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
action
)
<
0
)
return
-
1
;
switch
(
pReq
->
action
)
{
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
type
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
flags
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pReq
->
bytes
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
colName
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pReq
->
colModBytes
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
colName
)
<
0
)
return
-
1
;
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
colNewName
)
<
0
)
return
-
1
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
tagName
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
isNull
)
<
0
)
return
-
1
;
if
(
!
pReq
->
isNull
)
{
if
(
tDecodeBinary
(
pDecoder
,
&
pReq
->
pTagVal
,
&
pReq
->
nTagVal
)
<
0
)
return
-
1
;
}
break
;
case
TSDB_ALTER_TABLE_UPDATE_OPTIONS
:
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
updateTTL
)
<
0
)
return
-
1
;
if
(
pReq
->
updateTTL
)
{
if
(
tDecodeI32v
(
pDecoder
,
&
pReq
->
newTTL
)
<
0
)
return
-
1
;
}
if
(
tDecodeI8
(
pDecoder
,
&
pReq
->
updateComment
)
<
0
)
return
-
1
;
if
(
pReq
->
updateComment
)
{
if
(
tDecodeCStr
(
pDecoder
,
&
pReq
->
newComment
)
<
0
)
return
-
1
;
}
break
;
default:
break
;
}
tEndDecode
(
pDecoder
);
return
0
;
}
int32_t
tEncodeSVAlterTbRsp
(
SEncoder
*
pEncoder
,
const
SVAlterTbRsp
*
pRsp
)
{
if
(
tStartEncode
(
pEncoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pEncoder
,
pRsp
->
code
)
<
0
)
return
-
1
;
tEndEncode
(
pEncoder
);
return
0
;
}
int32_t
tDecodeSVAlterTbRsp
(
SDecoder
*
pDecoder
,
SVAlterTbRsp
*
pRsp
)
{
if
(
tStartDecode
(
pDecoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pDecoder
,
&
pRsp
->
code
)
<
0
)
return
-
1
;
tEndDecode
(
pDecoder
);
return
0
;
}
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
浏览文件 @
2027f477
...
@@ -192,7 +192,8 @@ static void vmProcessApplyQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
...
@@ -192,7 +192,8 @@ static void vmProcessApplyQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
rpcFreeCont
(
originalRpcMsg
.
pCont
);
rpcFreeCont
(
originalRpcMsg
.
pCont
);
// if leader, send response
// if leader, send response
if
(
pMsg
->
rpcMsg
.
handle
!=
NULL
&&
pMsg
->
rpcMsg
.
ahandle
!=
NULL
)
{
//if (pMsg->rpcMsg.handle != NULL && pMsg->rpcMsg.ahandle != NULL) {
if
(
pMsg
->
rpcMsg
.
handle
!=
NULL
)
{
rsp
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
;
rsp
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
;
rsp
.
handle
=
pMsg
->
rpcMsg
.
handle
;
rsp
.
handle
=
pMsg
->
rpcMsg
.
handle
;
rsp
.
refId
=
pMsg
->
rpcMsg
.
refId
;
rsp
.
refId
=
pMsg
->
rpcMsg
.
refId
;
...
@@ -213,7 +214,23 @@ static void vmProcessSyncQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOf
...
@@ -213,7 +214,23 @@ static void vmProcessSyncQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOf
// todo
// todo
SRpcMsg
*
pRsp
=
NULL
;
SRpcMsg
*
pRsp
=
NULL
;
(
void
)
vnodeProcessSyncReq
(
pVnode
->
pImpl
,
&
pMsg
->
rpcMsg
,
&
pRsp
);
int32_t
ret
=
vnodeProcessSyncReq
(
pVnode
->
pImpl
,
&
pMsg
->
rpcMsg
,
&
pRsp
);
if
(
ret
!=
0
)
{
// if leader, send response
if
(
pMsg
->
rpcMsg
.
handle
!=
NULL
)
{
SRpcMsg
rsp
;
rsp
.
pCont
=
NULL
;
rsp
.
contLen
=
0
;
rsp
.
code
=
terrno
;
dTrace
(
"vmProcessSyncQueue error, code:%d"
,
terrno
);
rsp
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
;
rsp
.
handle
=
pMsg
->
rpcMsg
.
handle
;
rsp
.
refId
=
pMsg
->
rpcMsg
.
refId
;
tmsgSendRsp
(
&
rsp
);
}
}
rpcFreeCont
(
pMsg
->
rpcMsg
.
pCont
);
rpcFreeCont
(
pMsg
->
rpcMsg
.
pCont
);
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
...
...
source/dnode/mnode/impl/src/mndStb.c
浏览文件 @
2027f477
...
@@ -383,9 +383,10 @@ static void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pSt
...
@@ -383,9 +383,10 @@ static void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pSt
req
.
suid
=
pStb
->
uid
;
req
.
suid
=
pStb
->
uid
;
req
.
rollup
=
pStb
->
ast1Len
>
0
?
1
:
0
;
req
.
rollup
=
pStb
->
ast1Len
>
0
?
1
:
0
;
req
.
schema
.
nCols
=
pStb
->
numOfColumns
;
req
.
schema
.
nCols
=
pStb
->
numOfColumns
;
req
.
schema
.
sver
=
0
;
req
.
schema
.
sver
=
pStb
->
version
;
req
.
schema
.
pSchema
=
pStb
->
pColumns
;
req
.
schema
.
pSchema
=
pStb
->
pColumns
;
req
.
schemaTag
.
nCols
=
pStb
->
numOfTags
;
req
.
schemaTag
.
nCols
=
pStb
->
numOfTags
;
req
.
schemaTag
.
nCols
=
0
;
req
.
schemaTag
.
pSchema
=
pStb
->
pTags
;
req
.
schemaTag
.
pSchema
=
pStb
->
pTags
;
if
(
req
.
rollup
)
{
if
(
req
.
rollup
)
{
...
...
source/dnode/vnode/inc/vnode.h
浏览文件 @
2027f477
...
@@ -189,6 +189,7 @@ struct SMetaEntry {
...
@@ -189,6 +189,7 @@ struct SMetaEntry {
struct
{
struct
{
int64_t
ctime
;
int64_t
ctime
;
int32_t
ttlDays
;
int32_t
ttlDays
;
int32_t
ncid
;
// next column id
SSchemaWrapper
schema
;
SSchemaWrapper
schema
;
}
ntbEntry
;
}
ntbEntry
;
struct
{
struct
{
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
2027f477
...
@@ -79,9 +79,11 @@ int metaClose(SMeta* pMeta);
...
@@ -79,9 +79,11 @@ int metaClose(SMeta* pMeta);
int
metaBegin
(
SMeta
*
pMeta
);
int
metaBegin
(
SMeta
*
pMeta
);
int
metaCommit
(
SMeta
*
pMeta
);
int
metaCommit
(
SMeta
*
pMeta
);
int
metaCreateSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaCreateSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaAlterSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
);
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
);
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
);
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
);
int
metaDropTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVDropTbReq
*
pReq
);
int
metaDropTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVDropTbReq
*
pReq
);
int
metaAlterTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pReq
);
SSchemaWrapper
*
metaGetTableSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
,
bool
isinline
);
SSchemaWrapper
*
metaGetTableSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
,
bool
isinline
);
STSchema
*
metaGetTbTSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
);
STSchema
*
metaGetTbTSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
);
int
metaGetTableEntryByName
(
SMetaReader
*
pReader
,
const
char
*
name
);
int
metaGetTableEntryByName
(
SMetaReader
*
pReader
,
const
char
*
name
);
...
@@ -96,7 +98,7 @@ int32_t metaCreateTSma(SMeta* pMeta, int64_t version, SSmaCfg* pCfg);
...
@@ -96,7 +98,7 @@ int32_t metaCreateTSma(SMeta* pMeta, int64_t version, SSmaCfg* pCfg);
int32_t
metaDropTSma
(
SMeta
*
pMeta
,
int64_t
indexUid
);
int32_t
metaDropTSma
(
SMeta
*
pMeta
,
int64_t
indexUid
);
// tsdb
// tsdb
int
tsdbOpen
(
SVnode
*
pVnode
,
STsdb
**
ppTsdb
,
const
char
*
dir
,
STsdbKeepCfg
*
pKeepCfg
);
int
tsdbOpen
(
SVnode
*
pVnode
,
STsdb
**
ppTsdb
,
const
char
*
dir
,
STsdbKeepCfg
*
pKeepCfg
);
int
tsdbClose
(
STsdb
**
pTsdb
);
int
tsdbClose
(
STsdb
**
pTsdb
);
int
tsdbBegin
(
STsdb
*
pTsdb
);
int
tsdbBegin
(
STsdb
*
pTsdb
);
int
tsdbCommit
(
STsdb
*
pTsdb
);
int
tsdbCommit
(
STsdb
*
pTsdb
);
...
@@ -181,7 +183,7 @@ typedef enum {
...
@@ -181,7 +183,7 @@ typedef enum {
TSDB_TYPE_RSMA_L2
=
4
,
// RSMA Level 2
TSDB_TYPE_RSMA_L2
=
4
,
// RSMA Level 2
}
ETsdbType
;
}
ETsdbType
;
struct
STsdbKeepCfg
{
struct
STsdbKeepCfg
{
int8_t
precision
;
// precision always be used with below keep cfgs
int8_t
precision
;
// precision always be used with below keep cfgs
int32_t
days
;
int32_t
days
;
int32_t
keep0
;
int32_t
keep0
;
...
...
source/dnode/vnode/src/meta/metaEntry.c
浏览文件 @
2027f477
...
@@ -34,6 +34,7 @@ int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) {
...
@@ -34,6 +34,7 @@ int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) {
}
else
if
(
pME
->
type
==
TSDB_NORMAL_TABLE
)
{
}
else
if
(
pME
->
type
==
TSDB_NORMAL_TABLE
)
{
if
(
tEncodeI64
(
pCoder
,
pME
->
ntbEntry
.
ctime
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
pCoder
,
pME
->
ntbEntry
.
ctime
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
pME
->
ntbEntry
.
ttlDays
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
pME
->
ntbEntry
.
ttlDays
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pCoder
,
pME
->
ntbEntry
.
ncid
)
<
0
)
return
-
1
;
if
(
tEncodeSSchemaWrapper
(
pCoder
,
&
pME
->
ntbEntry
.
schema
)
<
0
)
return
-
1
;
if
(
tEncodeSSchemaWrapper
(
pCoder
,
&
pME
->
ntbEntry
.
schema
)
<
0
)
return
-
1
;
}
else
if
(
pME
->
type
==
TSDB_TSMA_TABLE
)
{
}
else
if
(
pME
->
type
==
TSDB_TSMA_TABLE
)
{
if
(
tEncodeTSma
(
pCoder
,
pME
->
smaEntry
.
tsma
)
<
0
)
return
-
1
;
if
(
tEncodeTSma
(
pCoder
,
pME
->
smaEntry
.
tsma
)
<
0
)
return
-
1
;
...
@@ -65,10 +66,11 @@ int metaDecodeEntry(SDecoder *pCoder, SMetaEntry *pME) {
...
@@ -65,10 +66,11 @@ int metaDecodeEntry(SDecoder *pCoder, SMetaEntry *pME) {
}
else
if
(
pME
->
type
==
TSDB_NORMAL_TABLE
)
{
}
else
if
(
pME
->
type
==
TSDB_NORMAL_TABLE
)
{
if
(
tDecodeI64
(
pCoder
,
&
pME
->
ntbEntry
.
ctime
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
pCoder
,
&
pME
->
ntbEntry
.
ctime
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
pME
->
ntbEntry
.
ttlDays
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
pME
->
ntbEntry
.
ttlDays
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pCoder
,
&
pME
->
ntbEntry
.
ncid
)
<
0
)
return
-
1
;
if
(
tDecodeSSchemaWrapper
(
pCoder
,
&
pME
->
ntbEntry
.
schema
)
<
0
)
return
-
1
;
if
(
tDecodeSSchemaWrapper
(
pCoder
,
&
pME
->
ntbEntry
.
schema
)
<
0
)
return
-
1
;
}
else
if
(
pME
->
type
==
TSDB_TSMA_TABLE
)
{
}
else
if
(
pME
->
type
==
TSDB_TSMA_TABLE
)
{
if
(
tDecodeTSma
(
pCoder
,
pME
->
smaEntry
.
tsma
)
<
0
)
return
-
1
;
if
(
tDecodeTSma
(
pCoder
,
pME
->
smaEntry
.
tsma
)
<
0
)
return
-
1
;
}
else
{
}
else
{
ASSERT
(
0
);
ASSERT
(
0
);
}
}
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
2027f477
...
@@ -131,6 +131,75 @@ _err:
...
@@ -131,6 +131,75 @@ _err:
return
-
1
;
return
-
1
;
}
}
int
metaAlterSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
)
{
SMetaEntry
oStbEntry
=
{
0
};
SMetaEntry
nStbEntry
=
{
0
};
TDBC
*
pUidIdxc
=
NULL
;
TDBC
*
pTbDbc
=
NULL
;
const
void
*
pData
;
int
nData
;
int64_t
oversion
;
SDecoder
dc
=
{
0
};
int32_t
ret
;
int32_t
c
;
tdbDbcOpen
(
pMeta
->
pUidIdx
,
&
pUidIdxc
,
&
pMeta
->
txn
);
ret
=
tdbDbcMoveTo
(
pUidIdxc
,
&
pReq
->
suid
,
sizeof
(
tb_uid_t
),
&
c
);
if
(
ret
<
0
||
c
)
{
ASSERT
(
0
);
return
-
1
;
}
ret
=
tdbDbcGet
(
pUidIdxc
,
NULL
,
NULL
,
&
pData
,
&
nData
);
if
(
ret
<
0
)
{
ASSERT
(
0
);
return
-
1
;
}
oversion
=
*
(
int64_t
*
)
pData
;
tdbDbcOpen
(
pMeta
->
pTbDb
,
&
pTbDbc
,
&
pMeta
->
txn
);
ret
=
tdbDbcMoveTo
(
pTbDbc
,
&
((
STbDbKey
){.
uid
=
pReq
->
suid
,
.
version
=
oversion
}),
sizeof
(
STbDbKey
),
&
c
);
ASSERT
(
ret
==
0
&&
c
==
0
);
ret
=
tdbDbcGet
(
pTbDbc
,
NULL
,
NULL
,
&
pData
,
&
nData
);
ASSERT
(
ret
==
0
);
tDecoderInit
(
&
dc
,
pData
,
nData
);
metaDecodeEntry
(
&
dc
,
&
oStbEntry
);
nStbEntry
.
version
=
version
;
nStbEntry
.
type
=
TSDB_SUPER_TABLE
;
nStbEntry
.
uid
=
pReq
->
suid
;
nStbEntry
.
name
=
pReq
->
name
;
nStbEntry
.
stbEntry
.
schema
=
pReq
->
schema
;
nStbEntry
.
stbEntry
.
schemaTag
=
pReq
->
schemaTag
;
metaWLock
(
pMeta
);
// compare two entry
if
(
oStbEntry
.
stbEntry
.
schema
.
sver
!=
pReq
->
schema
.
sver
)
{
if
(
oStbEntry
.
stbEntry
.
schema
.
nCols
!=
pReq
->
schema
.
nCols
)
{
metaSaveToSkmDb
(
pMeta
,
&
nStbEntry
);
}
}
// if (oStbEntry.stbEntry.schemaTag.sver != pReq->schemaTag.sver) {
// // change tag schema
// }
// update table.db
metaSaveToTbDb
(
pMeta
,
&
nStbEntry
);
// update uid index
tdbDbcUpsert
(
pUidIdxc
,
&
pReq
->
suid
,
sizeof
(
tb_uid_t
),
&
version
,
sizeof
(
version
),
0
);
metaULock
(
pMeta
);
tDecoderClear
(
&
dc
);
tdbDbcClose
(
pTbDbc
);
tdbDbcClose
(
pUidIdxc
);
return
0
;
}
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
)
{
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
)
{
SMetaEntry
me
=
{
0
};
SMetaEntry
me
=
{
0
};
SMetaReader
mr
=
{
0
};
SMetaReader
mr
=
{
0
};
...
@@ -171,6 +240,7 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq) {
...
@@ -171,6 +240,7 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq) {
me
.
ntbEntry
.
ctime
=
pReq
->
ctime
;
me
.
ntbEntry
.
ctime
=
pReq
->
ctime
;
me
.
ntbEntry
.
ttlDays
=
pReq
->
ttl
;
me
.
ntbEntry
.
ttlDays
=
pReq
->
ttl
;
me
.
ntbEntry
.
schema
=
pReq
->
ntb
.
schema
;
me
.
ntbEntry
.
schema
=
pReq
->
ntb
.
schema
;
me
.
ntbEntry
.
ncid
=
me
.
ntbEntry
.
schema
.
pSchema
[
me
.
ntbEntry
.
schema
.
nCols
-
1
].
colId
+
1
;
}
}
if
(
metaHandleEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
if
(
metaHandleEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
...
@@ -305,6 +375,170 @@ int metaDropTable(SMeta *pMeta, int64_t version, SVDropTbReq *pReq) {
...
@@ -305,6 +375,170 @@ int metaDropTable(SMeta *pMeta, int64_t version, SVDropTbReq *pReq) {
return
0
;
return
0
;
}
}
static
int
metaAlterTableColumn
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pAlterTbReq
)
{
void
*
pVal
=
NULL
;
int
nVal
=
0
;
const
void
*
pData
=
NULL
;
int
nData
=
0
;
int
ret
=
0
;
tb_uid_t
uid
;
int64_t
oversion
;
SSchema
*
pColumn
=
NULL
;
SMetaEntry
entry
=
{
0
};
SSchemaWrapper
*
pSchema
;
int
c
;
// search name index
ret
=
tdbDbGet
(
pMeta
->
pNameIdx
,
pAlterTbReq
->
tbName
,
strlen
(
pAlterTbReq
->
tbName
)
+
1
,
&
pVal
,
&
nVal
);
if
(
ret
<
0
)
{
terrno
=
TSDB_CODE_VND_TABLE_NOT_EXIST
;
return
-
1
;
}
uid
=
*
(
tb_uid_t
*
)
pVal
;
tdbFree
(
pVal
);
pVal
=
NULL
;
// search uid index
TDBC
*
pUidIdxc
=
NULL
;
tdbDbcOpen
(
pMeta
->
pUidIdx
,
&
pUidIdxc
,
&
pMeta
->
txn
);
tdbDbcMoveTo
(
pUidIdxc
,
&
uid
,
sizeof
(
uid
),
&
c
);
ASSERT
(
c
==
0
);
tdbDbcGet
(
pUidIdxc
,
NULL
,
NULL
,
&
pData
,
&
nData
);
oversion
=
*
(
int64_t
*
)
pData
;
// search table.db
TDBC
*
pTbDbc
=
NULL
;
tdbDbcOpen
(
pMeta
->
pTbDb
,
&
pTbDbc
,
&
pMeta
->
txn
);
tdbDbcMoveTo
(
pTbDbc
,
&
((
STbDbKey
){.
uid
=
uid
,
.
version
=
oversion
}),
sizeof
(
STbDbKey
),
&
c
);
ASSERT
(
c
==
0
);
tdbDbcGet
(
pTbDbc
,
NULL
,
NULL
,
&
pData
,
&
nData
);
// get table entry
SDecoder
dc
=
{
0
};
tDecoderInit
(
&
dc
,
pData
,
nData
);
metaDecodeEntry
(
&
dc
,
&
entry
);
if
(
entry
.
type
!=
TSDB_NORMAL_TABLE
)
{
terrno
=
TSDB_CODE_VND_INVALID_TABLE_ACTION
;
goto
_err
;
}
// search the column to add/drop/update
pSchema
=
&
entry
.
ntbEntry
.
schema
;
int32_t
iCol
=
0
;
for
(;;)
{
pColumn
=
NULL
;
if
(
iCol
>=
pSchema
->
nCols
)
break
;
pColumn
=
&
pSchema
->
pSchema
[
iCol
];
if
(
strcmp
(
pColumn
->
name
,
pAlterTbReq
->
colName
)
==
0
)
break
;
iCol
++
;
}
entry
.
version
=
version
;
int
tlen
;
switch
(
pAlterTbReq
->
action
)
{
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
if
(
pColumn
)
{
terrno
=
TSDB_CODE_VND_COL_ALREADY_EXISTS
;
goto
_err
;
}
pSchema
->
sver
++
;
pSchema
->
nCols
++
;
pSchema
->
pSchema
=
taosMemoryRealloc
(
entry
.
ntbEntry
.
schema
.
pSchema
,
sizeof
(
SSchema
)
*
entry
.
ntbEntry
.
schema
.
nCols
);
pSchema
->
pSchema
[
entry
.
ntbEntry
.
schema
.
nCols
-
1
].
bytes
=
pAlterTbReq
->
bytes
;
pSchema
->
pSchema
[
entry
.
ntbEntry
.
schema
.
nCols
-
1
].
type
=
pAlterTbReq
->
type
;
pSchema
->
pSchema
[
entry
.
ntbEntry
.
schema
.
nCols
-
1
].
flags
=
pAlterTbReq
->
flags
;
pSchema
->
pSchema
[
entry
.
ntbEntry
.
schema
.
nCols
-
1
].
colId
=
entry
.
ntbEntry
.
ncid
++
;
strcpy
(
pSchema
->
pSchema
[
entry
.
ntbEntry
.
schema
.
nCols
-
1
].
name
,
pAlterTbReq
->
colName
);
break
;
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
if
(
pColumn
==
NULL
)
{
terrno
=
TSDB_CODE_VND_TABLE_COL_NOT_EXISTS
;
goto
_err
;
}
if
(
pColumn
->
colId
==
0
)
{
terrno
=
TSDB_CODE_VND_INVALID_TABLE_ACTION
;
goto
_err
;
}
pSchema
->
sver
++
;
pSchema
->
nCols
--
;
tlen
=
(
pSchema
->
nCols
-
iCol
-
1
)
*
sizeof
(
SSchema
);
if
(
tlen
)
{
memmove
(
pColumn
,
pColumn
+
1
,
tlen
);
}
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
if
(
pColumn
==
NULL
)
{
terrno
=
TSDB_CODE_VND_TABLE_COL_NOT_EXISTS
;
goto
_err
;
}
if
(
!
IS_VAR_DATA_TYPE
(
pColumn
->
type
)
||
pColumn
->
bytes
<=
pAlterTbReq
->
bytes
)
{
terrno
=
TSDB_CODE_VND_INVALID_TABLE_ACTION
;
goto
_err
;
}
pSchema
->
sver
++
;
pColumn
->
bytes
=
pAlterTbReq
->
bytes
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
if
(
pColumn
==
NULL
)
{
terrno
=
TSDB_CODE_VND_TABLE_COL_NOT_EXISTS
;
goto
_err
;
}
pSchema
->
sver
++
;
strcpy
(
pColumn
->
name
,
pAlterTbReq
->
colNewName
);
break
;
}
entry
.
version
=
version
;
tDecoderClear
(
&
dc
);
tdbDbcClose
(
pTbDbc
);
tdbDbcClose
(
pUidIdxc
);
return
0
;
_err:
tDecoderClear
(
&
dc
);
tdbDbcClose
(
pTbDbc
);
tdbDbcClose
(
pUidIdxc
);
return
-
1
;
}
static
int
metaUpdateTableTagVal
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pAlterTbReq
)
{
// TODO
return
0
;
}
static
int
metaUpdateTableOptions
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pAlterTbReq
)
{
// TODO
ASSERT
(
0
);
return
0
;
}
int
metaAlterTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pReq
)
{
switch
(
pReq
->
action
)
{
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
return
metaAlterTableColumn
(
pMeta
,
version
,
pReq
);
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:
return
metaUpdateTableTagVal
(
pMeta
,
version
,
pReq
);
case
TSDB_ALTER_TABLE_UPDATE_OPTIONS
:
return
metaUpdateTableOptions
(
pMeta
,
version
,
pReq
);
default:
terrno
=
TSDB_CODE_VND_INVALID_TABLE_ACTION
;
return
-
1
;
break
;
}
}
static
int
metaSaveToTbDb
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
static
int
metaSaveToTbDb
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
STbDbKey
tbDbKey
;
STbDbKey
tbDbKey
;
void
*
pKey
=
NULL
;
void
*
pKey
=
NULL
;
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
2027f477
...
@@ -91,7 +91,7 @@ int32_t tqRetrieveDataBlock(SArray** ppCols, STqReadHandle* pHandle, uint64_t* p
...
@@ -91,7 +91,7 @@ int32_t tqRetrieveDataBlock(SArray** ppCols, STqReadHandle* pHandle, uint64_t* p
// TODO set to real sversion
// TODO set to real sversion
*
pUid
=
0
;
*
pUid
=
0
;
int32_t
sversion
=
0
;
int32_t
sversion
=
1
;
if
(
pHandle
->
sver
!=
sversion
||
pHandle
->
cachedSchemaUid
!=
pHandle
->
msgIter
.
suid
)
{
if
(
pHandle
->
sver
!=
sversion
||
pHandle
->
cachedSchemaUid
!=
pHandle
->
msgIter
.
suid
)
{
pHandle
->
pSchema
=
metaGetTbTSchema
(
pHandle
->
pVnodeMeta
,
pHandle
->
msgIter
.
uid
,
sversion
);
pHandle
->
pSchema
=
metaGetTbTSchema
(
pHandle
->
pVnodeMeta
,
pHandle
->
msgIter
.
uid
,
sversion
);
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
2027f477
...
@@ -465,7 +465,7 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
...
@@ -465,7 +465,7 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
pTbData
=
(
STbData
*
)
pNode
->
pData
;
pTbData
=
(
STbData
*
)
pNode
->
pData
;
pCommitIter
=
pCommith
->
iters
+
i
;
pCommitIter
=
pCommith
->
iters
+
i
;
pTSchema
=
metaGetTbTSchema
(
REPO_META
(
pRepo
),
pTbData
->
uid
,
0
);
// TODO: schema version
pTSchema
=
metaGetTbTSchema
(
REPO_META
(
pRepo
),
pTbData
->
uid
,
1
);
// TODO: schema version
if
(
pTSchema
)
{
if
(
pTSchema
)
{
pCommitIter
->
pIter
=
tSkipListCreateIter
(
pTbData
->
pData
);
pCommitIter
->
pIter
=
tSkipListCreateIter
(
pTbData
->
pData
);
...
@@ -912,7 +912,7 @@ static int tsdbMoveBlkIdx(SCommitH *pCommith, SBlockIdx *pIdx) {
...
@@ -912,7 +912,7 @@ static int tsdbMoveBlkIdx(SCommitH *pCommith, SBlockIdx *pIdx) {
while
(
bidx
<
nBlocks
)
{
while
(
bidx
<
nBlocks
)
{
if
(
!
pTSchema
&&
!
tsdbCommitIsSameFile
(
pCommith
,
bidx
))
{
if
(
!
pTSchema
&&
!
tsdbCommitIsSameFile
(
pCommith
,
bidx
))
{
// Set commit table
// Set commit table
pTSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdb
),
pIdx
->
uid
,
0
);
// TODO: schema version
pTSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdb
),
pIdx
->
uid
,
1
);
// TODO: schema version
if
(
!
pTSchema
)
{
if
(
!
pTSchema
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
return
-
1
;
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
2027f477
...
@@ -490,7 +490,7 @@ tsdbReaderT* tsdbQueryTables(SVnode* pVnode, SQueryTableDataCond* pCond, STableG
...
@@ -490,7 +490,7 @@ tsdbReaderT* tsdbQueryTables(SVnode* pVnode, SQueryTableDataCond* pCond, STableG
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pTsdbReadHandle
->
pTableCheckInfo
,
0
);
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pTsdbReadHandle
->
pTableCheckInfo
,
0
);
pTsdbReadHandle
->
pSchema
=
metaGetTbTSchema
(
pVnode
->
pMeta
,
pCheckInfo
->
tableId
,
0
);
pTsdbReadHandle
->
pSchema
=
metaGetTbTSchema
(
pVnode
->
pMeta
,
pCheckInfo
->
tableId
,
1
);
int32_t
numOfCols
=
taosArrayGetSize
(
pTsdbReadHandle
->
suppInfo
.
defaultLoadColumn
);
int32_t
numOfCols
=
taosArrayGetSize
(
pTsdbReadHandle
->
suppInfo
.
defaultLoadColumn
);
int16_t
*
ids
=
pTsdbReadHandle
->
suppInfo
.
defaultLoadColumn
->
pData
;
int16_t
*
ids
=
pTsdbReadHandle
->
suppInfo
.
defaultLoadColumn
->
pData
;
...
@@ -1271,7 +1271,6 @@ _error:
...
@@ -1271,7 +1271,6 @@ _error:
static
int32_t
getEndPosInDataBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
SDataBlockInfo
*
pBlockInfo
);
static
int32_t
getEndPosInDataBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
SDataBlockInfo
*
pBlockInfo
);
static
int32_t
doCopyRowsFromFileBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
capacity
,
int32_t
numOfRows
,
static
int32_t
doCopyRowsFromFileBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
capacity
,
int32_t
numOfRows
,
int32_t
start
,
int32_t
end
);
int32_t
start
,
int32_t
end
);
static
void
moveDataToFront
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
numOfRows
,
int32_t
numOfCols
);
static
void
doCheckGeneratedBlockRange
(
STsdbReadHandle
*
pTsdbReadHandle
);
static
void
doCheckGeneratedBlockRange
(
STsdbReadHandle
*
pTsdbReadHandle
);
static
void
copyAllRemainRowsFromFileBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
STableCheckInfo
*
pCheckInfo
,
static
void
copyAllRemainRowsFromFileBlock
(
STsdbReadHandle
*
pTsdbReadHandle
,
STableCheckInfo
*
pCheckInfo
,
SDataBlockInfo
*
pBlockInfo
,
int32_t
endPos
);
SDataBlockInfo
*
pBlockInfo
,
int32_t
endPos
);
...
@@ -1301,7 +1300,7 @@ static int32_t handleDataMergeIfNeeded(STsdbReadHandle* pTsdbReadHandle, SBlock*
...
@@ -1301,7 +1300,7 @@ static int32_t handleDataMergeIfNeeded(STsdbReadHandle* pTsdbReadHandle, SBlock*
if
((
ascScan
&&
(
key
!=
TSKEY_INITIAL_VAL
&&
key
<
binfo
.
window
.
skey
))
||
if
((
ascScan
&&
(
key
!=
TSKEY_INITIAL_VAL
&&
key
<
binfo
.
window
.
skey
))
||
(
!
ascScan
&&
(
key
!=
TSKEY_INITIAL_VAL
&&
key
>
binfo
.
window
.
ekey
)))
{
(
!
ascScan
&&
(
key
!=
TSKEY_INITIAL_VAL
&&
key
>
binfo
.
window
.
ekey
)))
{
// do not load file block into buffer
// do not load file block into buffer
int32_t
step
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
1
:
-
1
;
int32_t
step
=
ascScan
?
1
:
-
1
;
TSKEY
maxKey
=
TSKEY
maxKey
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
(
binfo
.
window
.
skey
-
step
)
:
(
binfo
.
window
.
ekey
-
step
);
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
(
binfo
.
window
.
skey
-
step
)
:
(
binfo
.
window
.
ekey
-
step
);
...
@@ -1618,7 +1617,7 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
...
@@ -1618,7 +1617,7 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
if
(
pSchema1
==
NULL
)
{
if
(
pSchema1
==
NULL
)
{
// pSchema1 = metaGetTbTSchema(REPO_META(pTsdbReadHandle->pTsdb), uid, TD_ROW_SVER(row1));
// pSchema1 = metaGetTbTSchema(REPO_META(pTsdbReadHandle->pTsdb), uid, TD_ROW_SVER(row1));
// TODO: use the real schemaVersion
// TODO: use the real schemaVersion
pSchema1
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
uid
,
0
);
pSchema1
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
uid
,
1
);
}
}
#ifdef TD_DEBUG_PRINT_ROW
#ifdef TD_DEBUG_PRINT_ROW
...
@@ -1637,7 +1636,7 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
...
@@ -1637,7 +1636,7 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
if
(
pSchema2
==
NULL
)
{
if
(
pSchema2
==
NULL
)
{
// pSchema2 = metaGetTbTSchema(REPO_META(pTsdbReadHandle->pTsdb), uid, TD_ROW_SVER(row2));
// pSchema2 = metaGetTbTSchema(REPO_META(pTsdbReadHandle->pTsdb), uid, TD_ROW_SVER(row2));
// TODO: use the real schemaVersion
// TODO: use the real schemaVersion
pSchema2
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
uid
,
0
);
pSchema2
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
uid
,
1
);
}
}
if
(
isRow2DataRow
)
{
if
(
isRow2DataRow
)
{
numOfColsOfRow2
=
schemaNCols
(
pSchema2
);
numOfColsOfRow2
=
schemaNCols
(
pSchema2
);
...
@@ -1790,22 +1789,6 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
...
@@ -1790,22 +1789,6 @@ static int32_t mergeTwoRowFromMem(STsdbReadHandle* pTsdbReadHandle, int32_t capa
#endif
#endif
}
}
static
void
moveDataToFront
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
numOfRows
,
int32_t
numOfCols
)
{
if
(
numOfRows
==
0
||
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
{
return
;
}
// if the buffer is not full in case of descending order query, move the data in the front of the buffer
if
(
numOfRows
<
pTsdbReadHandle
->
outputCapacity
)
{
int32_t
emptySize
=
pTsdbReadHandle
->
outputCapacity
-
numOfRows
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pTsdbReadHandle
->
pColumns
,
i
);
memmove
((
char
*
)
pColInfo
->
pData
,
(
char
*
)
pColInfo
->
pData
+
emptySize
*
pColInfo
->
info
.
bytes
,
numOfRows
*
pColInfo
->
info
.
bytes
);
}
}
}
static
void
getQualifiedRowsPos
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
startPos
,
int32_t
endPos
,
static
void
getQualifiedRowsPos
(
STsdbReadHandle
*
pTsdbReadHandle
,
int32_t
startPos
,
int32_t
endPos
,
int32_t
numOfExisted
,
int32_t
*
start
,
int32_t
*
end
)
{
int32_t
numOfExisted
,
int32_t
*
start
,
int32_t
*
end
)
{
*
start
=
-
1
;
*
start
=
-
1
;
...
@@ -1891,9 +1874,6 @@ static void copyAllRemainRowsFromFileBlock(STsdbReadHandle* pTsdbReadHandle, STa
...
@@ -1891,9 +1874,6 @@ static void copyAllRemainRowsFromFileBlock(STsdbReadHandle* pTsdbReadHandle, STa
cur
->
lastKey
=
tsArray
[
endPos
]
+
step
;
cur
->
lastKey
=
tsArray
[
endPos
]
+
step
;
cur
->
blockCompleted
=
true
;
cur
->
blockCompleted
=
true
;
// if the buffer is not full in case of descending order query, move the data in the front of the buffer
moveDataToFront
(
pTsdbReadHandle
,
numOfRows
,
numOfCols
);
// The value of pos may be -1 or pBlockInfo->rows, and it is invalid in both cases.
// The value of pos may be -1 or pBlockInfo->rows, and it is invalid in both cases.
pos
=
endPos
+
step
;
pos
=
endPos
+
step
;
updateInfoAfterMerge
(
pTsdbReadHandle
,
pCheckInfo
,
numOfRows
,
pos
);
updateInfoAfterMerge
(
pTsdbReadHandle
,
pCheckInfo
,
numOfRows
,
pos
);
...
@@ -1944,18 +1924,18 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -1944,18 +1924,18 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
assert
(
pCols
->
numOfRows
==
pBlock
->
numOfRows
&&
tsArray
[
0
]
==
pBlock
->
keyFirst
&&
assert
(
pCols
->
numOfRows
==
pBlock
->
numOfRows
&&
tsArray
[
0
]
==
pBlock
->
keyFirst
&&
tsArray
[
pBlock
->
numOfRows
-
1
]
==
pBlock
->
keyLast
);
tsArray
[
pBlock
->
numOfRows
-
1
]
==
pBlock
->
keyLast
);
bool
ascScan
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
);
int32_t
step
=
ascScan
?
1
:
-
1
;
// for search the endPos, so the order needs to reverse
// for search the endPos, so the order needs to reverse
int32_t
order
=
(
pTsdbReadHandle
->
order
==
TSDB_ORDER_ASC
)
?
TSDB_ORDER_DESC
:
TSDB_ORDER_ASC
;
int32_t
order
=
ascScan
?
TSDB_ORDER_DESC
:
TSDB_ORDER_ASC
;
int32_t
step
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
1
:
-
1
;
int32_t
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pTsdbReadHandle
));
int32_t
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pTsdbReadHandle
));
STable
*
pTable
=
NULL
;
int32_t
endPos
=
getEndPosInDataBlock
(
pTsdbReadHandle
,
&
blockInfo
);
int32_t
endPos
=
getEndPosInDataBlock
(
pTsdbReadHandle
,
&
blockInfo
);
STimeWindow
*
pWin
=
&
blockInfo
.
window
;
tsdbDebug
(
"%p uid:%"
PRIu64
" start merge data block, file block range:%"
PRIu64
"-%"
PRIu64
tsdbDebug
(
"%p uid:%"
PRIu64
" start merge data block, file block range:%"
PRIu64
"-%"
PRIu64
" rows:%d, start:%d, end:%d, %s"
,
" rows:%d, start:%d, end:%d, %s"
,
pTsdbReadHandle
,
pCheckInfo
->
tableId
,
pWin
->
skey
,
pWin
->
ekey
,
blockInfo
.
rows
,
pTsdbReadHandle
,
pCheckInfo
->
tableId
,
blockInfo
.
window
.
skey
,
blockInfo
.
window
.
ekey
,
blockInfo
.
rows
,
cur
->
pos
,
endPos
,
pTsdbReadHandle
->
idStr
);
cur
->
pos
,
endPos
,
pTsdbReadHandle
->
idStr
);
// compared with the data from in-memory buffer, to generate the correct timestamp array list
// compared with the data from in-memory buffer, to generate the correct timestamp array list
...
@@ -1986,20 +1966,16 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -1986,20 +1966,16 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
}
}
TSKEY
key
=
TD_ROW_KEY
(
row1
);
TSKEY
key
=
TD_ROW_KEY
(
row1
);
if
((
key
>
pTsdbReadHandle
->
window
.
ekey
&&
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
if
((
key
>
pTsdbReadHandle
->
window
.
ekey
&&
ascScan
)
||
(
key
<
pTsdbReadHandle
->
window
.
ekey
&&
!
ascScan
))
{
(
key
<
pTsdbReadHandle
->
window
.
ekey
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)))
{
break
;
break
;
}
}
if
(((
pos
>
endPos
||
tsArray
[
pos
]
>
pTsdbReadHandle
->
window
.
ekey
)
&&
if
(((
pos
>
endPos
||
tsArray
[
pos
]
>
pTsdbReadHandle
->
window
.
ekey
)
&&
ascScan
)
||
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
((
pos
<
endPos
||
tsArray
[
pos
]
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ascScan
))
{
((
pos
<
endPos
||
tsArray
[
pos
]
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)))
{
break
;
break
;
}
}
if
((
key
<
tsArray
[
pos
]
&&
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
if
((
key
<
tsArray
[
pos
]
&&
ascScan
)
||
(
key
>
tsArray
[
pos
]
&&
!
ascScan
))
{
(
key
>
tsArray
[
pos
]
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)))
{
if
(
rv1
!=
TD_ROW_SVER
(
row1
))
{
if
(
rv1
!=
TD_ROW_SVER
(
row1
))
{
// pSchema1 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row1));
// pSchema1 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row1));
rv1
=
TD_ROW_SVER
(
row1
);
rv1
=
TD_ROW_SVER
(
row1
);
...
@@ -2054,23 +2030,19 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -2054,23 +2030,19 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
}
}
#endif
#endif
if
(
TD_SUPPORT_UPDATE
(
pCfg
->
update
))
{
if
(
TD_SUPPORT_UPDATE
(
pCfg
->
update
))
{
if
(
lastKeyAppend
!=
key
)
{
lastKeyAppend
=
key
;
++
curRow
;
}
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
curRow
,
pos
,
pos
);
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
curRow
,
pos
,
pos
);
lastKeyAppend
=
key
;
if
(
rv1
!=
TD_ROW_SVER
(
row1
))
{
if
(
rv1
!=
TD_ROW_SVER
(
row1
))
{
// pSchema1 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row1));
rv1
=
TD_ROW_SVER
(
row1
);
rv1
=
TD_ROW_SVER
(
row1
);
}
}
if
(
row2
&&
rv2
!=
TD_ROW_SVER
(
row2
))
{
if
(
row2
&&
rv2
!=
TD_ROW_SVER
(
row2
))
{
// pSchema2 = tsdbGetTableSchemaByVersion(pTable, memRowVersion(row2));
rv2
=
TD_ROW_SVER
(
row2
);
rv2
=
TD_ROW_SVER
(
row2
);
}
}
numOfRows
+=
mergeTwoRowFromMem
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
&
curRow
,
row1
,
row2
,
numOfCols
,
// still assign data into current row
pCheckInfo
->
tableId
,
pSchema1
,
pSchema2
,
pCfg
->
update
,
&
lastKeyAppend
);
mergeTwoRowFromMem
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
&
curRow
,
row1
,
row2
,
numOfCols
,
pCheckInfo
->
tableId
,
pSchema1
,
pSchema2
,
pCfg
->
update
,
&
lastKeyAppend
);
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
cur
->
win
.
skey
=
key
;
cur
->
win
.
skey
=
key
;
...
@@ -2081,12 +2053,13 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -2081,12 +2053,13 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
cur
->
mixBlock
=
true
;
cur
->
mixBlock
=
true
;
moveToNextRowInMem
(
pCheckInfo
);
moveToNextRowInMem
(
pCheckInfo
);
++
curRow
;
pos
+=
step
;
pos
+=
step
;
}
else
{
}
else
{
moveToNextRowInMem
(
pCheckInfo
);
moveToNextRowInMem
(
pCheckInfo
);
}
}
}
else
if
((
key
>
tsArray
[
pos
]
&&
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
}
else
if
((
key
>
tsArray
[
pos
]
&&
ascScan
)
||
(
key
<
tsArray
[
pos
]
&&
!
ascScan
))
{
(
key
<
tsArray
[
pos
]
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)))
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
cur
->
win
.
skey
=
tsArray
[
pos
];
cur
->
win
.
skey
=
tsArray
[
pos
];
}
}
...
@@ -2112,17 +2085,17 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -2112,17 +2085,17 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
int32_t
qstart
=
0
,
qend
=
0
;
int32_t
qstart
=
0
,
qend
=
0
;
getQualifiedRowsPos
(
pTsdbReadHandle
,
pos
,
end
,
numOfRows
,
&
qstart
,
&
qend
);
getQualifiedRowsPos
(
pTsdbReadHandle
,
pos
,
end
,
numOfRows
,
&
qstart
,
&
qend
);
if
((
lastKeyAppend
!=
TSKEY_INITIAL_VAL
)
&&
if
((
lastKeyAppend
!=
TSKEY_INITIAL_VAL
)
&&
(
lastKeyAppend
!=
(
ascScan
?
tsArray
[
qstart
]
:
tsArray
[
qend
])))
{
(
lastKeyAppend
!=
(
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
tsArray
[
qstart
]
:
tsArray
[
qend
])))
{
++
curRow
;
++
curRow
;
}
}
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
curRow
,
qstart
,
qend
);
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
curRow
,
qstart
,
qend
);
pos
+=
(
qend
-
qstart
+
1
)
*
step
;
pos
+=
(
qend
-
qstart
+
1
)
*
step
;
if
(
numOfRows
>
0
)
{
if
(
numOfRows
>
0
)
{
curRow
=
numOfRows
-
1
;
curRow
=
numOfRows
-
1
;
}
}
cur
->
win
.
ekey
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
tsArray
[
qend
]
:
tsArray
[
qstart
];
cur
->
win
.
ekey
=
ascScan
?
tsArray
[
qend
]
:
tsArray
[
qstart
];
cur
->
lastKey
=
cur
->
win
.
ekey
+
step
;
cur
->
lastKey
=
cur
->
win
.
ekey
+
step
;
lastKeyAppend
=
cur
->
win
.
ekey
;
lastKeyAppend
=
cur
->
win
.
ekey
;
}
}
...
@@ -2134,10 +2107,8 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -2134,10 +2107,8 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
* copy them all to result buffer, since it may be overlapped with file data block.
* copy them all to result buffer, since it may be overlapped with file data block.
*/
*/
if
(
node
==
NULL
||
if
(
node
==
NULL
||
((
TD_ROW_KEY
((
STSRow
*
)
SL_GET_NODE_DATA
(
node
))
>
pTsdbReadHandle
->
window
.
ekey
)
&&
((
TD_ROW_KEY
((
STSRow
*
)
SL_GET_NODE_DATA
(
node
))
>
pTsdbReadHandle
->
window
.
ekey
)
&&
ascScan
)
||
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
((
TD_ROW_KEY
((
STSRow
*
)
SL_GET_NODE_DATA
(
node
))
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ascScan
))
{
((
TD_ROW_KEY
((
STSRow
*
)
SL_GET_NODE_DATA
(
node
))
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)))
{
// no data in cache or data in cache is greater than the ekey of time window, load data from file block
// no data in cache or data in cache is greater than the ekey of time window, load data from file block
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
cur
->
win
.
skey
=
tsArray
[
pos
];
cur
->
win
.
skey
=
tsArray
[
pos
];
...
@@ -2149,22 +2120,20 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
...
@@ -2149,22 +2120,20 @@ static void doMergeTwoLevelData(STsdbReadHandle* pTsdbReadHandle, STableCheckInf
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
numOfRows
,
start
,
end
);
numOfRows
=
doCopyRowsFromFileBlock
(
pTsdbReadHandle
,
pTsdbReadHandle
->
outputCapacity
,
numOfRows
,
start
,
end
);
pos
+=
(
end
-
start
+
1
)
*
step
;
pos
+=
(
end
-
start
+
1
)
*
step
;
cur
->
win
.
ekey
=
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
?
tsArray
[
end
]
:
tsArray
[
start
];
cur
->
win
.
ekey
=
ascScan
?
tsArray
[
end
]
:
tsArray
[
start
];
cur
->
lastKey
=
cur
->
win
.
ekey
+
step
;
cur
->
lastKey
=
cur
->
win
.
ekey
+
step
;
cur
->
mixBlock
=
true
;
cur
->
mixBlock
=
true
;
}
}
}
}
}
}
cur
->
blockCompleted
=
cur
->
blockCompleted
=
(((
pos
>
endPos
||
cur
->
lastKey
>
pTsdbReadHandle
->
window
.
ekey
)
&&
ascScan
)
||
(((
pos
>
endPos
||
cur
->
lastKey
>
pTsdbReadHandle
->
window
.
ekey
)
&&
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
||
((
pos
<
endPos
||
cur
->
lastKey
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ascScan
));
((
pos
<
endPos
||
cur
->
lastKey
<
pTsdbReadHandle
->
window
.
ekey
)
&&
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)));
if
(
!
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
)
)
{
if
(
!
ascScan
)
{
TSWAP
(
cur
->
win
.
skey
,
cur
->
win
.
ekey
);
TSWAP
(
cur
->
win
.
skey
,
cur
->
win
.
ekey
);
}
}
moveDataToFront
(
pTsdbReadHandle
,
numOfRows
,
numOfCols
);
updateInfoAfterMerge
(
pTsdbReadHandle
,
pCheckInfo
,
numOfRows
,
pos
);
updateInfoAfterMerge
(
pTsdbReadHandle
,
pCheckInfo
,
numOfRows
,
pos
);
doCheckGeneratedBlockRange
(
pTsdbReadHandle
);
doCheckGeneratedBlockRange
(
pTsdbReadHandle
);
...
@@ -2755,7 +2724,7 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
...
@@ -2755,7 +2724,7 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
win
->
ekey
=
key
;
win
->
ekey
=
key
;
if
(
rv
!=
TD_ROW_SVER
(
row
))
{
if
(
rv
!=
TD_ROW_SVER
(
row
))
{
pSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
pCheckInfo
->
tableId
,
0
);
pSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
pCheckInfo
->
tableId
,
1
);
rv
=
TD_ROW_SVER
(
row
);
rv
=
TD_ROW_SVER
(
row
);
}
}
numOfRows
+=
mergeTwoRowFromMem
(
pTsdbReadHandle
,
maxRowsToRead
,
&
curRows
,
row
,
NULL
,
numOfCols
,
pCheckInfo
->
tableId
,
numOfRows
+=
mergeTwoRowFromMem
(
pTsdbReadHandle
,
maxRowsToRead
,
&
curRows
,
row
,
NULL
,
numOfCols
,
pCheckInfo
->
tableId
,
...
@@ -3877,7 +3846,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
...
@@ -3877,7 +3846,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
// NOTE: not add ref count for super table
// NOTE: not add ref count for super table
SArray
*
res
=
taosArrayInit
(
8
,
sizeof
(
STableKeyInfo
));
SArray
*
res
=
taosArrayInit
(
8
,
sizeof
(
STableKeyInfo
));
SSchemaWrapper
*
pTagSchema
=
metaGetTableSchema
(
pMeta
,
uid
,
0
,
true
);
SSchemaWrapper
*
pTagSchema
=
metaGetTableSchema
(
pMeta
,
uid
,
1
,
true
);
// no tags and tbname condition, all child tables of this stable are involved
// no tags and tbname condition, all child tables of this stable are involved
if
(
tbnameCond
==
NULL
&&
(
pTagCond
==
NULL
||
len
==
0
))
{
if
(
tbnameCond
==
NULL
&&
(
pTagCond
==
NULL
||
len
==
0
))
{
...
...
source/dnode/vnode/src/tsdb/tsdbSma.c
浏览文件 @
2027f477
...
@@ -2084,7 +2084,7 @@ static int32_t tsdbExecuteRSma(STsdb *pTsdb, const void *pMsg, int32_t inputType
...
@@ -2084,7 +2084,7 @@ static int32_t tsdbExecuteRSma(STsdb *pTsdb, const void *pMsg, int32_t inputType
if
(
inputType
==
STREAM_DATA_TYPE_SUBMIT_BLOCK
)
{
if
(
inputType
==
STREAM_DATA_TYPE_SUBMIT_BLOCK
)
{
// TODO: use the proper schema instead of 0, and cache STSchema in cache
// TODO: use the proper schema instead of 0, and cache STSchema in cache
STSchema
*
pTSchema
=
metaGetTbTSchema
(
pTsdb
->
pVnode
->
pMeta
,
suid
,
0
);
STSchema
*
pTSchema
=
metaGetTbTSchema
(
pTsdb
->
pVnode
->
pMeta
,
suid
,
1
);
if
(
!
pTSchema
)
{
if
(
!
pTSchema
)
{
terrno
=
TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION
;
terrno
=
TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION
;
return
TSDB_CODE_FAILED
;
return
TSDB_CODE_FAILED
;
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
2027f477
...
@@ -16,10 +16,10 @@
...
@@ -16,10 +16,10 @@
#include "vnd.h"
#include "vnd.h"
static
int
vnodeProcessCreateStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterStbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterTbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessSubmitReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessSubmitReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateTSmaReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateTSmaReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
...
@@ -73,7 +73,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
...
@@ -73,7 +73,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
if
(
vnodeProcessCreateStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessCreateStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
break
;
case
TDMT_VND_ALTER_STB
:
case
TDMT_VND_ALTER_STB
:
if
(
vnodeProcessAlterStbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessAlterStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
break
;
case
TDMT_VND_DROP_STB
:
case
TDMT_VND_DROP_STB
:
if
(
vnodeProcessDropStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessDropStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
...
@@ -82,7 +82,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
...
@@ -82,7 +82,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
if
(
vnodeProcessCreateTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessCreateTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
break
;
case
TDMT_VND_ALTER_TABLE
:
case
TDMT_VND_ALTER_TABLE
:
if
(
vnodeProcessAlterTbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessAlterTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
break
;
case
TDMT_VND_DROP_TABLE
:
case
TDMT_VND_DROP_TABLE
:
if
(
vnodeProcessDropTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessDropTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
...
@@ -198,6 +198,8 @@ void smaHandleRes(void *pVnode, int64_t smaId, const SArray *data) {
...
@@ -198,6 +198,8 @@ void smaHandleRes(void *pVnode, int64_t smaId, const SArray *data) {
}
}
int
vnodeProcessSyncReq
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
,
SRpcMsg
**
pRsp
)
{
int
vnodeProcessSyncReq
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
,
SRpcMsg
**
pRsp
)
{
int32_t
ret
=
TAOS_SYNC_PROPOSE_OTHER_ERROR
;
if
(
syncEnvIsStart
())
{
if
(
syncEnvIsStart
())
{
SSyncNode
*
pSyncNode
=
syncNodeAcquire
(
pVnode
->
sync
);
SSyncNode
*
pSyncNode
=
syncNodeAcquire
(
pVnode
->
sync
);
assert
(
pSyncNode
!=
NULL
);
assert
(
pSyncNode
!=
NULL
);
...
@@ -219,67 +221,70 @@ int vnodeProcessSyncReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) {
...
@@ -219,67 +221,70 @@ int vnodeProcessSyncReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) {
SyncTimeout
*
pSyncMsg
=
syncTimeoutFromRpcMsg2
(
pRpcMsg
);
SyncTimeout
*
pSyncMsg
=
syncTimeoutFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnTimeoutCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnTimeoutCb
(
pSyncNode
,
pSyncMsg
);
syncTimeoutDestroy
(
pSyncMsg
);
syncTimeoutDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_PING
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_PING
)
{
SyncPing
*
pSyncMsg
=
syncPingFromRpcMsg2
(
pRpcMsg
);
SyncPing
*
pSyncMsg
=
syncPingFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnPingCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnPingCb
(
pSyncNode
,
pSyncMsg
);
syncPingDestroy
(
pSyncMsg
);
syncPingDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_PING_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_PING_REPLY
)
{
SyncPingReply
*
pSyncMsg
=
syncPingReplyFromRpcMsg2
(
pRpcMsg
);
SyncPingReply
*
pSyncMsg
=
syncPingReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnPingReplyCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnPingReplyCb
(
pSyncNode
,
pSyncMsg
);
syncPingReplyDestroy
(
pSyncMsg
);
syncPingReplyDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_CLIENT_REQUEST
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_CLIENT_REQUEST
)
{
SyncClientRequest
*
pSyncMsg
=
syncClientRequestFromRpcMsg2
(
pRpcMsg
);
SyncClientRequest
*
pSyncMsg
=
syncClientRequestFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnClientRequestCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnClientRequestCb
(
pSyncNode
,
pSyncMsg
);
syncClientRequestDestroy
(
pSyncMsg
);
syncClientRequestDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_REQUEST_VOTE
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_REQUEST_VOTE
)
{
SyncRequestVote
*
pSyncMsg
=
syncRequestVoteFromRpcMsg2
(
pRpcMsg
);
SyncRequestVote
*
pSyncMsg
=
syncRequestVoteFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnRequestVoteCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnRequestVoteCb
(
pSyncNode
,
pSyncMsg
);
syncRequestVoteDestroy
(
pSyncMsg
);
syncRequestVoteDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_REQUEST_VOTE_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_REQUEST_VOTE_REPLY
)
{
SyncRequestVoteReply
*
pSyncMsg
=
syncRequestVoteReplyFromRpcMsg2
(
pRpcMsg
);
SyncRequestVoteReply
*
pSyncMsg
=
syncRequestVoteReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnRequestVoteReplyCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnRequestVoteReplyCb
(
pSyncNode
,
pSyncMsg
);
syncRequestVoteReplyDestroy
(
pSyncMsg
);
syncRequestVoteReplyDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_APPEND_ENTRIES
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_APPEND_ENTRIES
)
{
SyncAppendEntries
*
pSyncMsg
=
syncAppendEntriesFromRpcMsg2
(
pRpcMsg
);
SyncAppendEntries
*
pSyncMsg
=
syncAppendEntriesFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnAppendEntriesCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnAppendEntriesCb
(
pSyncNode
,
pSyncMsg
);
syncAppendEntriesDestroy
(
pSyncMsg
);
syncAppendEntriesDestroy
(
pSyncMsg
);
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_APPEND_ENTRIES_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_VND_SYNC_APPEND_ENTRIES_REPLY
)
{
SyncAppendEntriesReply
*
pSyncMsg
=
syncAppendEntriesReplyFromRpcMsg2
(
pRpcMsg
);
SyncAppendEntriesReply
*
pSyncMsg
=
syncAppendEntriesReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
assert
(
pSyncMsg
!=
NULL
);
syncNodeOnAppendEntriesReplyCb
(
pSyncNode
,
pSyncMsg
);
ret
=
syncNodeOnAppendEntriesReplyCb
(
pSyncNode
,
pSyncMsg
);
syncAppendEntriesReplyDestroy
(
pSyncMsg
);
syncAppendEntriesReplyDestroy
(
pSyncMsg
);
}
else
{
}
else
{
vError
(
"==vnodeProcessSyncReq== error msg type:%d"
,
pRpcMsg
->
msgType
);
vError
(
"==vnodeProcessSyncReq== error msg type:%d"
,
pRpcMsg
->
msgType
);
ret
=
TAOS_SYNC_PROPOSE_OTHER_ERROR
;
}
}
syncNodeRelease
(
pSyncNode
);
syncNodeRelease
(
pSyncNode
);
}
else
{
}
else
{
vError
(
"==vnodeProcessSyncReq== error syncEnv stop"
);
vError
(
"==vnodeProcessSyncReq== error syncEnv stop"
);
ret
=
TAOS_SYNC_PROPOSE_OTHER_ERROR
;
}
}
return
0
;
return
ret
;
}
}
static
int
vnodeProcessCreateStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
)
{
static
int
vnodeProcessCreateStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
)
{
...
@@ -397,20 +402,32 @@ _exit:
...
@@ -397,20 +402,32 @@ _exit:
return
rcode
;
return
rcode
;
}
}
static
int
vnodeProcessAlterStbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
static
int
vnodeProcessAlterStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
// ASSERT(0);
SVCreateStbReq
req
=
{
0
};
#if 0
SDecoder
dc
=
{
0
};
SVCreateTbReq vAlterTbReq = {0};
vTrace("vgId:%d, process alter stb req", TD_VID(pVnode));
pRsp
->
msgType
=
TDMT_VND_ALTER_STB_RSP
;
tDeserializeSVCreateTbReq(pReq, &vAlterTbReq);
pRsp
->
code
=
TSDB_CODE_SUCCESS
;
// TODO: to encapsule a free API
pRsp
->
pCont
=
NULL
;
taosMemoryFree(vAlterTbReq.stbCfg.pSchema);
pRsp
->
contLen
=
0
;
taosMemoryFree(vAlterTbReq.stbCfg.pTagSchema);
if (vAlterTbReq.stbCfg.pRSmaParam) {
tDecoderInit
(
&
dc
,
pReq
,
len
);
taosMemoryFree(vAlterTbReq.stbCfg.pRSmaParam);
// decode req
if
(
tDecodeSVCreateStbReq
(
&
dc
,
&
req
)
<
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
tDecoderClear
(
&
dc
);
return
-
1
;
}
}
taosMemoryFree(vAlterTbReq.name);
#endif
if
(
metaAlterSTable
(
pVnode
->
pMeta
,
version
,
&
req
)
<
0
)
{
pRsp
->
code
=
terrno
;
tDecoderClear
(
&
dc
);
return
-
1
;
}
tDecoderClear
(
&
dc
);
return
0
;
return
0
;
}
}
...
@@ -443,9 +460,32 @@ _exit:
...
@@ -443,9 +460,32 @@ _exit:
return
0
;
return
0
;
}
}
static
int
vnodeProcessAlterTbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
static
int
vnodeProcessAlterTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
// TODO
SVAlterTbReq
vAlterTbReq
=
{
0
};
ASSERT
(
0
);
SDecoder
dc
=
{
0
};
pRsp
->
msgType
=
TDMT_VND_ALTER_TABLE_RSP
;
pRsp
->
pCont
=
NULL
;
pRsp
->
contLen
=
0
;
pRsp
->
code
=
TSDB_CODE_SUCCESS
;
tDecoderInit
(
&
dc
,
pReq
,
len
);
// decode
if
(
tDecodeSVAlterTbReq
(
&
dc
,
&
vAlterTbReq
)
<
0
)
{
pRsp
->
code
=
TSDB_CODE_INVALID_MSG
;
tDecoderClear
(
&
dc
);
return
-
1
;
}
// process
if
(
metaAlterTable
(
pVnode
->
pMeta
,
version
,
&
vAlterTbReq
)
<
0
)
{
pRsp
->
code
=
terrno
;
tDecoderClear
(
&
dc
);
return
-
1
;
}
tDecoderClear
(
&
dc
);
return
0
;
return
0
;
}
}
...
@@ -513,7 +553,7 @@ static int vnodeDebugPrintSingleSubmitMsg(SMeta *pMeta, SSubmitBlk *pBlock, SSub
...
@@ -513,7 +553,7 @@ static int vnodeDebugPrintSingleSubmitMsg(SMeta *pMeta, SSubmitBlk *pBlock, SSub
if
(
pSchema
)
{
if
(
pSchema
)
{
taosMemoryFreeClear
(
pSchema
);
taosMemoryFreeClear
(
pSchema
);
}
}
pSchema
=
metaGetTbTSchema
(
pMeta
,
msgIter
->
suid
,
0
);
// TODO: use the real schema
pSchema
=
metaGetTbTSchema
(
pMeta
,
msgIter
->
suid
,
1
);
// TODO: use the real schema
if
(
pSchema
)
{
if
(
pSchema
)
{
suid
=
msgIter
->
suid
;
suid
=
msgIter
->
suid
;
}
}
...
@@ -656,7 +696,7 @@ _exit:
...
@@ -656,7 +696,7 @@ _exit:
static
int
vnodeProcessCreateTSmaReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
)
{
static
int
vnodeProcessCreateTSmaReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
)
{
SVCreateTSmaReq
req
=
{
0
};
SVCreateTSmaReq
req
=
{
0
};
SDecoder
coder
;
SDecoder
coder
;
pRsp
->
msgType
=
TDMT_VND_CREATE_SMA_RSP
;
pRsp
->
msgType
=
TDMT_VND_CREATE_SMA_RSP
;
pRsp
->
code
=
TSDB_CODE_SUCCESS
;
pRsp
->
code
=
TSDB_CODE_SUCCESS
;
...
@@ -670,7 +710,7 @@ static int vnodeProcessCreateTSmaReq(SVnode *pVnode, int64_t version, void *pReq
...
@@ -670,7 +710,7 @@ static int vnodeProcessCreateTSmaReq(SVnode *pVnode, int64_t version, void *pReq
pRsp
->
code
=
terrno
;
pRsp
->
code
=
terrno
;
goto
_err
;
goto
_err
;
}
}
if
(
metaCreateTSma
(
pVnode
->
pMeta
,
version
,
&
req
)
<
0
)
{
if
(
metaCreateTSma
(
pVnode
->
pMeta
,
version
,
&
req
)
<
0
)
{
pRsp
->
code
=
terrno
;
pRsp
->
code
=
terrno
;
goto
_err
;
goto
_err
;
...
...
source/libs/catalog/src/catalog.c
浏览文件 @
2027f477
...
@@ -2576,12 +2576,6 @@ int32_t catalogGetHandle(uint64_t clusterId, SCatalog** catalogHandle) {
...
@@ -2576,12 +2576,6 @@ int32_t catalogGetHandle(uint64_t clusterId, SCatalog** catalogHandle) {
CTG_ERR_JRET
(
TSDB_CODE_CTG_MEM_ERROR
);
CTG_ERR_JRET
(
TSDB_CODE_CTG_MEM_ERROR
);
}
}
SHashObj
*
metaCache
=
taosHashInit
(
gCtgMgmt
.
cfg
.
maxTblCacheNum
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
if
(
NULL
==
metaCache
)
{
qError
(
"taosHashInit failed, num:%d"
,
gCtgMgmt
.
cfg
.
maxTblCacheNum
);
CTG_ERR_RET
(
TSDB_CODE_CTG_MEM_ERROR
);
}
code
=
taosHashPut
(
gCtgMgmt
.
pCluster
,
&
clusterId
,
sizeof
(
clusterId
),
&
clusterCtg
,
POINTER_BYTES
);
code
=
taosHashPut
(
gCtgMgmt
.
pCluster
,
&
clusterId
,
sizeof
(
clusterId
),
&
clusterCtg
,
POINTER_BYTES
);
if
(
code
)
{
if
(
code
)
{
if
(
HASH_NODE_EXIST
(
code
))
{
if
(
HASH_NODE_EXIST
(
code
))
{
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
2027f477
...
@@ -658,6 +658,7 @@ void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWin
...
@@ -658,6 +658,7 @@ void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWin
void
cleanupAggSup
(
SAggSupporter
*
pAggSup
);
void
cleanupAggSup
(
SAggSupporter
*
pAggSup
);
void
destroyBasicOperatorInfo
(
void
*
param
,
int32_t
numOfOutput
);
void
destroyBasicOperatorInfo
(
void
*
param
,
int32_t
numOfOutput
);
void
appendOneRowToDataBlock
(
SSDataBlock
*
pBlock
,
STupleHandle
*
pTupleHandle
);
void
appendOneRowToDataBlock
(
SSDataBlock
*
pBlock
,
STupleHandle
*
pTupleHandle
);
void
setTbNameColData
(
void
*
pMeta
,
const
SSDataBlock
*
pBlock
,
SColumnInfoData
*
pColInfoData
,
int32_t
functionId
);
SInterval
extractIntervalInfo
(
const
STableScanPhysiNode
*
pTableScanNode
);
SInterval
extractIntervalInfo
(
const
STableScanPhysiNode
*
pTableScanNode
);
SColumn
extractColumnFromColumnNode
(
SColumnNode
*
pColNode
);
SColumn
extractColumnFromColumnNode
(
SColumnNode
*
pColNode
);
...
...
source/libs/executor/src/executorimpl.c
浏览文件 @
2027f477
...
@@ -13,7 +13,6 @@
...
@@ -13,7 +13,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#include <libs/function/function.h>
#include "filter.h"
#include "filter.h"
#include "function.h"
#include "function.h"
#include "functionMgt.h"
#include "functionMgt.h"
...
@@ -1601,9 +1600,6 @@ void doCompactSDataBlock(SSDataBlock* pBlock, int32_t numOfRows, int8_t* p) {
...
@@ -1601,9 +1600,6 @@ void doCompactSDataBlock(SSDataBlock* pBlock, int32_t numOfRows, int8_t* p) {
}
}
}
}
static
SColumnInfo
*
doGetTagColumnInfoById
(
SColumnInfo
*
pTagColList
,
int32_t
numOfTags
,
int16_t
colId
);
static
void
doSetTagValueInParam
(
void
*
pTable
,
int32_t
tagColId
,
SVariant
*
tag
,
int16_t
type
,
int16_t
bytes
);
static
uint32_t
doFilterByBlockTimeWindow
(
STableScanInfo
*
pTableScanInfo
,
SSDataBlock
*
pBlock
)
{
static
uint32_t
doFilterByBlockTimeWindow
(
STableScanInfo
*
pTableScanInfo
,
SSDataBlock
*
pBlock
)
{
SqlFunctionCtx
*
pCtx
=
pTableScanInfo
->
pCtx
;
SqlFunctionCtx
*
pCtx
=
pTableScanInfo
->
pCtx
;
uint32_t
status
=
BLK_DATA_NOT_LOAD
;
uint32_t
status
=
BLK_DATA_NOT_LOAD
;
...
@@ -1771,100 +1767,6 @@ int32_t loadDataBlockOnDemand(SExecTaskInfo* pTaskInfo, STableScanInfo* pTableSc
...
@@ -1771,100 +1767,6 @@ int32_t loadDataBlockOnDemand(SExecTaskInfo* pTaskInfo, STableScanInfo* pTableSc
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
/*
* set tag value in SqlFunctionCtx
* e.g.,tag information into input buffer
*/
static
void
doSetTagValueInParam
(
void
*
pTable
,
int32_t
tagColId
,
SVariant
*
tag
,
int16_t
type
,
int16_t
bytes
)
{
taosVariantDestroy
(
tag
);
char
*
val
=
NULL
;
// if (tagColId == TSDB_TBNAME_COLUMN_INDEX) {
// val = tsdbGetTableName(pTable);
// assert(val != NULL);
// } else {
// val = tsdbGetTableTagVal(pTable, tagColId, type, bytes);
// }
if
(
val
==
NULL
||
isNull
(
val
,
type
))
{
tag
->
nType
=
TSDB_DATA_TYPE_NULL
;
return
;
}
if
(
type
==
TSDB_DATA_TYPE_BINARY
||
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
maxLen
=
bytes
-
VARSTR_HEADER_SIZE
;
int32_t
len
=
(
varDataLen
(
val
)
>
maxLen
)
?
maxLen
:
varDataLen
(
val
);
taosVariantCreateFromBinary
(
tag
,
varDataVal
(
val
),
len
,
type
);
// taosVariantCreateFromBinary(tag, varDataVal(val), varDataLen(val), type);
}
else
{
taosVariantCreateFromBinary
(
tag
,
val
,
bytes
,
type
);
}
}
static
SColumnInfo
*
doGetTagColumnInfoById
(
SColumnInfo
*
pTagColList
,
int32_t
numOfTags
,
int16_t
colId
)
{
assert
(
pTagColList
!=
NULL
&&
numOfTags
>
0
);
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
if
(
pTagColList
[
i
].
colId
==
colId
)
{
return
&
pTagColList
[
i
];
}
}
return
NULL
;
}
void
setTagValue
(
SOperatorInfo
*
pOperatorInfo
,
void
*
pTable
,
SqlFunctionCtx
*
pCtx
,
int32_t
numOfOutput
)
{
SExprInfo
*
pExpr
=
pOperatorInfo
->
pExpr
;
SExprInfo
*
pExprInfo
=
&
pExpr
[
0
];
int32_t
functionId
=
getExprFunctionId
(
pExprInfo
);
#if 0
if (pQueryAttr->numOfOutput == 1 && functionId == FUNCTION_TS_COMP && pQueryAttr->stableQuery) {
assert(pExprInfo->base.numOfParams == 1);
// int16_t tagColId = (int16_t)pExprInfo->base.param[0].i;
int16_t tagColId = -1;
SColumnInfo* pColInfo = doGetTagColumnInfoById(pQueryAttr->tagColList, pQueryAttr->numOfTags, tagColId);
doSetTagValueInParam(pTable, tagColId, &pCtx[0].tag, pColInfo->type, pColInfo->bytes);
} else {
// set tag value, by which the results are aggregated.
int32_t offset = 0;
memset(pRuntimeEnv->tagVal, 0, pQueryAttr->tagLen);
for (int32_t idx = 0; idx < numOfOutput; ++idx) {
SExprInfo* pLocalExprInfo = &pExpr[idx];
// ts_comp column required the tag value for join filter
if (!TSDB_COL_IS_TAG(pLocalExprInfo->base.pParam[0].pCol->flag)) {
continue;
}
// todo use tag column index to optimize performance
doSetTagValueInParam(pTable, pLocalExprInfo->base.pParam[0].pCol->colId, &pCtx[idx].tag,
pLocalExprInfo->base.resSchema.type, pLocalExprInfo->base.resSchema.bytes);
if (IS_NUMERIC_TYPE(pLocalExprInfo->base.resSchema.type) ||
pLocalExprInfo->base.resSchema.type == TSDB_DATA_TYPE_BOOL ||
pLocalExprInfo->base.resSchema.type == TSDB_DATA_TYPE_TIMESTAMP) {
memcpy(pRuntimeEnv->tagVal + offset, &pCtx[idx].tag.i, pLocalExprInfo->base.resSchema.bytes);
} else {
if (pCtx[idx].tag.pz != NULL) {
memcpy(pRuntimeEnv->tagVal + offset, pCtx[idx].tag.pz, pCtx[idx].tag.nLen);
}
}
offset += pLocalExprInfo->base.resSchema.bytes;
}
}
// set the tsBuf start position before check each data block
if (pRuntimeEnv->pTsBuf != NULL) {
setCtxTagForJoin(pRuntimeEnv, &pCtx[0], pExprInfo, pTable);
}
#endif
}
void
copyToSDataBlock
(
SSDataBlock
*
pBlock
,
int32_t
*
offset
,
SGroupResInfo
*
pGroupResInfo
,
SDiskbasedBuf
*
pResBuf
)
{
void
copyToSDataBlock
(
SSDataBlock
*
pBlock
,
int32_t
*
offset
,
SGroupResInfo
*
pGroupResInfo
,
SDiskbasedBuf
*
pResBuf
)
{
pBlock
->
info
.
rows
=
0
;
pBlock
->
info
.
rows
=
0
;
...
@@ -2153,6 +2055,11 @@ void extractQualifiedTupleByFilterResult(SSDataBlock* pBlock, const int8_t* rowR
...
@@ -2153,6 +2055,11 @@ void extractQualifiedTupleByFilterResult(SSDataBlock* pBlock, const int8_t* rowR
SColumnInfoData
*
pDst
=
taosArrayGet
(
px
->
pDataBlock
,
i
);
SColumnInfoData
*
pDst
=
taosArrayGet
(
px
->
pDataBlock
,
i
);
SColumnInfoData
*
pSrc
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
pSrc
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
// it is a reserved column for scalar function, and no data in this column yet.
if
(
pSrc
->
pData
==
NULL
)
{
continue
;
}
int32_t
numOfRows
=
0
;
int32_t
numOfRows
=
0
;
for
(
int32_t
j
=
0
;
j
<
totalRows
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
totalRows
;
++
j
)
{
if
(
rowRes
[
j
]
==
0
)
{
if
(
rowRes
[
j
]
==
0
)
{
...
@@ -4038,12 +3945,6 @@ static SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
...
@@ -4038,12 +3945,6 @@ static SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
if (pProjectInfo->existDataBlock) { // TODO refactor
if (pProjectInfo->existDataBlock) { // TODO refactor
SSDataBlock* pBlock = pProjectInfo->existDataBlock;
SSDataBlock* pBlock = pProjectInfo->existDataBlock;
pProjectInfo->existDataBlock = NULL;
pProjectInfo->existDataBlock = NULL;
*newgroup = true;
// todo dynamic set tags
// if (pTableQueryInfo != NULL) {
// setTagValue(pOperator, pTableQueryInfo->pTable, pInfo->pCtx, pOperator->numOfExprs);
// }
// the pDataBlock are always the same one, no need to call this again
// the pDataBlock are always the same one, no need to call this again
setInputDataBlock(pOperator, pInfo->pCtx, pBlock, TSDB_ORDER_ASC);
setInputDataBlock(pOperator, pInfo->pCtx, pBlock, TSDB_ORDER_ASC);
...
@@ -4084,13 +3985,6 @@ static SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
...
@@ -4084,13 +3985,6 @@ static SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
}
}
}
}
// todo set tags
// STableQueryInfo* pTableQueryInfo = pRuntimeEnv->current;
// if (pTableQueryInfo != NULL) {
// setTagValue(pOperator, pTableQueryInfo->pTable, pInfo->pCtx, pOperator->numOfExprs);
// }
// the pDataBlock are always the same one, no need to call this again
// the pDataBlock are always the same one, no need to call this again
int32_t
code
=
getTableScanInfo
(
pOperator
->
pDownstream
[
0
],
&
order
,
&
scanFlag
);
int32_t
code
=
getTableScanInfo
(
pOperator
->
pDownstream
[
0
],
&
order
,
&
scanFlag
);
...
@@ -4430,10 +4324,6 @@ void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) {
...
@@ -4430,10 +4324,6 @@ void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) {
doDestroyBasicInfo
(
pInfo
,
numOfOutput
);
doDestroyBasicInfo
(
pInfo
,
numOfOutput
);
}
}
void
destroyMergeJoinOperator
(
void
*
param
,
int32_t
numOfOutput
)
{
SJoinOperatorInfo
*
pJoinOperator
=
(
SJoinOperatorInfo
*
)
param
;
}
void
destroyAggOperatorInfo
(
void
*
param
,
int32_t
numOfOutput
)
{
void
destroyAggOperatorInfo
(
void
*
param
,
int32_t
numOfOutput
)
{
SAggOperatorInfo
*
pInfo
=
(
SAggOperatorInfo
*
)
param
;
SAggOperatorInfo
*
pInfo
=
(
SAggOperatorInfo
*
)
param
;
doDestroyBasicInfo
(
&
pInfo
->
binfo
,
numOfOutput
);
doDestroyBasicInfo
(
&
pInfo
->
binfo
,
numOfOutput
);
...
@@ -4487,9 +4377,9 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SExprInfo* p
...
@@ -4487,9 +4377,9 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SExprInfo* p
goto
_error
;
goto
_error
;
}
}
pInfo
->
limit
=
*
pLimit
;
pInfo
->
limit
=
*
pLimit
;
pInfo
->
slimit
=
*
pSlimit
;
pInfo
->
slimit
=
*
pSlimit
;
pInfo
->
curOffset
=
pLimit
->
offset
;
pInfo
->
curOffset
=
pLimit
->
offset
;
pInfo
->
curSOffset
=
pSlimit
->
offset
;
pInfo
->
curSOffset
=
pSlimit
->
offset
;
pInfo
->
binfo
.
pRes
=
pResBlock
;
pInfo
->
binfo
.
pRes
=
pResBlock
;
...
@@ -4778,7 +4668,6 @@ static SArray* extractColumnInfo(SNodeList* pNodeList);
...
@@ -4778,7 +4668,6 @@ static SArray* extractColumnInfo(SNodeList* pNodeList);
static
SArray
*
createSortInfo
(
SNodeList
*
pNodeList
);
static
SArray
*
createSortInfo
(
SNodeList
*
pNodeList
);
static
SArray
*
extractPartitionColInfo
(
SNodeList
*
pNodeList
);
static
SArray
*
extractPartitionColInfo
(
SNodeList
*
pNodeList
);
static
void
setJoinColumnInfo
(
SColumnInfo
*
pColumn
,
const
SColumnNode
*
pColumnNode
);
SOperatorInfo
*
createOperatorTree
(
SPhysiNode
*
pPhyNode
,
SExecTaskInfo
*
pTaskInfo
,
SReadHandle
*
pHandle
,
SOperatorInfo
*
createOperatorTree
(
SPhysiNode
*
pPhyNode
,
SExecTaskInfo
*
pTaskInfo
,
SReadHandle
*
pHandle
,
uint64_t
queryId
,
uint64_t
taskId
,
STableGroupInfo
*
pTableGroupInfo
)
{
uint64_t
queryId
,
uint64_t
taskId
,
STableGroupInfo
*
pTableGroupInfo
)
{
...
@@ -5447,150 +5336,3 @@ int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SExplainExecInfo
...
@@ -5447,150 +5336,3 @@ int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SExplainExecInfo
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
SSDataBlock
*
doMergeJoin
(
struct
SOperatorInfo
*
pOperator
)
{
SJoinOperatorInfo
*
pJoinInfo
=
pOperator
->
info
;
SSDataBlock
*
pRes
=
pJoinInfo
->
pRes
;
blockDataCleanup
(
pRes
);
blockDataEnsureCapacity
(
pRes
,
4096
);
int32_t
nrows
=
0
;
while
(
1
)
{
if
(
pJoinInfo
->
pLeft
==
NULL
||
pJoinInfo
->
leftPos
>=
pJoinInfo
->
pLeft
->
info
.
rows
)
{
SOperatorInfo
*
ds1
=
pOperator
->
pDownstream
[
0
];
publishOperatorProfEvent
(
ds1
,
QUERY_PROF_BEFORE_OPERATOR_EXEC
);
pJoinInfo
->
pLeft
=
ds1
->
fpSet
.
getNextFn
(
ds1
);
publishOperatorProfEvent
(
ds1
,
QUERY_PROF_AFTER_OPERATOR_EXEC
);
pJoinInfo
->
leftPos
=
0
;
if
(
pJoinInfo
->
pLeft
==
NULL
)
{
setTaskStatus
(
pOperator
->
pTaskInfo
,
TASK_COMPLETED
);
break
;
}
}
if
(
pJoinInfo
->
pRight
==
NULL
||
pJoinInfo
->
rightPos
>=
pJoinInfo
->
pRight
->
info
.
rows
)
{
SOperatorInfo
*
ds2
=
pOperator
->
pDownstream
[
1
];
publishOperatorProfEvent
(
ds2
,
QUERY_PROF_BEFORE_OPERATOR_EXEC
);
pJoinInfo
->
pRight
=
ds2
->
fpSet
.
getNextFn
(
ds2
);
publishOperatorProfEvent
(
ds2
,
QUERY_PROF_AFTER_OPERATOR_EXEC
);
pJoinInfo
->
rightPos
=
0
;
if
(
pJoinInfo
->
pRight
==
NULL
)
{
setTaskStatus
(
pOperator
->
pTaskInfo
,
TASK_COMPLETED
);
break
;
}
}
SColumnInfoData
*
pLeftCol
=
taosArrayGet
(
pJoinInfo
->
pLeft
->
pDataBlock
,
pJoinInfo
->
leftCol
.
slotId
);
char
*
pLeftVal
=
colDataGetData
(
pLeftCol
,
pJoinInfo
->
leftPos
);
SColumnInfoData
*
pRightCol
=
taosArrayGet
(
pJoinInfo
->
pRight
->
pDataBlock
,
pJoinInfo
->
rightCol
.
slotId
);
char
*
pRightVal
=
colDataGetData
(
pRightCol
,
pJoinInfo
->
rightPos
);
// only the timestamp match support for ordinary table
ASSERT
(
pLeftCol
->
info
.
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
if
(
*
(
int64_t
*
)
pLeftVal
==
*
(
int64_t
*
)
pRightVal
)
{
for
(
int32_t
i
=
0
;
i
<
pOperator
->
numOfExprs
;
++
i
)
{
SColumnInfoData
*
pDst
=
taosArrayGet
(
pRes
->
pDataBlock
,
i
);
SExprInfo
*
pExprInfo
=
&
pOperator
->
pExpr
[
i
];
int32_t
blockId
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
dataBlockId
;
int32_t
slotId
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
int32_t
rowIndex
=
-
1
;
SColumnInfoData
*
pSrc
=
NULL
;
if
(
pJoinInfo
->
pLeft
->
info
.
blockId
==
blockId
)
{
pSrc
=
taosArrayGet
(
pJoinInfo
->
pLeft
->
pDataBlock
,
slotId
);
rowIndex
=
pJoinInfo
->
leftPos
;
}
else
{
pSrc
=
taosArrayGet
(
pJoinInfo
->
pRight
->
pDataBlock
,
slotId
);
rowIndex
=
pJoinInfo
->
rightPos
;
}
if
(
colDataIsNull_s
(
pSrc
,
rowIndex
))
{
colDataAppendNULL
(
pDst
,
nrows
);
}
else
{
char
*
p
=
colDataGetData
(
pSrc
,
rowIndex
);
colDataAppend
(
pDst
,
nrows
,
p
,
false
);
}
}
pJoinInfo
->
leftPos
+=
1
;
pJoinInfo
->
rightPos
+=
1
;
nrows
+=
1
;
}
else
if
(
*
(
int64_t
*
)
pLeftVal
<
*
(
int64_t
*
)
pRightVal
)
{
pJoinInfo
->
leftPos
+=
1
;
if
(
pJoinInfo
->
leftPos
>=
pJoinInfo
->
pLeft
->
info
.
rows
)
{
continue
;
}
}
else
if
(
*
(
int64_t
*
)
pLeftVal
>
*
(
int64_t
*
)
pRightVal
)
{
pJoinInfo
->
rightPos
+=
1
;
if
(
pJoinInfo
->
rightPos
>=
pJoinInfo
->
pRight
->
info
.
rows
)
{
continue
;
}
}
// the pDataBlock are always the same one, no need to call this again
pRes
->
info
.
rows
=
nrows
;
if
(
pRes
->
info
.
rows
>=
pOperator
->
resultInfo
.
threshold
)
{
break
;
}
}
return
(
pRes
->
info
.
rows
>
0
)
?
pRes
:
NULL
;
}
SOperatorInfo
*
createMergeJoinOperatorInfo
(
SOperatorInfo
**
pDownstream
,
int32_t
numOfDownstream
,
SExprInfo
*
pExprInfo
,
int32_t
numOfCols
,
SSDataBlock
*
pResBlock
,
SNode
*
pOnCondition
,
SExecTaskInfo
*
pTaskInfo
)
{
SJoinOperatorInfo
*
pInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SJoinOperatorInfo
));
SOperatorInfo
*
pOperator
=
taosMemoryCalloc
(
1
,
sizeof
(
SOperatorInfo
));
if
(
pOperator
==
NULL
||
pInfo
==
NULL
)
{
goto
_error
;
}
initResultSizeInfo
(
pOperator
,
4096
);
pInfo
->
pRes
=
pResBlock
;
pOperator
->
name
=
"MergeJoinOperator"
;
pOperator
->
operatorType
=
QUERY_NODE_PHYSICAL_PLAN_JOIN
;
pOperator
->
blocking
=
false
;
pOperator
->
status
=
OP_NOT_OPENED
;
pOperator
->
pExpr
=
pExprInfo
;
pOperator
->
numOfExprs
=
numOfCols
;
pOperator
->
info
=
pInfo
;
pOperator
->
pTaskInfo
=
pTaskInfo
;
SOperatorNode
*
pNode
=
(
SOperatorNode
*
)
pOnCondition
;
setJoinColumnInfo
(
&
pInfo
->
leftCol
,
(
SColumnNode
*
)
pNode
->
pLeft
);
setJoinColumnInfo
(
&
pInfo
->
rightCol
,
(
SColumnNode
*
)
pNode
->
pRight
);
pOperator
->
fpSet
=
createOperatorFpSet
(
operatorDummyOpenFn
,
doMergeJoin
,
NULL
,
NULL
,
destroyMergeJoinOperator
,
NULL
,
NULL
,
NULL
);
int32_t
code
=
appendDownstream
(
pOperator
,
pDownstream
,
numOfDownstream
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
return
pOperator
;
_error:
taosMemoryFree
(
pInfo
);
taosMemoryFree
(
pOperator
);
pTaskInfo
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
NULL
;
}
void
setJoinColumnInfo
(
SColumnInfo
*
pColumn
,
const
SColumnNode
*
pColumnNode
)
{
pColumn
->
slotId
=
pColumnNode
->
slotId
;
pColumn
->
type
=
pColumnNode
->
node
.
resType
.
type
;
pColumn
->
bytes
=
pColumnNode
->
node
.
resType
.
bytes
;
pColumn
->
precision
=
pColumnNode
->
node
.
resType
.
precision
;
pColumn
->
scale
=
pColumnNode
->
node
.
resType
.
scale
;
}
source/libs/executor/src/joinoperator.c
0 → 100644
浏览文件 @
2027f477
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "function.h"
#include "os.h"
#include "querynodes.h"
#include "tdatablock.h"
#include "tmsg.h"
#include "executorimpl.h"
#include "tcompare.h"
#include "thash.h"
#include "ttypes.h"
static
void
setJoinColumnInfo
(
SColumnInfo
*
pColumn
,
const
SColumnNode
*
pColumnNode
);
static
SSDataBlock
*
doMergeJoin
(
struct
SOperatorInfo
*
pOperator
);
static
void
destroyMergeJoinOperator
(
void
*
param
,
int32_t
numOfOutput
);
static
void
extractTimeCondition
(
SJoinOperatorInfo
*
Info
,
SLogicConditionNode
*
pLogicConditionNode
);
SOperatorInfo
*
createMergeJoinOperatorInfo
(
SOperatorInfo
**
pDownstream
,
int32_t
numOfDownstream
,
SExprInfo
*
pExprInfo
,
int32_t
numOfCols
,
SSDataBlock
*
pResBlock
,
SNode
*
pOnCondition
,
SExecTaskInfo
*
pTaskInfo
)
{
SJoinOperatorInfo
*
pInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SJoinOperatorInfo
));
SOperatorInfo
*
pOperator
=
taosMemoryCalloc
(
1
,
sizeof
(
SOperatorInfo
));
if
(
pOperator
==
NULL
||
pInfo
==
NULL
)
{
goto
_error
;
}
initResultSizeInfo
(
pOperator
,
4096
);
pInfo
->
pRes
=
pResBlock
;
pOperator
->
name
=
"MergeJoinOperator"
;
pOperator
->
operatorType
=
QUERY_NODE_PHYSICAL_PLAN_JOIN
;
pOperator
->
blocking
=
false
;
pOperator
->
status
=
OP_NOT_OPENED
;
pOperator
->
pExpr
=
pExprInfo
;
pOperator
->
numOfExprs
=
numOfCols
;
pOperator
->
info
=
pInfo
;
pOperator
->
pTaskInfo
=
pTaskInfo
;
if
(
nodeType
(
pOnCondition
)
==
QUERY_NODE_OPERATOR
)
{
SOperatorNode
*
pNode
=
(
SOperatorNode
*
)
pOnCondition
;
setJoinColumnInfo
(
&
pInfo
->
leftCol
,
(
SColumnNode
*
)
pNode
->
pLeft
);
setJoinColumnInfo
(
&
pInfo
->
rightCol
,
(
SColumnNode
*
)
pNode
->
pRight
);
}
else
if
(
nodeType
(
pOnCondition
)
==
QUERY_NODE_LOGIC_CONDITION
)
{
extractTimeCondition
(
pInfo
,
(
SLogicConditionNode
*
)
pOnCondition
);
}
pOperator
->
fpSet
=
createOperatorFpSet
(
operatorDummyOpenFn
,
doMergeJoin
,
NULL
,
NULL
,
destroyMergeJoinOperator
,
NULL
,
NULL
,
NULL
);
int32_t
code
=
appendDownstream
(
pOperator
,
pDownstream
,
numOfDownstream
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
return
pOperator
;
_error:
taosMemoryFree
(
pInfo
);
taosMemoryFree
(
pOperator
);
pTaskInfo
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
NULL
;
}
void
setJoinColumnInfo
(
SColumnInfo
*
pColumn
,
const
SColumnNode
*
pColumnNode
)
{
pColumn
->
slotId
=
pColumnNode
->
slotId
;
pColumn
->
type
=
pColumnNode
->
node
.
resType
.
type
;
pColumn
->
bytes
=
pColumnNode
->
node
.
resType
.
bytes
;
pColumn
->
precision
=
pColumnNode
->
node
.
resType
.
precision
;
pColumn
->
scale
=
pColumnNode
->
node
.
resType
.
scale
;
}
void
destroyMergeJoinOperator
(
void
*
param
,
int32_t
numOfOutput
)
{
SJoinOperatorInfo
*
pJoinOperator
=
(
SJoinOperatorInfo
*
)
param
;
}
SSDataBlock
*
doMergeJoin
(
struct
SOperatorInfo
*
pOperator
)
{
SJoinOperatorInfo
*
pJoinInfo
=
pOperator
->
info
;
SSDataBlock
*
pRes
=
pJoinInfo
->
pRes
;
blockDataCleanup
(
pRes
);
blockDataEnsureCapacity
(
pRes
,
4096
);
int32_t
nrows
=
0
;
while
(
1
)
{
// todo extract method
if
(
pJoinInfo
->
pLeft
==
NULL
||
pJoinInfo
->
leftPos
>=
pJoinInfo
->
pLeft
->
info
.
rows
)
{
SOperatorInfo
*
ds1
=
pOperator
->
pDownstream
[
0
];
publishOperatorProfEvent
(
ds1
,
QUERY_PROF_BEFORE_OPERATOR_EXEC
);
pJoinInfo
->
pLeft
=
ds1
->
fpSet
.
getNextFn
(
ds1
);
publishOperatorProfEvent
(
ds1
,
QUERY_PROF_AFTER_OPERATOR_EXEC
);
pJoinInfo
->
leftPos
=
0
;
if
(
pJoinInfo
->
pLeft
==
NULL
)
{
setTaskStatus
(
pOperator
->
pTaskInfo
,
TASK_COMPLETED
);
break
;
}
}
if
(
pJoinInfo
->
pRight
==
NULL
||
pJoinInfo
->
rightPos
>=
pJoinInfo
->
pRight
->
info
.
rows
)
{
SOperatorInfo
*
ds2
=
pOperator
->
pDownstream
[
1
];
publishOperatorProfEvent
(
ds2
,
QUERY_PROF_BEFORE_OPERATOR_EXEC
);
pJoinInfo
->
pRight
=
ds2
->
fpSet
.
getNextFn
(
ds2
);
publishOperatorProfEvent
(
ds2
,
QUERY_PROF_AFTER_OPERATOR_EXEC
);
pJoinInfo
->
rightPos
=
0
;
if
(
pJoinInfo
->
pRight
==
NULL
)
{
setTaskStatus
(
pOperator
->
pTaskInfo
,
TASK_COMPLETED
);
break
;
}
}
SColumnInfoData
*
pLeftCol
=
taosArrayGet
(
pJoinInfo
->
pLeft
->
pDataBlock
,
pJoinInfo
->
leftCol
.
slotId
);
char
*
pLeftVal
=
colDataGetData
(
pLeftCol
,
pJoinInfo
->
leftPos
);
SColumnInfoData
*
pRightCol
=
taosArrayGet
(
pJoinInfo
->
pRight
->
pDataBlock
,
pJoinInfo
->
rightCol
.
slotId
);
char
*
pRightVal
=
colDataGetData
(
pRightCol
,
pJoinInfo
->
rightPos
);
// only the timestamp match support for ordinary table
ASSERT
(
pLeftCol
->
info
.
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
if
(
*
(
int64_t
*
)
pLeftVal
==
*
(
int64_t
*
)
pRightVal
)
{
for
(
int32_t
i
=
0
;
i
<
pOperator
->
numOfExprs
;
++
i
)
{
SColumnInfoData
*
pDst
=
taosArrayGet
(
pRes
->
pDataBlock
,
i
);
SExprInfo
*
pExprInfo
=
&
pOperator
->
pExpr
[
i
];
int32_t
blockId
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
dataBlockId
;
int32_t
slotId
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
int32_t
rowIndex
=
-
1
;
SColumnInfoData
*
pSrc
=
NULL
;
if
(
pJoinInfo
->
pLeft
->
info
.
blockId
==
blockId
)
{
pSrc
=
taosArrayGet
(
pJoinInfo
->
pLeft
->
pDataBlock
,
slotId
);
rowIndex
=
pJoinInfo
->
leftPos
;
}
else
{
pSrc
=
taosArrayGet
(
pJoinInfo
->
pRight
->
pDataBlock
,
slotId
);
rowIndex
=
pJoinInfo
->
rightPos
;
}
if
(
colDataIsNull_s
(
pSrc
,
rowIndex
))
{
colDataAppendNULL
(
pDst
,
nrows
);
}
else
{
char
*
p
=
colDataGetData
(
pSrc
,
rowIndex
);
colDataAppend
(
pDst
,
nrows
,
p
,
false
);
}
}
pJoinInfo
->
leftPos
+=
1
;
pJoinInfo
->
rightPos
+=
1
;
nrows
+=
1
;
}
else
if
(
*
(
int64_t
*
)
pLeftVal
<
*
(
int64_t
*
)
pRightVal
)
{
pJoinInfo
->
leftPos
+=
1
;
if
(
pJoinInfo
->
leftPos
>=
pJoinInfo
->
pLeft
->
info
.
rows
)
{
continue
;
}
}
else
if
(
*
(
int64_t
*
)
pLeftVal
>
*
(
int64_t
*
)
pRightVal
)
{
pJoinInfo
->
rightPos
+=
1
;
if
(
pJoinInfo
->
rightPos
>=
pJoinInfo
->
pRight
->
info
.
rows
)
{
continue
;
}
}
// the pDataBlock are always the same one, no need to call this again
pRes
->
info
.
rows
=
nrows
;
if
(
pRes
->
info
.
rows
>=
pOperator
->
resultInfo
.
threshold
)
{
break
;
}
}
return
(
pRes
->
info
.
rows
>
0
)
?
pRes
:
NULL
;
}
static
void
extractTimeCondition
(
SJoinOperatorInfo
*
pInfo
,
SLogicConditionNode
*
pLogicConditionNode
)
{
int32_t
len
=
LIST_LENGTH
(
pLogicConditionNode
->
pParameterList
);
for
(
int32_t
i
=
0
;
i
<
len
;
++
i
)
{
SNode
*
pNode
=
nodesListGetNode
(
pLogicConditionNode
->
pParameterList
,
i
);
if
(
nodeType
(
pNode
)
==
QUERY_NODE_OPERATOR
)
{
SOperatorNode
*
pn1
=
(
SOperatorNode
*
)
pNode
;
setJoinColumnInfo
(
&
pInfo
->
leftCol
,
(
SColumnNode
*
)
pn1
->
pLeft
);
setJoinColumnInfo
(
&
pInfo
->
rightCol
,
(
SColumnNode
*
)
pn1
->
pRight
);
break
;
}
}
}
source/libs/executor/src/scanoperator.c
浏览文件 @
2027f477
...
@@ -291,20 +291,7 @@ void addTagPseudoColumnData(STableScanInfo* pTableScanInfo, SSDataBlock* pBlock)
...
@@ -291,20 +291,7 @@ void addTagPseudoColumnData(STableScanInfo* pTableScanInfo, SSDataBlock* pBlock)
// this is to handle the tbname
// this is to handle the tbname
if
(
fmIsScanPseudoColumnFunc
(
functionId
))
{
if
(
fmIsScanPseudoColumnFunc
(
functionId
))
{
struct
SScalarFuncExecFuncs
fpSet
=
{
0
};
setTbNameColData
(
pTableScanInfo
->
readHandle
.
meta
,
pBlock
,
pColInfoData
,
functionId
);
fmGetScalarFuncExecFuncs
(
functionId
,
&
fpSet
);
SColumnInfoData
infoData
=
{
0
};
infoData
.
info
.
type
=
TSDB_DATA_TYPE_BIGINT
;
infoData
.
info
.
bytes
=
sizeof
(
uint64_t
);
colInfoDataEnsureCapacity
(
&
infoData
,
0
,
1
);
colDataAppendInt64
(
&
infoData
,
0
,
&
pBlock
->
info
.
uid
);
SScalarParam
srcParam
=
{
.
numOfRows
=
pBlock
->
info
.
rows
,
.
param
=
pTableScanInfo
->
readHandle
.
meta
,
.
columnData
=
&
infoData
};
SScalarParam
param
=
{.
columnData
=
pColInfoData
};
fpSet
.
process
(
&
srcParam
,
1
,
&
param
);
}
else
{
// these are tags
}
else
{
// these are tags
const
char
*
p
=
metaGetTableTagVal
(
&
mr
.
me
,
pExpr
->
base
.
pParam
[
0
].
pCol
->
colId
);
const
char
*
p
=
metaGetTableTagVal
(
&
mr
.
me
,
pExpr
->
base
.
pParam
[
0
].
pCol
->
colId
);
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
...
@@ -316,6 +303,23 @@ void addTagPseudoColumnData(STableScanInfo* pTableScanInfo, SSDataBlock* pBlock)
...
@@ -316,6 +303,23 @@ void addTagPseudoColumnData(STableScanInfo* pTableScanInfo, SSDataBlock* pBlock)
metaReaderClear
(
&
mr
);
metaReaderClear
(
&
mr
);
}
}
void
setTbNameColData
(
void
*
pMeta
,
const
SSDataBlock
*
pBlock
,
SColumnInfoData
*
pColInfoData
,
int32_t
functionId
)
{
struct
SScalarFuncExecFuncs
fpSet
=
{
0
};
fmGetScalarFuncExecFuncs
(
functionId
,
&
fpSet
);
SColumnInfoData
infoData
=
{
0
};
infoData
.
info
.
type
=
TSDB_DATA_TYPE_BIGINT
;
infoData
.
info
.
bytes
=
sizeof
(
uint64_t
);
colInfoDataEnsureCapacity
(
&
infoData
,
0
,
1
);
colDataAppendInt64
(
&
infoData
,
0
,
(
int64_t
*
)
&
pBlock
->
info
.
uid
);
SScalarParam
srcParam
=
{
.
numOfRows
=
pBlock
->
info
.
rows
,
.
param
=
pMeta
,
.
columnData
=
&
infoData
};
SScalarParam
param
=
{.
columnData
=
pColInfoData
};
fpSet
.
process
(
&
srcParam
,
1
,
&
param
);
}
static
SSDataBlock
*
doTableScanImpl
(
SOperatorInfo
*
pOperator
)
{
static
SSDataBlock
*
doTableScanImpl
(
SOperatorInfo
*
pOperator
)
{
STableScanInfo
*
pTableScanInfo
=
pOperator
->
info
;
STableScanInfo
*
pTableScanInfo
=
pOperator
->
info
;
SSDataBlock
*
pBlock
=
pTableScanInfo
->
pResBlock
;
SSDataBlock
*
pBlock
=
pTableScanInfo
->
pResBlock
;
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
2027f477
...
@@ -773,7 +773,6 @@ static int32_t doOpenIntervalAgg(SOperatorInfo* pOperator) {
...
@@ -773,7 +773,6 @@ static int32_t doOpenIntervalAgg(SOperatorInfo* pOperator) {
break
;
break
;
}
}
// setTagValue(pOperator, pRuntimeEnv->current->pTable, pInfo->pCtx, pOperator->numOfExprs);
// the pDataBlock are always the same one, no need to call this again
// the pDataBlock are always the same one, no need to call this again
setInputDataBlock
(
pOperator
,
pInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
setInputDataBlock
(
pOperator
,
pInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
STableQueryInfo
*
pTableQueryInfo
=
pInfo
->
pCurrent
;
STableQueryInfo
*
pTableQueryInfo
=
pInfo
->
pCurrent
;
...
@@ -1062,8 +1061,6 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) {
...
@@ -1062,8 +1061,6 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) {
// The timewindows that overlaps the timestamps of the input pBlock need to be recalculated and return to the
// The timewindows that overlaps the timestamps of the input pBlock need to be recalculated and return to the
// caller. Note that all the time window are not close till now.
// caller. Note that all the time window are not close till now.
// setTagValue(pOperator, pRuntimeEnv->current->pTable, pInfo->pCtx, pOperator->numOfExprs);
// the pDataBlock are always the same one, no need to call this again
// the pDataBlock are always the same one, no need to call this again
setInputDataBlock
(
pOperator
,
pInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
setInputDataBlock
(
pOperator
,
pInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
if
(
pInfo
->
invertible
)
{
if
(
pInfo
->
invertible
)
{
...
@@ -1377,7 +1374,6 @@ static SSDataBlock* doAllIntervalAgg(SOperatorInfo* pOperator) {
...
@@ -1377,7 +1374,6 @@ static SSDataBlock* doAllIntervalAgg(SOperatorInfo* pOperator) {
break
;
break
;
}
}
// setTagValue(pOperator, pRuntimeEnv->current->pTable, pIntervalInfo->pCtx, pOperator->numOfExprs);
// the pDataBlock are always the same one, no need to call this again
// the pDataBlock are always the same one, no need to call this again
setInputDataBlock
(
pOperator
,
pSliceInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
setInputDataBlock
(
pOperator
,
pSliceInfo
->
binfo
.
pCtx
,
pBlock
,
order
,
MAIN_SCAN
,
true
);
// hashAllIntervalAgg(pOperator, &pSliceInfo->binfo.resultRowInfo, pBlock, 0);
// hashAllIntervalAgg(pOperator, &pSliceInfo->binfo.resultRowInfo, pBlock, 0);
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
2027f477
...
@@ -584,6 +584,37 @@ static int32_t jsonToLogicProjectNode(const SJson* pJson, void* pObj) {
...
@@ -584,6 +584,37 @@ static int32_t jsonToLogicProjectNode(const SJson* pJson, void* pObj) {
return
code
;
return
code
;
}
}
static
const
char
*
jkExchangeLogicPlanSrcGroupId
=
"SrcGroupId"
;
static
const
char
*
jkExchangeLogicPlanSrcPrecision
=
"Precision"
;
static
int32_t
logicExchangeNodeToJson
(
const
void
*
pObj
,
SJson
*
pJson
)
{
const
SExchangeLogicNode
*
pNode
=
(
const
SExchangeLogicNode
*
)
pObj
;
int32_t
code
=
logicPlanNodeToJson
(
pObj
,
pJson
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddIntegerToObject
(
pJson
,
jkExchangeLogicPlanSrcGroupId
,
pNode
->
srcGroupId
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddIntegerToObject
(
pJson
,
jkExchangeLogicPlanSrcPrecision
,
pNode
->
precision
);
}
return
code
;
}
static
int32_t
jsonToLogicExchangeNode
(
const
SJson
*
pJson
,
void
*
pObj
)
{
SExchangeLogicNode
*
pNode
=
(
SExchangeLogicNode
*
)
pObj
;
int32_t
code
=
jsonToLogicPlanNode
(
pJson
,
pObj
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetIntValue
(
pJson
,
jkExchangeLogicPlanSrcGroupId
,
&
pNode
->
srcGroupId
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetUTinyIntValue
(
pJson
,
jkExchangeLogicPlanSrcPrecision
,
&
pNode
->
precision
);
}
return
code
;
}
static
const
char
*
jkFillLogicPlanMode
=
"Mode"
;
static
const
char
*
jkFillLogicPlanMode
=
"Mode"
;
static
const
char
*
jkFillLogicPlanWStartTs
=
"WStartTs"
;
static
const
char
*
jkFillLogicPlanWStartTs
=
"WStartTs"
;
static
const
char
*
jkFillLogicPlanValues
=
"Values"
;
static
const
char
*
jkFillLogicPlanValues
=
"Values"
;
...
@@ -2987,6 +3018,8 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
...
@@ -2987,6 +3018,8 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
return
logicProjectNodeToJson
(
pObj
,
pJson
);
return
logicProjectNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_LOGIC_PLAN_VNODE_MODIF
:
case
QUERY_NODE_LOGIC_PLAN_VNODE_MODIF
:
break
;
break
;
case
QUERY_NODE_LOGIC_PLAN_EXCHANGE
:
return
logicExchangeNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_LOGIC_PLAN_FILL
:
case
QUERY_NODE_LOGIC_PLAN_FILL
:
return
logicFillNodeToJson
(
pObj
,
pJson
);
return
logicFillNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_LOGIC_PLAN_SORT
:
case
QUERY_NODE_LOGIC_PLAN_SORT
:
...
@@ -3083,6 +3116,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
...
@@ -3083,6 +3116,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
return
jsonToLogicScanNode
(
pJson
,
pObj
);
return
jsonToLogicScanNode
(
pJson
,
pObj
);
case
QUERY_NODE_LOGIC_PLAN_PROJECT
:
case
QUERY_NODE_LOGIC_PLAN_PROJECT
:
return
jsonToLogicProjectNode
(
pJson
,
pObj
);
return
jsonToLogicProjectNode
(
pJson
,
pObj
);
case
QUERY_NODE_LOGIC_PLAN_EXCHANGE
:
return
jsonToLogicExchangeNode
(
pJson
,
pObj
);
case
QUERY_NODE_LOGIC_PLAN_FILL
:
case
QUERY_NODE_LOGIC_PLAN_FILL
:
return
jsonToLogicFillNode
(
pJson
,
pObj
);
return
jsonToLogicFillNode
(
pJson
,
pObj
);
case
QUERY_NODE_LOGIC_PLAN_SORT
:
case
QUERY_NODE_LOGIC_PLAN_SORT
:
...
...
source/libs/parser/inc/sql.y
浏览文件 @
2027f477
...
@@ -241,7 +241,7 @@ alter_table_clause(A) ::=
...
@@ -241,7 +241,7 @@ alter_table_clause(A) ::=
alter_table_clause(A) ::=
alter_table_clause(A) ::=
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
alter_table_clause(A) ::=
alter_table_clause(A) ::=
full_table_name(B) SET TAG column_name(C) NK_EQ literal(D). { A = createAlterTableSetTag(pCxt, B, &C,
D
); }
full_table_name(B) SET TAG column_name(C) NK_EQ literal(D). { A = createAlterTableSetTag(pCxt, B, &C,
releaseRawExprNode(pCxt, D)
); }
%type multi_create_clause { SNodeList* }
%type multi_create_clause { SNodeList* }
%destructor multi_create_clause { nodesDestroyList($$); }
%destructor multi_create_clause { nodesDestroyList($$); }
...
...
source/libs/parser/src/parAuthenticator.c
浏览文件 @
2027f477
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
*/
*/
#include "catalog.h"
#include "catalog.h"
#include "cmdnodes.h"
#include "parInt.h"
#include "parInt.h"
typedef
struct
SAuthCxt
{
typedef
struct
SAuthCxt
{
...
@@ -65,8 +66,8 @@ static int32_t authSetOperator(SAuthCxt* pCxt, SSetOperator* pSetOper) {
...
@@ -65,8 +66,8 @@ static int32_t authSetOperator(SAuthCxt* pCxt, SSetOperator* pSetOper) {
return
code
;
return
code
;
}
}
static
int32_t
authDropUser
(
SAuthCxt
*
pCxt
,
SDropUser
Req
*
pStmt
)
{
static
int32_t
authDropUser
(
SAuthCxt
*
pCxt
,
SDropUser
Stmt
*
pStmt
)
{
if
(
!
pCxt
->
pParseCxt
->
isSuperUser
||
0
==
strcmp
(
pStmt
->
use
r
,
TSDB_DEFAULT_USER
))
{
if
(
!
pCxt
->
pParseCxt
->
isSuperUser
||
0
==
strcmp
(
pStmt
->
use
Name
,
TSDB_DEFAULT_USER
))
{
return
TSDB_CODE_PAR_PERMISSION_DENIED
;
return
TSDB_CODE_PAR_PERMISSION_DENIED
;
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -92,7 +93,7 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
...
@@ -92,7 +93,7 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
case
QUERY_NODE_ALTER_USER_STMT
:
case
QUERY_NODE_ALTER_USER_STMT
:
break
;
break
;
case
QUERY_NODE_DROP_USER_STMT
:
{
case
QUERY_NODE_DROP_USER_STMT
:
{
return
authDropUser
(
pCxt
,
(
SDropUser
Req
*
)
pStmt
);
return
authDropUser
(
pCxt
,
(
SDropUser
Stmt
*
)
pStmt
);
}
}
case
QUERY_NODE_USE_DATABASE_STMT
:
case
QUERY_NODE_USE_DATABASE_STMT
:
case
QUERY_NODE_CREATE_DNODE_STMT
:
case
QUERY_NODE_CREATE_DNODE_STMT
:
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
2027f477
...
@@ -1041,18 +1041,6 @@ static void destroyInsertParseContextForTable(SInsertParseContext* pCxt) {
...
@@ -1041,18 +1041,6 @@ static void destroyInsertParseContextForTable(SInsertParseContext* pCxt) {
destroyCreateSubTbReq
(
&
pCxt
->
createTblReq
);
destroyCreateSubTbReq
(
&
pCxt
->
createTblReq
);
}
}
static
void
destroyDataBlock
(
STableDataBlocks
*
pDataBlock
)
{
if
(
pDataBlock
==
NULL
)
{
return
;
}
taosMemoryFreeClear
(
pDataBlock
->
pData
);
if
(
!
pDataBlock
->
cloned
)
{
destroyBoundColumnInfo
(
&
pDataBlock
->
boundColumnInfo
);
}
taosMemoryFreeClear
(
pDataBlock
);
}
static
void
destroyInsertParseContext
(
SInsertParseContext
*
pCxt
)
{
static
void
destroyInsertParseContext
(
SInsertParseContext
*
pCxt
)
{
destroyInsertParseContextForTable
(
pCxt
);
destroyInsertParseContextForTable
(
pCxt
);
taosHashCleanup
(
pCxt
->
pVgroupsHashObj
);
taosHashCleanup
(
pCxt
->
pVgroupsHashObj
);
...
@@ -1301,6 +1289,7 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
...
@@ -1301,6 +1289,7 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
CHECK_CODE
(
buildOutput
(
&
insertCtx
));
CHECK_CODE
(
buildOutput
(
&
insertCtx
));
destroyBlockArrayList
(
insertCtx
.
pVgDataBlocks
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -1580,16 +1569,25 @@ int32_t qBuildStmtColFields(void* pBlock, int32_t* fieldNum, TAOS_FIELD** fields
...
@@ -1580,16 +1569,25 @@ int32_t qBuildStmtColFields(void* pBlock, int32_t* fieldNum, TAOS_FIELD** fields
// schemaless logic start
// schemaless logic start
typedef
struct
SmlExecHandle
{
typedef
struct
SmlExecTableHandle
{
SHashObj
*
pBlockHash
;
SParsedDataColInfo
tags
;
// each table
SParsedDataColInfo
tags
;
// each table
SKVRowBuilder
tagsBuilder
;
// each table
SKVRowBuilder
tagsBuilder
;
// each table
SVCreateTbReq
createTblReq
;
// each table
SVCreateTbReq
createTblReq
;
// each table
}
SmlExecTableHandle
;
SQuery
*
pQuery
;
typedef
struct
SmlExecHandle
{
SHashObj
*
pBlockHash
;
SmlExecTableHandle
tableExecHandle
;
SQuery
*
pQuery
;
}
SSmlExecHandle
;
}
SSmlExecHandle
;
static
void
smlDestroyTableHandle
(
void
*
pHandle
)
{
SmlExecTableHandle
*
handle
=
(
SmlExecTableHandle
*
)
pHandle
;
tdDestroyKVRowBuilder
(
&
handle
->
tagsBuilder
);
destroyBoundColumnInfo
(
&
handle
->
tags
);
destroyCreateSubTbReq
(
&
handle
->
createTblReq
);
}
static
int32_t
smlBoundColumnData
(
SArray
*
cols
,
SParsedDataColInfo
*
pColList
,
SSchema
*
pSchema
)
{
static
int32_t
smlBoundColumnData
(
SArray
*
cols
,
SParsedDataColInfo
*
pColList
,
SSchema
*
pSchema
)
{
col_id_t
nCols
=
pColList
->
numOfCols
;
col_id_t
nCols
=
pColList
->
numOfCols
;
...
@@ -1692,25 +1690,26 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsSchema, SArray *cols
...
@@ -1692,25 +1690,26 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsSchema, SArray *cols
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
smlDestroyTableHandle
(
&
smlHandle
->
tableExecHandle
);
// free for each table
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pTableMeta
);
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pTableMeta
);
setBoundColumnInfo
(
&
smlHandle
->
tags
,
pTagsSchema
,
getNumOfTags
(
pTableMeta
));
setBoundColumnInfo
(
&
smlHandle
->
ta
bleExecHandle
.
ta
gs
,
pTagsSchema
,
getNumOfTags
(
pTableMeta
));
int
ret
=
smlBoundColumnData
(
tags
,
&
smlHandle
->
tags
,
pTagsSchema
);
int
ret
=
smlBoundColumnData
(
tags
,
&
smlHandle
->
ta
bleExecHandle
.
ta
gs
,
pTagsSchema
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
buildInvalidOperationMsg
(
&
pBuf
,
"bound tags error"
);
buildInvalidOperationMsg
(
&
pBuf
,
"bound tags error"
);
return
ret
;
return
ret
;
}
}
SKVRow
row
=
NULL
;
SKVRow
row
=
NULL
;
ret
=
smlBuildTagRow
(
tags
,
&
smlHandle
->
ta
gsBuilder
,
&
smlHandle
->
tags
,
pTagsSchema
,
&
row
,
&
pBuf
);
ret
=
smlBuildTagRow
(
tags
,
&
smlHandle
->
ta
bleExecHandle
.
tagsBuilder
,
&
smlHandle
->
tableExecHandle
.
tags
,
pTagsSchema
,
&
row
,
&
pBuf
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
return
ret
;
}
}
buildCreateTbReq
(
&
smlHandle
->
createTblReq
,
tableName
,
row
,
pTableMeta
->
suid
);
buildCreateTbReq
(
&
smlHandle
->
tableExecHandle
.
createTblReq
,
tableName
,
row
,
pTableMeta
->
suid
);
STableDataBlocks
*
pDataBlock
=
NULL
;
STableDataBlocks
*
pDataBlock
=
NULL
;
ret
=
getDataBlockFromList
(
smlHandle
->
pBlockHash
,
&
pTableMeta
->
uid
,
sizeof
(
pTableMeta
->
uid
),
ret
=
getDataBlockFromList
(
smlHandle
->
pBlockHash
,
&
pTableMeta
->
uid
,
sizeof
(
pTableMeta
->
uid
),
TSDB_DEFAULT_PAYLOAD_SIZE
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pTableMeta
).
rowSize
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pTableMeta
).
rowSize
,
pTableMeta
,
&
pDataBlock
,
NULL
,
&
smlHandle
->
createTblReq
);
pTableMeta
,
&
pDataBlock
,
NULL
,
&
smlHandle
->
tableExecHandle
.
createTblReq
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
buildInvalidOperationMsg
(
&
pBuf
,
"create data block error"
);
buildInvalidOperationMsg
(
&
pBuf
,
"create data block error"
);
return
ret
;
return
ret
;
...
@@ -1826,9 +1825,7 @@ void smlDestroyHandle(void* pHandle) {
...
@@ -1826,9 +1825,7 @@ void smlDestroyHandle(void* pHandle) {
if
(
!
pHandle
)
return
;
if
(
!
pHandle
)
return
;
SSmlExecHandle
*
handle
=
(
SSmlExecHandle
*
)
pHandle
;
SSmlExecHandle
*
handle
=
(
SSmlExecHandle
*
)
pHandle
;
destroyBlockHashmap
(
handle
->
pBlockHash
);
destroyBlockHashmap
(
handle
->
pBlockHash
);
tdDestroyKVRowBuilder
(
&
handle
->
tagsBuilder
);
smlDestroyTableHandle
(
&
handle
->
tableExecHandle
);
destroyBoundColumnInfo
(
&
handle
->
tags
);
destroyCreateSubTbReq
(
&
handle
->
createTblReq
);
taosMemoryFree
(
handle
);
taosMemoryFree
(
handle
);
}
}
...
...
source/libs/parser/src/parInsertData.c
浏览文件 @
2027f477
...
@@ -237,9 +237,7 @@ static void destroyDataBlock(STableDataBlocks* pDataBlock) {
...
@@ -237,9 +237,7 @@ static void destroyDataBlock(STableDataBlocks* pDataBlock) {
taosMemoryFreeClear
(
pDataBlock
->
pData
);
taosMemoryFreeClear
(
pDataBlock
->
pData
);
if
(
!
pDataBlock
->
cloned
)
{
if
(
!
pDataBlock
->
cloned
)
{
// free the refcount for metermeta
// free the refcount for metermeta
if
(
pDataBlock
->
pTableMeta
!=
NULL
)
{
taosMemoryFreeClear
(
pDataBlock
->
pTableMeta
);
taosMemoryFreeClear
(
pDataBlock
->
pTableMeta
);
}
destroyBoundColumnInfo
(
&
pDataBlock
->
boundColumnInfo
);
destroyBoundColumnInfo
(
&
pDataBlock
->
boundColumnInfo
);
}
}
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
2027f477
...
@@ -2949,8 +2949,8 @@ static int32_t translateCreateIndex(STranslateContext* pCxt, SCreateIndexStmt* p
...
@@ -2949,8 +2949,8 @@ static int32_t translateCreateIndex(STranslateContext* pCxt, SCreateIndexStmt* p
}
}
static
int32_t
translateDropIndex
(
STranslateContext
*
pCxt
,
SDropIndexStmt
*
pStmt
)
{
static
int32_t
translateDropIndex
(
STranslateContext
*
pCxt
,
SDropIndexStmt
*
pStmt
)
{
SEncoder
encoder
=
{
0
};
SEncoder
encoder
=
{
0
};
int32_t
contLen
=
0
;
int32_t
contLen
=
0
;
SVDropTSmaReq
dropSmaReq
=
{
0
};
SVDropTSmaReq
dropSmaReq
=
{
0
};
strcpy
(
dropSmaReq
.
indexName
,
pStmt
->
indexName
);
strcpy
(
dropSmaReq
.
indexName
,
pStmt
->
indexName
);
...
@@ -2958,7 +2958,7 @@ static int32_t translateDropIndex(STranslateContext* pCxt, SDropIndexStmt* pStmt
...
@@ -2958,7 +2958,7 @@ static int32_t translateDropIndex(STranslateContext* pCxt, SDropIndexStmt* pStmt
if
(
NULL
==
pCxt
->
pCmdMsg
)
{
if
(
NULL
==
pCxt
->
pCmdMsg
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
int32_t
ret
=
0
;
int32_t
ret
=
0
;
tEncodeSize
(
tEncodeSVDropTSmaReq
,
&
dropSmaReq
,
contLen
,
ret
);
tEncodeSize
(
tEncodeSVDropTSmaReq
,
&
dropSmaReq
,
contLen
,
ret
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
...
@@ -3725,7 +3725,7 @@ static int32_t buildNormalTableBatchReq(int32_t acctId, const SCreateTableStmt*
...
@@ -3725,7 +3725,7 @@ static int32_t buildNormalTableBatchReq(int32_t acctId, const SCreateTableStmt*
req
.
type
=
TD_NORMAL_TABLE
;
req
.
type
=
TD_NORMAL_TABLE
;
req
.
name
=
strdup
(
pStmt
->
tableName
);
req
.
name
=
strdup
(
pStmt
->
tableName
);
req
.
ntb
.
schema
.
nCols
=
LIST_LENGTH
(
pStmt
->
pCols
);
req
.
ntb
.
schema
.
nCols
=
LIST_LENGTH
(
pStmt
->
pCols
);
req
.
ntb
.
schema
.
sver
=
0
;
req
.
ntb
.
schema
.
sver
=
1
;
req
.
ntb
.
schema
.
pSchema
=
taosMemoryCalloc
(
req
.
ntb
.
schema
.
nCols
,
sizeof
(
SSchema
));
req
.
ntb
.
schema
.
pSchema
=
taosMemoryCalloc
(
req
.
ntb
.
schema
.
nCols
,
sizeof
(
SSchema
));
if
(
NULL
==
req
.
name
||
NULL
==
req
.
ntb
.
schema
.
pSchema
)
{
if
(
NULL
==
req
.
name
||
NULL
==
req
.
ntb
.
schema
.
pSchema
)
{
destroyCreateTbReq
(
&
req
);
destroyCreateTbReq
(
&
req
);
...
@@ -3800,7 +3800,7 @@ static void destroyCreateTbReqBatch(SVgroupCreateTableBatch* pTbBatch) {
...
@@ -3800,7 +3800,7 @@ static void destroyCreateTbReqBatch(SVgroupCreateTableBatch* pTbBatch) {
taosArrayDestroy
(
pTbBatch
->
req
.
pArray
);
taosArrayDestroy
(
pTbBatch
->
req
.
pArray
);
}
}
static
int32_t
rewriteToVnodeModifOpStmt
(
SQuery
*
pQuery
,
SArray
*
pBufArray
)
{
static
int32_t
rewriteToVnodeModif
y
OpStmt
(
SQuery
*
pQuery
,
SArray
*
pBufArray
)
{
SVnodeModifOpStmt
*
pNewStmt
=
nodesMakeNode
(
QUERY_NODE_VNODE_MODIF_STMT
);
SVnodeModifOpStmt
*
pNewStmt
=
nodesMakeNode
(
QUERY_NODE_VNODE_MODIF_STMT
);
if
(
pNewStmt
==
NULL
)
{
if
(
pNewStmt
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
...
@@ -3855,7 +3855,7 @@ static int32_t rewriteCreateTable(STranslateContext* pCxt, SQuery* pQuery) {
...
@@ -3855,7 +3855,7 @@ static int32_t rewriteCreateTable(STranslateContext* pCxt, SQuery* pQuery) {
code
=
buildCreateTableDataBlock
(
pCxt
->
pParseCxt
->
acctId
,
pStmt
,
&
info
,
&
pBufArray
);
code
=
buildCreateTableDataBlock
(
pCxt
->
pParseCxt
->
acctId
,
pStmt
,
&
info
,
&
pBufArray
);
}
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
rewriteToVnodeModifOpStmt
(
pQuery
,
pBufArray
);
code
=
rewriteToVnodeModif
y
OpStmt
(
pQuery
,
pBufArray
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
destroyCreateTbReqArray
(
pBufArray
);
destroyCreateTbReqArray
(
pBufArray
);
}
}
...
@@ -4111,7 +4111,7 @@ static int32_t rewriteCreateMultiTable(STranslateContext* pCxt, SQuery* pQuery)
...
@@ -4111,7 +4111,7 @@ static int32_t rewriteCreateMultiTable(STranslateContext* pCxt, SQuery* pQuery)
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
rewriteToVnodeModifOpStmt
(
pQuery
,
pBufArray
);
return
rewriteToVnodeModif
y
OpStmt
(
pQuery
,
pBufArray
);
}
}
typedef
struct
SVgroupDropTableBatch
{
typedef
struct
SVgroupDropTableBatch
{
...
@@ -4251,14 +4251,162 @@ static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) {
...
@@ -4251,14 +4251,162 @@ static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) {
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
rewriteToVnodeModifOpStmt
(
pQuery
,
pBufArray
);
return
rewriteToVnodeModif
y
OpStmt
(
pQuery
,
pBufArray
);
}
}
static
int32_t
rewriteAlterTable
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
static
int32_t
buildAlterTbReq
(
STranslateContext
*
pCxt
,
SAlterTableStmt
*
pStmt
,
SVAlterTbReq
*
pReq
)
{
// todo
pReq
->
tbName
=
strdup
(
pStmt
->
tableName
);
if
(
NULL
==
pReq
->
tbName
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pReq
->
action
=
pStmt
->
alterType
;
switch
(
pStmt
->
alterType
)
{
case
TSDB_ALTER_TABLE_ADD_TAG
:
case
TSDB_ALTER_TABLE_DROP_TAG
:
case
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
:
case
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
:
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
case
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
:
pReq
->
tagName
=
strdup
(
pStmt
->
colName
);
if
(
NULL
==
pReq
->
tagName
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pStmt
->
pVal
))
{
return
pCxt
->
errCode
;
}
pReq
->
isNull
=
(
TSDB_DATA_TYPE_NULL
==
pStmt
->
pVal
->
node
.
resType
.
type
);
pReq
->
nTagVal
=
pStmt
->
pVal
->
node
.
resType
.
bytes
;
char
*
pVal
=
nodesGetValueFromNode
(
pStmt
->
pVal
);
pReq
->
pTagVal
=
IS_VAR_DATA_TYPE
(
pStmt
->
pVal
->
node
.
resType
.
type
)
?
pVal
+
VARSTR_HEADER_SIZE
:
pVal
;
break
;
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
pReq
->
colName
=
strdup
(
pStmt
->
colName
);
if
(
NULL
==
pReq
->
colName
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pReq
->
type
=
pStmt
->
dataType
.
type
;
pReq
->
flags
=
COL_SMA_ON
;
pReq
->
bytes
=
pStmt
->
dataType
.
bytes
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
pReq
->
colName
=
strdup
(
pStmt
->
colName
);
if
(
NULL
==
pReq
->
colName
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pReq
->
colModBytes
=
calcTypeBytes
(
pStmt
->
dataType
);
break
;
case
TSDB_ALTER_TABLE_UPDATE_OPTIONS
:
if
(
-
1
!=
pStmt
->
pOptions
->
ttl
)
{
pReq
->
updateTTL
=
true
;
pReq
->
newTTL
=
pStmt
->
pOptions
->
ttl
;
}
if
(
'\0'
!=
pStmt
->
pOptions
->
comment
[
0
])
{
pReq
->
updateComment
=
true
;
pReq
->
newComment
=
strdup
(
pStmt
->
pOptions
->
comment
);
if
(
NULL
==
pReq
->
newComment
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
pReq
->
colName
=
strdup
(
pStmt
->
colName
);
pReq
->
colNewName
=
strdup
(
pStmt
->
newColName
);
if
(
NULL
==
pReq
->
colName
||
NULL
==
pReq
->
colNewName
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
break
;
default:
break
;
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
serializeAlterTbReq
(
STranslateContext
*
pCxt
,
SAlterTableStmt
*
pStmt
,
SVAlterTbReq
*
pReq
,
SArray
*
pArray
)
{
SVgroupInfo
vg
=
{
0
};
int32_t
code
=
getTableHashVgroup
(
pCxt
,
pStmt
->
dbName
,
pStmt
->
tableName
,
&
vg
);
int
tlen
=
0
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
tEncodeSize
(
tEncodeSVAlterTbReq
,
pReq
,
tlen
,
code
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
tlen
+=
sizeof
(
SMsgHead
);
void
*
pMsg
=
taosMemoryMalloc
(
tlen
);
if
(
NULL
==
pMsg
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
((
SMsgHead
*
)
pMsg
)
->
vgId
=
htonl
(
vg
.
vgId
);
((
SMsgHead
*
)
pMsg
)
->
contLen
=
htonl
(
tlen
);
void
*
pBuf
=
POINTER_SHIFT
(
pMsg
,
sizeof
(
SMsgHead
));
SEncoder
coder
=
{
0
};
tEncoderInit
(
&
coder
,
pBuf
,
tlen
-
sizeof
(
SMsgHead
));
tEncodeSVAlterTbReq
(
&
coder
,
pReq
);
tEncoderClear
(
&
coder
);
SVgDataBlocks
*
pVgData
=
taosMemoryCalloc
(
1
,
sizeof
(
SVgDataBlocks
));
if
(
NULL
==
pVgData
)
{
taosMemoryFree
(
pMsg
);
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pVgData
->
vg
=
vg
;
pVgData
->
pData
=
pMsg
;
pVgData
->
size
=
tlen
;
pVgData
->
numOfTables
=
1
;
taosArrayPush
(
pArray
,
&
pVgData
);
}
return
code
;
}
static
int32_t
buildModifyVnodeArray
(
STranslateContext
*
pCxt
,
SAlterTableStmt
*
pStmt
,
SVAlterTbReq
*
pReq
,
SArray
**
pArray
)
{
SArray
*
pTmpArray
=
taosArrayInit
(
1
,
sizeof
(
void
*
));
if
(
NULL
==
pTmpArray
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
int32_t
code
=
serializeAlterTbReq
(
pCxt
,
pStmt
,
pReq
,
pTmpArray
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pArray
=
pTmpArray
;
}
else
{
taosArrayDestroy
(
pTmpArray
);
}
return
code
;
}
static
int32_t
rewriteAlterTable
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
SAlterTableStmt
*
pStmt
=
(
SAlterTableStmt
*
)
pQuery
->
pRoot
;
STableMeta
*
pTableMeta
=
NULL
;
int32_t
code
=
getTableMeta
(
pCxt
,
pStmt
->
dbName
,
pStmt
->
tableName
,
&
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
if
(
TSDB_SUPER_TABLE
==
pTableMeta
->
tableType
)
{
return
TSDB_CODE_SUCCESS
;
}
else
if
(
TSDB_CHILD_TABLE
!=
pTableMeta
->
tableType
&&
TSDB_NORMAL_TABLE
!=
pTableMeta
->
tableType
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
}
SVAlterTbReq
req
=
{
0
};
code
=
buildAlterTbReq
(
pCxt
,
pStmt
,
&
req
);
SArray
*
pArray
=
NULL
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildModifyVnodeArray
(
pCxt
,
pStmt
,
&
req
,
&
pArray
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
rewriteToVnodeModifyOpStmt
(
pQuery
,
pArray
);
}
return
code
;
}
static
int32_t
rewriteQuery
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
static
int32_t
rewriteQuery
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
switch
(
nodeType
(
pQuery
->
pRoot
))
{
switch
(
nodeType
(
pQuery
->
pRoot
))
{
...
@@ -4296,9 +4444,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
...
@@ -4296,9 +4444,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
code
=
rewriteDropTable
(
pCxt
,
pQuery
);
code
=
rewriteDropTable
(
pCxt
,
pQuery
);
break
;
break
;
case
QUERY_NODE_ALTER_TABLE_STMT
:
case
QUERY_NODE_ALTER_TABLE_STMT
:
if
(
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
==
((
SAlterTableStmt
*
)
pQuery
->
pRoot
)
->
alterType
)
{
code
=
rewriteAlterTable
(
pCxt
,
pQuery
);
code
=
rewriteAlterTable
(
pCxt
,
pQuery
);
}
break
;
break
;
default:
default:
break
;
break
;
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
2027f477
...
@@ -152,6 +152,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
...
@@ -152,6 +152,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"Invalid timeline function"
;
return
"Invalid timeline function"
;
case
TSDB_CODE_PAR_INVALID_PASSWD
:
case
TSDB_CODE_PAR_INVALID_PASSWD
:
return
"Invalid password"
;
return
"Invalid password"
;
case
TSDB_CODE_PAR_INVALID_ALTER_TABLE
:
return
"Invalid alter table statement"
;
case
TSDB_CODE_OUT_OF_MEMORY
:
case
TSDB_CODE_OUT_OF_MEMORY
:
return
"Out of memory"
;
return
"Out of memory"
;
default:
default:
...
...
source/libs/parser/src/sql.c
浏览文件 @
2027f477
...
@@ -3500,7 +3500,7 @@ static YYACTIONTYPE yy_reduce(
...
@@ -3500,7 +3500,7 @@ static YYACTIONTYPE yy_reduce(
yymsp
[
-
4
].
minor
.
yy172
=
yylhsminor
.
yy172
;
yymsp
[
-
4
].
minor
.
yy172
=
yylhsminor
.
yy172
;
break
;
break
;
case
121
:
/* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ literal */
case
121
:
/* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ literal */
{
yylhsminor
.
yy172
=
createAlterTableSetTag
(
pCxt
,
yymsp
[
-
5
].
minor
.
yy172
,
&
yymsp
[
-
2
].
minor
.
yy105
,
yymsp
[
0
].
minor
.
yy172
);
}
{
yylhsminor
.
yy172
=
createAlterTableSetTag
(
pCxt
,
yymsp
[
-
5
].
minor
.
yy172
,
&
yymsp
[
-
2
].
minor
.
yy105
,
releaseRawExprNode
(
pCxt
,
yymsp
[
0
].
minor
.
yy172
)
);
}
yymsp
[
-
5
].
minor
.
yy172
=
yylhsminor
.
yy172
;
yymsp
[
-
5
].
minor
.
yy172
=
yylhsminor
.
yy172
;
break
;
break
;
case
123
:
/* multi_create_clause ::= multi_create_clause create_subtable_clause */
case
123
:
/* multi_create_clause ::= multi_create_clause create_subtable_clause */
...
...
source/libs/parser/test/parInitialATest.cpp
浏览文件 @
2027f477
...
@@ -69,7 +69,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
...
@@ -69,7 +69,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
* | COMMENT 'string_value'
* | COMMENT 'string_value'
* }
* }
*/
*/
TEST_F
(
ParserInitialATest
,
alterTable
)
{
TEST_F
(
ParserInitialATest
,
alter
S
Table
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
SMAlterStbReq
expect
=
{
0
};
SMAlterStbReq
expect
=
{
0
};
...
@@ -119,7 +119,7 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -119,7 +119,7 @@ TEST_F(ParserInitialATest, alterTable) {
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_ALTER_TABLE_STMT
);
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_ALTER_TABLE_STMT
);
SMAlterStbReq
req
=
{
0
};
SMAlterStbReq
req
=
{
0
};
ASSERT_
TRUE
(
TSDB_CODE_SUCCESS
==
tDeserializeSMAlterStbReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
)
);
ASSERT_
EQ
(
tDeserializeSMAlterStbReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
),
TSDB_CODE_SUCCESS
);
ASSERT_EQ
(
std
::
string
(
req
.
name
),
std
::
string
(
expect
.
name
));
ASSERT_EQ
(
std
::
string
(
req
.
name
),
std
::
string
(
expect
.
name
));
ASSERT_EQ
(
req
.
alterType
,
expect
.
alterType
);
ASSERT_EQ
(
req
.
alterType
,
expect
.
alterType
);
ASSERT_EQ
(
req
.
numOfFields
,
expect
.
numOfFields
);
ASSERT_EQ
(
req
.
numOfFields
,
expect
.
numOfFields
);
...
@@ -139,24 +139,24 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -139,24 +139,24 @@ TEST_F(ParserInitialATest, alterTable) {
}
}
});
});
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
nullptr
,
10
);
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
nullptr
,
10
);
run
(
"ALTER TABLE t1 TTL 10"
);
run
(
"ALTER TABLE
s
t1 TTL 10"
);
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
"test"
);
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
"test"
);
run
(
"ALTER TABLE t1 COMMENT 'test'"
);
run
(
"ALTER TABLE
s
t1 COMMENT 'test'"
);
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
1
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
1
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER TABLE t1 ADD COLUMN cc1 BIGINT"
);
run
(
"ALTER TABLE
s
t1 ADD COLUMN cc1 BIGINT"
);
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
1
,
"c1"
);
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
1
,
"c1"
);
run
(
"ALTER TABLE t1 DROP COLUMN c1"
);
run
(
"ALTER TABLE
s
t1 DROP COLUMN c1"
);
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
1
,
"c1"
,
TSDB_DATA_TYPE_VARCHAR
,
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
1
,
"c1"
,
TSDB_DATA_TYPE_VARCHAR
,
20
+
VARSTR_HEADER_SIZE
);
20
+
VARSTR_HEADER_SIZE
);
run
(
"ALTER TABLE t1 MODIFY COLUMN c1 VARCHAR(20)"
);
run
(
"ALTER TABLE
s
t1 MODIFY COLUMN c1 VARCHAR(20)"
);
setAlterStbReqFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
,
2
,
"c1"
,
0
,
0
,
"cc1"
);
setAlterStbReqFunc
(
"
s
t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
,
2
,
"c1"
,
0
,
0
,
"cc1"
);
run
(
"ALTER TABLE t1 RENAME COLUMN c1 cc1"
);
run
(
"ALTER TABLE
s
t1 RENAME COLUMN c1 cc1"
);
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_ADD_TAG
,
1
,
"tag11"
,
TSDB_DATA_TYPE_BIGINT
);
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_ADD_TAG
,
1
,
"tag11"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER TABLE st1 ADD TAG tag11 BIGINT"
);
run
(
"ALTER TABLE st1 ADD TAG tag11 BIGINT"
);
...
@@ -171,7 +171,127 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -171,7 +171,127 @@ TEST_F(ParserInitialATest, alterTable) {
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
,
2
,
"tag1"
,
0
,
0
,
"tag11"
);
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
,
2
,
"tag1"
,
0
,
0
,
"tag11"
);
run
(
"ALTER TABLE st1 RENAME TAG tag1 tag11"
);
run
(
"ALTER TABLE st1 RENAME TAG tag1 tag11"
);
// run("ALTER TABLE st1s1 SET TAG tag1=10");
// todo
// ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
}
TEST_F
(
ParserInitialATest
,
alterTable
)
{
useDb
(
"root"
,
"test"
);
SVAlterTbReq
expect
=
{
0
};
auto
setAlterColFunc
=
[
&
](
const
char
*
pTbname
,
int8_t
alterType
,
const
char
*
pColName
,
int8_t
dataType
=
0
,
int32_t
dataBytes
=
0
,
const
char
*
pNewColName
=
nullptr
)
{
memset
(
&
expect
,
0
,
sizeof
(
SVAlterTbReq
));
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
alterType
;
expect
.
colName
=
strdup
(
pColName
);
switch
(
alterType
)
{
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
expect
.
type
=
dataType
;
expect
.
flags
=
COL_SMA_ON
;
expect
.
bytes
=
dataBytes
>
0
?
dataBytes
:
(
dataType
>
0
?
tDataTypes
[
dataType
].
bytes
:
0
);
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
expect
.
colModBytes
=
dataBytes
;
break
;
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
expect
.
colNewName
=
strdup
(
pNewColName
);
break
;
default:
break
;
}
};
auto
setAlterTagFunc
=
[
&
](
const
char
*
pTbname
,
const
char
*
pTagName
,
const
uint8_t
*
pNewVal
,
uint32_t
bytes
)
{
memset
(
&
expect
,
0
,
sizeof
(
SVAlterTbReq
));
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
;
expect
.
tagName
=
strdup
(
pTagName
);
expect
.
isNull
=
(
nullptr
==
pNewVal
);
expect
.
nTagVal
=
bytes
;
expect
.
pTagVal
=
pNewVal
;
};
auto
setAlterOptionsFunc
=
[
&
](
const
char
*
pTbname
,
int32_t
ttl
,
const
char
*
pComment
=
nullptr
)
{
memset
(
&
expect
,
0
,
sizeof
(
SVAlterTbReq
));
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_OPTIONS
;
if
(
-
1
!=
ttl
)
{
expect
.
updateTTL
=
true
;
expect
.
newTTL
=
ttl
;
}
if
(
nullptr
!=
pComment
)
{
expect
.
updateComment
=
true
;
expect
.
newComment
=
pComment
;
}
};
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_VNODE_MODIF_STMT
);
SVnodeModifOpStmt
*
pStmt
=
(
SVnodeModifOpStmt
*
)
pQuery
->
pRoot
;
ASSERT_EQ
(
pStmt
->
sqlNodeType
,
QUERY_NODE_ALTER_TABLE_STMT
);
ASSERT_NE
(
pStmt
->
pDataBlocks
,
nullptr
);
ASSERT_EQ
(
taosArrayGetSize
(
pStmt
->
pDataBlocks
),
1
);
SVgDataBlocks
*
pVgData
=
(
SVgDataBlocks
*
)
taosArrayGetP
(
pStmt
->
pDataBlocks
,
0
);
void
*
pBuf
=
POINTER_SHIFT
(
pVgData
->
pData
,
sizeof
(
SMsgHead
));
SVAlterTbReq
req
=
{
0
};
SDecoder
coder
=
{
0
};
tDecoderInit
(
&
coder
,
(
const
uint8_t
*
)
pBuf
,
pVgData
->
size
);
ASSERT_EQ
(
tDecodeSVAlterTbReq
(
&
coder
,
&
req
),
TSDB_CODE_SUCCESS
);
ASSERT_EQ
(
std
::
string
(
req
.
tbName
),
std
::
string
(
expect
.
tbName
));
ASSERT_EQ
(
req
.
action
,
expect
.
action
);
if
(
nullptr
!=
expect
.
colName
)
{
ASSERT_EQ
(
std
::
string
(
req
.
colName
),
std
::
string
(
expect
.
colName
));
}
ASSERT_EQ
(
req
.
type
,
expect
.
type
);
ASSERT_EQ
(
req
.
flags
,
expect
.
flags
);
ASSERT_EQ
(
req
.
bytes
,
expect
.
bytes
);
ASSERT_EQ
(
req
.
colModBytes
,
expect
.
colModBytes
);
if
(
nullptr
!=
expect
.
colNewName
)
{
ASSERT_EQ
(
std
::
string
(
req
.
colNewName
),
std
::
string
(
expect
.
colNewName
));
}
if
(
nullptr
!=
expect
.
tagName
)
{
ASSERT_EQ
(
std
::
string
(
req
.
tagName
),
std
::
string
(
expect
.
tagName
));
}
ASSERT_EQ
(
req
.
isNull
,
expect
.
isNull
);
ASSERT_EQ
(
req
.
nTagVal
,
expect
.
nTagVal
);
ASSERT_EQ
(
memcmp
(
req
.
pTagVal
,
expect
.
pTagVal
,
expect
.
nTagVal
),
0
);
ASSERT_EQ
(
req
.
updateTTL
,
expect
.
updateTTL
);
ASSERT_EQ
(
req
.
newTTL
,
expect
.
newTTL
);
ASSERT_EQ
(
req
.
updateComment
,
expect
.
updateComment
);
if
(
nullptr
!=
expect
.
newComment
)
{
ASSERT_EQ
(
std
::
string
(
req
.
newComment
),
std
::
string
(
expect
.
newComment
));
}
tDecoderClear
(
&
coder
);
});
setAlterOptionsFunc
(
"t1"
,
10
,
nullptr
);
run
(
"ALTER TABLE t1 TTL 10"
);
setAlterOptionsFunc
(
"t1"
,
-
1
,
"test"
);
run
(
"ALTER TABLE t1 COMMENT 'test'"
);
setAlterColFunc
(
"t1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER TABLE t1 ADD COLUMN cc1 BIGINT"
);
setAlterColFunc
(
"t1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
"c1"
);
run
(
"ALTER TABLE t1 DROP COLUMN c1"
);
setAlterColFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
"c1"
,
TSDB_DATA_TYPE_VARCHAR
,
20
+
VARSTR_HEADER_SIZE
);
run
(
"ALTER TABLE t1 MODIFY COLUMN c1 VARCHAR(20)"
);
setAlterColFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
,
"c1"
,
0
,
0
,
"cc1"
);
run
(
"ALTER TABLE t1 RENAME COLUMN c1 cc1"
);
int64_t
val
=
10
;
setAlterTagFunc
(
"st1s1"
,
"tag1"
,
(
const
uint8_t
*
)
&
val
,
sizeof
(
val
));
run
(
"ALTER TABLE st1s1 SET TAG tag1=10"
);
// todo
// todo
// ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
// ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
...
...
source/libs/parser/test/parSelectTest.cpp
浏览文件 @
2027f477
...
@@ -235,11 +235,17 @@ TEST_F(ParserSelectTest, semanticError) {
...
@@ -235,11 +235,17 @@ TEST_F(ParserSelectTest, semanticError) {
TEST_F
(
ParserSelectTest
,
setOperator
)
{
TEST_F
(
ParserSelectTest
,
setOperator
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
//
run("SELECT * FROM t1 UNION ALL SELECT * FROM t1");
run
(
"SELECT * FROM t1 UNION ALL SELECT * FROM t1"
);
//
run("(SELECT * FROM t1) UNION ALL (SELECT * FROM t1)");
run
(
"(SELECT * FROM t1) UNION ALL (SELECT * FROM t1)"
);
run
(
"SELECT c1 FROM (SELECT c1 FROM t1 UNION ALL SELECT c1 FROM t1)"
);
run
(
"SELECT c1 FROM (SELECT c1 FROM t1 UNION ALL SELECT c1 FROM t1)"
);
}
}
TEST_F
(
ParserSelectTest
,
informationSchema
)
{
useDb
(
"root"
,
"test"
);
run
(
"SELECT * FROM information_schema.user_databases WHERE name = 'information_schema'"
);
}
}
// namespace ParserTest
}
// namespace ParserTest
source/libs/planner/src/planLogicCreater.c
浏览文件 @
2027f477
...
@@ -985,6 +985,8 @@ static int32_t getMsgType(ENodeType sqlType) {
...
@@ -985,6 +985,8 @@ static int32_t getMsgType(ENodeType sqlType) {
return
TDMT_VND_CREATE_TABLE
;
return
TDMT_VND_CREATE_TABLE
;
case
QUERY_NODE_DROP_TABLE_STMT
:
case
QUERY_NODE_DROP_TABLE_STMT
:
return
TDMT_VND_DROP_TABLE
;
return
TDMT_VND_DROP_TABLE
;
case
QUERY_NODE_ALTER_TABLE_STMT
:
return
TDMT_VND_ALTER_TABLE
;
default:
default:
break
;
break
;
}
}
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
2027f477
...
@@ -392,7 +392,8 @@ static int32_t cpdCalcTimeRange(SScanLogicNode* pScan, SNode** pPrimaryKeyCond,
...
@@ -392,7 +392,8 @@ static int32_t cpdCalcTimeRange(SScanLogicNode* pScan, SNode** pPrimaryKeyCond,
}
}
static
int32_t
cpdOptimizeScanCondition
(
SOptimizeContext
*
pCxt
,
SScanLogicNode
*
pScan
)
{
static
int32_t
cpdOptimizeScanCondition
(
SOptimizeContext
*
pCxt
,
SScanLogicNode
*
pScan
)
{
if
(
NULL
==
pScan
->
node
.
pConditions
||
OPTIMIZE_FLAG_TEST_MASK
(
pScan
->
node
.
optimizedFlag
,
OPTIMIZE_FLAG_CPD
))
{
if
(
NULL
==
pScan
->
node
.
pConditions
||
OPTIMIZE_FLAG_TEST_MASK
(
pScan
->
node
.
optimizedFlag
,
OPTIMIZE_FLAG_CPD
)
||
TSDB_SYSTEM_TABLE
==
pScan
->
pMeta
->
tableType
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
source/libs/planner/src/planSpliter.c
浏览文件 @
2027f477
...
@@ -303,7 +303,7 @@ static SLogicNode* unMatchByNode(SLogicNode* pNode) {
...
@@ -303,7 +303,7 @@ static SLogicNode* unMatchByNode(SLogicNode* pNode) {
}
}
SNode
*
pChild
;
SNode
*
pChild
;
FOREACH
(
pChild
,
pNode
->
pChildren
)
{
FOREACH
(
pChild
,
pNode
->
pChildren
)
{
SLogicNode
*
pSplitNode
=
u
a
MatchByNode
((
SLogicNode
*
)
pChild
);
SLogicNode
*
pSplitNode
=
u
n
MatchByNode
((
SLogicNode
*
)
pChild
);
if
(
NULL
!=
pSplitNode
)
{
if
(
NULL
!=
pSplitNode
)
{
return
pSplitNode
;
return
pSplitNode
;
}
}
...
@@ -318,7 +318,7 @@ static int32_t unCreateExchangeNode(SSplitContext* pCxt, SLogicSubplan* pSubplan
...
@@ -318,7 +318,7 @@ static int32_t unCreateExchangeNode(SSplitContext* pCxt, SLogicSubplan* pSubplan
}
}
pExchange
->
srcGroupId
=
pCxt
->
groupId
;
pExchange
->
srcGroupId
=
pCxt
->
groupId
;
// pExchange->precision = pScan->pMeta->tableInfo.precision;
// pExchange->precision = pScan->pMeta->tableInfo.precision;
pExchange
->
node
.
pTargets
=
nodesCloneList
(
pAgg
->
node
.
pTarget
s
);
pExchange
->
node
.
pTargets
=
nodesCloneList
(
pAgg
->
pGroupKey
s
);
if
(
NULL
==
pExchange
->
node
.
pTargets
)
{
if
(
NULL
==
pExchange
->
node
.
pTargets
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
...
...
source/libs/planner/test/planOtherTest.cpp
浏览文件 @
2027f477
...
@@ -47,4 +47,10 @@ TEST_F(PlanOtherTest, explain) {
...
@@ -47,4 +47,10 @@ TEST_F(PlanOtherTest, explain) {
run
(
"explain analyze SELECT * FROM t1"
);
run
(
"explain analyze SELECT * FROM t1"
);
run
(
"explain analyze verbose true ratio 0.01 SELECT * FROM t1"
);
run
(
"explain analyze verbose true ratio 0.01 SELECT * FROM t1"
);
}
}
\ No newline at end of file
TEST_F
(
PlanOtherTest
,
show
)
{
useDb
(
"root"
,
"test"
);
run
(
"SHOW DATABASES"
);
}
source/libs/planner/test/planStateTest.cpp
浏览文件 @
2027f477
...
@@ -23,13 +23,13 @@ class PlanStateTest : public PlannerTestBase {};
...
@@ -23,13 +23,13 @@ class PlanStateTest : public PlannerTestBase {};
TEST_F
(
PlanStateTest
,
basic
)
{
TEST_F
(
PlanStateTest
,
basic
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
select count(*) from t1 state_window
(c1)"
);
run
(
"
SELECT COUNT(*) FROM t1 STATE_WINDOW
(c1)"
);
}
}
TEST_F
(
PlanStateTest
,
stateExpr
)
{
TEST_F
(
PlanStateTest
,
stateExpr
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
select count(*) from t1 state_window
(c1 + 10)"
);
run
(
"
SELECT COUNT(*) FROM t1 STATE_WINDOW
(c1 + 10)"
);
}
}
TEST_F
(
PlanStateTest
,
selectFunc
)
{
TEST_F
(
PlanStateTest
,
selectFunc
)
{
...
...
source/libs/planner/test/planSubqueryTest.cpp
浏览文件 @
2027f477
...
@@ -25,11 +25,9 @@ TEST_F(PlanSubqeuryTest, basic) {
...
@@ -25,11 +25,9 @@ TEST_F(PlanSubqeuryTest, basic) {
if
(
0
==
g_skipSql
)
{
if
(
0
==
g_skipSql
)
{
run
(
"SELECT * FROM (SELECT * FROM t1)"
);
run
(
"SELECT * FROM (SELECT * FROM t1)"
);
run
(
"SELECT LAST(c1) FROM (SELECT * FROM t1)"
);
}
}
run
(
"SELECT
c1 FROM (SELECT c1 FROM t1 UNION ALL SELECT c1
FROM t1)"
);
run
(
"SELECT
LAST(c1) FROM (SELECT *
FROM t1)"
);
}
}
TEST_F
(
PlanSubqeuryTest
,
doubleGroupBy
)
{
TEST_F
(
PlanSubqeuryTest
,
doubleGroupBy
)
{
...
@@ -39,3 +37,11 @@ TEST_F(PlanSubqeuryTest, doubleGroupBy) {
...
@@ -39,3 +37,11 @@ TEST_F(PlanSubqeuryTest, doubleGroupBy) {
"SELECT c1 + c3 a, c1 + COUNT(*) b FROM t1 WHERE c2 = 'abc' GROUP BY c1, c3) "
"SELECT c1 + c3 a, c1 + COUNT(*) b FROM t1 WHERE c2 = 'abc' GROUP BY c1, c3) "
"WHERE a > 100 GROUP BY b"
);
"WHERE a > 100 GROUP BY b"
);
}
}
TEST_F
(
PlanSubqeuryTest
,
withSetOperator
)
{
useDb
(
"root"
,
"test"
);
run
(
"SELECT c1 FROM (SELECT c1 FROM t1 UNION ALL SELECT c1 FROM t1)"
);
run
(
"SELECT c1 FROM (SELECT c1 FROM t1 UNION SELECT c1 FROM t1)"
);
}
source/libs/planner/test/planSysTbTest.cpp
浏览文件 @
2027f477
...
@@ -27,8 +27,8 @@ TEST_F(PlanSysTableTest, show) {
...
@@ -27,8 +27,8 @@ TEST_F(PlanSysTableTest, show) {
run
(
"show stables"
);
run
(
"show stables"
);
}
}
TEST_F
(
PlanSysTableTest
,
information
)
{
TEST_F
(
PlanSysTableTest
,
information
Schema
)
{
useDb
(
"root"
,
"information_schema"
);
useDb
(
"root"
,
"information_schema"
);
run
(
"
show tables
"
);
run
(
"
SELECT * FROM information_schema.user_databases WHERE name = 'information_schema'
"
);
}
}
source/libs/qworker/src/qworker.c
浏览文件 @
2027f477
...
@@ -812,13 +812,11 @@ int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inpu
...
@@ -812,13 +812,11 @@ int32_t qwHandlePrePhaseEvents(QW_FPARAMS_DEF, int8_t phase, SQWPhaseInput *inpu
}
}
if
(
ctx
->
rspCode
)
{
if
(
ctx
->
rspCode
)
{
QW_TASK_ELOG
(
"task already failed at phase %s, error:%x - %s"
,
qwPhaseStr
(
phase
),
ctx
->
rspCode
,
QW_TASK_ELOG
(
"task already failed at phase %s, code:%s"
,
qwPhaseStr
(
phase
),
tstrerror
(
ctx
->
rspCode
));
tstrerror
(
ctx
->
rspCode
));
QW_ERR_JRET
(
ctx
->
rspCode
);
QW_ERR_JRET
(
ctx
->
rspCode
);
}
}
_return:
_return:
if
(
ctx
)
{
if
(
ctx
)
{
QW_UPDATE_RSP_CODE
(
ctx
,
code
);
QW_UPDATE_RSP_CODE
(
ctx
,
code
);
...
@@ -836,7 +834,11 @@ _return:
...
@@ -836,7 +834,11 @@ _return:
QW_TASK_DLOG
(
"cancel rsp send, handle:%p, code:%x - %s"
,
cancelConnection
->
handle
,
code
,
tstrerror
(
code
));
QW_TASK_DLOG
(
"cancel rsp send, handle:%p, code:%x - %s"
,
cancelConnection
->
handle
,
code
,
tstrerror
(
code
));
}
}
QW_TASK_DLOG
(
"end to handle event at phase %s, code:%x - %s"
,
qwPhaseStr
(
phase
),
code
,
tstrerror
(
code
));
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
QW_TASK_ELOG
(
"end to handle event at phase %s, code:%s"
,
qwPhaseStr
(
phase
),
tstrerror
(
code
));
}
else
{
QW_TASK_DLOG
(
"end to handle event at phase %s, code:%s"
,
qwPhaseStr
(
phase
),
tstrerror
(
code
));
}
QW_RET
(
code
);
QW_RET
(
code
);
}
}
...
...
source/libs/scheduler/src/scheduler.c
浏览文件 @
2027f477
...
@@ -256,6 +256,7 @@ int32_t schValidateTaskReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t m
...
@@ -256,6 +256,7 @@ int32_t schValidateTaskReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t m
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
case
TDMT_VND_CREATE_TABLE_RSP
:
case
TDMT_VND_CREATE_TABLE_RSP
:
case
TDMT_VND_DROP_TABLE_RSP
:
case
TDMT_VND_DROP_TABLE_RSP
:
case
TDMT_VND_ALTER_TABLE_RSP
:
case
TDMT_VND_SUBMIT_RSP
:
case
TDMT_VND_SUBMIT_RSP
:
break
;
break
;
default:
default:
...
@@ -1131,6 +1132,24 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
...
@@ -1131,6 +1132,24 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
break
;
break
;
}
}
case
TDMT_VND_ALTER_TABLE_RSP
:
{
SVAlterTbRsp
rsp
=
{
0
};
if
(
msg
)
{
SDecoder
coder
=
{
0
};
tDecoderInit
(
&
coder
,
msg
,
msgSize
);
code
=
tDecodeSVAlterTbRsp
(
&
coder
,
&
rsp
);
tDecoderClear
(
&
coder
);
SCH_ERR_JRET
(
code
);
SCH_ERR_JRET
(
rsp
.
code
);
}
SCH_ERR_JRET
(
rspCode
);
if
(
NULL
==
msg
)
{
SCH_ERR_JRET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
break
;
}
case
TDMT_VND_SUBMIT_RSP
:
{
case
TDMT_VND_SUBMIT_RSP
:
{
SCH_ERR_JRET
(
rspCode
);
SCH_ERR_JRET
(
rspCode
);
...
@@ -1391,6 +1410,10 @@ int32_t schHandleDropTableCallback(void *param, const SDataBuf *pMsg, int32_t co
...
@@ -1391,6 +1410,10 @@ int32_t schHandleDropTableCallback(void *param, const SDataBuf *pMsg, int32_t co
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_DROP_TABLE_RSP
,
code
);
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_DROP_TABLE_RSP
,
code
);
}
}
int32_t
schHandleAlterTableCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_ALTER_TABLE_RSP
,
code
);
}
int32_t
schHandleQueryCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
int32_t
schHandleQueryCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_QUERY_RSP
,
code
);
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_QUERY_RSP
,
code
);
}
}
...
@@ -1490,6 +1513,9 @@ int32_t schGetCallbackFp(int32_t msgType, __async_send_cb_fn_t *fp) {
...
@@ -1490,6 +1513,9 @@ int32_t schGetCallbackFp(int32_t msgType, __async_send_cb_fn_t *fp) {
case
TDMT_VND_DROP_TABLE
:
case
TDMT_VND_DROP_TABLE
:
*
fp
=
schHandleDropTableCallback
;
*
fp
=
schHandleDropTableCallback
;
break
;
break
;
case
TDMT_VND_ALTER_TABLE
:
*
fp
=
schHandleAlterTableCallback
;
break
;
case
TDMT_VND_SUBMIT
:
case
TDMT_VND_SUBMIT
:
*
fp
=
schHandleSubmitCallback
;
*
fp
=
schHandleSubmitCallback
;
break
;
break
;
...
@@ -2010,6 +2036,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
...
@@ -2010,6 +2036,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
switch
(
msgType
)
{
switch
(
msgType
)
{
case
TDMT_VND_CREATE_TABLE
:
case
TDMT_VND_CREATE_TABLE
:
case
TDMT_VND_DROP_TABLE
:
case
TDMT_VND_DROP_TABLE
:
case
TDMT_VND_ALTER_TABLE
:
case
TDMT_VND_SUBMIT
:
{
case
TDMT_VND_SUBMIT
:
{
msgSize
=
pTask
->
msgLen
;
msgSize
=
pTask
->
msgLen
;
msg
=
taosMemoryCalloc
(
1
,
msgSize
);
msg
=
taosMemoryCalloc
(
1
,
msgSize
);
...
...
source/libs/sync/inc/syncIndexMgr.h
浏览文件 @
2027f477
...
@@ -35,6 +35,7 @@ typedef struct SSyncIndexMgr {
...
@@ -35,6 +35,7 @@ typedef struct SSyncIndexMgr {
}
SSyncIndexMgr
;
}
SSyncIndexMgr
;
SSyncIndexMgr
*
syncIndexMgrCreate
(
SSyncNode
*
pSyncNode
);
SSyncIndexMgr
*
syncIndexMgrCreate
(
SSyncNode
*
pSyncNode
);
void
syncIndexMgrUpdate
(
SSyncIndexMgr
*
pSyncIndexMgr
,
SSyncNode
*
pSyncNode
);
void
syncIndexMgrDestroy
(
SSyncIndexMgr
*
pSyncIndexMgr
);
void
syncIndexMgrDestroy
(
SSyncIndexMgr
*
pSyncIndexMgr
);
void
syncIndexMgrClear
(
SSyncIndexMgr
*
pSyncIndexMgr
);
void
syncIndexMgrClear
(
SSyncIndexMgr
*
pSyncIndexMgr
);
void
syncIndexMgrSetIndex
(
SSyncIndexMgr
*
pSyncIndexMgr
,
const
SRaftId
*
pRaftId
,
SyncIndex
index
);
void
syncIndexMgrSetIndex
(
SSyncIndexMgr
*
pSyncIndexMgr
,
const
SRaftId
*
pRaftId
,
SyncIndex
index
);
...
...
source/libs/sync/inc/syncInt.h
浏览文件 @
2027f477
...
@@ -247,6 +247,7 @@ typedef struct SSyncNode {
...
@@ -247,6 +247,7 @@ typedef struct SSyncNode {
// open/close --------------
// open/close --------------
SSyncNode
*
syncNodeOpen
(
const
SSyncInfo
*
pSyncInfo
);
SSyncNode
*
syncNodeOpen
(
const
SSyncInfo
*
pSyncInfo
);
void
syncNodeStart
(
SSyncNode
*
pSyncNode
);
void
syncNodeStart
(
SSyncNode
*
pSyncNode
);
void
syncNodeStartStandBy
(
SSyncNode
*
pSyncNode
);
void
syncNodeClose
(
SSyncNode
*
pSyncNode
);
void
syncNodeClose
(
SSyncNode
*
pSyncNode
);
// ping --------------
// ping --------------
...
@@ -271,7 +272,7 @@ int32_t syncNodeSendMsgByInfo(const SNodeInfo* nodeInfo, SSyncNode* pSyncNode, S
...
@@ -271,7 +272,7 @@ int32_t syncNodeSendMsgByInfo(const SNodeInfo* nodeInfo, SSyncNode* pSyncNode, S
cJSON
*
syncNode2Json
(
const
SSyncNode
*
pSyncNode
);
cJSON
*
syncNode2Json
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2Str
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2Str
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
);
void
syncNodeUpdateConfig
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
);
void
syncNodeUpdateConfig
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
);
SSyncNode
*
syncNodeAcquire
(
int64_t
rid
);
SSyncNode
*
syncNodeAcquire
(
int64_t
rid
);
void
syncNodeRelease
(
SSyncNode
*
pNode
);
void
syncNodeRelease
(
SSyncNode
*
pNode
);
...
...
source/libs/sync/inc/syncUtil.h
浏览文件 @
2027f477
...
@@ -62,7 +62,6 @@ bool syncUtilUserPreCommit(tmsg_t msgType);
...
@@ -62,7 +62,6 @@ bool syncUtilUserPreCommit(tmsg_t msgType);
bool
syncUtilUserCommit
(
tmsg_t
msgType
);
bool
syncUtilUserCommit
(
tmsg_t
msgType
);
bool
syncUtilUserRollback
(
tmsg_t
msgType
);
bool
syncUtilUserRollback
(
tmsg_t
msgType
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
source/libs/sync/src/syncAppendEntries.c
浏览文件 @
2027f477
...
@@ -15,11 +15,11 @@
...
@@ -15,11 +15,11 @@
#include "syncAppendEntries.h"
#include "syncAppendEntries.h"
#include "syncInt.h"
#include "syncInt.h"
#include "syncRaftCfg.h"
#include "syncRaftLog.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
#include "syncUtil.h"
#include "syncVoteMgr.h"
#include "syncVoteMgr.h"
#include "syncRaftCfg.h"
// TLA+ Spec
// TLA+ Spec
// HandleAppendEntriesRequest(i, j, m) ==
// HandleAppendEntriesRequest(i, j, m) ==
...
@@ -200,7 +200,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -200,7 +200,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
SSyncRaftEntry
*
pRollBackEntry
=
logStoreGetEntry
(
ths
->
pLogStore
,
index
);
SSyncRaftEntry
*
pRollBackEntry
=
logStoreGetEntry
(
ths
->
pLogStore
,
index
);
assert
(
pRollBackEntry
!=
NULL
);
assert
(
pRollBackEntry
!=
NULL
);
//if (pRollBackEntry->msgType != TDMT_VND_SYNC_NOOP) {
//
if (pRollBackEntry->msgType != TDMT_VND_SYNC_NOOP) {
if
(
syncUtilUserRollback
(
pRollBackEntry
->
msgType
))
{
if
(
syncUtilUserRollback
(
pRollBackEntry
->
msgType
))
{
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pRollBackEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pRollBackEntry
,
&
rpcMsg
);
...
@@ -229,7 +229,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -229,7 +229,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pAppendEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pAppendEntry
,
&
rpcMsg
);
if
(
ths
->
pFsm
!=
NULL
)
{
if
(
ths
->
pFsm
!=
NULL
)
{
//if (ths->pFsm->FpPreCommitCb != NULL && pAppendEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (ths->pFsm->FpPreCommitCb != NULL && pAppendEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pAppendEntry
->
originalRpcType
))
{
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pAppendEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pAppendEntry
->
index
;
cbMeta
.
index
=
pAppendEntry
->
index
;
...
@@ -261,7 +261,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -261,7 +261,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pAppendEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pAppendEntry
,
&
rpcMsg
);
if
(
ths
->
pFsm
!=
NULL
)
{
if
(
ths
->
pFsm
!=
NULL
)
{
//if (ths->pFsm->FpPreCommitCb != NULL && pAppendEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (ths->pFsm->FpPreCommitCb != NULL && pAppendEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pAppendEntry
->
originalRpcType
))
{
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pAppendEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pAppendEntry
->
index
;
cbMeta
.
index
=
pAppendEntry
->
index
;
...
@@ -324,7 +324,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -324,7 +324,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
//if (ths->pFsm->FpCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (ths->pFsm->FpCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
ths
->
pFsm
->
FpCommitCb
!=
NULL
&&
syncUtilUserCommit
(
pEntry
->
originalRpcType
))
{
if
(
ths
->
pFsm
->
FpCommitCb
!=
NULL
&&
syncUtilUserCommit
(
pEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pEntry
->
index
;
cbMeta
.
index
=
pEntry
->
index
;
...
@@ -338,10 +338,15 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -338,10 +338,15 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
// config change
// config change
if
(
pEntry
->
originalRpcType
==
TDMT_VND_SYNC_CONFIG_CHANGE
)
{
if
(
pEntry
->
originalRpcType
==
TDMT_VND_SYNC_CONFIG_CHANGE
)
{
SSyncCfg
newSyncCfg
;
SSyncCfg
newSyncCfg
;
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
newSyncCfg
);
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
newSyncCfg
);
ASSERT
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncNodeUpdateConfig
(
ths
,
&
newSyncCfg
);
syncNodeUpdateConfig
(
ths
,
&
newSyncCfg
);
if
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
syncNodeBecomeLeader
(
ths
);
}
else
{
syncNodeBecomeFollower
(
ths
);
}
}
}
rpcFreeCont
(
rpcMsg
.
pCont
);
rpcFreeCont
(
rpcMsg
.
pCont
);
...
...
source/libs/sync/src/syncCommit.c
浏览文件 @
2027f477
...
@@ -16,10 +16,10 @@
...
@@ -16,10 +16,10 @@
#include "syncCommit.h"
#include "syncCommit.h"
#include "syncIndexMgr.h"
#include "syncIndexMgr.h"
#include "syncInt.h"
#include "syncInt.h"
#include "syncRaftCfg.h"
#include "syncRaftLog.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
#include "syncUtil.h"
#include "syncRaftCfg.h"
// \* Leader i advances its commitIndex.
// \* Leader i advances its commitIndex.
// \* This is done as a separate step from handling AppendEntries responses,
// \* This is done as a separate step from handling AppendEntries responses,
...
@@ -102,7 +102,7 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
...
@@ -102,7 +102,7 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
//if (pSyncNode->pFsm->FpCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (pSyncNode->pFsm->FpCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
pSyncNode
->
pFsm
->
FpCommitCb
!=
NULL
&&
syncUtilUserCommit
(
pEntry
->
originalRpcType
))
{
if
(
pSyncNode
->
pFsm
->
FpCommitCb
!=
NULL
&&
syncUtilUserCommit
(
pEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pEntry
->
index
;
cbMeta
.
index
=
pEntry
->
index
;
...
@@ -114,12 +114,17 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
...
@@ -114,12 +114,17 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
}
}
// config change
// config change
if
(
pEntry
->
originalRpcType
==
TDMT_VND_SYNC_CONFIG_CHANGE
)
{
if
(
pEntry
->
originalRpcType
==
TDMT_VND_SYNC_CONFIG_CHANGE
)
{
SSyncCfg
newSyncCfg
;
SSyncCfg
newSyncCfg
;
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
newSyncCfg
);
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
newSyncCfg
);
ASSERT
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncNodeUpdateConfig
(
pSyncNode
,
&
newSyncCfg
);
syncNodeUpdateConfig
(
pSyncNode
,
&
newSyncCfg
);
if
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
syncNodeBecomeLeader
(
pSyncNode
);
}
else
{
syncNodeBecomeFollower
(
pSyncNode
);
}
}
}
rpcFreeCont
(
rpcMsg
.
pCont
);
rpcFreeCont
(
rpcMsg
.
pCont
);
...
...
source/libs/sync/src/syncIO.c
浏览文件 @
2027f477
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#include "syncIO.h"
#include "syncIO.h"
#include <tdatablock.h>
#include <tdatablock.h>
#include "os.h"
#include "syncMessage.h"
#include "syncMessage.h"
#include "syncUtil.h"
#include "syncUtil.h"
#include "tglobal.h"
#include "tglobal.h"
...
@@ -198,6 +199,7 @@ static int32_t syncIOStartInternal(SSyncIO *io) {
...
@@ -198,6 +199,7 @@ static int32_t syncIOStartInternal(SSyncIO *io) {
{
{
SRpcInit
rpcInit
;
SRpcInit
rpcInit
;
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
snprintf
(
rpcInit
.
localFqdn
,
sizeof
(
rpcInit
.
localFqdn
),
"%s"
,
"127.0.0.1"
);
rpcInit
.
localPort
=
io
->
myAddr
.
eps
[
0
].
port
;
rpcInit
.
localPort
=
io
->
myAddr
.
eps
[
0
].
port
;
rpcInit
.
label
=
"SYNC-IO-SERVER"
;
rpcInit
.
label
=
"SYNC-IO-SERVER"
;
rpcInit
.
numOfThreads
=
1
;
rpcInit
.
numOfThreads
=
1
;
...
...
source/libs/sync/src/syncIndexMgr.c
浏览文件 @
2027f477
...
@@ -31,6 +31,13 @@ SSyncIndexMgr *syncIndexMgrCreate(SSyncNode *pSyncNode) {
...
@@ -31,6 +31,13 @@ SSyncIndexMgr *syncIndexMgrCreate(SSyncNode *pSyncNode) {
return
pSyncIndexMgr
;
return
pSyncIndexMgr
;
}
}
void
syncIndexMgrUpdate
(
SSyncIndexMgr
*
pSyncIndexMgr
,
SSyncNode
*
pSyncNode
)
{
pSyncIndexMgr
->
replicas
=
&
(
pSyncNode
->
replicasId
);
pSyncIndexMgr
->
replicaNum
=
pSyncNode
->
replicaNum
;
pSyncIndexMgr
->
pSyncNode
=
pSyncNode
;
syncIndexMgrClear
(
pSyncIndexMgr
);
}
void
syncIndexMgrDestroy
(
SSyncIndexMgr
*
pSyncIndexMgr
)
{
void
syncIndexMgrDestroy
(
SSyncIndexMgr
*
pSyncIndexMgr
)
{
if
(
pSyncIndexMgr
!=
NULL
)
{
if
(
pSyncIndexMgr
!=
NULL
)
{
taosMemoryFree
(
pSyncIndexMgr
);
taosMemoryFree
(
pSyncIndexMgr
);
...
...
source/libs/sync/src/syncMain.c
浏览文件 @
2027f477
...
@@ -103,6 +103,16 @@ void syncStart(int64_t rid) {
...
@@ -103,6 +103,16 @@ void syncStart(int64_t rid) {
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
}
}
void
syncStartStandBy
(
int64_t
rid
)
{
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosAcquireRef
(
tsNodeRefId
,
rid
);
if
(
pSyncNode
==
NULL
)
{
return
;
}
syncNodeStartStandBy
(
pSyncNode
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
}
void
syncStop
(
int64_t
rid
)
{
void
syncStop
(
int64_t
rid
)
{
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosAcquireRef
(
tsNodeRefId
,
rid
);
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosAcquireRef
(
tsNodeRefId
,
rid
);
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
...
@@ -116,7 +126,7 @@ void syncStop(int64_t rid) {
...
@@ -116,7 +126,7 @@ void syncStop(int64_t rid) {
int32_t
syncReconfig
(
int64_t
rid
,
const
SSyncCfg
*
pSyncCfg
)
{
int32_t
syncReconfig
(
int64_t
rid
,
const
SSyncCfg
*
pSyncCfg
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
char
*
configChange
=
syncCfg2Str
((
SSyncCfg
*
)
pSyncCfg
);
char
*
configChange
=
syncCfg2Str
((
SSyncCfg
*
)
pSyncCfg
);
SRpcMsg
rpcMsg
=
{
0
};
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
msgType
=
TDMT_VND_SYNC_CONFIG_CHANGE
;
rpcMsg
.
msgType
=
TDMT_VND_SYNC_CONFIG_CHANGE
;
rpcMsg
.
noResp
=
1
;
rpcMsg
.
noResp
=
1
;
...
@@ -188,10 +198,9 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) {
...
@@ -188,10 +198,9 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) {
(
pEpSet
->
numOfEps
)
++
;
(
pEpSet
->
numOfEps
)
++
;
sInfo
(
"syncGetEpSet index:%d %s:%d"
,
i
,
pEpSet
->
eps
[
i
].
fqdn
,
pEpSet
->
eps
[
i
].
port
);
sInfo
(
"syncGetEpSet index:%d %s:%d"
,
i
,
pEpSet
->
eps
[
i
].
fqdn
,
pEpSet
->
eps
[
i
].
port
);
}
}
pEpSet
->
inUse
=
pSyncNode
->
pRaftCfg
->
cfg
.
myIndex
;
pEpSet
->
inUse
=
pSyncNode
->
pRaftCfg
->
cfg
.
myIndex
;
sInfo
(
"syncGetEpSet pEpSet->inUse:%d "
,
pEpSet
->
inUse
);
sInfo
(
"syncGetEpSet pEpSet->inUse:%d "
,
pEpSet
->
inUse
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -524,6 +533,17 @@ void syncNodeStart(SSyncNode* pSyncNode) {
...
@@ -524,6 +533,17 @@ void syncNodeStart(SSyncNode* pSyncNode) {
assert
(
ret
==
0
);
assert
(
ret
==
0
);
}
}
void
syncNodeStartStandBy
(
SSyncNode
*
pSyncNode
)
{
// state change
pSyncNode
->
state
=
TAOS_SYNC_STATE_FOLLOWER
;
syncNodeStopHeartbeatTimer
(
pSyncNode
);
// reset elect timer, long enough
int32_t
electMS
=
TIMER_MAX_MS
;
int32_t
ret
=
syncNodeRestartElectTimer
(
pSyncNode
,
electMS
);
ASSERT
(
ret
==
0
);
}
void
syncNodeClose
(
SSyncNode
*
pSyncNode
)
{
void
syncNodeClose
(
SSyncNode
*
pSyncNode
)
{
int32_t
ret
;
int32_t
ret
;
assert
(
pSyncNode
!=
NULL
);
assert
(
pSyncNode
!=
NULL
);
...
@@ -858,7 +878,7 @@ char* syncNode2SimpleStr(const SSyncNode* pSyncNode) {
...
@@ -858,7 +878,7 @@ char* syncNode2SimpleStr(const SSyncNode* pSyncNode) {
return
s
;
return
s
;
}
}
void
syncNodeUpdateConfig
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
)
{
void
syncNodeUpdateConfig
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
)
{
pSyncNode
->
pRaftCfg
->
cfg
=
*
newConfig
;
pSyncNode
->
pRaftCfg
->
cfg
=
*
newConfig
;
int32_t
ret
=
raftCfgPersist
(
pSyncNode
->
pRaftCfg
);
int32_t
ret
=
raftCfgPersist
(
pSyncNode
->
pRaftCfg
);
ASSERT
(
ret
==
0
);
ASSERT
(
ret
==
0
);
...
@@ -885,6 +905,11 @@ void syncNodeUpdateConfig(SSyncNode* pSyncNode, SSyncCfg *newConfig) {
...
@@ -885,6 +905,11 @@ void syncNodeUpdateConfig(SSyncNode* pSyncNode, SSyncCfg *newConfig) {
for
(
int
i
=
0
;
i
<
pSyncNode
->
pRaftCfg
->
cfg
.
replicaNum
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pSyncNode
->
pRaftCfg
->
cfg
.
replicaNum
;
++
i
)
{
syncUtilnodeInfo2raftId
(
&
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
[
i
],
pSyncNode
->
vgId
,
&
pSyncNode
->
replicasId
[
i
]);
syncUtilnodeInfo2raftId
(
&
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
[
i
],
pSyncNode
->
vgId
,
&
pSyncNode
->
replicasId
[
i
]);
}
}
syncIndexMgrUpdate
(
pSyncNode
->
pNextIndex
,
pSyncNode
);
syncIndexMgrUpdate
(
pSyncNode
->
pMatchIndex
,
pSyncNode
);
syncNodeLog2
(
"==syncNodeUpdateConfig=="
,
pSyncNode
);
}
}
SSyncNode
*
syncNodeAcquire
(
int64_t
rid
)
{
SSyncNode
*
syncNodeAcquire
(
int64_t
rid
)
{
...
@@ -1245,7 +1270,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
...
@@ -1245,7 +1270,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
if
(
ths
->
pFsm
!=
NULL
)
{
if
(
ths
->
pFsm
!=
NULL
)
{
//if (ths->pFsm->FpPreCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (ths->pFsm->FpPreCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pEntry
->
originalRpcType
))
{
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pEntry
->
index
;
cbMeta
.
index
=
pEntry
->
index
;
...
@@ -1267,7 +1292,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
...
@@ -1267,7 +1292,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
if
(
ths
->
pFsm
!=
NULL
)
{
if
(
ths
->
pFsm
!=
NULL
)
{
//if (ths->pFsm->FpPreCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
//
if (ths->pFsm->FpPreCommitCb != NULL && pEntry->originalRpcType != TDMT_VND_SYNC_NOOP) {
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pEntry
->
originalRpcType
))
{
if
(
ths
->
pFsm
->
FpPreCommitCb
!=
NULL
&&
syncUtilUserPreCommit
(
pEntry
->
originalRpcType
))
{
SFsmCbMeta
cbMeta
;
SFsmCbMeta
cbMeta
;
cbMeta
.
index
=
pEntry
->
index
;
cbMeta
.
index
=
pEntry
->
index
;
...
...
source/libs/sync/src/syncRaftLog.c
浏览文件 @
2027f477
...
@@ -58,14 +58,15 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
...
@@ -58,14 +58,15 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
syncMeta
.
term
=
pEntry
->
term
;
syncMeta
.
term
=
pEntry
->
term
;
code
=
walWriteWithSyncInfo
(
pWal
,
pEntry
->
index
,
pEntry
->
originalRpcType
,
syncMeta
,
pEntry
->
data
,
pEntry
->
dataLen
);
code
=
walWriteWithSyncInfo
(
pWal
,
pEntry
->
index
,
pEntry
->
originalRpcType
,
syncMeta
,
pEntry
->
data
,
pEntry
->
dataLen
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walWriteWithSyncInfo error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walWriteWithSyncInfo error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
//assert(code == 0);
//
assert(code == 0);
walFsync
(
pWal
,
true
);
walFsync
(
pWal
,
true
);
return
code
;
return
code
;
...
@@ -77,16 +78,17 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -77,16 +78,17 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
if
(
index
>=
SYNC_INDEX_BEGIN
&&
index
<=
logStoreLastIndex
(
pLogStore
))
{
if
(
index
>=
SYNC_INDEX_BEGIN
&&
index
<=
logStoreLastIndex
(
pLogStore
))
{
SWalReadHandle
*
pWalHandle
=
walOpenReadHandle
(
pWal
);
SWalReadHandle
*
pWalHandle
=
walOpenReadHandle
(
pWal
);
int32_t
code
=
walReadWithHandle
(
pWalHandle
,
index
);
int32_t
code
=
walReadWithHandle
(
pWalHandle
,
index
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walReadWithHandle error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walReadWithHandle error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
//assert(walReadWithHandle(pWalHandle, index) == 0);
//
assert(walReadWithHandle(pWalHandle, index) == 0);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pWalHandle
->
pHead
->
head
.
bodyLen
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pWalHandle
->
pHead
->
head
.
bodyLen
);
assert
(
pEntry
!=
NULL
);
assert
(
pEntry
!=
NULL
);
...
@@ -112,16 +114,17 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -112,16 +114,17 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
int32_t
logStoreTruncate
(
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
int32_t
logStoreTruncate
(
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
//assert(walRollback(pWal, fromIndex) == 0);
//
assert(walRollback(pWal, fromIndex) == 0);
int32_t
code
=
walRollback
(
pWal
,
fromIndex
);
int32_t
code
=
walRollback
(
pWal
,
fromIndex
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walRollback error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walRollback error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
return
0
;
// to avoid compiler error
return
0
;
// to avoid compiler error
}
}
...
@@ -145,16 +148,16 @@ SyncTerm logStoreLastTerm(SSyncLogStore* pLogStore) {
...
@@ -145,16 +148,16 @@ SyncTerm logStoreLastTerm(SSyncLogStore* pLogStore) {
int32_t
logStoreUpdateCommitIndex
(
SSyncLogStore
*
pLogStore
,
SyncIndex
index
)
{
int32_t
logStoreUpdateCommitIndex
(
SSyncLogStore
*
pLogStore
,
SyncIndex
index
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
//assert(walCommit(pWal, index) == 0);
//
assert(walCommit(pWal, index) == 0);
int32_t
code
=
walCommit
(
pWal
,
index
);
int32_t
code
=
walCommit
(
pWal
,
index
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walCommit error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walCommit error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
return
0
;
// to avoid compiler error
return
0
;
// to avoid compiler error
}
}
...
...
source/libs/sync/test/CMakeLists.txt
浏览文件 @
2027f477
...
@@ -37,6 +37,7 @@ add_executable(syncRaftCfgTest "")
...
@@ -37,6 +37,7 @@ add_executable(syncRaftCfgTest "")
add_executable
(
syncRespMgrTest
""
)
add_executable
(
syncRespMgrTest
""
)
add_executable
(
syncSnapshotTest
""
)
add_executable
(
syncSnapshotTest
""
)
add_executable
(
syncApplyMsgTest
""
)
add_executable
(
syncApplyMsgTest
""
)
add_executable
(
syncConfigChangeTest
""
)
target_sources
(
syncTest
target_sources
(
syncTest
...
@@ -195,6 +196,10 @@ target_sources(syncApplyMsgTest
...
@@ -195,6 +196,10 @@ target_sources(syncApplyMsgTest
PRIVATE
PRIVATE
"syncApplyMsgTest.cpp"
"syncApplyMsgTest.cpp"
)
)
target_sources
(
syncConfigChangeTest
PRIVATE
"syncConfigChangeTest.cpp"
)
target_include_directories
(
syncTest
target_include_directories
(
syncTest
...
@@ -392,6 +397,11 @@ target_include_directories(syncApplyMsgTest
...
@@ -392,6 +397,11 @@ target_include_directories(syncApplyMsgTest
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
)
)
target_include_directories
(
syncConfigChangeTest
PUBLIC
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
)
target_link_libraries
(
syncTest
target_link_libraries
(
syncTest
...
@@ -550,6 +560,10 @@ target_link_libraries(syncApplyMsgTest
...
@@ -550,6 +560,10 @@ target_link_libraries(syncApplyMsgTest
sync
sync
gtest_main
gtest_main
)
)
target_link_libraries
(
syncConfigChangeTest
sync
gtest_main
)
enable_testing
()
enable_testing
()
...
...
source/libs/sync/test/syncConfigChangeTest.cpp
0 → 100644
浏览文件 @
2027f477
#include <gtest/gtest.h>
#include <stdio.h>
#include "os.h"
#include "syncEnv.h"
#include "syncIO.h"
#include "syncInt.h"
#include "syncUtil.h"
#include "wal.h"
void
logTest
()
{
sTrace
(
"--- sync log test: trace"
);
sDebug
(
"--- sync log test: debug"
);
sInfo
(
"--- sync log test: info"
);
sWarn
(
"--- sync log test: warn"
);
sError
(
"--- sync log test: error"
);
sFatal
(
"--- sync log test: fatal"
);
}
uint16_t
gPorts
[]
=
{
7010
,
7110
,
7210
,
7310
,
7410
};
const
char
*
gDir
=
"./syncReplicateTest"
;
int32_t
gVgId
=
1234
;
SyncIndex
gSnapshotLastApplyIndex
;
void
init
()
{
int
code
=
walInit
();
assert
(
code
==
0
);
code
=
syncInit
();
assert
(
code
==
0
);
sprintf
(
tsTempDir
,
"%s"
,
"."
);
}
void
cleanup
()
{
walCleanUp
();
}
void
CommitCb
(
struct
SSyncFSM
*
pFsm
,
const
SRpcMsg
*
pMsg
,
SFsmCbMeta
cbMeta
)
{
SyncIndex
beginIndex
=
SYNC_INDEX_INVALID
;
if
(
pFsm
->
FpGetSnapshot
!=
NULL
)
{
SSnapshot
snapshot
;
pFsm
->
FpGetSnapshot
(
pFsm
,
&
snapshot
);
beginIndex
=
snapshot
.
lastApplyIndex
;
}
if
(
cbMeta
.
index
>
beginIndex
)
{
char
logBuf
[
256
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"==callback== ==CommitCb== pFsm:%p, index:%ld, isWeak:%d, code:%d, state:%d %s
\n
"
,
pFsm
,
cbMeta
.
index
,
cbMeta
.
isWeak
,
cbMeta
.
code
,
cbMeta
.
state
,
syncUtilState2String
(
cbMeta
.
state
));
syncRpcMsgLog2
(
logBuf
,
(
SRpcMsg
*
)
pMsg
);
}
else
{
sTrace
(
"==callback== ==CommitCb== do not apply again %ld"
,
cbMeta
.
index
);
}
}
void
PreCommitCb
(
struct
SSyncFSM
*
pFsm
,
const
SRpcMsg
*
pMsg
,
SFsmCbMeta
cbMeta
)
{
char
logBuf
[
256
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"==callback== ==PreCommitCb== pFsm:%p, index:%ld, isWeak:%d, code:%d, state:%d %s
\n
"
,
pFsm
,
cbMeta
.
index
,
cbMeta
.
isWeak
,
cbMeta
.
code
,
cbMeta
.
state
,
syncUtilState2String
(
cbMeta
.
state
));
syncRpcMsgLog2
(
logBuf
,
(
SRpcMsg
*
)
pMsg
);
}
void
RollBackCb
(
struct
SSyncFSM
*
pFsm
,
const
SRpcMsg
*
pMsg
,
SFsmCbMeta
cbMeta
)
{
char
logBuf
[
256
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"==callback== ==RollBackCb== pFsm:%p, index:%ld, isWeak:%d, code:%d, state:%d %s
\n
"
,
pFsm
,
cbMeta
.
index
,
cbMeta
.
isWeak
,
cbMeta
.
code
,
cbMeta
.
state
,
syncUtilState2String
(
cbMeta
.
state
));
syncRpcMsgLog2
(
logBuf
,
(
SRpcMsg
*
)
pMsg
);
}
int32_t
GetSnapshotCb
(
struct
SSyncFSM
*
pFsm
,
SSnapshot
*
pSnapshot
)
{
pSnapshot
->
data
=
NULL
;
pSnapshot
->
lastApplyIndex
=
gSnapshotLastApplyIndex
;
pSnapshot
->
lastApplyTerm
=
100
;
return
0
;
}
SSyncFSM
*
createFsm
()
{
SSyncFSM
*
pFsm
=
(
SSyncFSM
*
)
taosMemoryMalloc
(
sizeof
(
SSyncFSM
));
pFsm
->
FpCommitCb
=
CommitCb
;
pFsm
->
FpPreCommitCb
=
PreCommitCb
;
pFsm
->
FpRollBackCb
=
RollBackCb
;
pFsm
->
FpGetSnapshot
=
GetSnapshotCb
;
return
pFsm
;
}
SWal
*
createWal
(
char
*
path
,
int32_t
vgId
)
{
SWalCfg
walCfg
;
memset
(
&
walCfg
,
0
,
sizeof
(
SWalCfg
));
walCfg
.
vgId
=
vgId
;
walCfg
.
fsyncPeriod
=
1000
;
walCfg
.
retentionPeriod
=
1000
;
walCfg
.
rollPeriod
=
1000
;
walCfg
.
retentionSize
=
1000
;
walCfg
.
segSize
=
1000
;
walCfg
.
level
=
TAOS_WAL_FSYNC
;
SWal
*
pWal
=
walOpen
(
path
,
&
walCfg
);
assert
(
pWal
!=
NULL
);
return
pWal
;
}
int64_t
createSyncNode
(
int32_t
replicaNum
,
int32_t
myIndex
,
int32_t
vgId
,
SWal
*
pWal
,
char
*
path
,
bool
isStandBy
)
{
SSyncInfo
syncInfo
;
syncInfo
.
vgId
=
vgId
;
syncInfo
.
rpcClient
=
gSyncIO
->
clientRpc
;
syncInfo
.
FpSendMsg
=
syncIOSendMsg
;
syncInfo
.
queue
=
gSyncIO
->
pMsgQ
;
syncInfo
.
FpEqMsg
=
syncIOEqMsg
;
syncInfo
.
pFsm
=
createFsm
();
snprintf
(
syncInfo
.
path
,
sizeof
(
syncInfo
.
path
),
"%s_sync_replica%d_index%d"
,
path
,
replicaNum
,
myIndex
);
syncInfo
.
pWal
=
pWal
;
SSyncCfg
*
pCfg
=
&
syncInfo
.
syncCfg
;
if
(
isStandBy
)
{
pCfg
->
myIndex
=
0
;
pCfg
->
replicaNum
=
1
;
pCfg
->
nodeInfo
[
0
].
nodePort
=
gPorts
[
myIndex
];
taosGetFqdn
(
pCfg
->
nodeInfo
[
0
].
nodeFqdn
);
}
else
{
pCfg
->
myIndex
=
myIndex
;
pCfg
->
replicaNum
=
replicaNum
;
for
(
int
i
=
0
;
i
<
replicaNum
;
++
i
)
{
pCfg
->
nodeInfo
[
i
].
nodePort
=
gPorts
[
i
];
taosGetFqdn
(
pCfg
->
nodeInfo
[
i
].
nodeFqdn
);
// snprintf(pCfg->nodeInfo[i].nodeFqdn, sizeof(pCfg->nodeInfo[i].nodeFqdn), "%s", "127.0.0.1");
}
}
int64_t
rid
=
syncOpen
(
&
syncInfo
);
assert
(
rid
>
0
);
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
syncNodeAcquire
(
rid
);
assert
(
pSyncNode
!=
NULL
);
gSyncIO
->
FpOnSyncPing
=
pSyncNode
->
FpOnPing
;
gSyncIO
->
FpOnSyncPingReply
=
pSyncNode
->
FpOnPingReply
;
gSyncIO
->
FpOnSyncRequestVote
=
pSyncNode
->
FpOnRequestVote
;
gSyncIO
->
FpOnSyncRequestVoteReply
=
pSyncNode
->
FpOnRequestVoteReply
;
gSyncIO
->
FpOnSyncAppendEntries
=
pSyncNode
->
FpOnAppendEntries
;
gSyncIO
->
FpOnSyncAppendEntriesReply
=
pSyncNode
->
FpOnAppendEntriesReply
;
gSyncIO
->
FpOnSyncPing
=
pSyncNode
->
FpOnPing
;
gSyncIO
->
FpOnSyncPingReply
=
pSyncNode
->
FpOnPingReply
;
gSyncIO
->
FpOnSyncTimeout
=
pSyncNode
->
FpOnTimeout
;
gSyncIO
->
FpOnSyncClientRequest
=
pSyncNode
->
FpOnClientRequest
;
gSyncIO
->
pSyncNode
=
pSyncNode
;
syncNodeRelease
(
pSyncNode
);
return
rid
;
}
void
configChange
(
int64_t
rid
,
int32_t
replicaNum
,
int32_t
myIndex
)
{
SSyncCfg
syncCfg
;
syncCfg
.
myIndex
=
myIndex
;
syncCfg
.
replicaNum
=
replicaNum
;
for
(
int
i
=
0
;
i
<
replicaNum
;
++
i
)
{
syncCfg
.
nodeInfo
[
i
].
nodePort
=
gPorts
[
i
];
taosGetFqdn
(
syncCfg
.
nodeInfo
[
i
].
nodeFqdn
);
}
syncReconfig
(
rid
,
&
syncCfg
);
}
void
usage
(
char
*
exe
)
{
printf
(
"usage: %s replicaNum myIndex lastApplyIndex writeRecordNum isStandBy isConfigChange
\n
"
,
exe
);
}
SRpcMsg
*
createRpcMsg
(
int
i
,
int
count
,
int
myIndex
)
{
SRpcMsg
*
pMsg
=
(
SRpcMsg
*
)
taosMemoryMalloc
(
sizeof
(
SRpcMsg
));
memset
(
pMsg
,
0
,
sizeof
(
SRpcMsg
));
pMsg
->
msgType
=
9999
;
pMsg
->
contLen
=
256
;
pMsg
->
pCont
=
rpcMallocCont
(
pMsg
->
contLen
);
snprintf
((
char
*
)(
pMsg
->
pCont
),
pMsg
->
contLen
,
"value-myIndex:%u-%d-%d-%ld"
,
myIndex
,
i
,
count
,
taosGetTimestampMs
());
return
pMsg
;
}
int
main
(
int
argc
,
char
**
argv
)
{
tsAsyncLog
=
0
;
sDebugFlag
=
DEBUG_TRACE
+
DEBUG_SCREEN
+
DEBUG_FILE
;
if
(
argc
!=
7
)
{
usage
(
argv
[
0
]);
exit
(
-
1
);
}
int32_t
replicaNum
=
atoi
(
argv
[
1
]);
int32_t
myIndex
=
atoi
(
argv
[
2
]);
int32_t
lastApplyIndex
=
atoi
(
argv
[
3
]);
int32_t
writeRecordNum
=
atoi
(
argv
[
4
]);
bool
isStandBy
=
atoi
(
argv
[
5
]);
bool
isConfigChange
=
atoi
(
argv
[
6
]);
gSnapshotLastApplyIndex
=
lastApplyIndex
;
if
(
!
isStandBy
)
{
assert
(
replicaNum
>=
1
&&
replicaNum
<=
5
);
assert
(
myIndex
>=
0
&&
myIndex
<
replicaNum
);
assert
(
lastApplyIndex
>=
-
1
);
assert
(
writeRecordNum
>=
0
);
}
init
();
int32_t
ret
=
syncIOStart
((
char
*
)
"127.0.0.1"
,
gPorts
[
myIndex
]);
assert
(
ret
==
0
);
char
walPath
[
128
];
snprintf
(
walPath
,
sizeof
(
walPath
),
"%s_wal_replica%d_index%d"
,
gDir
,
replicaNum
,
myIndex
);
SWal
*
pWal
=
createWal
(
walPath
,
gVgId
);
int64_t
rid
=
createSyncNode
(
replicaNum
,
myIndex
,
gVgId
,
pWal
,
(
char
*
)
gDir
,
isStandBy
);
assert
(
rid
>
0
);
if
(
isStandBy
)
{
syncStartStandBy
(
rid
);
}
else
{
syncStart
(
rid
);
}
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
syncNodeAcquire
(
rid
);
assert
(
pSyncNode
!=
NULL
);
if
(
isConfigChange
)
{
configChange
(
rid
,
3
,
myIndex
);
}
//---------------------------
int32_t
alreadySend
=
0
;
while
(
1
)
{
char
*
s
=
syncNode2SimpleStr
(
pSyncNode
);
if
(
alreadySend
<
writeRecordNum
)
{
SRpcMsg
*
pRpcMsg
=
createRpcMsg
(
alreadySend
,
writeRecordNum
,
myIndex
);
int32_t
ret
=
syncPropose
(
rid
,
pRpcMsg
,
false
);
if
(
ret
==
TAOS_SYNC_PROPOSE_NOT_LEADER
)
{
sTrace
(
"%s value%d write not leader"
,
s
,
alreadySend
);
}
else
{
assert
(
ret
==
0
);
sTrace
(
"%s value%d write ok"
,
s
,
alreadySend
);
}
alreadySend
++
;
rpcFreeCont
(
pRpcMsg
->
pCont
);
taosMemoryFree
(
pRpcMsg
);
}
else
{
sTrace
(
"%s"
,
s
);
}
taosMsleep
(
1000
);
taosMemoryFree
(
s
);
taosMsleep
(
1000
);
}
syncNodeRelease
(
pSyncNode
);
syncStop
(
rid
);
walClose
(
pWal
);
syncIOStop
();
cleanup
();
return
0
;
}
source/libs/transport/src/transSrv.c
浏览文件 @
2027f477
...
@@ -137,7 +137,9 @@ static void destroySmsg(SSrvMsg* smsg);
...
@@ -137,7 +137,9 @@ static void destroySmsg(SSrvMsg* smsg);
// check whether already read complete packet
// check whether already read complete packet
static
SSrvConn
*
createConn
(
void
*
hThrd
);
static
SSrvConn
*
createConn
(
void
*
hThrd
);
static
void
destroyConn
(
SSrvConn
*
conn
,
bool
clear
/*clear handle or not*/
);
static
void
destroyConn
(
SSrvConn
*
conn
,
bool
clear
/*clear handle or not*/
);
static
int
reallocConnRefHandle
(
SSrvConn
*
conn
);
static
void
destroyConnRegArg
(
SSrvConn
*
conn
);
static
int
reallocConnRefHandle
(
SSrvConn
*
conn
);
static
void
uvHandleQuit
(
SSrvMsg
*
msg
,
SWorkThrdObj
*
thrd
);
static
void
uvHandleQuit
(
SSrvMsg
*
msg
,
SWorkThrdObj
*
thrd
);
static
void
uvHandleRelease
(
SSrvMsg
*
msg
,
SWorkThrdObj
*
thrd
);
static
void
uvHandleRelease
(
SSrvMsg
*
msg
,
SWorkThrdObj
*
thrd
);
...
@@ -429,6 +431,8 @@ static void uvPrepareSendData(SSrvMsg* smsg, uv_buf_t* wb) {
...
@@ -429,6 +431,8 @@ static void uvPrepareSendData(SSrvMsg* smsg, uv_buf_t* wb) {
if
(
smsg
->
type
==
Release
)
{
if
(
smsg
->
type
==
Release
)
{
pHead
->
msgType
=
0
;
pHead
->
msgType
=
0
;
pConn
->
status
=
ConnNormal
;
pConn
->
status
=
ConnNormal
;
destroyConnRegArg
(
pConn
);
transUnrefSrvHandle
(
pConn
);
transUnrefSrvHandle
(
pConn
);
}
else
{
}
else
{
pHead
->
msgType
=
pMsg
->
msgType
;
pHead
->
msgType
=
pMsg
->
msgType
;
...
@@ -800,6 +804,12 @@ static void destroyConn(SSrvConn* conn, bool clear) {
...
@@ -800,6 +804,12 @@ static void destroyConn(SSrvConn* conn, bool clear) {
// uv_shutdown(req, (uv_stream_t*)conn->pTcp, uvShutDownCb);
// uv_shutdown(req, (uv_stream_t*)conn->pTcp, uvShutDownCb);
}
}
}
}
static
void
destroyConnRegArg
(
SSrvConn
*
conn
)
{
if
(
conn
->
regArg
.
init
==
1
)
{
transFreeMsg
(
conn
->
regArg
.
msg
.
pCont
);
conn
->
regArg
.
init
=
0
;
}
}
static
int
reallocConnRefHandle
(
SSrvConn
*
conn
)
{
static
int
reallocConnRefHandle
(
SSrvConn
*
conn
)
{
uvReleaseExHandle
(
conn
->
refId
);
uvReleaseExHandle
(
conn
->
refId
);
uvRemoveExHandle
(
conn
->
refId
);
uvRemoveExHandle
(
conn
->
refId
);
...
@@ -827,16 +837,9 @@ static void uvDestroyConn(uv_handle_t* handle) {
...
@@ -827,16 +837,9 @@ static void uvDestroyConn(uv_handle_t* handle) {
// uv_timer_stop(&conn->pTimer);
// uv_timer_stop(&conn->pTimer);
transQueueDestroy
(
&
conn
->
srvMsgs
);
transQueueDestroy
(
&
conn
->
srvMsgs
);
if
(
conn
->
regArg
.
init
==
1
)
{
transFreeMsg
(
conn
->
regArg
.
msg
.
pCont
);
conn
->
regArg
.
init
=
0
;
}
QUEUE_REMOVE
(
&
conn
->
queue
);
QUEUE_REMOVE
(
&
conn
->
queue
);
taosMemoryFree
(
conn
->
pTcp
);
taosMemoryFree
(
conn
->
pTcp
);
if
(
conn
->
regArg
.
init
==
1
)
{
destroyConnRegArg
(
conn
);
transFreeMsg
(
conn
->
regArg
.
msg
.
pCont
);
conn
->
regArg
.
init
=
0
;
}
taosMemoryFree
(
conn
);
taosMemoryFree
(
conn
);
if
(
thrd
->
quit
&&
QUEUE_IS_EMPTY
(
&
thrd
->
conn
))
{
if
(
thrd
->
quit
&&
QUEUE_IS_EMPTY
(
&
thrd
->
conn
))
{
...
...
source/util/src/terror.c
浏览文件 @
2027f477
...
@@ -322,6 +322,10 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_TB_NOT_EXIST, "Table not exists")
...
@@ -322,6 +322,10 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_TB_NOT_EXIST, "Table not exists")
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_SMA_NOT_EXIST
,
"SMA not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_SMA_NOT_EXIST
,
"SMA not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_HASH_MISMATCH
,
"Hash value mismatch"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_HASH_MISMATCH
,
"Hash value mismatch"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_TABLE_NOT_EXIST
,
"Table does not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_TABLE_NOT_EXIST
,
"Table does not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_INVALID_TABLE_ACTION
,
"Invalid table action"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_COL_ALREADY_EXISTS
,
"Table column already exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_TABLE_COL_NOT_EXISTS
,
"Table column not exists"
)
// tsdb
// tsdb
TAOS_DEFINE_ERROR
(
TSDB_CODE_TDB_INVALID_TABLE_ID
,
"Invalid table ID"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TDB_INVALID_TABLE_ID
,
"Invalid table ID"
)
...
...
source/util/test/CMakeLists.txt
浏览文件 @
2027f477
...
@@ -33,13 +33,13 @@ ENDIF()
...
@@ -33,13 +33,13 @@ ENDIF()
INCLUDE_DIRECTORIES
(
${
TD_SOURCE_DIR
}
/src/util/inc
)
INCLUDE_DIRECTORIES
(
${
TD_SOURCE_DIR
}
/src/util/inc
)
# freelistTest
#
#
freelistTest
add_executable
(
freelistTest
""
)
#
add_executable(freelistTest "")
target_sources
(
freelistTest
#
target_sources(freelistTest
PRIVATE
#
PRIVATE
"freelistTest.cpp"
#
"freelistTest.cpp"
)
#
)
target_link_libraries
(
freelistTest os util gtest gtest_main
)
#
target_link_libraries(freelistTest os util gtest gtest_main)
# # encodeTest
# # encodeTest
# add_executable(encodeTest "encodeTest.cpp")
# add_executable(encodeTest "encodeTest.cpp")
...
...
source/util/test/freelistTest.cpp
已删除
100644 → 0
浏览文件 @
bdb3cbc1
#include <gtest/gtest.h>
#include "tfreelist.h"
TEST
(
TD_UTIL_FREELIST_TEST
,
simple_test
)
{
SFreeList
fl
;
tFreeListInit
(
&
fl
);
for
(
size_t
i
=
0
;
i
<
1000
;
i
++
)
{
void
*
ptr
=
NULL
;
TFL_MALLOC
(
ptr
,
void
*
,
1024
,
&
fl
);
GTEST_ASSERT_NE
(
ptr
,
nullptr
);
}
tFreeListClear
(
&
fl
);
}
tests/script/tsim/tmq/basic1.sim
浏览文件 @
2027f477
#### test scenario, please refer to https://jira.taosdata.com:18090/pages/viewpage.action?pageId=135120406
#### test scenario, please refer to https://jira.taosdata.com:18090/pages/viewpage.action?pageId=135120406
#basic1.sim: vgroups=1, one topic for one consumer, firstly insert data, then start consume. Include six topics
#basic1.sim: vgroups=1, one topic for one consumer, firstly insert data, then start consume. Include six topics
#basic2.sim: vgroups=1, multi topics for one consumer, firstly insert data, then start consume. Include six topics
#basic2.sim: vgroups=1, multi topics for one consumer, firstly insert data, then start consume. Include six topics
#basic3.sim: vgroups=4, one topic for one consumer, firstly insert data, then start consume. Include six topics
#basic3.sim: vgroups=4, one topic for one consumer, firstly insert data, then start consume. Include six topics
#basic4.sim: vgroups=4, multi topics for one consumer, firstly insert data, then start consume. Include six topics
#basic4.sim: vgroups=4, multi topics for one consumer, firstly insert data, then start consume. Include six topics
# notes1: Scalar function: ABS/ACOS/ASIN/ATAN/CEIL/COS/FLOOR/LOG/POW/ROUND/SIN/SQRT/TAN
# notes1: Scalar function: ABS/ACOS/ASIN/ATAN/CEIL/COS/FLOOR/LOG/POW/ROUND/SIN/SQRT/TAN
# The above use cases are combined with where filter conditions, such as: where ts > "2017-08-12 18:25:58.128Z" and sin(a) > 0.5;
# The above use cases are combined with where filter conditions, such as: where ts > "2017-08-12 18:25:58.128Z" and sin(a) > 0.5;
#
#
# notes2: not support aggregate functions(such as sum/count/min/max) and time-windows(interval).
# notes2: not support aggregate functions(such as sum/count/min/max) and time-windows(interval).
#
#
run tsim/tmq/prepareBasicEnv-1vgrp.sim
run tsim/tmq/prepareBasicEnv-1vgrp.sim
#---- global parameters start ----#
#---- global parameters start ----#
$dbName = db
$dbName = db
$vgroups = 1
$vgroups = 1
$stbPrefix = stb
$stbPrefix = stb
$ctbPrefix = ctb
$ctbPrefix = ctb
$ntbPrefix = ntb
$ntbPrefix = ntb
$stbNum = 1
$stbNum = 1
$ctbNum = 10
$ctbNum = 10
$ntbNum = 10
$ntbNum = 10
$rowsPerCtb = 10
$rowsPerCtb = 10
$tstart = 1640966400000 # 2022-01-01 00:00:00.000
$tstart = 1640966400000 # 2022-01-01 00:00:00.000
#---- global parameters end ----#
#---- global parameters end ----#
$pullDelay = 3
$pullDelay = 3
$ifcheckdata = 1
$ifcheckdata = 1
$showMsg = 1
$ifmanualcommit = 1
$showRow = 0
$showMsg = 1
$showRow = 0
sql connect
sql use $dbName
sql connect
sql use $dbName
print == create topics from super table
sql create topic topic_stb_column as select ts, c3 from stb
print == create topics from super table
sql create topic topic_stb_all as select ts, c1, c2, c3 from stb
sql create topic topic_stb_column as select ts, c3 from stb
sql create topic topic_stb_function as select ts, abs(c1), sin(c2) from stb
sql create topic topic_stb_all as select ts, c1, c2, c3 from stb
sql create topic topic_stb_function as select ts, abs(c1), sin(c2) from stb
print == create topics from child table
sql create topic topic_ctb_column as select ts, c3 from ctb0
print == create topics from child table
sql create topic topic_ctb_all as select * from ctb0
sql create topic topic_ctb_column as select ts, c3 from ctb0
sql create topic topic_ctb_function as select ts, abs(c1), sin(c2) from ctb0
sql create topic topic_ctb_all as select * from ctb0
sql create topic topic_ctb_function as select ts, abs(c1), sin(c2) from ctb0
print == create topics from normal table
sql create topic topic_ntb_column as select ts, c3 from ntb0
print == create topics from normal table
sql create topic topic_ntb_all as select * from ntb0
sql create topic topic_ntb_column as select ts, c3 from ntb0
sql create topic topic_ntb_function as select ts, abs(c1), sin(c2) from ntb0
sql create topic topic_ntb_all as select * from ntb0
sql create topic topic_ntb_function as select ts, abs(c1), sin(c2) from ntb0
#sql show topics
#if $rows != 9 then
#sql show topics
# return -1
#if $rows != 9 then
#endi
# return -1
#endi
$keyList = ' . group.id:cgrp1
$keyList = $keyList . '
#'group.id:cgrp1,enable.auto.commit:false,auto.commit.interval.ms:6000,auto.offset.reset:earliest'
$keyList = ' . group.id:cgrp1
$cdb_index = 0
$keyList = $keyList . ,
#=============================== start consume =============================#
$keyList = $keyList . enable.auto.commit:false
#$keyList = $keyList . ,
print ================ test consume from stb
#$keyList = $keyList . auto.commit.interval.ms:6000
$loop_cnt = 0
#$keyList = $keyList . ,
loop_consume_diff_topic_from_stb:
#$keyList = $keyList . auto.offset.reset:earliest
$keyList = $keyList . '
#######################################################################################
print ========== key list: $keyList
# clear consume info and consume result
#run tsim/tmq/clearConsume.sim
# because drop table function no stable, so by create new db for consume info and result. Modify it later
$cdb_index = 0
$cdb_index = $cdb_index + 1
#=============================== start consume =============================#
$cdbName = cdb . $cdb_index
sql create database $cdbName vgroups 1
print ================ test consume from stb
sleep 500
$loop_cnt = 0
sql use $cdbName
loop_consume_diff_topic_from_stb:
print == create consume info table and consume result table
#######################################################################################
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int)
# clear consume info and consume result
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
#run tsim/tmq/clearConsume.sim
# because drop table function no stable, so by create new db for consume info and result. Modify it later
sql show tables
$cdb_index = $cdb_index + 1
if $rows != 2 then
$cdbName = cdb . $cdb_index
return -1
sql create database $cdbName vgroups 1
endi
sleep 500
#######################################################################################
sql use $cdbName
if $loop_cnt == 0 then
print == create consume info table and consume result table
print == scenario 1: topic_stb_column
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int, ifmanualcommit int)
$topicList = ' . topic_stb_column
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
$topicList = $topicList . '
elif $loop_cnt == 1 then
sql show tables
print == scenario 2: topic_stb_all
if $rows != 2 then
$topicList = ' . topic_stb_all
return -1
$topicList = $topicList . '
endi
elif $loop_cnt == 2 then
#######################################################################################
print == scenario 3: topic_stb_function
$topicList = ' . topic_stb_function
if $loop_cnt == 0 then
$topicList = $topicList . '
print == scenario 1: topic_stb_column
else
$topicList = ' . topic_stb_column
goto loop_consume_diff_topic_from_stb_end
$topicList = $topicList . '
endi
elif $loop_cnt == 1 then
print == scenario 2: topic_stb_all
$consumerId = 0
$topicList = ' . topic_stb_all
$totalMsgOfStb = $ctbNum * $rowsPerCtb
$topicList = $topicList . '
$expectmsgcnt = $totalMsgOfStb
elif $loop_cnt == 2 then
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
print == scenario 3: topic_stb_function
$topicList = ' . topic_stb_function
print == start consumer to pull msgs from stb
$topicList = $topicList . '
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
else
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
goto loop_consume_diff_topic_from_stb_end
endi
print == check consume result
wait_consumer_end_from_stb:
$consumerId = 0
sql select * from consumeresult
$totalMsgOfStb = $ctbNum * $rowsPerCtb
print ==> rows: $rows
$expectmsgcnt = $totalMsgOfStb
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata , $ifmanualcommit )
if $rows != 1 then
sleep 1000
print == start consumer to pull msgs from stb
goto wait_consumer_end_from_stb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
endi
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
if $data[0][1] != $consumerId then
return -1
print == check consume result
endi
wait_consumer_end_from_stb:
if $data[0][2] != $expectmsgcnt then
sql select * from consumeresult
return -1
print ==> rows: $rows
endi
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $data[0][3] != $expectmsgcnt then
if $rows != 1 then
return -1
sleep 1000
endi
goto wait_consumer_end_from_stb
$loop_cnt = $loop_cnt + 1
endi
goto loop_consume_diff_topic_from_stb
if $data[0][1] != $consumerId then
loop_consume_diff_topic_from_stb_end:
return -1
endi
print ================ test consume from ctb
if $data[0][2] != $expectmsgcnt then
$loop_cnt = 0
return -1
loop_consume_diff_topic_from_ctb:
endi
if $data[0][3] != $expectmsgcnt then
#######################################################################################
return -1
# clear consume info and consume result
endi
#run tsim/tmq/clearConsume.sim
$loop_cnt = $loop_cnt + 1
# because drop table function no stable, so by create new db for consume info and result. Modify it later
goto loop_consume_diff_topic_from_stb
$cdb_index = $cdb_index + 1
loop_consume_diff_topic_from_stb_end:
$cdbName = cdb . $cdb_index
sql create database $cdbName vgroups 1
print ================ test consume from ctb
sleep 500
$loop_cnt = 0
sql use $cdbName
loop_consume_diff_topic_from_ctb:
print == create consume info table and consume result table
#######################################################################################
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int)
# clear consume info and consume result
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
#run tsim/tmq/clearConsume.sim
# because drop table function no stable, so by create new db for consume info and result. Modify it later
sql show tables
$cdb_index = $cdb_index + 1
if $rows != 2 then
$cdbName = cdb . $cdb_index
return -1
sql create database $cdbName vgroups 1
endi
sleep 500
#######################################################################################
sql use $cdbName
if $loop_cnt == 0 then
print == create consume info table and consume result table
print == scenario 1: topic_ctb_column
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int, ifmanualcommit int)
$topicList = ' . topic_ctb_column
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
$topicList = $topicList . '
elif $loop_cnt == 1 then
sql show tables
print == scenario 2: topic_ctb_all
if $rows != 2 then
$topicList = ' . topic_ctb_all
return -1
$topicList = $topicList . '
endi
elif $loop_cnt == 2 then
#######################################################################################
print == scenario 3: topic_ctb_function
$topicList = ' . topic_ctb_function
if $loop_cnt == 0 then
$topicList = $topicList . '
print == scenario 1: topic_ctb_column
else
$topicList = ' . topic_ctb_column
goto loop_consume_diff_topic_from_ctb_end
$topicList = $topicList . '
endi
elif $loop_cnt == 1 then
print == scenario 2: topic_ctb_all
$consumerId = 0
$topicList = ' . topic_ctb_all
$totalMsgOfCtb = $rowsPerCtb
$topicList = $topicList . '
$expectmsgcnt = $totalMsgOfCtb
elif $loop_cnt == 2 then
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
print == scenario 3: topic_ctb_function
$topicList = ' . topic_ctb_function
print == start consumer to pull msgs from ctb
$topicList = $topicList . '
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
else
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
goto loop_consume_diff_topic_from_ctb_end
endi
print == check consume result
wait_consumer_end_from_ctb:
$consumerId = 0
sql select * from consumeresult
$totalMsgOfCtb = $rowsPerCtb
print ==> rows: $rows
$expectmsgcnt = $totalMsgOfCtb
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata , $ifmanualcommit )
if $rows != 1 then
sleep 1000
print == start consumer to pull msgs from ctb
goto wait_consumer_end_from_ctb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
endi
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
if $data[0][1] != $consumerId then
return -1
print == check consume result
endi
wait_consumer_end_from_ctb:
if $data[0][2] != $totalMsgOfCtb then
sql select * from consumeresult
return -1
print ==> rows: $rows
endi
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $data[0][3] != $totalMsgOfCtb then
if $rows != 1 then
return -1
sleep 1000
endi
goto wait_consumer_end_from_ctb
$loop_cnt = $loop_cnt + 1
endi
goto loop_consume_diff_topic_from_ctb
if $data[0][1] != $consumerId then
loop_consume_diff_topic_from_ctb_end:
return -1
endi
print ================ test consume from ntb
if $data[0][2] != $totalMsgOfCtb then
$loop_cnt = 0
return -1
loop_consume_diff_topic_from_ntb:
endi
if $data[0][3] != $totalMsgOfCtb then
#######################################################################################
return -1
# clear consume info and consume result
endi
#run tsim/tmq/clearConsume.sim
$loop_cnt = $loop_cnt + 1
# because drop table function no stable, so by create new db for consume info and result. Modify it later
goto loop_consume_diff_topic_from_ctb
$cdb_index = $cdb_index + 1
loop_consume_diff_topic_from_ctb_end:
$cdbName = cdb . $cdb_index
sql create database $cdbName vgroups 1
print ================ test consume from ntb
sleep 500
$loop_cnt = 0
sql use $cdbName
loop_consume_diff_topic_from_ntb:
print == create consume info table and consume result table
#######################################################################################
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int)
# clear consume info and consume result
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
#run tsim/tmq/clearConsume.sim
# because drop table function no stable, so by create new db for consume info and result. Modify it later
sql show tables
$cdb_index = $cdb_index + 1
if $rows != 2 then
$cdbName = cdb . $cdb_index
return -1
sql create database $cdbName vgroups 1
endi
sleep 500
#######################################################################################
sql use $cdbName
if $loop_cnt == 0 then
print == create consume info table and consume result table
print == scenario 1: topic_ntb_column
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int, ifmanualcommit int)
$topicList = ' . topic_ntb_column
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
$topicList = $topicList . '
elif $loop_cnt == 1 then
sql show tables
print == scenario 2: topic_ntb_all
if $rows != 2 then
$topicList = ' . topic_ntb_all
return -1
$topicList = $topicList . '
endi
elif $loop_cnt == 2 then
#######################################################################################
print == scenario 3: topic_ntb_function
$topicList = ' . topic_ntb_function
if $loop_cnt == 0 then
$topicList = $topicList . '
print == scenario 1: topic_ntb_column
else
$topicList = ' . topic_ntb_column
goto loop_consume_diff_topic_from_ntb_end
$topicList = $topicList . '
endi
elif $loop_cnt == 1 then
print == scenario 2: topic_ntb_all
$consumerId = 0
$topicList = ' . topic_ntb_all
$totalMsgOfNtb = $rowsPerCtb
$topicList = $topicList . '
$expectmsgcnt = $totalMsgOfNtb
elif $loop_cnt == 2 then
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
print == scenario 3: topic_ntb_function
$topicList = ' . topic_ntb_function
print == start consumer to pull msgs from ntb
$topicList = $topicList . '
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
else
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
goto loop_consume_diff_topic_from_ntb_end
endi
print == check consume result from ntb
wait_consumer_end_from_ntb:
$consumerId = 0
sql select * from consumeresult
$totalMsgOfNtb = $rowsPerCtb
print ==> rows: $rows
$expectmsgcnt = $totalMsgOfNtb
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata , $ifmanualcommit )
if $rows != 1 then
sleep 1000
print == start consumer to pull msgs from ntb
goto wait_consumer_end_from_ntb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
endi
system tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
if $data[0][1] != $consumerId then
return -1
print == check consume result from ntb
endi
wait_consumer_end_from_ntb:
if $data[0][2] != $totalMsgOfNtb then
sql select * from consumeresult
return -1
print ==> rows: $rows
endi
print ==> rows[0]: $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $data[0][3] != $totalMsgOfNtb then
if $rows != 1 then
return -1
sleep 1000
endi
goto wait_consumer_end_from_ntb
$loop_cnt = $loop_cnt + 1
endi
goto loop_consume_diff_topic_from_ntb
if $data[0][1] != $consumerId then
loop_consume_diff_topic_from_ntb_end:
return -1
endi
#------ not need stop consumer, because it exit after pull msg overthan expect msg
if $data[0][2] != $totalMsgOfNtb then
#system tsim/tmq/consume.sh -s stop -x SIGINT
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
if $data[0][3] != $totalMsgOfNtb then
return -1
endi
$loop_cnt = $loop_cnt + 1
goto loop_consume_diff_topic_from_ntb
loop_consume_diff_topic_from_ntb_end:
#------ not need stop consumer, because it exit after pull msg overthan expect msg
#system tsim/tmq/consume.sh -s stop -x SIGINT
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/script/tsim/tmq/basic1Of2Cons.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic2.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic2Of2Cons.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic2Of2ConsOverlap.sim
浏览文件 @
2027f477
...
@@ -27,6 +27,7 @@ $tstart = 1640966400000 # 2022-01-01 00:00:00.000
...
@@ -27,6 +27,7 @@ $tstart = 1640966400000 # 2022-01-01 00:00:00.000
$pullDelay = 5
$pullDelay = 5
$ifcheckdata = 1
$ifcheckdata = 1
$ifmanualcommit = 1
$showMsg = 1
$showMsg = 1
$showRow = 0
$showRow = 0
...
@@ -53,8 +54,16 @@ sql create topic topic_ntb_function as select ts, abs(c1), sin(c2) from ntb0
...
@@ -53,8 +54,16 @@ sql create topic topic_ntb_function as select ts, abs(c1), sin(c2) from ntb0
# return -1
# return -1
#endi
#endi
#'group.id:cgrp1,enable.auto.commit:false,auto.commit.interval.ms:6000,auto.offset.reset:earliest'
$keyList = ' . group.id:cgrp1
$keyList = ' . group.id:cgrp1
$keyList = $keyList . ,
$keyList = $keyList . enable.auto.commit:false
#$keyList = $keyList . ,
#$keyList = $keyList . auto.commit.interval.ms:6000
#$keyList = $keyList . ,
#$keyList = $keyList . auto.offset.reset:earliest
$keyList = $keyList . '
$keyList = $keyList . '
print ========== key list: $keyList
$topicNum = 2
$topicNum = 2
...
@@ -72,7 +81,7 @@ $consumerId = 0
...
@@ -72,7 +81,7 @@ $consumerId = 0
$totalMsgOfOneTopic = $ctbNum * $rowsPerCtb
$totalMsgOfOneTopic = $ctbNum * $rowsPerCtb
$totalMsgOfStb = $totalMsgOfOneTopic * $topicNum
$totalMsgOfStb = $totalMsgOfOneTopic * $topicNum
$expectmsgcnt = $totalMsgOfStb
$expectmsgcnt = $totalMsgOfStb
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
$topicList = ' . topic_stb_all
$topicList = ' . topic_stb_all
...
@@ -80,7 +89,7 @@ $topicList = $topicList . ,
...
@@ -80,7 +89,7 @@ $topicList = $topicList . ,
$topicList = $topicList . topic_stb_function
$topicList = $topicList . topic_stb_function
$topicList = $topicList . '
$topicList = $topicList . '
$consumerId = 1
$consumerId = 1
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
print == start consumer to pull msgs from stb
print == start consumer to pull msgs from stb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $dbName -s start
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $dbName -s start
...
@@ -158,7 +167,7 @@ sleep 500
...
@@ -158,7 +167,7 @@ sleep 500
sql use $cdbName
sql use $cdbName
print == create consume info table and consume result table for ctb
print == create consume info table and consume result table for ctb
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int)
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int
, ifmanualcommit int
)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql show tables
sql show tables
...
@@ -179,14 +188,14 @@ $consumerId = 0
...
@@ -179,14 +188,14 @@ $consumerId = 0
$totalMsgOfOneTopic = $rowsPerCtb
$totalMsgOfOneTopic = $rowsPerCtb
$totalMsgOfCtb = $totalMsgOfOneTopic * $topicNum
$totalMsgOfCtb = $totalMsgOfOneTopic * $topicNum
$expectmsgcnt = $totalMsgOfCtb
$expectmsgcnt = $totalMsgOfCtb
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
$topicList = ' . topic_ctb_function
$topicList = ' . topic_ctb_function
$topicList = $topicList . ,
$topicList = $topicList . ,
$topicList = $topicList . topic_ctb_all
$topicList = $topicList . topic_ctb_all
$topicList = $topicList . '
$topicList = $topicList . '
$consumerId = 1
$consumerId = 1
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
print == start consumer to pull msgs from ctb
print == start consumer to pull msgs from ctb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -w $cdbName -s start
...
@@ -249,7 +258,7 @@ sleep 500
...
@@ -249,7 +258,7 @@ sleep 500
sql use $cdbName
sql use $cdbName
print == create consume info table and consume result table for ntb
print == create consume info table and consume result table for ntb
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int)
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int
, ifmanualcommit int
)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql show tables
sql show tables
...
@@ -270,7 +279,7 @@ $consumerId = 0
...
@@ -270,7 +279,7 @@ $consumerId = 0
$totalMsgOfOneTopic = $rowsPerCtb
$totalMsgOfOneTopic = $rowsPerCtb
$totalMsgOfNtb = $totalMsgOfOneTopic * $topicNum
$totalMsgOfNtb = $totalMsgOfOneTopic * $topicNum
$expectmsgcnt = $totalMsgOfNtb
$expectmsgcnt = $totalMsgOfNtb
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
$topicList = ' . topic_ntb_function
$topicList = ' . topic_ntb_function
...
@@ -278,7 +287,7 @@ $topicList = $topicList . ,
...
@@ -278,7 +287,7 @@ $topicList = $topicList . ,
$topicList = $topicList . topic_ntb_all
$topicList = $topicList . topic_ntb_all
$topicList = $topicList . '
$topicList = $topicList . '
$consumerId = 1
$consumerId = 1
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata )
sql insert into consumeinfo values (now , $consumerId , $topicList , $keyList , $expectmsgcnt , $ifcheckdata
, $ifmanualcommit
)
print == start consumer to pull msgs from ntb
print == start consumer to pull msgs from ntb
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
print == tsim/tmq/consume.sh -d $dbName -y $pullDelay -g $showMsg -r $showRow -s start
...
...
tests/script/tsim/tmq/basic3.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic3Of2Cons.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic4.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic4Of2Cons.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/prepareBasicEnv-1vgrp.sim
浏览文件 @
2027f477
# stop all dnodes before start this case
# stop all dnodes before start this case
system sh/stop_dnodes.sh
system sh/stop_dnodes.sh
# deploy dnode 1
# deploy dnode 1
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode1 -i 1
# add some config items for this case
# add some config items for this case
#system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
#system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
# start dnode 1
# start dnode 1
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode1 -s start
sql connect
sql connect
#---- global parameters start ----#
#---- global parameters start ----#
$dbName = db
$dbName = db
$vgroups = 1
$vgroups = 1
$stbPrefix = stb
$stbPrefix = stb
$ctbPrefix = ctb
$ctbPrefix = ctb
$ntbPrefix = ntb
$ntbPrefix = ntb
$stbNum = 1
$stbNum = 1
$ctbNum = 10
$ctbNum = 10
$ntbNum = 10
$ntbNum = 10
$rowsPerCtb = 10
$rowsPerCtb = 10
$tstart = 1640966400000 # 2022-01-01 00:00:00.000
$tstart = 1640966400000 # 2022-01-01 00:00:00.000
#---- global parameters end ----#
#---- global parameters end ----#
print == create database $dbName vgroups $vgroups
print == create database $dbName vgroups $vgroups
sql create database $dbName vgroups $vgroups
sql create database $dbName vgroups $vgroups
#wait database ready
#wait database ready
$loop_cnt = 0
$loop_cnt = 0
check_db_ready:
check_db_ready:
if $loop_cnt == 10 then
if $loop_cnt == 10 then
print ====> database not ready!
print ====> database not ready!
return -1
return -1
endi
endi
sql show databases
sql show databases
print ==> rows: $rows
print ==> rows: $rows
print ==> $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12]
print ==> $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12]
print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20]
print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20]
if $data(db)[19] != nostrict then
if $data(db)[19] != nostrict then
sleep 100
sleep 100
$loop_cnt = $loop_cnt + 1
$loop_cnt = $loop_cnt + 1
goto check_db_ready
goto check_db_ready
endi
endi
sql use $dbName
sql use $dbName
print == create consume info table and consume result table
print == create consume info table and consume result table
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int
)
sql create table consumeinfo (ts timestamp, consumerid int, topiclist binary(1024), keylist binary(1024), expectmsgcnt bigint, ifcheckdata int
, ifmanualcommit int)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql create table consumeresult (ts timestamp, consumerid int, consummsgcnt bigint, consumrowcnt bigint, checkresult int)
sql show tables
sql show tables
if $rows != 2 then
if $rows != 2 then
return -1
return -1
endi
endi
print == create super table
print == create super table
sql create table $stbPrefix (ts timestamp, c1 int, c2 float, c3 binary(16)) tags (t1 int)
sql create table $stbPrefix (ts timestamp, c1 int, c2 float, c3 binary(16)) tags (t1 int)
sql show stables
sql show stables
if $rows != 1 then
if $rows != 1 then
return -1
return -1
endi
endi
print == create child table, normal table and insert data
print == create child table, normal table and insert data
$i = 0
$i = 0
while $i < $ctbNum
while $i < $ctbNum
$ctb = $ctbPrefix . $i
$ctb = $ctbPrefix . $i
$ntb = $ntbPrefix . $i
$ntb = $ntbPrefix . $i
sql create table $ctb using $stbPrefix tags( $i )
sql create table $ctb using $stbPrefix tags( $i )
sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(16))
sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(16))
$x = 0
$x = 0
while $x < $rowsPerCtb
while $x < $rowsPerCtb
$binary = ' . binary-
$binary = ' . binary-
$binary = $binary . $i
$binary = $binary . $i
$binary = $binary . '
$binary = $binary . '
sql insert into $ctb values ($tstart , $i , $x , $binary )
sql insert into $ctb values ($tstart , $i , $x , $binary )
sql insert into $ntb values ($tstart , $i , $x , $binary )
sql insert into $ntb values ($tstart , $i , $x , $binary )
$tstart = $tstart + 1
$tstart = $tstart + 1
$x = $x + 1
$x = $x + 1
endw
endw
$i = $i + 1
$i = $i + 1
$tstart = 1640966400000
$tstart = 1640966400000
endw
endw
tests/script/tsim/tmq/prepareBasicEnv-4vgrp.sim
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/2-query/nestedQuery.py
0 → 100755
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/2-query/query_cols_tags_and_or.py
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/2-query/union.py
0 → 100644
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/basic5.py
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/subscribeDb.py
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/system-test/fulltest.sh
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
tests/test/c/tmqSim.c
浏览文件 @
2027f477
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录