Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2984c5a7
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22019
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2984c5a7
编写于
4月 28, 2023
作者:
L
liuyao
浏览文件
操作
浏览文件
下载
差异文件
merge main
上级
ebf9a13f
ad7c3218
变更
93
展开全部
隐藏空白更改
内联
并排
Showing
93 changed file
with
5153 addition
and
1283 deletion
+5153
-1283
cmake/cmake.version
cmake/cmake.version
+1
-1
cmake/taosadapter_CMakeLists.txt.in
cmake/taosadapter_CMakeLists.txt.in
+1
-1
include/common/systable.h
include/common/systable.h
+1
-1
include/common/tmsg.h
include/common/tmsg.h
+2
-1
include/libs/catalog/catalog.h
include/libs/catalog/catalog.h
+6
-2
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+2
-0
include/libs/qcom/query.h
include/libs/qcom/query.h
+2
-2
packaging/deb/DEBIAN/preinst
packaging/deb/DEBIAN/preinst
+37
-0
packaging/deb/DEBIAN/prerm
packaging/deb/DEBIAN/prerm
+1
-0
packaging/deb/makedeb.sh
packaging/deb/makedeb.sh
+26
-0
packaging/rpm/makerpm.sh
packaging/rpm/makerpm.sh
+23
-1
packaging/rpm/tdengine.spec
packaging/rpm/tdengine.spec
+19
-2
packaging/tools/makepkg.sh
packaging/tools/makepkg.sh
+1
-1
packaging/tools/post.sh
packaging/tools/post.sh
+28
-11
packaging/tools/preun.sh
packaging/tools/preun.sh
+16
-1
source/client/src/clientMain.c
source/client/src/clientMain.c
+19
-17
source/client/src/clientMsgHandler.c
source/client/src/clientMsgHandler.c
+0
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+44
-1
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+1
-1
source/client/src/clientTmq.c
source/client/src/clientTmq.c
+1
-5
source/client/test/clientTests.cpp
source/client/test/clientTests.cpp
+23
-20
source/common/src/tdatablock.c
source/common/src/tdatablock.c
+1
-1
source/common/src/tmsg.c
source/common/src/tmsg.c
+6
-5
source/common/src/ttszip.c
source/common/src/ttszip.c
+0
-1
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+10
-2
source/dnode/mnode/impl/src/mndMain.c
source/dnode/mnode/impl/src/mndMain.c
+1
-5
source/dnode/mnode/impl/src/mndUser.c
source/dnode/mnode/impl/src/mndUser.c
+2
-0
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+20
-29
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+29
-11
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+1
-2
source/dnode/vnode/src/sma/smaRollup.c
source/dnode/vnode/src/sma/smaRollup.c
+2
-2
source/dnode/vnode/src/sma/smaTimeRange.c
source/dnode/vnode/src/sma/smaTimeRange.c
+1
-1
source/dnode/vnode/src/tq/tq.c
source/dnode/vnode/src/tq/tq.c
+2
-2
source/dnode/vnode/src/tq/tqMeta.c
source/dnode/vnode/src/tq/tqMeta.c
+2
-2
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+18
-20
source/dnode/vnode/src/tq/tqScan.c
source/dnode/vnode/src/tq/tqScan.c
+4
-6
source/dnode/vnode/src/tq/tqSink.c
source/dnode/vnode/src/tq/tqSink.c
+3
-3
source/dnode/vnode/src/tsdb/tsdbCache.c
source/dnode/vnode/src/tsdb/tsdbCache.c
+7
-5
source/dnode/vnode/src/tsdb/tsdbCacheRead.c
source/dnode/vnode/src/tsdb/tsdbCacheRead.c
+10
-1
source/dnode/vnode/src/tsdb/tsdbDataIter.c
source/dnode/vnode/src/tsdb/tsdbDataIter.c
+39
-22
source/dnode/vnode/src/tsdb/tsdbMemTable.c
source/dnode/vnode/src/tsdb/tsdbMemTable.c
+3
-2
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
+34
-73
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+496
-392
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
+15
-11
source/dnode/vnode/src/tsdb/tsdbUtil.c
source/dnode/vnode/src/tsdb/tsdbUtil.c
+118
-229
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+1
-1
source/libs/catalog/inc/catalogInt.h
source/libs/catalog/inc/catalogInt.h
+19
-0
source/libs/catalog/src/catalog.c
source/libs/catalog/src/catalog.c
+58
-1
source/libs/catalog/src/ctgAsync.c
source/libs/catalog/src/ctgAsync.c
+269
-9
source/libs/catalog/src/ctgCache.c
source/libs/catalog/src/ctgCache.c
+27
-2
source/libs/catalog/src/ctgUtil.c
source/libs/catalog/src/ctgUtil.c
+96
-40
source/libs/executor/src/dataDeleter.c
source/libs/executor/src/dataDeleter.c
+1
-1
source/libs/executor/src/dataDispatcher.c
source/libs/executor/src/dataDispatcher.c
+1
-1
source/libs/executor/src/dataInserter.c
source/libs/executor/src/dataInserter.c
+3
-3
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+0
-1
source/libs/executor/src/groupoperator.c
source/libs/executor/src/groupoperator.c
+0
-1
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+16
-17
source/libs/executor/src/tfill.c
source/libs/executor/src/tfill.c
+4
-4
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+5
-9
source/libs/executor/src/tsort.c
source/libs/executor/src/tsort.c
+4
-4
source/libs/index/src/indexFstDfa.c
source/libs/index/src/indexFstDfa.c
+0
-1
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+8
-2
source/libs/parser/src/parAuthenticator.c
source/libs/parser/src/parAuthenticator.c
+3
-3
source/libs/parser/src/parInsertSql.c
source/libs/parser/src/parInsertSql.c
+100
-14
source/libs/parser/src/parInsertUtil.c
source/libs/parser/src/parInsertUtil.c
+1
-1
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+8
-2
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+1
-1
source/libs/qcom/src/querymsg.c
source/libs/qcom/src/querymsg.c
+1
-1
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+14
-12
source/libs/scalar/src/sclfunc.c
source/libs/scalar/src/sclfunc.c
+0
-67
source/os/src/osFile.c
source/os/src/osFile.c
+3
-2
source/util/src/tarray.c
source/util/src/tarray.c
+9
-7
source/util/src/tcache.c
source/util/src/tcache.c
+8
-20
source/util/src/thash.c
source/util/src/thash.c
+2
-33
source/util/src/tlist.c
source/util/src/tlist.c
+0
-1
source/util/src/tlog.c
source/util/src/tlog.c
+1
-3
source/util/src/tlrucache.c
source/util/src/tlrucache.c
+24
-26
source/util/src/tsimplehash.c
source/util/src/tsimplehash.c
+0
-4
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+14
-0
tests/script/tsim/user/privilege_table.sim
tests/script/tsim/user/privilege_table.sim
+302
-0
tests/script/win-test-file
tests/script/win-test-file
+1
-0
tests/system-test/0-others/multilevel.py
tests/system-test/0-others/multilevel.py
+263
-0
tests/system-test/1-insert/alter_replica.py
tests/system-test/1-insert/alter_replica.py
+114
-0
tests/system-test/1-insert/database_pre_suf.py
tests/system-test/1-insert/database_pre_suf.py
+229
-35
tests/system-test/1-insert/delete_systable.py
tests/system-test/1-insert/delete_systable.py
+111
-0
tests/system-test/2-query/select_null.py
tests/system-test/2-query/select_null.py
+446
-0
tests/system-test/2-query/slimit.py
tests/system-test/2-query/slimit.py
+1821
-0
tests/system-test/6-cluster/clusterCommonCreate.py
tests/system-test/6-cluster/clusterCommonCreate.py
+20
-20
tests/system-test/7-tmq/subscribeDb3.py
tests/system-test/7-tmq/subscribeDb3.py
+24
-22
tests/system-test/7-tmq/tmqCommon.py
tests/system-test/7-tmq/tmqCommon.py
+11
-13
tests/system-test/7-tmq/tmqConsumerGroup.py
tests/system-test/7-tmq/tmqConsumerGroup.py
+1
-1
tests/system-test/7-tmq/tmqDnodeRestart1.py
tests/system-test/7-tmq/tmqDnodeRestart1.py
+2
-2
utils/test/c/sml_test.c
utils/test/c/sml_test.c
+29
-0
未找到文件。
cmake/cmake.version
浏览文件 @
2984c5a7
...
...
@@ -2,7 +2,7 @@
IF (DEFINED VERNUMBER)
SET(TD_VER_NUMBER ${VERNUMBER})
ELSE ()
SET(TD_VER_NUMBER "3.0.4.
0
")
SET(TD_VER_NUMBER "3.0.4.
1
")
ENDIF ()
IF (DEFINED VERCOMPATIBLE)
...
...
cmake/taosadapter_CMakeLists.txt.in
浏览文件 @
2984c5a7
...
...
@@ -2,7 +2,7 @@
# taosadapter
ExternalProject_Add(taosadapter
GIT_REPOSITORY https://github.com/taosdata/taosadapter.git
GIT_TAG
e02ddb2
GIT_TAG
ae8d51c
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosadapter"
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
...
...
include/common/systable.h
浏览文件 @
2984c5a7
...
...
@@ -12,7 +12,7 @@
* 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 TDENGINE_SYSTABLE_H
#define TDENGINE_SYSTABLE_H
...
...
include/common/tmsg.h
浏览文件 @
2984c5a7
...
...
@@ -689,6 +689,7 @@ typedef struct {
int32_t
tSerializeSAlterUserReq
(
void
*
buf
,
int32_t
bufLen
,
SAlterUserReq
*
pReq
);
int32_t
tDeserializeSAlterUserReq
(
void
*
buf
,
int32_t
bufLen
,
SAlterUserReq
*
pReq
);
void
tFreeSAlterUserReq
(
SAlterUserReq
*
pReq
);
typedef
struct
{
char
user
[
TSDB_USER_LEN
];
...
...
@@ -3459,7 +3460,7 @@ typedef struct {
int32_t
tEncodeSSubmitReq2
(
SEncoder
*
pCoder
,
const
SSubmitReq2
*
pReq
);
int32_t
tDecodeSSubmitReq2
(
SDecoder
*
pCoder
,
SSubmitReq2
*
pReq
);
void
tDestroySSubmitTbData
(
SSubmitTbData
*
pTbData
,
int32_t
flag
);
void
tDestroySSubmitReq
2
(
SSubmitReq2
*
pReq
,
int32_t
flag
);
void
tDestroySSubmitReq
(
SSubmitReq2
*
pReq
,
int32_t
flag
);
typedef
struct
{
int32_t
affectedRows
;
...
...
include/libs/catalog/catalog.h
浏览文件 @
2984c5a7
...
...
@@ -82,6 +82,7 @@ typedef struct SCatalogReq {
SArray
*
pUser
;
// element is SUserAuthInfo
SArray
*
pTableIndex
;
// element is SNAME
SArray
*
pTableCfg
;
// element is SNAME
SArray
*
pTableTag
;
// element is SNAME
bool
qNodeRequired
;
// valid qnode
bool
dNodeRequired
;
// valid dnode
bool
svrVerRequired
;
...
...
@@ -105,6 +106,7 @@ typedef struct SMetaData {
SArray
*
pUser
;
// pRes = SUserAuthRes*
SArray
*
pQnodeList
;
// pRes = SArray<SQueryNodeLoad>*
SArray
*
pTableCfg
;
// pRes = STableCfg*
SArray
*
pTableTag
;
// pRes = SArray<STagVal>*
SArray
*
pDnodeList
;
// pRes = SArray<SEpSet>*
SMetaRes
*
pSvrVer
;
// pRes = char*
}
SMetaData
;
...
...
@@ -122,8 +124,8 @@ typedef struct SSTableVersion {
char
stbName
[
TSDB_TABLE_NAME_LEN
];
uint64_t
dbId
;
uint64_t
suid
;
int
16
_t
sversion
;
int
16
_t
tversion
;
int
32
_t
sversion
;
int
32
_t
tversion
;
int32_t
smaVer
;
}
SSTableVersion
;
...
...
@@ -312,6 +314,8 @@ int32_t catalogGetIndexMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const char*
int32_t
catalogGetTableIndex
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
const
SName
*
pTableName
,
SArray
**
pRes
);
int32_t
catalogGetTableTag
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
const
SName
*
pTableName
,
SArray
**
pRes
);
int32_t
catalogRefreshGetTableCfg
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
const
SName
*
pTableName
,
STableCfg
**
pCfg
);
int32_t
catalogUpdateTableIndex
(
SCatalog
*
pCtg
,
STableIndexRsp
*
pRsp
);
...
...
include/libs/nodes/querynodes.h
浏览文件 @
2984c5a7
...
...
@@ -379,6 +379,8 @@ typedef struct SVnodeModifyOpStmt {
SName
usingTableName
;
const
char
*
pBoundCols
;
struct
STableMeta
*
pTableMeta
;
SNode
*
pTagCond
;
SArray
*
pTableTag
;
SHashObj
*
pVgroupsHashObj
;
SHashObj
*
pTableBlockHashObj
;
// SHashObj<tuid, STableDataCxt*>
SHashObj
*
pSubTableHashObj
;
...
...
include/libs/qcom/query.h
浏览文件 @
2984c5a7
...
...
@@ -116,8 +116,8 @@ typedef struct STableMeta {
// if the table is TSDB_CHILD_TABLE, the following information is acquired from the corresponding super table meta
// info
int
16
_t
sversion
;
int
16
_t
tversion
;
int
32
_t
sversion
;
int
32
_t
tversion
;
STableComInfo
tableInfo
;
SSchema
schema
[];
}
STableMeta
;
...
...
packaging/deb/DEBIAN/preinst
浏览文件 @
2984c5a7
...
...
@@ -26,6 +26,38 @@ if pidof taosd &> /dev/null; then
sleep
1
fi
# Stop adapter service if running
if
pidof taosadapter &> /dev/null
;
then
if
pidof systemd &> /dev/null
;
then
${
csudo
}
systemctl stop taosadapter
||
:
elif
$(
which service &> /dev/null
)
;
then
${
csudo
}
service taosadapter stop
||
:
else
pid
=
$(
ps
-ef
|
grep
"taosadapter"
|
grep
-v
"grep"
|
awk
'{print $2}'
)
if
[
-n
"
$pid
"
]
;
then
${
csudo
}
kill
-9
$pid
||
:
fi
fi
echo
"Stop taosadapter service success!"
sleep
1
fi
# Stop keeper service if running
if
pidof taoskeeper &> /dev/null
;
then
if
pidof systemd &> /dev/null
;
then
${
csudo
}
systemctl stop taoskeeper
||
:
elif
$(
which service &> /dev/null
)
;
then
${
csudo
}
service taoskeeper stop
||
:
else
pid
=
$(
ps
-ef
|
grep
"taoskeeper"
|
grep
-v
"grep"
|
awk
'{print $2}'
)
if
[
-n
"
$pid
"
]
;
then
${
csudo
}
kill
-9
$pid
||
:
fi
fi
echo
"Stop taoskeeper service success!"
sleep
1
fi
# if taos.cfg already softlink, remove it
cfg_install_dir
=
"/etc/taos"
install_main_dir
=
"/usr/local/taos"
...
...
@@ -41,6 +73,11 @@ if [ -f "${install_main_dir}/taosadapter.service" ]; then
${
csudo
}
rm
-f
${
install_main_dir
}
/cfg/taosadapter.service
||
:
fi
if
[
-f
"
${
install_main_dir
}
/taoskeeper.toml"
]
;
then
${
csudo
}
rm
-f
${
install_main_dir
}
/cfg/taoskeeper.toml
||
:
fi
# there can not libtaos.so*, otherwise ln -s error
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaos.
*
||
:
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaosws.so
||
:
packaging/deb/DEBIAN/prerm
浏览文件 @
2984c5a7
...
...
@@ -32,6 +32,7 @@ else
${
csudo
}
rm
-f
${
bin_link_dir
}
/udfd
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/taosadapter
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/taosdemo
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/taoskeeper
||
:
${
csudo
}
rm
-f
${
cfg_link_dir
}
/
*
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosdef.h
||
:
...
...
packaging/deb/makedeb.sh
浏览文件 @
2984c5a7
...
...
@@ -44,8 +44,31 @@ mkdir -p ${pkg_dir}${install_home_path}/include
#mkdir -p ${pkg_dir}${install_home_path}/init.d
mkdir
-p
${
pkg_dir
}${
install_home_path
}
/script
# download taoskeeper and build
if
[
"
$cpuType
"
=
"x64"
]
||
[
"
$cpuType
"
=
"x86_64"
]
||
[
"
$cpuType
"
=
"amd64"
]
;
then
arch
=
amd64
elif
[
"
$cpuType
"
=
"x32"
]
||
[
"
$cpuType
"
=
"i386"
]
||
[
"
$cpuType
"
=
"i686"
]
;
then
arch
=
386
elif
[
"
$cpuType
"
=
"arm"
]
||
[
"
$cpuType
"
=
"aarch32"
]
;
then
arch
=
arm
elif
[
"
$cpuType
"
=
"arm64"
]
||
[
"
$cpuType
"
=
"aarch64"
]
;
then
arch
=
arm64
else
arch
=
$cpuType
fi
echo
"
${
top_dir
}
/../enterprise/packaging/build_taoskeeper.sh -r
${
arch
}
-e taoskeeper"
echo
"
$top_dir
=
${
top_dir
}
"
taoskeeper_binary
=
`
${
top_dir
}
/../enterprise/packaging/build_taoskeeper.sh
-r
$arch
-e
taoskeeper
`
echo
"taoskeeper_binary:
${
taoskeeper_binary
}
"
# copy config files
cp
$(
dirname
${
taoskeeper_binary
}
)
/config/taoskeeper.toml
${
pkg_dir
}${
install_home_path
}
/cfg
cp
$(
dirname
${
taoskeeper_binary
}
)
/taoskeeper.service
${
pkg_dir
}${
install_home_path
}
/cfg
cp
${
compile_dir
}
/../packaging/cfg/taos.cfg
${
pkg_dir
}${
install_home_path
}
/cfg
cp
${
compile_dir
}
/../packaging/cfg/taosd.service
${
pkg_dir
}${
install_home_path
}
/cfg
if
[
-f
"
${
compile_dir
}
/test/cfg/taosadapter.toml"
]
;
then
cp
${
compile_dir
}
/test/cfg/taosadapter.toml
${
pkg_dir
}${
install_home_path
}
/cfg
||
:
fi
...
...
@@ -53,6 +76,7 @@ if [ -f "${compile_dir}/test/cfg/taosadapter.service" ]; then
cp
${
compile_dir
}
/test/cfg/taosadapter.service
${
pkg_dir
}${
install_home_path
}
/cfg
||
:
fi
cp
${
taoskeeper_binary
}
${
pkg_dir
}${
install_home_path
}
/bin
#cp ${compile_dir}/../packaging/deb/taosd ${pkg_dir}${install_home_path}/init.d
cp
${
compile_dir
}
/../packaging/tools/post.sh
${
pkg_dir
}${
install_home_path
}
/script
cp
${
compile_dir
}
/../packaging/tools/preun.sh
${
pkg_dir
}${
install_home_path
}
/script
...
...
@@ -143,6 +167,7 @@ else
exit
1
fi
rm
-rf
${
pkg_dir
}
/build-taoskeeper
# make deb package
dpkg
-b
${
pkg_dir
}
$debname
echo
"make deb package success!"
...
...
@@ -150,4 +175,5 @@ echo "make deb package success!"
cp
${
pkg_dir
}
/
*
.deb
${
output_dir
}
# clean temp dir
rm
-rf
${
pkg_dir
}
packaging/rpm/makerpm.sh
浏览文件 @
2984c5a7
...
...
@@ -35,14 +35,16 @@ function cp_rpm_package() {
local
cur_dir
cd
$1
cur_dir
=
$(
pwd
)
echo
"cp_rpm_package cd:
${
cur_dir
}
"
for
dirlist
in
"
$(
ls
${
cur_dir
}
)
"
;
do
if
test
-d
${
dirlist
}
;
then
cd
${
dirlist
}
echo
'cp_rpm_package ${cur_dir}/${dirlist}'
cp_rpm_package
${
cur_dir
}
/
${
dirlist
}
cd
..
fi
if
test
-e
${
dirlist
}
;
then
echo
"
${
cur_dir
}
/
${
dirlist
}
${
output_dir
}
/TDengine-
${
tdengine_ver
}
.rpm"
cp
${
cur_dir
}
/
${
dirlist
}
${
output_dir
}
/TDengine-
${
tdengine_ver
}
.rpm
fi
done
...
...
@@ -54,6 +56,25 @@ fi
${
csudo
}
mkdir
-p
${
pkg_dir
}
cd
${
pkg_dir
}
# download taoskeeper and build
if
[
"
$cpuType
"
=
"x64"
]
||
[
"
$cpuType
"
=
"x86_64"
]
||
[
"
$cpuType
"
=
"amd64"
]
;
then
arch
=
amd64
elif
[
"
$cpuType
"
=
"x32"
]
||
[
"
$cpuType
"
=
"i386"
]
||
[
"
$cpuType
"
=
"i686"
]
;
then
arch
=
386
elif
[
"
$cpuType
"
=
"arm"
]
||
[
"
$cpuType
"
=
"aarch32"
]
;
then
arch
=
arm
elif
[
"
$cpuType
"
=
"arm64"
]
||
[
"
$cpuType
"
=
"aarch64"
]
;
then
arch
=
arm64
else
arch
=
$cpuType
fi
cd
${
top_dir
}
echo
"
${
top_dir
}
/../enterprise/packaging/build_taoskeeper.sh -r
${
arch
}
-e taoskeeper"
taoskeeper_binary
=
`
${
top_dir
}
/../enterprise/packaging/build_taoskeeper.sh
-r
$arch
-e
taoskeeper
`
echo
"taoskeeper_binary:
${
taoskeeper_binary
}
"
cd
${
package_dir
}
${
csudo
}
mkdir
-p
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
${
csudo
}
rpmbuild
--define
=
"_version
${
tdengine_ver
}
"
--define
=
"_topdir
${
pkg_dir
}
"
--define
=
"_compiledir
${
compile_dir
}
"
-bb
${
spec_file
}
...
...
@@ -85,3 +106,4 @@ mv ${output_dir}/TDengine-${tdengine_ver}.rpm ${output_dir}/${rpmname}
cd
..
${
csudo
}
rm
-rf
${
pkg_dir
}
rm
-rf
${
top_dir
}
/build-taoskeeper
\ No newline at end of file
packaging/rpm/tdengine.spec
浏览文件 @
2984c5a7
...
...
@@ -3,6 +3,7 @@
%define cfg_install_dir /etc/taos
%define __strip /bin/true
%global __python /usr/bin/python3
%global _build_id_links none
Name: tdengine
Version: %{_version}
...
...
@@ -62,6 +63,15 @@ fi
if [ -f %{_compiledir}/test/cfg/taosadapter.service ]; then
cp %{_compiledir}/test/cfg/taosadapter.service %{buildroot}%{homepath}/cfg
fi
if [ -f %{_compiledir}/../build-taoskeeper/config/taoskeeper.toml ]; then
cp %{_compiledir}/../build-taoskeeper/config/taoskeeper.toml %{buildroot}%{homepath}/cfg ||:
fi
if [ -f %{_compiledir}/../build-taoskeeper/taoskeeper.service ]; then
cp %{_compiledir}/../build-taoskeeper/taoskeeper.service %{buildroot}%{homepath}/cfg ||:
fi
#cp %{_compiledir}/../packaging/rpm/taosd %{buildroot}%{homepath}/init.d
cp %{_compiledir}/../packaging/tools/post.sh %{buildroot}%{homepath}/script
cp %{_compiledir}/../packaging/tools/preun.sh %{buildroot}%{homepath}/script
...
...
@@ -73,8 +83,12 @@ cp %{_compiledir}/build/bin/taosd %{buildroot}%{homepath}/bin
cp %{_compiledir}/build/bin/udfd %{buildroot}%{homepath}/bin
cp %{_compiledir}/build/bin/taosBenchmark %{buildroot}%{homepath}/bin
if [ -f %{_compiledir}/../build-taoskeeper/taoskeeper ]; then
cp %{_compiledir}/../build-taoskeeper/taoskeeper %{buildroot}%{homepath}/bin
fi
if [ -f %{_compiledir}/build/bin/taosadapter ]; then
cp %{_compiledir}/build/bin/taosadapter %{buildroot}%{homepath}/bin
||:
cp %{_compiledir}/build/bin/taosadapter %{buildroot}%{homepath}/bin
fi
cp %{_compiledir}/build/lib/${libfile} %{buildroot}%{homepath}/driver
[ -f %{_compiledir}/build/lib/${wslibfile} ] && cp %{_compiledir}/build/lib/${wslibfile} %{buildroot}%{homepath}/driver ||:
...
...
@@ -119,7 +133,9 @@ if [ -f %{_compiledir}/build/bin/jemalloc-config ]; then
cp %{_compiledir}/build/lib/pkgconfig/jemalloc.pc %{buildroot}%{homepath}/jemalloc/lib/pkgconfig
fi
fi
ls -al %{buildroot}%{homepath}/bin
tree -L 5
echo "==============================copying files done"
#Scripts executed before installation
%pre
if [ -f /var/lib/taos/dnode/dnodeCfg.json ]; then
...
...
@@ -196,6 +212,7 @@ if [ $1 -eq 0 ];then
${csudo}rm -f ${bin_link_dir}/taosd || :
${csudo}rm -f ${bin_link_dir}/udfd || :
${csudo}rm -f ${bin_link_dir}/taosadapter || :
${csudo}rm -f ${bin_link_dir}/taoskeeper || :
${csudo}rm -f ${cfg_link_dir}/* || :
${csudo}rm -f ${inc_link_dir}/taos.h || :
${csudo}rm -f ${inc_link_dir}/taosdef.h || :
...
...
packaging/tools/makepkg.sh
浏览文件 @
2984c5a7
...
...
@@ -341,7 +341,7 @@ if [ "$verMode" == "cluster" ] || [ "$verMode" == "cloud" ]; then
tmp_pwd
=
`
pwd
`
cd
${
install_dir
}
/connector
if
[
!
-d
taos-connector-jdbc
]
;
then
git clone
-b
main
--depth
=
1 https://github.com/taosdata/taos-connector-jdbc.git
||
:
git clone
-b
3.1.0
--depth
=
1 https://github.com/taosdata/taos-connector-jdbc.git
||
:
fi
cd
taos-connector-jdbc
mvn clean package
-Dmaven
.test.skip
=
true
...
...
packaging/tools/post.sh
浏览文件 @
2984c5a7
...
...
@@ -436,7 +436,7 @@ function local_fqdn_check() {
function
install_taosadapter_config
()
{
if
[
!
-f
"
${
cfg_install_dir
}
/taosadapter.toml"
]
;
then
[
!
-d
%
{
cfg_install_dir
}
]
&&
[
!
-d
$
{
cfg_install_dir
}
]
&&
${
csudo
}${
csudo
}
mkdir
-p
${
cfg_install_dir
}
[
-f
${
cfg_dir
}
/taosadapter.toml
]
&&
${
csudo
}
cp
${
cfg_dir
}
/taosadapter.toml
${
cfg_install_dir
}
[
-f
${
cfg_install_dir
}
/taosadapter.toml
]
&&
...
...
@@ -451,19 +451,26 @@ function install_taosadapter_config() {
}
function
install_taoskeeper_config
()
{
if
[
!
-f
"
${
cfg_install_dir
}
/keeper.toml"
]
;
then
[
!
-d
%
{
cfg_install_dir
}
]
&&
${
csudo
}${
csudo
}
mkdir
-p
${
cfg_install_dir
}
[
-f
${
cfg_dir
}
/keeper.toml
]
&&
${
csudo
}
cp
${
cfg_dir
}
/keeper.toml
${
cfg_install_dir
}
[
-f
${
cfg_install_dir
}
/keeper.toml
]
&&
${
csudo
}
chmod
644
${
cfg_install_dir
}
/keeper.toml
# if new environment without taoskeeper
if
[[
!
-f
"
${
cfg_install_dir
}
/keeper.toml"
]]
&&
[[
!
-f
"
${
cfg_install_dir
}
/taoskeeper.toml"
]]
;
then
[
!
-d
${
cfg_install_dir
}
]
&&
${
csudo
}${
csudo
}
mkdir
-p
${
cfg_install_dir
}
[
-f
${
cfg_dir
}
/taoskeeper.toml
]
&&
${
csudo
}
cp
${
cfg_dir
}
/taoskeeper.toml
${
cfg_install_dir
}
[
-f
${
cfg_install_dir
}
/taoskeeper.toml
]
&&
${
csudo
}
chmod
644
${
cfg_install_dir
}
/taoskeeper.toml
fi
# if old machine with taoskeeper.toml file
if
[
-f
${
cfg_install_dir
}
/taoskeeper.toml
]
;
then
${
csudo
}
mv
${
cfg_dir
}
/taoskeeper.toml
${
cfg_dir
}
/taoskeeper.toml.new
fi
[
-f
${
cfg_dir
}
/keeper.toml
]
&&
${
csudo
}
mv
${
cfg_dir
}
/keeper.toml
${
cfg_dir
}
/keeper.toml.new
if
[
-f
${
cfg_install_dir
}
/keeper.toml
]
;
then
echo
"The file keeper.toml will be renamed to taoskeeper.toml"
${
csudo
}
mv
${
cfg_install_dir
}
/keeper.toml
${
cfg_install_dir
}
/taoskeeper.toml
${
csudo
}
mv
${
cfg_dir
}
/taoskeeper.toml
${
cfg_dir
}
/taoskeeper.toml.new
fi
[
-f
${
cfg_install_dir
}
/keeper.toml
]
&&
${
csudo
}
ln
-s
${
cfg_install_dir
}
/keeper.toml
${
cfg_dir
}
[
-f
${
cfg_install_dir
}
/
taos
keeper.toml
]
&&
${
csudo
}
ln
-s
${
cfg_install_dir
}
/
taos
keeper.toml
${
cfg_dir
}
}
function
install_config
()
{
...
...
@@ -655,6 +662,15 @@ function install_taosadapter_service() {
fi
}
function
install_taoskeeper_service
()
{
if
((
${
service_mod
}
==
0
))
;
then
[
-f
${
script_dir
}
/../cfg/taoskeeper.service
]
&&
\
${
csudo
}
cp
${
script_dir
}
/../cfg/taoskeeper.service
\
${
service_config_dir
}
/
||
:
${
csudo
}
systemctl daemon-reload
fi
}
function
install_service
()
{
log_print
"start install service"
if
[
"
$osType
"
!=
"Darwin"
]
;
then
...
...
@@ -732,6 +748,7 @@ function install_TDengine() {
install_taosadapter_config
install_taoskeeper_config
install_taosadapter_service
install_taoskeeper_service
install_service
install_app
...
...
packaging/tools/preun.sh
浏览文件 @
2984c5a7
...
...
@@ -17,7 +17,7 @@ cfg_link_dir="/usr/local/taos/cfg"
service_config_dir
=
"/etc/systemd/system"
taos_service_name
=
"taosd"
taoskeeper_service_name
=
"taoskeeper"
csudo
=
""
if
command
-v
sudo
>
/dev/null
;
then
csudo
=
"sudo "
...
...
@@ -57,6 +57,13 @@ function kill_taosd() {
fi
}
function
kill_taoskeeper
()
{
pid
=
$(
ps
-ef
|
grep
"taoskeeper"
|
grep
-v
"grep"
|
awk
'{print $2}'
)
if
[
-n
"
$pid
"
]
;
then
${
csudo
}
kill
-9
$pid
||
:
fi
}
function
clean_service_on_systemd
()
{
taosadapter_service_config
=
"
${
service_config_dir
}
/taosadapter.service"
if
systemctl is-active
--quiet
taosadapter
;
then
...
...
@@ -76,6 +83,12 @@ function clean_service_on_systemd() {
[
-f
${
taosadapter_service_config
}
]
&&
${
csudo
}
rm
-f
${
taosadapter_service_config
}
taoskeeper_service_config
=
"
${
service_config_dir
}
/
${
taoskeeper_service_name
}
.service"
if
systemctl is-active
--quiet
${
taoskeeper_service_name
}
;
then
echo
"TDengine taoskeeper is running, stopping it..."
${
csudo
}
systemctl stop
${
taoskeeper_service_name
}
&> /dev/null
||
echo
&> /dev/null
fi
[
-f
${
taoskeeper_service_config
}
]
&&
${
csudo
}
rm
-f
${
taoskeeper_service_config
}
}
function
clean_service_on_sysvinit
()
{
...
...
@@ -111,6 +124,7 @@ function clean_service() {
# must manual stop taosd
kill_taosadapter
kill_taosd
kill_taoskeeper
fi
}
...
...
@@ -124,6 +138,7 @@ ${csudo}rm -f ${bin_link_dir}/taosadapter || :
${
csudo
}
rm
-f
${
bin_link_dir
}
/taosBenchmark
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/taosdemo
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/set_core
||
:
${
csudo
}
rm
-f
${
bin_link_dir
}
/taoskeeper
||
:
${
csudo
}
rm
-f
${
cfg_link_dir
}
/
*
.new
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosdef.h
||
:
...
...
source/client/src/clientMain.c
浏览文件 @
2984c5a7
...
...
@@ -108,7 +108,7 @@ TAOS *taos_connect(const char *ip, const char *user, const char *pass, const cha
if
(
pass
==
NULL
)
{
pass
=
TSDB_DEFAULT_PASS
;
}
STscObj
*
pObj
=
taos_connect_internal
(
ip
,
user
,
pass
,
NULL
,
db
,
port
,
CONN_TYPE__QUERY
);
if
(
pObj
)
{
int64_t
*
rid
=
taosMemoryCalloc
(
1
,
sizeof
(
int64_t
));
...
...
@@ -359,11 +359,11 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
case
TSDB_DATA_TYPE_NCHAR
:
{
int32_t
charLen
=
varDataLen
((
char
*
)
row
[
i
]
-
VARSTR_HEADER_SIZE
);
if
(
fields
[
i
].
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
ASSERT
(
charLen
<=
fields
[
i
].
bytes
&&
charLen
>=
0
))
{
if
(
ASSERT
(
charLen
<=
fields
[
i
].
bytes
&&
charLen
>=
0
))
{
tscError
(
"taos_print_row error binary. charLen:%d, fields[i].bytes:%d"
,
charLen
,
fields
[
i
].
bytes
);
}
}
else
{
if
(
ASSERT
(
charLen
<=
fields
[
i
].
bytes
*
TSDB_NCHAR_SIZE
&&
charLen
>=
0
))
{
if
(
ASSERT
(
charLen
<=
fields
[
i
].
bytes
*
TSDB_NCHAR_SIZE
&&
charLen
>=
0
))
{
tscError
(
"taos_print_row error. charLen:%d, fields[i].bytes:%d"
,
charLen
,
fields
[
i
].
bytes
);
}
}
...
...
@@ -705,16 +705,16 @@ int taos_get_current_db(TAOS *taos, char *database, int len, int *required) {
int
code
=
TSDB_CODE_SUCCESS
;
taosThreadMutexLock
(
&
pTscObj
->
mutex
);
if
(
database
==
NULL
||
len
<=
0
)
{
if
(
required
!=
NULL
)
*
required
=
strlen
(
pTscObj
->
db
)
+
1
;
if
(
database
==
NULL
||
len
<=
0
)
{
if
(
required
!=
NULL
)
*
required
=
strlen
(
pTscObj
->
db
)
+
1
;
terrno
=
TSDB_CODE_INVALID_PARA
;
code
=
-
1
;
}
else
if
(
len
<
strlen
(
pTscObj
->
db
)
+
1
)
{
}
else
if
(
len
<
strlen
(
pTscObj
->
db
)
+
1
)
{
tstrncpy
(
database
,
pTscObj
->
db
,
len
);
if
(
required
)
*
required
=
strlen
(
pTscObj
->
db
)
+
1
;
if
(
required
)
*
required
=
strlen
(
pTscObj
->
db
)
+
1
;
terrno
=
TSDB_CODE_INVALID_PARA
;
code
=
-
1
;
}
else
{
}
else
{
strcpy
(
database
,
pTscObj
->
db
);
code
=
0
;
}
...
...
@@ -741,6 +741,7 @@ static void destoryCatalogReq(SCatalogReq *pCatalogReq) {
taosArrayDestroy
(
pCatalogReq
->
pUser
);
taosArrayDestroy
(
pCatalogReq
->
pTableIndex
);
taosArrayDestroy
(
pCatalogReq
->
pTableCfg
);
taosArrayDestroy
(
pCatalogReq
->
pTableTag
);
taosMemoryFree
(
pCatalogReq
);
}
...
...
@@ -975,8 +976,10 @@ void doAsyncQuery(SRequestObj *pRequest, bool updateMetaForce) {
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pRequest
->
stmtType
=
pRequest
->
pQuery
->
pRoot
->
type
;
phaseAsyncQuery
(
pWrapper
);
}
else
{
code
=
phaseAsyncQuery
(
pWrapper
);
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
tscError
(
"0x%"
PRIx64
" error happens, code:%d - %s, reqId:0x%"
PRIx64
,
pRequest
->
self
,
code
,
tstrerror
(
code
),
pRequest
->
requestId
);
destorySqlCallbackWrapper
(
pWrapper
);
...
...
@@ -1042,11 +1045,11 @@ static void fetchCallback(void *pResult, void *param, int32_t code) {
}
void
taos_fetch_rows_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
)
{
if
(
ASSERT
(
res
!=
NULL
&&
fp
!=
NULL
))
{
if
(
ASSERT
(
res
!=
NULL
&&
fp
!=
NULL
))
{
tscError
(
"taos_fetch_rows_a invalid paras"
);
return
;
}
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
tscError
(
"taos_fetch_rows_a res is NULL"
);
return
;
}
...
...
@@ -1092,11 +1095,11 @@ void taos_fetch_rows_a(TAOS_RES *res, __taos_async_fn_t fp, void *param) {
}
void
taos_fetch_raw_block_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
)
{
if
(
ASSERT
(
res
!=
NULL
&&
fp
!=
NULL
))
{
if
(
ASSERT
(
res
!=
NULL
&&
fp
!=
NULL
))
{
tscError
(
"taos_fetch_rows_a invalid paras"
);
return
;
}
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
tscError
(
"taos_fetch_rows_a res is NULL"
);
return
;
}
...
...
@@ -1111,11 +1114,11 @@ void taos_fetch_raw_block_a(TAOS_RES *res, __taos_async_fn_t fp, void *param) {
}
const
void
*
taos_get_raw_block
(
TAOS_RES
*
res
)
{
if
(
ASSERT
(
res
!=
NULL
))
{
if
(
ASSERT
(
res
!=
NULL
))
{
tscError
(
"taos_fetch_rows_a invalid paras"
);
return
NULL
;
}
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
if
(
ASSERT
(
TD_RES_QUERY
(
res
)))
{
tscError
(
"taos_fetch_rows_a res is NULL"
);
return
NULL
;
}
...
...
@@ -1273,7 +1276,6 @@ _return:
return
code
;
}
int
taos_load_table_info
(
TAOS
*
taos
,
const
char
*
tableNameList
)
{
if
(
NULL
==
taos
)
{
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
...
...
source/client/src/clientMsgHandler.c
浏览文件 @
2984c5a7
...
...
@@ -92,7 +92,6 @@ int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) {
goto
End
;
}
/*assert(connectRsp.epSet.numOfEps > 0);*/
if
(
connectRsp
.
epSet
.
numOfEps
==
0
)
{
setErrno
(
pRequest
,
TSDB_CODE_APP_ERROR
);
tsem_post
(
&
pRequest
->
body
.
rspSem
);
...
...
source/client/src/clientSml.c
浏览文件 @
2984c5a7
...
...
@@ -650,6 +650,17 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO
field
->
bytes
=
getBytes
(
kv
->
type
,
kv
->
length
);
}
}
int32_t
maxLen
=
isTag
?
TSDB_MAX_TAGS_LEN
:
TSDB_MAX_BYTES_PER_ROW
;
int32_t
len
=
0
;
for
(
int
j
=
0
;
j
<
taosArrayGetSize
(
results
);
++
j
)
{
SField
*
field
=
taosArrayGet
(
results
,
j
);
len
+=
field
->
bytes
;
}
if
(
len
>
maxLen
){
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -782,11 +793,15 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
code
=
smlBuildFieldsList
(
info
,
NULL
,
NULL
,
sTableData
->
tags
,
pTags
,
0
,
true
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
uError
(
"SML:0x%"
PRIx64
" smlBuildFieldsList tag1 failed. %s"
,
info
->
id
,
pName
.
tname
);
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
code
=
smlBuildFieldsList
(
info
,
NULL
,
NULL
,
sTableData
->
cols
,
pColumns
,
0
,
false
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
uError
(
"SML:0x%"
PRIx64
" smlBuildFieldsList col1 failed. %s"
,
info
->
id
,
pName
.
tname
);
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
code
=
smlSendMetaMsg
(
info
,
&
pName
,
pColumns
,
pTags
,
NULL
,
SCHEMA_ACTION_CREATE_STABLE
);
...
...
@@ -838,6 +853,23 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
pTableMeta
->
tableInfo
.
numOfColumns
,
true
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
uError
(
"SML:0x%"
PRIx64
" smlBuildFieldsList tag2 failed. %s"
,
info
->
id
,
pName
.
tname
);
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
if
(
taosArrayGetSize
(
pTags
)
+
pTableMeta
->
tableInfo
.
numOfColumns
>
TSDB_MAX_COLUMNS
)
{
uError
(
"SML:0x%"
PRIx64
" too many columns than 4096"
,
info
->
id
);
code
=
TSDB_CODE_PAR_TOO_MANY_COLUMNS
;
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
if
(
taosArrayGetSize
(
pTags
)
>
TSDB_MAX_TAGS
)
{
uError
(
"SML:0x%"
PRIx64
" too many tags than 128"
,
info
->
id
);
code
=
TSDB_CODE_PAR_INVALID_TAGS_NUM
;
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
...
...
@@ -892,6 +924,16 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
pTableMeta
->
tableInfo
.
numOfColumns
,
false
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
uError
(
"SML:0x%"
PRIx64
" smlBuildFieldsList col2 failed. %s"
,
info
->
id
,
pName
.
tname
);
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
if
(
taosArrayGetSize
(
pColumns
)
+
pTableMeta
->
tableInfo
.
numOfTags
>
TSDB_MAX_COLUMNS
)
{
uError
(
"SML:0x%"
PRIx64
" too many columns than 4096"
,
info
->
id
);
code
=
TSDB_CODE_PAR_TOO_MANY_COLUMNS
;
taosArrayDestroy
(
pColumns
);
taosArrayDestroy
(
pTags
);
goto
end
;
}
...
...
@@ -1515,7 +1557,8 @@ static int smlProcess(SSmlHandle *info, char *lines[], char *rawLine, char *rawL
do
{
code
=
smlModifyDBSchemas
(
info
);
if
(
code
==
0
||
code
==
TSDB_CODE_SML_INVALID_DATA
)
break
;
if
(
code
==
0
||
code
==
TSDB_CODE_SML_INVALID_DATA
||
code
==
TSDB_CODE_PAR_TOO_MANY_COLUMNS
||
code
==
TSDB_CODE_PAR_INVALID_TAGS_NUM
)
break
;
taosMsleep
(
100
);
uInfo
(
"SML:0x%"
PRIx64
" smlModifyDBSchemas retry code:%s, times:%d"
,
info
->
id
,
tstrerror
(
code
),
retryNum
);
}
while
(
retryNum
++
<
taosHashGetSize
(
info
->
superTables
)
*
MAX_RETRY_TIMES
);
...
...
source/client/src/clientSmlJson.c
浏览文件 @
2984c5a7
...
...
@@ -575,7 +575,7 @@ static int32_t smlConvertJSONString(SSmlKv *pVal, char *typeStr, cJSON *value) {
uError
(
"OTD:invalid type(%s) for JSON String"
,
typeStr
);
return
TSDB_CODE_TSC_INVALID_JSON_TYPE
;
}
pVal
->
length
=
(
int16_t
)
strlen
(
value
->
valuestring
);
pVal
->
length
=
strlen
(
value
->
valuestring
);
if
(
pVal
->
type
==
TSDB_DATA_TYPE_BINARY
&&
pVal
->
length
>
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
)
{
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
...
...
source/client/src/clientTmq.c
浏览文件 @
2984c5a7
...
...
@@ -1664,11 +1664,7 @@ static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* p
return
handleErrorBeforePoll
(
pVg
,
pTmq
);
}
sendInfo
->
msgInfo
=
(
SDataBuf
){
.
pData
=
msg
,
.
len
=
msgSize
,
.
handle
=
NULL
,
};
sendInfo
->
msgInfo
=
(
SDataBuf
){
.
pData
=
msg
,
.
len
=
msgSize
,
.
handle
=
NULL
};
sendInfo
->
requestId
=
req
.
reqId
;
sendInfo
->
requestObjRefId
=
0
;
...
...
source/client/test/clientTests.cpp
浏览文件 @
2984c5a7
...
...
@@ -165,7 +165,7 @@ void* queryThread(void* arg) {
int32_t
numOfThreads
=
1
;
void
tmq_commit_cb_print
(
tmq_t
*
pTmq
,
int32_t
code
,
void
*
param
)
{
printf
(
"auto commit success, code:%d
\n\n\n
\n
"
,
code
);
// printf("auto commit success, code:%d
\n", code);
}
void
*
doConsumeData
(
void
*
param
)
{
...
...
@@ -1053,19 +1053,24 @@ TEST(clientCase, sub_db_test) {
}
TEST
(
clientCase
,
sub_tb_test
)
{
taos_options
(
TSDB_OPTION_CONFIGDIR
,
"
~/first/cfg
"
);
taos_options
(
TSDB_OPTION_CONFIGDIR
,
"
/home/tests/dir/cfg/
"
);
TAOS
*
pConn
=
taos_connect
(
"
localhost
"
,
"root"
,
"taosdata"
,
NULL
,
0
);
TAOS
*
pConn
=
taos_connect
(
"
vm116
"
,
"root"
,
"taosdata"
,
NULL
,
0
);
ASSERT_NE
(
pConn
,
nullptr
);
tmq_conf_t
*
conf
=
tmq_conf_new
();
int32_t
ts
=
taosGetTimestampMs
()
%
INT32_MAX
;
char
consumerGroupid
[
128
]
=
{
0
};
sprintf
(
consumerGroupid
,
"group_id_%d"
,
ts
);
tmq_conf_set
(
conf
,
"enable.auto.commit"
,
"true"
);
tmq_conf_set
(
conf
,
"auto.commit.interval.ms"
,
"
1
000"
);
tmq_conf_set
(
conf
,
"group.id"
,
"cgrpName45"
);
tmq_conf_set
(
conf
,
"auto.commit.interval.ms"
,
"
2
000"
);
tmq_conf_set
(
conf
,
"group.id"
,
consumerGroupid
);
tmq_conf_set
(
conf
,
"td.connect.user"
,
"root"
);
tmq_conf_set
(
conf
,
"td.connect.pass"
,
"taosdata"
);
tmq_conf_set
(
conf
,
"auto.offset.reset"
,
"earliest"
);
tmq_conf_set
(
conf
,
"experimental.snapshot.enable"
,
"
tru
e"
);
tmq_conf_set
(
conf
,
"experimental.snapshot.enable"
,
"
fals
e"
);
tmq_conf_set
(
conf
,
"msg.with.table.name"
,
"true"
);
tmq_conf_set_auto_commit_cb
(
conf
,
tmq_commit_cb_print
,
NULL
);
...
...
@@ -1074,7 +1079,7 @@ TEST(clientCase, sub_tb_test) {
// 创建订阅 topics 列表
tmq_list_t
*
topicList
=
tmq_list_new
();
tmq_list_append
(
topicList
,
"topic_t
2
"
);
tmq_list_append
(
topicList
,
"topic_t
1
"
);
// 启动订阅
tmq_subscribe
(
tmq
,
topicList
);
...
...
@@ -1093,15 +1098,15 @@ TEST(clientCase, sub_tb_test) {
while
(
1
)
{
TAOS_RES
*
pRes
=
tmq_consumer_poll
(
tmq
,
timeout
);
if
(
pRes
)
{
char
buf
[
1
024
];
char
buf
[
1
28
];
const
char
*
topicName
=
tmq_get_topic_name
(
pRes
);
const
char
*
dbName
=
tmq_get_db_name
(
pRes
);
int32_t
vgroupId
=
tmq_get_vgroup_id
(
pRes
);
printf
(
"topic: %s
\n
"
,
topicName
);
printf
(
"db: %s
\n
"
,
dbName
);
printf
(
"vgroup id: %d
\n
"
,
vgroupId
);
//
const char* dbName = tmq_get_db_name(pRes);
//
int32_t vgroupId = tmq_get_vgroup_id(pRes);
//
//
printf("topic: %s\n", topicName);
//
printf("db: %s\n", dbName);
//
printf("vgroup id: %d\n", vgroupId);
while
(
1
)
{
TAOS_ROW
row
=
taos_fetch_row
(
pRes
);
...
...
@@ -1111,16 +1116,14 @@ TEST(clientCase, sub_tb_test) {
fields
=
taos_fetch_fields
(
pRes
);
numOfFields
=
taos_field_count
(
pRes
);
precision
=
taos_result_precision
(
pRes
);
taos_print_row
(
buf
,
row
,
fields
,
numOfFields
);
totalRows
+=
1
;
printf
(
"precision: %d, row content: %s
\n
"
,
precision
,
buf
);
if
(
totalRows
%
100000
==
0
)
{
taos_print_row
(
buf
,
row
,
fields
,
numOfFields
);
printf
(
"row content: %s
\n
"
,
buf
);
}
}
taos_free_result
(
pRes
);
// if ((++count) > 1) {
// break;
// }
}
else
{
break
;
}
...
...
source/common/src/tdatablock.c
浏览文件 @
2984c5a7
...
...
@@ -2388,7 +2388,7 @@ _end:
if
(
terrno
!=
0
)
{
*
ppReq
=
NULL
;
if
(
pReq
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFreeClear
(
pReq
);
}
...
...
source/common/src/tmsg.c
浏览文件 @
2984c5a7
...
...
@@ -1409,6 +1409,8 @@ int32_t tDeserializeSAlterUserReq(void *buf, int32_t bufLen, SAlterUserReq *pReq
return
0
;
}
void
tFreeSAlterUserReq
(
SAlterUserReq
*
pReq
)
{
taosMemoryFreeClear
(
pReq
->
tagCond
);
}
int32_t
tSerializeSGetUserAuthReq
(
void
*
buf
,
int32_t
bufLen
,
SGetUserAuthReq
*
pReq
)
{
SEncoder
encoder
=
{
0
};
tEncoderInit
(
&
encoder
,
buf
,
bufLen
);
...
...
@@ -1635,6 +1637,7 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs
int32_t
ref
=
0
;
if
(
tDecodeI32
(
pDecoder
,
&
ref
)
<
0
)
return
-
1
;
taosHashPut
(
pRsp
->
useDbs
,
key
,
strlen
(
key
),
&
ref
,
sizeof
(
ref
));
taosMemoryFree
(
key
);
}
}
...
...
@@ -1831,7 +1834,6 @@ int32_t tSerializeSCreateFuncReq(void *buf, int32_t bufLen, SCreateFuncReq *pReq
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
pComment
)
<
0
)
return
-
1
;
}
if
(
tEncodeI8
(
&
encoder
,
pReq
->
orReplace
)
<
0
)
return
-
1
;
tEndEncode
(
&
encoder
);
...
...
@@ -1876,7 +1878,6 @@ int32_t tDeserializeSCreateFuncReq(void *buf, int32_t bufLen, SCreateFuncReq *pR
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
pComment
)
<
0
)
return
-
1
;
}
if
(
!
tDecodeIsEnd
(
&
decoder
))
{
if
(
tDecodeI8
(
&
decoder
,
&
pReq
->
orReplace
)
<
0
)
return
-
1
;
}
else
{
...
...
@@ -2053,12 +2054,12 @@ int32_t tDeserializeSRetrieveFuncRsp(void *buf, int32_t bufLen, SRetrieveFuncRsp
if
(
pRsp
->
pFuncExtraInfos
==
NULL
)
return
-
1
;
if
(
tDecodeIsEnd
(
&
decoder
))
{
for
(
int32_t
i
=
0
;
i
<
pRsp
->
numOfFuncs
;
++
i
)
{
SFuncExtraInfo
extraInfo
=
{
0
};
SFuncExtraInfo
extraInfo
=
{
0
};
taosArrayPush
(
pRsp
->
pFuncExtraInfos
,
&
extraInfo
);
}
}
else
{
for
(
int32_t
i
=
0
;
i
<
pRsp
->
numOfFuncs
;
++
i
)
{
SFuncExtraInfo
extraInfo
=
{
0
};
SFuncExtraInfo
extraInfo
=
{
0
};
if
(
tDecodeI32
(
&
decoder
,
&
extraInfo
.
funcVersion
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
extraInfo
.
funcCreatedTime
)
<
0
)
return
-
1
;
taosArrayPush
(
pRsp
->
pFuncExtraInfos
,
&
extraInfo
);
...
...
@@ -7436,7 +7437,7 @@ void tDestroySSubmitTbData(SSubmitTbData *pTbData, int32_t flag) {
}
}
void
tDestroySSubmitReq
2
(
SSubmitReq2
*
pReq
,
int32_t
flag
)
{
void
tDestroySSubmitReq
(
SSubmitReq2
*
pReq
,
int32_t
flag
)
{
if
(
pReq
->
aSubmitTbData
==
NULL
)
return
;
int32_t
nSubmitTbData
=
TARRAY_SIZE
(
pReq
->
aSubmitTbData
);
...
...
source/common/src/ttszip.c
浏览文件 @
2984c5a7
...
...
@@ -982,7 +982,6 @@ void tsBufSetCursor(STSBuf* pTSBuf, STSCursor* pCur) {
return
;
}
// assert(pCur->vgroupIndex != -1 && pCur->tsIndex >= 0 && pCur->blockIndex >= 0);
if
(
pCur
->
vgroupIndex
!=
-
1
)
{
tsBufGetBlock
(
pTSBuf
,
pCur
->
vgroupIndex
,
pCur
->
blockIndex
);
}
...
...
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
浏览文件 @
2984c5a7
...
...
@@ -113,8 +113,16 @@ static void vmProcessFetchQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
int32_t
code
=
vnodeProcessFetchMsg
(
pVnode
->
pImpl
,
pMsg
,
pInfo
);
if
(
code
!=
0
)
{
if
(
terrno
!=
0
)
code
=
terrno
;
dGError
(
"vnodeProcessFetchMsg vgId:%d, msg:%p failed to fetch since %s"
,
pVnode
->
vgId
,
pMsg
,
terrstr
());
if
(
terrno
!=
0
)
{
code
=
terrno
;
}
if
(
code
==
TSDB_CODE_WAL_LOG_NOT_EXIST
)
{
dGDebug
(
"vnodeProcessFetchMsg vgId:%d, msg:%p failed to fetch since %s"
,
pVnode
->
vgId
,
pMsg
,
terrstr
());
}
else
{
dGError
(
"vnodeProcessFetchMsg vgId:%d, msg:%p failed to fetch since %s"
,
pVnode
->
vgId
,
pMsg
,
terrstr
());
}
vmSendRsp
(
pMsg
,
code
);
}
...
...
source/dnode/mnode/impl/src/mndMain.c
浏览文件 @
2984c5a7
...
...
@@ -124,11 +124,7 @@ static void mndCalMqRebalance(SMnode *pMnode) {
int32_t
contLen
=
0
;
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
if
(
pReq
!=
NULL
)
{
SRpcMsg
rpcMsg
=
{
.
msgType
=
TDMT_MND_TMQ_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
,
};
SRpcMsg
rpcMsg
=
{
.
msgType
=
TDMT_MND_TMQ_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
READ_QUEUE
,
&
rpcMsg
);
}
}
...
...
source/dnode/mnode/impl/src/mndUser.c
浏览文件 @
2984c5a7
...
...
@@ -390,6 +390,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) {
SDB_GET_INT32
(
pRaw
,
dataPos
,
&
ref
,
_OVER
);
taosHashPut
(
pUser
->
useDbs
,
key
,
keyLen
,
&
ref
,
sizeof
(
ref
));
taosMemoryFree
(
key
);
}
}
...
...
@@ -956,6 +957,7 @@ _OVER:
mError
(
"user:%s, failed to alter since %s"
,
alterReq
.
user
,
terrstr
());
}
tFreeSAlterUserReq
(
&
alterReq
);
mndReleaseUser
(
pMnode
,
pOperUser
);
mndReleaseUser
(
pMnode
,
pUser
);
mndUserFreeObj
(
&
newUser
);
...
...
source/dnode/vnode/inc/vnode.h
浏览文件 @
2984c5a7
...
...
@@ -162,7 +162,6 @@ int32_t metaTbCursorPrev(SMTbCursor *pTbCur, ETableType jumpTableType);
#endif
// tsdb
// typedef struct STsdb STsdb;
typedef
struct
STsdbReader
STsdbReader
;
#define TSDB_DEFAULT_STT_FILE 8
...
...
@@ -176,11 +175,8 @@ typedef struct STsdbReader STsdbReader;
#define CACHESCAN_RETRIEVE_LAST_ROW 0x4
#define CACHESCAN_RETRIEVE_LAST 0x8
int32_t
tsdbSetTableList
(
STsdbReader
*
pReader
,
const
void
*
pTableList
,
int32_t
num
);
int32_t
tsdbReaderOpen
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
void
*
pTableList
,
int32_t
numOfTables
,
SSDataBlock
*
pResBlock
,
STsdbReader
**
ppReader
,
const
char
*
idstr
,
bool
countOnly
);
void
tsdbReaderSetId
(
STsdbReader
*
pReader
,
const
char
*
idstr
);
int32_t
tsdbReaderOpen
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
void
*
pTableList
,
int32_t
numOfTables
,
SSDataBlock
*
pResBlock
,
STsdbReader
**
ppReader
,
const
char
*
idstr
,
bool
countOnly
);
void
tsdbReaderClose
(
STsdbReader
*
pReader
);
int32_t
tsdbNextDataBlock
(
STsdbReader
*
pReader
,
bool
*
hasNext
);
int32_t
tsdbRetrieveDatablockSMA
(
STsdbReader
*
pReader
,
SSDataBlock
*
pDataBlock
,
bool
*
allHave
);
...
...
@@ -191,7 +187,10 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader *pReader, STableBlockDistInfo
int64_t
tsdbGetNumOfRowsInMemTable
(
STsdbReader
*
pHandle
);
void
*
tsdbGetIdx
(
SMeta
*
pMeta
);
void
*
tsdbGetIvtIdx
(
SMeta
*
pMeta
);
uint64_t
getReaderMaxVersion
(
STsdbReader
*
pReader
);
uint64_t
tsdbGetReaderMaxVersion
(
STsdbReader
*
pReader
);
int32_t
tsdbSetTableList
(
STsdbReader
*
pReader
,
const
void
*
pTableList
,
int32_t
num
);
void
tsdbReaderSetId
(
STsdbReader
*
pReader
,
const
char
*
idstr
);
void
tsdbReaderSetCloseFlag
(
STsdbReader
*
pReader
);
int32_t
tsdbCacherowsReaderOpen
(
void
*
pVnode
,
int32_t
type
,
void
*
pTableIdList
,
int32_t
numOfTables
,
int32_t
numOfCols
,
uint64_t
suid
,
void
**
pReader
,
const
char
*
idstr
);
...
...
@@ -232,26 +231,21 @@ typedef struct SSnapContext {
}
SSnapContext
;
typedef
struct
STqReader
{
SPackedData
msg2
;
SSubmitReq2
submit
;
int32_t
nextBlk
;
int64_t
lastBlkUid
;
SWalReader
*
pWalReader
;
SMeta
*
pVnodeMeta
;
SHashObj
*
tbIdHash
;
SArray
*
pColIdList
;
// SArray<int16_t>
SPackedData
msg2
;
SSubmitReq2
submit
;
int32_t
nextBlk
;
int64_t
lastBlkUid
;
SWalReader
*
pWalReader
;
SMeta
*
pVnodeMeta
;
SHashObj
*
tbIdHash
;
SArray
*
pColIdList
;
// SArray<int16_t>
int32_t
cachedSchemaVer
;
int64_t
cachedSchemaSuid
;
SSchemaWrapper
*
pSchemaWrapper
;
STSchema
*
pSchema
;
}
STqReader
;
STqReader
*
tq
OpenReader
(
SVnode
*
pVnode
);
STqReader
*
tq
ReaderOpen
(
SVnode
*
pVnode
);
void
tqCloseReader
(
STqReader
*
);
void
tqReaderSetColIdList
(
STqReader
*
pReader
,
SArray
*
pColIdList
);
...
...
@@ -260,17 +254,14 @@ int32_t tqReaderAddTbUidList(STqReader *pReader, const SArray *pTableUidList);
int32_t
tqReaderRemoveTbUidList
(
STqReader
*
pReader
,
const
SArray
*
tbUidList
);
int32_t
tqSeekVer
(
STqReader
*
pReader
,
int64_t
ver
,
const
char
*
id
);
void
tqNextBlock
(
STqReader
*
pReader
,
SFetchRet
*
ret
);
int32_t
tqNextBlock
(
STqReader
*
pReader
,
SSDataBlock
*
pBlock
);
int32_t
extractSubmitMsgFromWal
(
SWalReader
*
pReader
,
SPackedData
*
pPackedData
);
int32_t
tqReaderSetSubmitMsg
(
STqReader
*
pReader
,
void
*
msgStr
,
int32_t
msgLen
,
int64_t
ver
);
// int32_t tqReaderSetDataMsg(STqReader *pReader, const SSubmitReq *pMsg, int64_t ver);
bool
tqNextDataBlock
(
STqReader
*
pReader
);
bool
tqNextDataBlockFilterOut2
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
);
int32_t
tqRetrieveDataBlock2
(
SSDataBlock
*
pBlock
,
STqReader
*
pReader
,
SSubmitTbData
**
pSubmitTbDataRet
);
int32_t
tqRetrieveTaosxBlock2
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
);
// int32_t tqRetrieveDataBlock(SSDataBlock *pBlock, STqReader *pReader);
// int32_t tqRetrieveTaosxBlock(STqReader *pReader, SArray *blocks, SArray *schemas);
bool
tqNextBlockImpl
(
STqReader
*
pReader
);
bool
tqNextDataBlockFilterOut
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
);
int32_t
tqRetrieveDataBlock
(
SSDataBlock
*
pBlock
,
STqReader
*
pReader
,
SSubmitTbData
**
pSubmitTbDataRet
);
int32_t
tqRetrieveTaosxBlock
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
);
int32_t
vnodeEnqueueStreamMsg
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
2984c5a7
...
...
@@ -16,6 +16,7 @@
#ifndef _TD_VNODE_TSDB_H_
#define _TD_VNODE_TSDB_H_
#include "tsimplehash.h"
#include "vnodeInt.h"
#ifdef __cplusplus
...
...
@@ -122,14 +123,14 @@ int32_t tsdbRowCmprFn(const void *p1, const void *p2);
int32_t
tsdbRowIterOpen
(
STSDBRowIter
*
pIter
,
TSDBROW
*
pRow
,
STSchema
*
pTSchema
);
void
tsdbRowClose
(
STSDBRowIter
*
pIter
);
SColVal
*
tsdbRowIterNext
(
STSDBRowIter
*
pIter
);
// SRowMerger
int32_t
tsdbRowMergerInit
(
SRowMerger
*
pMerger
,
STSchema
*
p
ResTSchema
,
TSDBROW
*
pRow
,
STSchema
*
pT
Schema
);
int32_t
tsdbRowMergerInit
(
SRowMerger
*
pMerger
,
STSchema
*
pSchema
);
int32_t
tsdbRowMergerAdd
(
SRowMerger
*
pMerger
,
TSDBROW
*
pRow
,
STSchema
*
pTSchema
);
// int32_t tsdbRowMergerInit(SRowMerger *pMerger, TSDBROW *pRow, STSchema *pTSchema);
void
tsdbRowMergerClear
(
SRowMerger
*
pMerger
);
// int32_t tsdbRowMerge(SRowMerger *pMerger, TSDBROW *pRow);
int32_t
tsdbRowMergerGetRow
(
SRowMerger
*
pMerger
,
SRow
**
ppRow
);
void
tsdbRowMergerClear
(
SRowMerger
*
pMerger
);
void
tsdbRowMergerCleanup
(
SRowMerger
*
pMerger
);
// TABLEID
int32_t
tTABLEIDCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
// TSDBKEY
...
...
@@ -224,7 +225,7 @@ int32_t tsdbTbDataIterCreate(STbData *pTbData, TSDBKEY *pFrom, int8_t backward,
void
*
tsdbTbDataIterDestroy
(
STbDataIter
*
pIter
);
void
tsdbTbDataIterOpen
(
STbData
*
pTbData
,
TSDBKEY
*
pFrom
,
int8_t
backward
,
STbDataIter
*
pIter
);
bool
tsdbTbDataIterNext
(
STbDataIter
*
pIter
);
void
tsdbMemTableCountRows
(
SMemTable
*
pMemTable
,
SHashObj
*
pTableMap
,
int64_t
*
rowsNum
);
void
tsdbMemTableCountRows
(
SMemTable
*
pMemTable
,
S
S
HashObj
*
pTableMap
,
int64_t
*
rowsNum
);
// STbData
int32_t
tsdbGetNRowsInTbData
(
STbData
*
pTbData
);
...
...
@@ -322,8 +323,9 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, const SDiskData **ppDiskData,
#define TSDB_STT_FILE_DATA_ITER 2
#define TSDB_TOMB_FILE_DATA_ITER 3
#define TSDB_FILTER_FLAG_BY_VERSION 0x1
#define TSDB_FILTER_FLAG_BY_TABLEID 0x2
#define TSDB_FILTER_FLAG_BY_VERSION 0x1
#define TSDB_FILTER_FLAG_BY_TABLEID 0x2
#define TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE 0x4
#define TSDB_RBTN_TO_DATA_ITER(pNode) ((STsdbDataIter2 *)(((char *)pNode) - offsetof(STsdbDataIter2, rbtn)))
/* open */
...
...
@@ -705,7 +707,6 @@ typedef struct SSttBlockLoadInfo {
typedef
struct
SMergeTree
{
int8_t
backward
;
SRBTree
rbt
;
SArray
*
pIterList
;
SLDataIter
*
pIter
;
bool
destroyLoadInfo
;
SSttBlockLoadInfo
*
pLoadInfo
;
...
...
@@ -751,13 +752,29 @@ struct SDiskDataBuilder {
SBlkInfo
bi
;
};
typedef
struct
SLDataIter
{
SRBTreeNode
node
;
SSttBlk
*
pSttBlk
;
SDataFReader
*
pReader
;
int32_t
iStt
;
int8_t
backward
;
int32_t
iSttBlk
;
int32_t
iRow
;
SRowInfo
rInfo
;
uint64_t
uid
;
STimeWindow
timeWindow
;
SVersionRange
verRange
;
SSttBlockLoadInfo
*
pBlockLoadInfo
;
bool
ignoreEarlierTs
;
}
SLDataIter
;
#define tMergeTreeGetRow(_t) (&((_t)->pIter->rInfo.row))
int32_t
tMergeTreeOpen
(
SMergeTree
*
pMTree
,
int8_t
backward
,
SDataFReader
*
pFReader
,
uint64_t
suid
,
uint64_t
uid
,
STimeWindow
*
pTimeWindow
,
SVersionRange
*
pVerRange
,
SSttBlockLoadInfo
*
pBlockLoadInfo
,
bool
destroyLoadInfo
,
const
char
*
idStr
,
bool
strictTimeRange
);
bool
destroyLoadInfo
,
const
char
*
idStr
,
bool
strictTimeRange
,
SLDataIter
*
pLDataIter
);
void
tMergeTreeAddIter
(
SMergeTree
*
pMTree
,
SLDataIter
*
pIter
);
bool
tMergeTreeNext
(
SMergeTree
*
pMTree
);
bool
tMergeTreeIgnoreEarlierTs
(
SMergeTree
*
pMTree
);
TSDBROW
tMergeTreeGetRow
(
SMergeTree
*
pMTree
);
void
tMergeTreeClose
(
SMergeTree
*
pMTree
);
SSttBlockLoadInfo
*
tCreateLastBlockLoadInfo
(
STSchema
*
pSchema
,
int16_t
*
colList
,
int32_t
numOfCols
,
int32_t
numOfStt
);
...
...
@@ -782,6 +799,7 @@ typedef struct SCacheRowsReader {
STableKeyInfo
*
pTableList
;
// table id list
int32_t
numOfTables
;
SSttBlockLoadInfo
*
pLoadInfo
;
SLDataIter
*
pDataIter
;
STsdbReadSnap
*
pReadSnap
;
SDataFReader
*
pDataFReader
;
SDataFReader
*
pDataFReaderLast
;
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
2984c5a7
...
...
@@ -936,8 +936,7 @@ static int metaDropTableByUid(SMeta *pMeta, tb_uid_t uid, int *type) {
int
tLen
=
0
;
if
(
tdbTbGet
(
pMeta
->
pUidIdx
,
&
e
.
ctbEntry
.
suid
,
sizeof
(
tb_uid_t
),
&
tData
,
&
tLen
)
==
0
)
{
version
=
((
SUidIdxVal
*
)
tData
)[
0
].
version
;
STbDbKey
tbDbKey
=
{.
uid
=
e
.
ctbEntry
.
suid
,
.
version
=
version
};
STbDbKey
tbDbKey
=
{.
uid
=
e
.
ctbEntry
.
suid
,
.
version
=
((
SUidIdxVal
*
)
tData
)[
0
].
version
};
if
(
tdbTbGet
(
pMeta
->
pTbDb
,
&
tbDbKey
,
sizeof
(
tbDbKey
),
&
tData
,
&
tLen
)
==
0
)
{
SDecoder
tdc
=
{
0
};
SMetaEntry
stbEntry
=
{
0
};
...
...
source/dnode/vnode/src/sma/smaRollup.c
浏览文件 @
2984c5a7
...
...
@@ -684,7 +684,7 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma
}
if
(
pReq
&&
tdProcessSubmitReq
(
sinkTsdb
,
output
->
info
.
version
,
pReq
)
<
0
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
smaError
(
"vgId:%d, process submit req for rsma suid:%"
PRIu64
", uid:%"
PRIu64
" level %"
PRIi8
" failed since %s"
,
...
...
@@ -696,7 +696,7 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma
SMA_VID
(
pSma
),
suid
,
output
->
info
.
id
.
groupId
,
pItem
->
level
,
output
->
info
.
version
);
if
(
pReq
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
}
}
...
...
source/dnode/vnode/src/sma/smaTimeRange.c
浏览文件 @
2984c5a7
...
...
@@ -332,7 +332,7 @@ _end:
taosArrayDestroy
(
tagArray
);
taosArrayDestroy
(
pVals
);
if
(
pReq
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
}
...
...
source/dnode/vnode/src/tq/tq.c
浏览文件 @
2984c5a7
...
...
@@ -504,7 +504,7 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
pHandle
->
execHandle
.
pTqReader
=
qExtractReaderFromStreamScanner
(
scanner
);
}
else
if
(
pHandle
->
execHandle
.
subType
==
TOPIC_SUB_TYPE__DB
)
{
pHandle
->
pWalReader
=
walOpenReader
(
pVnode
->
pWal
,
NULL
);
pHandle
->
execHandle
.
pTqReader
=
tq
OpenReader
(
pVnode
);
pHandle
->
execHandle
.
pTqReader
=
tq
ReaderOpen
(
pVnode
);
pHandle
->
execHandle
.
execDb
.
pFilterOutTbUid
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
false
,
HASH_NO_LOCK
);
...
...
@@ -523,7 +523,7 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
int64_t
tbUid
=
*
(
int64_t
*
)
taosArrayGet
(
tbUidList
,
i
);
tqDebug
(
"vgId:%d, idx %d, uid:%"
PRId64
,
vgId
,
i
,
tbUid
);
}
pHandle
->
execHandle
.
pTqReader
=
tq
OpenReader
(
pVnode
);
pHandle
->
execHandle
.
pTqReader
=
tq
ReaderOpen
(
pVnode
);
tqReaderSetTbUidList
(
pHandle
->
execHandle
.
pTqReader
,
tbUidList
);
taosArrayDestroy
(
tbUidList
);
...
...
source/dnode/vnode/src/tq/tqMeta.c
浏览文件 @
2984c5a7
...
...
@@ -328,7 +328,7 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
}
}
else
if
(
handle
.
execHandle
.
subType
==
TOPIC_SUB_TYPE__DB
)
{
handle
.
pWalReader
=
walOpenReader
(
pTq
->
pVnode
->
pWal
,
NULL
);
handle
.
execHandle
.
pTqReader
=
tq
OpenReader
(
pTq
->
pVnode
);
handle
.
execHandle
.
pTqReader
=
tq
ReaderOpen
(
pTq
->
pVnode
);
buildSnapContext
(
reader
.
meta
,
reader
.
version
,
0
,
handle
.
execHandle
.
subType
,
handle
.
fetchMeta
,
(
SSnapContext
**
)(
&
reader
.
sContext
));
...
...
@@ -343,7 +343,7 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
int64_t
tbUid
=
*
(
int64_t
*
)
taosArrayGet
(
tbUidList
,
i
);
tqDebug
(
"vgId:%d, idx %d, uid:%"
PRId64
,
vgId
,
i
,
tbUid
);
}
handle
.
execHandle
.
pTqReader
=
tq
OpenReader
(
pTq
->
pVnode
);
handle
.
execHandle
.
pTqReader
=
tq
ReaderOpen
(
pTq
->
pVnode
);
tqReaderSetTbUidList
(
handle
.
execHandle
.
pTqReader
,
tbUidList
);
taosArrayDestroy
(
tbUidList
);
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
2984c5a7
...
...
@@ -249,7 +249,7 @@ END:
return
code
;
}
STqReader
*
tq
OpenReader
(
SVnode
*
pVnode
)
{
STqReader
*
tq
ReaderOpen
(
SVnode
*
pVnode
)
{
STqReader
*
pReader
=
taosMemoryCalloc
(
1
,
sizeof
(
STqReader
));
if
(
pReader
==
NULL
)
{
return
NULL
;
...
...
@@ -288,7 +288,7 @@ void tqCloseReader(STqReader* pReader) {
}
// free hash
taosHashCleanup
(
pReader
->
tbIdHash
);
tDestroySSubmitReq
2
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
tDestroySSubmitReq
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
taosMemoryFree
(
pReader
);
}
...
...
@@ -322,12 +322,11 @@ int32_t extractSubmitMsgFromWal(SWalReader* pReader, SPackedData* pPackedData) {
return
0
;
}
void
tqNextBlock
(
STqReader
*
pReader
,
SFetchRet
*
ret
)
{
int32_t
tqNextBlock
(
STqReader
*
pReader
,
SSDataBlock
*
pBlock
)
{
while
(
1
)
{
if
(
pReader
->
msg2
.
msgStr
==
NULL
)
{
if
(
walNextValidMsg
(
pReader
->
pWalReader
)
<
0
)
{
ret
->
fetchType
=
FETCH_TYPE__NONE
;
return
;
return
FETCH_TYPE__NONE
;
}
void
*
pBody
=
POINTER_SHIFT
(
pReader
->
pWalReader
->
pHead
->
head
.
body
,
sizeof
(
SSubmitReq2Msg
));
...
...
@@ -337,15 +336,14 @@ void tqNextBlock(STqReader* pReader, SFetchRet* ret) {
tqReaderSetSubmitMsg
(
pReader
,
pBody
,
bodyLen
,
ver
);
}
while
(
tqNext
DataBlock
(
pReader
))
{
memset
(
&
ret
->
data
,
0
,
sizeof
(
SSDataBlock
));
int32_t
code
=
tqRetrieveDataBlock
2
(
&
ret
->
data
,
pReader
,
NULL
);
if
(
code
!=
0
||
ret
->
data
.
info
.
rows
==
0
)
{
while
(
tqNext
BlockImpl
(
pReader
))
{
memset
(
pBlock
,
0
,
sizeof
(
SSDataBlock
));
int32_t
code
=
tqRetrieveDataBlock
(
pBlock
,
pReader
,
NULL
);
if
(
code
!=
TSDB_CODE_SUCCESS
||
pBlock
->
info
.
rows
==
0
)
{
continue
;
}
ret
->
fetchType
=
FETCH_TYPE__DATA
;
return
;
return
FETCH_TYPE__DATA
;
}
}
}
...
...
@@ -367,7 +365,7 @@ int32_t tqReaderSetSubmitMsg(STqReader* pReader, void* msgStr, int32_t msgLen, i
return
0
;
}
bool
tqNext
DataBlock
(
STqReader
*
pReader
)
{
bool
tqNext
BlockImpl
(
STqReader
*
pReader
)
{
if
(
pReader
->
msg2
.
msgStr
==
NULL
)
{
return
false
;
}
...
...
@@ -387,20 +385,20 @@ bool tqNextDataBlock(STqReader* pReader) {
tqDebug
(
"tq reader block found, ver:%"
PRId64
", uid:%"
PRId64
,
pReader
->
msg2
.
ver
,
pSubmitTbData
->
uid
);
return
true
;
}
else
{
tqDebug
(
"tq reader discard block, uid:%"
PRId64
", continue"
,
pSubmitTbData
->
uid
);
tqDebug
(
"tq reader discard
submit
block, uid:%"
PRId64
", continue"
,
pSubmitTbData
->
uid
);
}
pReader
->
nextBlk
++
;
}
tDestroySSubmitReq
2
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
tDestroySSubmitReq
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
pReader
->
nextBlk
=
0
;
pReader
->
msg2
.
msgStr
=
NULL
;
return
false
;
}
bool
tqNextDataBlockFilterOut
2
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
)
{
bool
tqNextDataBlockFilterOut
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
)
{
if
(
pReader
->
msg2
.
msgStr
==
NULL
)
return
false
;
int32_t
blockSz
=
taosArrayGetSize
(
pReader
->
submit
.
aSubmitTbData
);
...
...
@@ -415,7 +413,7 @@ bool tqNextDataBlockFilterOut2(STqReader* pReader, SHashObj* filterOutUids) {
pReader
->
nextBlk
++
;
}
tDestroySSubmitReq
2
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
tDestroySSubmitReq
(
&
pReader
->
submit
,
TSDB_MSG_FLG_DECODE
);
pReader
->
nextBlk
=
0
;
pReader
->
msg2
.
msgStr
=
NULL
;
...
...
@@ -451,7 +449,7 @@ int32_t tqMaskBlock(SSchemaWrapper* pDst, SSDataBlock* pBlock, const SSchemaWrap
return
0
;
}
int32_t
tqRetrieveDataBlock
2
(
SSDataBlock
*
pBlock
,
STqReader
*
pReader
,
SSubmitTbData
**
pSubmitTbDataRet
)
{
int32_t
tqRetrieveDataBlock
(
SSDataBlock
*
pBlock
,
STqReader
*
pReader
,
SSubmitTbData
**
pSubmitTbDataRet
)
{
tqDebug
(
"tq reader retrieve data block %p, index:%d"
,
pReader
->
msg2
.
msgStr
,
pReader
->
nextBlk
);
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
);
pReader
->
nextBlk
++
;
...
...
@@ -563,7 +561,7 @@ int32_t tqRetrieveDataBlock2(SSDataBlock* pBlock, STqReader* pReader, SSubmitTbD
int32_t
sourceIdx
=
0
;
while
(
targetIdx
<
colActual
)
{
if
(
sourceIdx
>=
numOfCols
){
tqError
(
"tqRetrieveDataBlock
2
sourceIdx:%d >= numOfCols:%d"
,
sourceIdx
,
numOfCols
);
tqError
(
"tqRetrieveDataBlock sourceIdx:%d >= numOfCols:%d"
,
sourceIdx
,
numOfCols
);
goto
FAIL
;
}
SColData
*
pCol
=
taosArrayGet
(
pCols
,
sourceIdx
);
...
...
@@ -571,7 +569,7 @@ int32_t tqRetrieveDataBlock2(SSDataBlock* pBlock, STqReader* pReader, SSubmitTbD
SColVal
colVal
;
if
(
pCol
->
nVal
!=
numOfRows
){
tqError
(
"tqRetrieveDataBlock
2
pCol->nVal:%d != numOfRows:%d"
,
pCol
->
nVal
,
numOfRows
);
tqError
(
"tqRetrieveDataBlock pCol->nVal:%d != numOfRows:%d"
,
pCol
->
nVal
,
numOfRows
);
goto
FAIL
;
}
...
...
@@ -658,7 +656,7 @@ FAIL:
return
-
1
;
}
int32_t
tqRetrieveTaosxBlock
2
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
)
{
int32_t
tqRetrieveTaosxBlock
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
)
{
tqDebug
(
"tq reader retrieve data block %p, %d"
,
pReader
->
msg2
.
msgStr
,
pReader
->
nextBlk
);
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
);
...
...
source/dnode/vnode/src/tq/tqScan.c
浏览文件 @
2984c5a7
...
...
@@ -74,7 +74,6 @@ int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffs
qTaskInfo_t
task
=
pExec
->
task
;
if
(
qStreamPrepareScan
(
task
,
pOffset
,
pHandle
->
execHandle
.
subType
)
<
0
)
{
tqError
(
"prepare scan failed, return"
);
return
-
1
;
}
...
...
@@ -119,7 +118,6 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqMeta
qTaskInfo_t
task
=
pExec
->
task
;
if
(
qStreamPrepareScan
(
task
,
pOffset
,
pHandle
->
execHandle
.
subType
)
<
0
)
{
tqDebug
(
"tqScanTaosx prepare scan failed, return"
);
return
-
1
;
}
...
...
@@ -205,11 +203,11 @@ int32_t tqTaosxScanLog(STQ* pTq, STqHandle* pHandle, SPackedData submit, STaosxR
if
(
pExec
->
subType
==
TOPIC_SUB_TYPE__TABLE
)
{
STqReader
*
pReader
=
pExec
->
pTqReader
;
tqReaderSetSubmitMsg
(
pReader
,
submit
.
msgStr
,
submit
.
msgLen
,
submit
.
ver
);
while
(
tqNext
DataBlock
(
pReader
))
{
while
(
tqNext
BlockImpl
(
pReader
))
{
taosArrayClear
(
pBlocks
);
taosArrayClear
(
pSchemas
);
SSubmitTbData
*
pSubmitTbDataRet
=
NULL
;
if
(
tqRetrieveTaosxBlock
2
(
pReader
,
pBlocks
,
pSchemas
,
&
pSubmitTbDataRet
)
<
0
)
{
if
(
tqRetrieveTaosxBlock
(
pReader
,
pBlocks
,
pSchemas
,
&
pSubmitTbDataRet
)
<
0
)
{
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
}
if
(
pRsp
->
withTbName
)
{
...
...
@@ -264,11 +262,11 @@ int32_t tqTaosxScanLog(STQ* pTq, STqHandle* pHandle, SPackedData submit, STaosxR
}
else
if
(
pExec
->
subType
==
TOPIC_SUB_TYPE__DB
)
{
STqReader
*
pReader
=
pExec
->
pTqReader
;
tqReaderSetSubmitMsg
(
pReader
,
submit
.
msgStr
,
submit
.
msgLen
,
submit
.
ver
);
while
(
tqNextDataBlockFilterOut
2
(
pReader
,
pExec
->
execDb
.
pFilterOutTbUid
))
{
while
(
tqNextDataBlockFilterOut
(
pReader
,
pExec
->
execDb
.
pFilterOutTbUid
))
{
taosArrayClear
(
pBlocks
);
taosArrayClear
(
pSchemas
);
SSubmitTbData
*
pSubmitTbDataRet
=
NULL
;
if
(
tqRetrieveTaosxBlock
2
(
pReader
,
pBlocks
,
pSchemas
,
&
pSubmitTbDataRet
)
<
0
)
{
if
(
tqRetrieveTaosxBlock
(
pReader
,
pBlocks
,
pSchemas
,
&
pSubmitTbDataRet
)
<
0
)
{
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
}
if
(
pRsp
->
withTbName
)
{
...
...
source/dnode/vnode/src/tq/tqSink.c
浏览文件 @
2984c5a7
...
...
@@ -444,7 +444,7 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
len
+=
sizeof
(
SSubmitReq2Msg
);
pBuf
=
rpcMallocCont
(
len
);
if
(
NULL
==
pBuf
)
{
tDestroySSubmitReq
2
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
goto
_end
;
}
((
SSubmitReq2Msg
*
)
pBuf
)
->
header
.
vgId
=
TD_VID
(
pVnode
);
...
...
@@ -456,11 +456,11 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
tqError
(
"failed to encode submit req since %s"
,
terrstr
());
tEncoderClear
(
&
encoder
);
rpcFreeCont
(
pBuf
);
tDestroySSubmitReq
2
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
continue
;
}
tEncoderClear
(
&
encoder
);
tDestroySSubmitReq
2
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
&
submitReq
,
TSDB_MSG_FLG_ENCODE
);
SRpcMsg
msg
=
{
.
msgType
=
TDMT_VND_SUBMIT
,
...
...
source/dnode/vnode/src/tsdb/tsdbCache.c
浏览文件 @
2984c5a7
...
...
@@ -598,6 +598,7 @@ typedef struct {
SMergeTree
mergeTree
;
SMergeTree
*
pMergeTree
;
SSttBlockLoadInfo
*
pLoadInfo
;
SLDataIter
*
pDataIter
;
int64_t
lastTs
;
}
SFSLastNextRowIter
;
...
...
@@ -645,7 +646,7 @@ static int32_t getNextRowFromFSLast(void *iter, TSDBROW **ppRow, bool *pIgnoreEa
}
tMergeTreeOpen
(
&
state
->
mergeTree
,
1
,
*
state
->
pDataFReader
,
state
->
suid
,
state
->
uid
,
&
(
STimeWindow
){.
skey
=
state
->
lastTs
,
.
ekey
=
TSKEY_MAX
},
&
(
SVersionRange
){.
minVer
=
0
,
.
maxVer
=
UINT64_MAX
},
state
->
pLoadInfo
,
false
,
NULL
,
true
);
&
(
SVersionRange
){.
minVer
=
0
,
.
maxVer
=
UINT64_MAX
},
state
->
pLoadInfo
,
false
,
NULL
,
true
,
state
->
pDataIter
);
state
->
pMergeTree
=
&
state
->
mergeTree
;
state
->
state
=
SFSLASTNEXTROW_BLOCKROW
;
}
...
...
@@ -667,7 +668,7 @@ static int32_t getNextRowFromFSLast(void *iter, TSDBROW **ppRow, bool *pIgnoreEa
state
->
state
=
SFSLASTNEXTROW_FILESET
;
goto
_next_fileset
;
}
state
->
row
=
tMergeTreeGetRow
(
&
state
->
mergeTree
);
state
->
row
=
*
tMergeTreeGetRow
(
&
state
->
mergeTree
);
*
ppRow
=
&
state
->
row
;
if
(
TSDBROW_TS
(
&
state
->
row
)
<=
state
->
lastTs
)
{
...
...
@@ -1211,7 +1212,7 @@ typedef struct {
}
CacheNextRowIter
;
static
int32_t
nextRowIterOpen
(
CacheNextRowIter
*
pIter
,
tb_uid_t
uid
,
STsdb
*
pTsdb
,
STSchema
*
pTSchema
,
tb_uid_t
suid
,
SSttBlockLoadInfo
*
pLoadInfo
,
STsdbReadSnap
*
pReadSnap
,
SDataFReader
**
pDataFReader
,
SSttBlockLoadInfo
*
pLoadInfo
,
S
LDataIter
*
pLDataIter
,
S
TsdbReadSnap
*
pReadSnap
,
SDataFReader
**
pDataFReader
,
SDataFReader
**
pDataFReaderLast
,
int64_t
lastTs
)
{
int
code
=
0
;
...
...
@@ -1274,6 +1275,7 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs
pIter
->
fsLastState
.
pLoadInfo
=
pLoadInfo
;
pIter
->
fsLastState
.
pDataFReader
=
pDataFReaderLast
;
pIter
->
fsLastState
.
lastTs
=
lastTs
;
pIter
->
fsLastState
.
pDataIter
=
pLDataIter
;
pIter
->
fsState
.
state
=
SFSNEXTROW_FS
;
pIter
->
fsState
.
pTsdb
=
pTsdb
;
...
...
@@ -1465,7 +1467,7 @@ static int32_t mergeLastRow(tb_uid_t uid, STsdb *pTsdb, bool *dup, SArray **ppCo
TSKEY
lastRowTs
=
TSKEY_MAX
;
CacheNextRowIter
iter
=
{
0
};
nextRowIterOpen
(
&
iter
,
uid
,
pTsdb
,
pTSchema
,
pr
->
suid
,
pr
->
pLoadInfo
,
pr
->
pReadSnap
,
&
pr
->
pDataFReader
,
nextRowIterOpen
(
&
iter
,
uid
,
pTsdb
,
pTSchema
,
pr
->
suid
,
pr
->
pLoadInfo
,
pr
->
p
DataIter
,
pr
->
p
ReadSnap
,
&
pr
->
pDataFReader
,
&
pr
->
pDataFReaderLast
,
pr
->
lastTs
);
do
{
...
...
@@ -1622,7 +1624,7 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCach
TSKEY
lastRowTs
=
TSKEY_MAX
;
CacheNextRowIter
iter
=
{
0
};
nextRowIterOpen
(
&
iter
,
uid
,
pTsdb
,
pTSchema
,
pr
->
suid
,
pr
->
pLoadInfo
,
pr
->
pReadSnap
,
&
pr
->
pDataFReader
,
nextRowIterOpen
(
&
iter
,
uid
,
pTsdb
,
pTSchema
,
pr
->
suid
,
pr
->
pLoadInfo
,
pr
->
p
DataIter
,
pr
->
p
ReadSnap
,
&
pr
->
pDataFReader
,
&
pr
->
pDataFReaderLast
,
pr
->
lastTs
);
do
{
...
...
source/dnode/vnode/src/tsdb/tsdbCacheRead.c
浏览文件 @
2984c5a7
...
...
@@ -187,13 +187,21 @@ int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList,
}
}
int32_t
numOfStt
=
((
SVnode
*
)
pVnode
)
->
config
.
sttTrigger
;
SVnodeCfg
*
pCfg
=
&
((
SVnode
*
)
pVnode
)
->
config
;
int32_t
numOfStt
=
pCfg
->
sttTrigger
;
p
->
pLoadInfo
=
tCreateLastBlockLoadInfo
(
p
->
pSchema
,
NULL
,
0
,
numOfStt
);
if
(
p
->
pLoadInfo
==
NULL
)
{
tsdbCacherowsReaderClose
(
p
);
return
TSDB_CODE_OUT_OF_MEMORY
;
}
p
->
pDataIter
=
taosMemoryCalloc
(
pCfg
->
sttTrigger
,
sizeof
(
SLDataIter
));
if
(
p
->
pDataIter
==
NULL
)
{
tsdbCacherowsReaderClose
(
p
);
return
TSDB_CODE_OUT_OF_MEMORY
;
}
p
->
idstr
=
taosStrdup
(
idstr
);
taosThreadMutexInit
(
&
p
->
readerMutex
,
NULL
);
...
...
@@ -215,6 +223,7 @@ void* tsdbCacherowsReaderClose(void* pReader) {
taosMemoryFree
(
p
->
pSchema
);
}
taosMemoryFreeClear
(
p
->
pDataIter
);
taosMemoryFree
(
p
->
pCurrSchema
);
destroyLastBlockLoadInfo
(
p
->
pLoadInfo
);
...
...
source/dnode/vnode/src/tsdb/tsdbDataIter.c
浏览文件 @
2984c5a7
...
...
@@ -14,6 +14,7 @@
*/
#include "tsdb.h"
#include "vnodeInt.h"
// STsdbDataIter2
/* open */
...
...
@@ -202,13 +203,6 @@ static int32_t tsdbDataFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo*
for
(;;)
{
while
(
pIter
->
dIter
.
iRow
<
pIter
->
dIter
.
bData
.
nRow
)
{
if
(
pFilterInfo
)
{
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_TABLEID
)
{
if
(
pFilterInfo
->
tbid
.
uid
==
pIter
->
dIter
.
bData
.
uid
)
{
pIter
->
dIter
.
iRow
=
pIter
->
dIter
.
bData
.
nRow
;
continue
;
}
}
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_VERSION
)
{
if
(
pIter
->
dIter
.
bData
.
aVersion
[
pIter
->
dIter
.
iRow
]
<
pFilterInfo
->
sver
||
pIter
->
dIter
.
bData
.
aVersion
[
pIter
->
dIter
.
iRow
]
>
pFilterInfo
->
ever
)
{
...
...
@@ -232,13 +226,6 @@ static int32_t tsdbDataFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo*
// filter
if
(
pFilterInfo
)
{
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_TABLEID
)
{
if
(
tTABLEIDCmprFn
(
&
pFilterInfo
->
tbid
,
&
pIter
->
rowInfo
)
==
0
)
{
pIter
->
dIter
.
iDataBlk
=
pIter
->
dIter
.
mDataBlk
.
nItem
;
continue
;
}
}
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_VERSION
)
{
if
(
pFilterInfo
->
sver
>
dataBlk
.
maxVer
||
pFilterInfo
->
ever
<
dataBlk
.
minVer
)
{
pIter
->
dIter
.
iDataBlk
++
;
...
...
@@ -262,13 +249,23 @@ static int32_t tsdbDataFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo*
if
(
pIter
->
dIter
.
iBlockIdx
<
taosArrayGetSize
(
pIter
->
dIter
.
aBlockIdx
))
{
SBlockIdx
*
pBlockIdx
=
taosArrayGet
(
pIter
->
dIter
.
aBlockIdx
,
pIter
->
dIter
.
iBlockIdx
);
if
(
pFilterInfo
&&
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_TABLEID
))
{
int32_t
c
=
tTABLEIDCmprFn
(
pBlockIdx
,
&
pFilterInfo
->
tbid
);
if
(
c
==
0
)
{
pIter
->
dIter
.
iBlockIdx
++
;
continue
;
}
else
if
(
c
<
0
)
{
ASSERT
(
0
);
if
(
pFilterInfo
)
{
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_TABLEID
)
{
int32_t
c
=
tTABLEIDCmprFn
(
pBlockIdx
,
&
pFilterInfo
->
tbid
);
if
(
c
==
0
)
{
pIter
->
dIter
.
iBlockIdx
++
;
continue
;
}
else
if
(
c
<
0
)
{
ASSERT
(
0
);
}
}
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
)
{
SMetaInfo
info
;
if
(
metaGetInfo
(
pIter
->
dIter
.
pReader
->
pTsdb
->
pVnode
->
pMeta
,
pBlockIdx
->
uid
,
&
info
,
NULL
))
{
pIter
->
dIter
.
iBlockIdx
++
;
continue
;
}
}
}
...
...
@@ -304,14 +301,24 @@ static int32_t tsdbSttFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo* p
for
(;;)
{
while
(
pIter
->
sIter
.
iRow
<
pIter
->
sIter
.
bData
.
nRow
)
{
if
(
pFilterInfo
)
{
int64_t
uid
=
pIter
->
sIter
.
bData
.
uid
?
pIter
->
sIter
.
bData
.
uid
:
pIter
->
sIter
.
bData
.
aUid
[
pIter
->
sIter
.
iRow
];
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_TABLEID
)
{
int64_t
uid
=
pIter
->
sIter
.
bData
.
uid
?
pIter
->
sIter
.
bData
.
uid
:
pIter
->
sIter
.
bData
.
aUid
[
pIter
->
sIter
.
iRow
];
if
(
pFilterInfo
->
tbid
.
uid
==
uid
)
{
pIter
->
sIter
.
iRow
++
;
continue
;
}
}
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
)
{
if
(
pIter
->
rowInfo
.
uid
!=
uid
)
{
SMetaInfo
info
;
if
(
metaGetInfo
(
pIter
->
sIter
.
pReader
->
pTsdb
->
pVnode
->
pMeta
,
uid
,
&
info
,
NULL
))
{
pIter
->
sIter
.
iRow
++
;
continue
;
}
}
}
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_BY_VERSION
)
{
if
(
pFilterInfo
->
sver
>
pIter
->
sIter
.
bData
.
aVersion
[
pIter
->
sIter
.
iRow
]
||
pFilterInfo
->
ever
<
pIter
->
sIter
.
bData
.
aVersion
[
pIter
->
sIter
.
iRow
])
{
...
...
@@ -395,6 +402,16 @@ static int32_t tsdbTombFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo*
if
(
pIter
->
tIter
.
iDelIdx
<
taosArrayGetSize
(
pIter
->
tIter
.
aDelIdx
))
{
SDelIdx
*
pDelIdx
=
taosArrayGet
(
pIter
->
tIter
.
aDelIdx
,
pIter
->
tIter
.
iDelIdx
);
if
(
pFilterInfo
)
{
if
(
pFilterInfo
->
flag
&
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
)
{
SMetaInfo
info
;
if
(
metaGetInfo
(
pIter
->
dIter
.
pReader
->
pTsdb
->
pVnode
->
pMeta
,
pDelIdx
->
uid
,
&
info
,
NULL
))
{
pIter
->
tIter
.
iDelIdx
++
;
continue
;
}
}
}
code
=
tsdbReadDelData
(
pIter
->
tIter
.
pReader
,
pDelIdx
,
pIter
->
tIter
.
aDelData
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
...
...
source/dnode/vnode/src/tsdb/tsdbMemTable.c
浏览文件 @
2984c5a7
...
...
@@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <util/tsimplehash.h>
#include "tsdb.h"
#define MEM_MIN_HASH 1024
...
...
@@ -298,12 +299,12 @@ int64_t tsdbCountTbDataRows(STbData *pTbData) {
return
rowsNum
;
}
void
tsdbMemTableCountRows
(
SMemTable
*
pMemTable
,
S
HashObj
*
pTableMap
,
int64_t
*
rowsNum
)
{
void
tsdbMemTableCountRows
(
SMemTable
*
pMemTable
,
S
SHashObj
*
pTableMap
,
int64_t
*
rowsNum
)
{
taosRLockLatch
(
&
pMemTable
->
latch
);
for
(
int32_t
i
=
0
;
i
<
pMemTable
->
nBucket
;
++
i
)
{
STbData
*
pTbData
=
pMemTable
->
aBucket
[
i
];
while
(
pTbData
)
{
void
*
p
=
t
aos
HashGet
(
pTableMap
,
&
pTbData
->
uid
,
sizeof
(
pTbData
->
uid
));
void
*
p
=
t
Simple
HashGet
(
pTableMap
,
&
pTbData
->
uid
,
sizeof
(
pTbData
->
uid
));
if
(
p
==
NULL
)
{
pTbData
=
pTbData
->
next
;
continue
;
...
...
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
浏览文件 @
2984c5a7
...
...
@@ -16,22 +16,6 @@
#include "tsdb.h"
// SLDataIter =================================================
struct
SLDataIter
{
SRBTreeNode
node
;
SSttBlk
*
pSttBlk
;
SDataFReader
*
pReader
;
int32_t
iStt
;
int8_t
backward
;
int32_t
iSttBlk
;
int32_t
iRow
;
SRowInfo
rInfo
;
uint64_t
uid
;
STimeWindow
timeWindow
;
SVersionRange
verRange
;
SSttBlockLoadInfo
*
pBlockLoadInfo
;
bool
ignoreEarlierTs
;
};
SSttBlockLoadInfo
*
tCreateLastBlockLoadInfo
(
STSchema
*
pSchema
,
int16_t
*
colList
,
int32_t
numOfCols
,
int32_t
numOfSttTrigger
)
{
SSttBlockLoadInfo
*
pLoadInfo
=
taosMemoryCalloc
(
numOfSttTrigger
,
sizeof
(
SSttBlockLoadInfo
));
...
...
@@ -268,25 +252,21 @@ static int32_t binarySearchForStartRowIndex(uint64_t *uidList, int32_t num, uint
}
}
int32_t
tLDataIterOpen
(
struct
SLDataIter
*
*
pIter
,
SDataFReader
*
pReader
,
int32_t
iStt
,
int8_t
backward
,
uint64_t
suid
,
int32_t
tLDataIterOpen
(
struct
SLDataIter
*
pIter
,
SDataFReader
*
pReader
,
int32_t
iStt
,
int8_t
backward
,
uint64_t
suid
,
uint64_t
uid
,
STimeWindow
*
pTimeWindow
,
SVersionRange
*
pRange
,
SSttBlockLoadInfo
*
pBlockLoadInfo
,
const
char
*
idStr
,
bool
strictTimeRange
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
*
pIter
=
taosMemoryCalloc
(
1
,
sizeof
(
SLDataIter
));
if
(
*
pIter
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
pIter
->
uid
=
uid
;
pIter
->
pReader
=
pReader
;
pIter
->
iStt
=
iStt
;
pIter
->
backward
=
backward
;
pIter
->
verRange
.
minVer
=
pRange
->
minVer
;
pIter
->
verRange
.
maxVer
=
pRange
->
maxVer
;
pIter
->
timeWindow
.
skey
=
pTimeWindow
->
skey
;
pIter
->
timeWindow
.
ekey
=
pTimeWindow
->
ekey
;
(
*
pIter
)
->
uid
=
uid
;
(
*
pIter
)
->
pReader
=
pReader
;
(
*
pIter
)
->
iStt
=
iStt
;
(
*
pIter
)
->
backward
=
backward
;
(
*
pIter
)
->
verRange
=
*
pRange
;
(
*
pIter
)
->
timeWindow
=
*
pTimeWindow
;
(
*
pIter
)
->
pBlockLoadInfo
=
pBlockLoadInfo
;
pIter
->
pBlockLoadInfo
=
pBlockLoadInfo
;
if
(
!
pBlockLoadInfo
->
sttBlockLoaded
)
{
int64_t
st
=
taosGetTimestampUs
();
...
...
@@ -294,7 +274,7 @@ int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t
code
=
tsdbReadSttBlk
(
pReader
,
iStt
,
pBlockLoadInfo
->
aSttBlk
);
if
(
code
)
{
goto
_exit
;
return
code
;
}
// only apply to the child tables, ordinary tables will not incur this filter procedure.
...
...
@@ -310,7 +290,7 @@ int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t
// no qualified stt block existed
taosArrayClear
(
pBlockLoadInfo
->
aSttBlk
);
(
*
pIter
)
->
iSttBlk
=
-
1
;
pIter
->
iSttBlk
=
-
1
;
double
el
=
(
taosGetTimestampUs
()
-
st
)
/
1000
.
0
;
tsdbDebug
(
"load the last file info completed, elapsed time:%.2fms, %s"
,
el
,
idStr
);
return
code
;
...
...
@@ -343,31 +323,27 @@ int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t
size_t
size
=
taosArrayGetSize
(
pBlockLoadInfo
->
aSttBlk
);
// find the start block
(
*
pIter
)
->
iSttBlk
=
binarySearchForStartBlock
(
pBlockLoadInfo
->
aSttBlk
->
pData
,
size
,
uid
,
backward
);
if
(
(
*
pIter
)
->
iSttBlk
!=
-
1
)
{
(
*
pIter
)
->
pSttBlk
=
taosArrayGet
(
pBlockLoadInfo
->
aSttBlk
,
(
*
pIter
)
->
iSttBlk
);
(
*
pIter
)
->
iRow
=
((
*
pIter
)
->
backward
)
?
(
*
pIter
)
->
pSttBlk
->
nRow
:
-
1
;
if
((
!
backward
)
&&
((
strictTimeRange
&&
(
*
pIter
)
->
pSttBlk
->
minKey
>=
(
*
pIter
)
->
timeWindow
.
ekey
)
||
(
!
strictTimeRange
&&
(
*
pIter
)
->
pSttBlk
->
minKey
>
(
*
pIter
)
->
timeWindow
.
ekey
)))
{
(
*
pIter
)
->
pSttBlk
=
NULL
;
pIter
->
iSttBlk
=
binarySearchForStartBlock
(
pBlockLoadInfo
->
aSttBlk
->
pData
,
size
,
uid
,
backward
);
if
(
pIter
->
iSttBlk
!=
-
1
)
{
pIter
->
pSttBlk
=
taosArrayGet
(
pBlockLoadInfo
->
aSttBlk
,
pIter
->
iSttBlk
);
pIter
->
iRow
=
(
pIter
->
backward
)
?
pIter
->
pSttBlk
->
nRow
:
-
1
;
if
((
!
backward
)
&&
((
strictTimeRange
&&
pIter
->
pSttBlk
->
minKey
>=
pIter
->
timeWindow
.
ekey
)
||
(
!
strictTimeRange
&&
pIter
->
pSttBlk
->
minKey
>
pIter
->
timeWindow
.
ekey
)))
{
pIter
->
pSttBlk
=
NULL
;
}
if
(
backward
&&
((
strictTimeRange
&&
(
*
pIter
)
->
pSttBlk
->
maxKey
<=
(
*
pIter
)
->
timeWindow
.
skey
)
||
(
!
strictTimeRange
&&
(
*
pIter
)
->
pSttBlk
->
maxKey
<
(
*
pIter
)
->
timeWindow
.
skey
)))
{
(
*
pIter
)
->
pSttBlk
=
NULL
;
(
*
pIter
)
->
ignoreEarlierTs
=
true
;
if
(
backward
&&
((
strictTimeRange
&&
pIter
->
pSttBlk
->
maxKey
<=
pIter
->
timeWindow
.
skey
)
||
(
!
strictTimeRange
&&
pIter
->
pSttBlk
->
maxKey
<
pIter
->
timeWindow
.
skey
)))
{
pIter
->
pSttBlk
=
NULL
;
pIter
->
ignoreEarlierTs
=
true
;
}
}
return
code
;
_exit:
taosMemoryFree
(
*
pIter
);
return
code
;
}
void
tLDataIterClose
(
SLDataIter
*
pIter
)
{
taosMemoryFree
(
pIter
);
}
void
tLDataIterClose
(
SLDataIter
*
pIter
)
{
/*taosMemoryFree(pIter); */
}
void
tLDataIterNextBlock
(
SLDataIter
*
pIter
,
const
char
*
idStr
)
{
int32_t
step
=
pIter
->
backward
?
-
1
:
1
;
...
...
@@ -594,43 +570,38 @@ static FORCE_INLINE int32_t tLDataIterDescCmprFn(const SRBTreeNode *p1, const SR
int32_t
tMergeTreeOpen
(
SMergeTree
*
pMTree
,
int8_t
backward
,
SDataFReader
*
pFReader
,
uint64_t
suid
,
uint64_t
uid
,
STimeWindow
*
pTimeWindow
,
SVersionRange
*
pVerRange
,
SSttBlockLoadInfo
*
pBlockLoadInfo
,
bool
destroyLoadInfo
,
const
char
*
idStr
,
bool
strictTimeRange
)
{
bool
destroyLoadInfo
,
const
char
*
idStr
,
bool
strictTimeRange
,
SLDataIter
*
pLDataIter
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
pMTree
->
backward
=
backward
;
pMTree
->
pIter
=
NULL
;
pMTree
->
pIterList
=
taosArrayInit
(
4
,
POINTER_BYTES
);
if
(
pMTree
->
pIterList
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pMTree
->
idStr
=
idStr
;
if
(
!
pMTree
->
backward
)
{
// asc
tRBTreeCreate
(
&
pMTree
->
rbt
,
tLDataIterCmprFn
);
}
else
{
// desc
tRBTreeCreate
(
&
pMTree
->
rbt
,
tLDataIterDescCmprFn
);
}
int32_t
code
=
TSDB_CODE_SUCCESS
;
pMTree
->
pLoadInfo
=
pBlockLoadInfo
;
pMTree
->
destroyLoadInfo
=
destroyLoadInfo
;
pMTree
->
ignoreEarlierTs
=
false
;
for
(
int32_t
i
=
0
;
i
<
pFReader
->
pSet
->
nSttF
;
++
i
)
{
// open all last file
struct
SLDataIter
*
pIter
=
NULL
;
code
=
tLDataIterOpen
(
&
p
Iter
,
pFReader
,
i
,
pMTree
->
backward
,
suid
,
uid
,
pTimeWindow
,
pVerRange
,
memset
(
&
pLDataIter
[
i
],
0
,
sizeof
(
SLDataIter
))
;
code
=
tLDataIterOpen
(
&
p
LDataIter
[
i
]
,
pFReader
,
i
,
pMTree
->
backward
,
suid
,
uid
,
pTimeWindow
,
pVerRange
,
&
pMTree
->
pLoadInfo
[
i
],
pMTree
->
idStr
,
strictTimeRange
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_end
;
}
bool
hasVal
=
tLDataIterNextRow
(
pIter
,
pMTree
->
idStr
);
bool
hasVal
=
tLDataIterNextRow
(
&
pLDataIter
[
i
]
,
pMTree
->
idStr
);
if
(
hasVal
)
{
taosArrayPush
(
pMTree
->
pIterList
,
&
pIter
);
tMergeTreeAddIter
(
pMTree
,
pIter
);
tMergeTreeAddIter
(
pMTree
,
&
pLDataIter
[
i
]);
}
else
{
if
(
!
pMTree
->
ignoreEarlierTs
)
{
pMTree
->
ignoreEarlierTs
=
p
Iter
->
ignoreEarlierTs
;
pMTree
->
ignoreEarlierTs
=
p
LDataIter
[
i
].
ignoreEarlierTs
;
}
tLDataIterClose
(
pIter
);
}
}
...
...
@@ -678,18 +649,8 @@ bool tMergeTreeNext(SMergeTree *pMTree) {
return
pMTree
->
pIter
!=
NULL
;
}
TSDBROW
tMergeTreeGetRow
(
SMergeTree
*
pMTree
)
{
return
pMTree
->
pIter
->
rInfo
.
row
;
}
void
tMergeTreeClose
(
SMergeTree
*
pMTree
)
{
size_t
size
=
taosArrayGetSize
(
pMTree
->
pIterList
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SLDataIter
*
pIter
=
taosArrayGetP
(
pMTree
->
pIterList
,
i
);
tLDataIterClose
(
pIter
);
}
pMTree
->
pIterList
=
taosArrayDestroy
(
pMTree
->
pIterList
);
pMTree
->
pIter
=
NULL
;
if
(
pMTree
->
destroyLoadInfo
)
{
pMTree
->
pLoadInfo
=
destroyLastBlockLoadInfo
(
pMTree
->
pLoadInfo
);
pMTree
->
destroyLoadInfo
=
false
;
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
浏览文件 @
2984c5a7
...
...
@@ -70,10 +70,11 @@ static int32_t tsdbSnapReadFileDataStart(STsdbSnapReader* pReader) {
if
(
pReader
->
pIter
)
{
// iter to next with filter info (sver, ever)
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
,
// flag
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
|
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
,
// flag
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
pReader
->
pIter
->
rowInfo
.
suid
||
pReader
->
pIter
->
rowInfo
.
uid
)
{
...
...
@@ -94,10 +95,11 @@ static int32_t tsdbSnapReadFileDataStart(STsdbSnapReader* pReader) {
if
(
pReader
->
pIter
)
{
// iter to valid row
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
,
// flag
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
|
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
,
// flag
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
pReader
->
pIter
->
rowInfo
.
suid
||
pReader
->
pIter
->
rowInfo
.
uid
)
{
...
...
@@ -139,7 +141,8 @@ static int32_t tsdbSnapReadNextRow(STsdbSnapReader* pReader, SRowInfo** ppRowInf
int32_t
lino
=
0
;
if
(
pReader
->
pIter
)
{
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
,
// flag
code
=
tsdbDataIterNext2
(
pReader
->
pIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
|
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
,
// flag
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
...
...
@@ -346,8 +349,9 @@ static int32_t tsdbSnapReadNextTombData(STsdbSnapReader* pReader, SDelInfo** ppD
int32_t
lino
=
0
;
code
=
tsdbDataIterNext2
(
pReader
->
pTIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
,
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
pReader
->
pTIter
,
&
(
STsdbFilterInfo
){.
flag
=
TSDB_FILTER_FLAG_BY_VERSION
|
TSDB_FILTER_FLAG_IGNORE_DROPPED_TABLE
,
.
sver
=
pReader
->
sver
,
.
ever
=
pReader
->
ever
});
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
ppDelInfo
)
{
...
...
source/dnode/vnode/src/tsdb/tsdbUtil.c
浏览文件 @
2984c5a7
...
...
@@ -637,200 +637,144 @@ SColVal *tsdbRowIterNext(STSDBRowIter *pIter) {
}
// SRowMerger ======================================================
int32_t
tsdbRowMergerInit
(
SRowMerger
*
pMerger
,
STSchema
*
pResTSchema
,
TSDBROW
*
pRow
,
STSchema
*
pTSchema
)
{
int32_t
tsdbRowMergerAdd
(
SRowMerger
*
pMerger
,
TSDBROW
*
pRow
,
STSchema
*
pTSchema
)
{
int32_t
code
=
0
;
TSDBKEY
key
=
TSDBROW_KEY
(
pRow
);
SColVal
*
pColVal
=
&
(
SColVal
){
0
};
SColVal
*
pColVal
=
&
(
SColVal
){
0
};
STColumn
*
pTColumn
;
int32_t
iCol
,
jCol
=
0
;
if
(
NULL
==
pResTSchema
)
{
pResTSchema
=
pTSchema
;
}
pMerger
->
pTSchema
=
pResTSchema
;
pMerger
->
version
=
key
.
version
;
pMerger
->
pArray
=
taosArrayInit
(
pResTSchema
->
numOfCols
,
sizeof
(
SColVal
));
if
(
pMerger
->
pArray
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
// ts
pTColumn
=
&
pTSchema
->
columns
[
jCol
++
];
ASSERT
(
pTColumn
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
int32_t
iCol
,
jCol
=
1
;
*
pColVal
=
COL_VAL_VALUE
(
pTColumn
->
colId
,
pTColumn
->
type
,
(
SValue
){.
val
=
key
.
ts
});
if
(
taosArrayPush
(
pMerger
->
pArray
,
pColVal
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
if
(
NULL
==
pTSchema
)
{
pTSchema
=
pMerger
->
pTSchema
;
}
// other
for
(
iCol
=
1
;
jCol
<
pTSchema
->
numOfCols
&&
iCol
<
pResTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pResTSchema
->
columns
[
iCol
];
if
(
pTSchema
->
columns
[
jCol
].
colId
<
pTColumn
->
colId
)
{
++
jCol
;
--
iCol
;
continue
;
}
else
if
(
pTSchema
->
columns
[
jCol
].
colId
>
pTColumn
->
colId
)
{
taosArrayPush
(
pMerger
->
pArray
,
&
COL_VAL_NONE
(
pTColumn
->
colId
,
pTColumn
->
type
));
continue
;
}
tsdbRowGetColVal
(
pRow
,
pTSchema
,
jCol
++
,
pColVal
);
if
((
!
COL_VAL_IS_NONE
(
pColVal
))
&&
(
!
COL_VAL_IS_NULL
(
pColVal
))
&&
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
uint8_t
*
pVal
=
pColVal
->
value
.
pData
;
if
(
taosArrayGetSize
(
pMerger
->
pArray
)
==
0
)
{
// ts
jCol
=
0
;
pTColumn
=
&
pTSchema
->
columns
[
jCol
++
];
pColVal
->
value
.
pData
=
NULL
;
code
=
tRealloc
(
&
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
goto
_exit
;
if
(
pColVal
->
value
.
nData
)
{
memcpy
(
pColVal
->
value
.
pData
,
pVal
,
pColVal
->
value
.
nData
);
}
}
ASSERT
(
pTColumn
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
*
pColVal
=
COL_VAL_VALUE
(
pTColumn
->
colId
,
pTColumn
->
type
,
(
SValue
){.
val
=
key
.
ts
});
if
(
taosArrayPush
(
pMerger
->
pArray
,
pColVal
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
return
code
;
// goto _exit;
}
}
for
(;
iCol
<
pResTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pResTSchema
->
columns
[
iCol
];
taosArrayPush
(
pMerger
->
pArray
,
&
COL_VAL_NONE
(
pTColumn
->
colId
,
pTColumn
->
type
));
}
// other
for
(
iCol
=
1
;
jCol
<
pTSchema
->
numOfCols
&&
iCol
<
pMerger
->
pTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pMerger
->
pTSchema
->
columns
[
iCol
];
if
(
pTSchema
->
columns
[
jCol
].
colId
<
pTColumn
->
colId
)
{
++
jCol
;
--
iCol
;
continue
;
}
else
if
(
pTSchema
->
columns
[
jCol
].
colId
>
pTColumn
->
colId
)
{
taosArrayPush
(
pMerger
->
pArray
,
&
COL_VAL_NONE
(
pTColumn
->
colId
,
pTColumn
->
type
));
continue
;
}
_exit:
return
code
;
}
tsdbRowGetColVal
(
pRow
,
pTSchema
,
jCol
++
,
pColVal
);
if
((
!
COL_VAL_IS_NONE
(
pColVal
))
&&
(
!
COL_VAL_IS_NULL
(
pColVal
))
&&
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
uint8_t
*
pVal
=
pColVal
->
value
.
pData
;
int32_t
tsdbRowMergerAdd
(
SRowMerger
*
pMerger
,
TSDBROW
*
pRow
,
STSchema
*
pTSchema
)
{
int32_t
code
=
0
;
TSDBKEY
key
=
TSDBROW_KEY
(
pRow
);
SColVal
*
pColVal
=
&
(
SColVal
){
0
};
STColumn
*
pTColumn
;
int32_t
iCol
,
jCol
=
1
;
pColVal
->
value
.
pData
=
NULL
;
code
=
tRealloc
(
&
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
if
(
NULL
==
pTSchem
a
)
{
pTSchema
=
pMerger
->
pTSchema
;
}
ASSERT
(((
SColVal
*
)
pMerger
->
pArray
->
pData
)
->
value
.
val
==
key
.
ts
);
if
(
pColVal
->
value
.
nDat
a
)
{
memcpy
(
pColVal
->
value
.
pData
,
pVal
,
pColVal
->
value
.
nData
)
;
}
}
for
(
iCol
=
1
;
iCol
<
pMerger
->
pTSchema
->
numOfCols
&&
jCol
<
pTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pMerger
->
pTSchema
->
columns
[
iCol
];
if
(
pTSchema
->
columns
[
jCol
].
colId
<
pTColumn
->
colId
)
{
++
jCol
;
--
iCol
;
continue
;
}
else
if
(
pTSchema
->
columns
[
jCol
].
colId
>
pTColumn
->
colId
)
{
continue
;
if
(
taosArrayPush
(
pMerger
->
pArray
,
pColVal
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
code
;
}
}
tsdbRowGetColVal
(
pRow
,
pTSchema
,
jCol
++
,
pColVal
);
for
(;
iCol
<
pMerger
->
pTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pMerger
->
pTSchema
->
columns
[
iCol
];
taosArrayPush
(
pMerger
->
pArray
,
&
COL_VAL_NONE
(
pTColumn
->
colId
,
pTColumn
->
type
));
}
if
(
key
.
version
>
pMerger
->
version
)
{
if
(
!
COL_VAL_IS_NONE
(
pColVal
))
{
if
(
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
SColVal
*
pTColVal
=
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
!
COL_VAL_IS_NULL
(
pColVal
))
{
code
=
tRealloc
(
&
pTColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
return
code
;
pMerger
->
version
=
key
.
version
;
return
0
;
}
else
{
ASSERT
(((
SColVal
*
)
pMerger
->
pArray
->
pData
)
->
value
.
val
==
key
.
ts
);
for
(
iCol
=
1
;
iCol
<
pMerger
->
pTSchema
->
numOfCols
&&
jCol
<
pTSchema
->
numOfCols
;
++
iCol
)
{
pTColumn
=
&
pMerger
->
pTSchema
->
columns
[
iCol
];
if
(
pTSchema
->
columns
[
jCol
].
colId
<
pTColumn
->
colId
)
{
++
jCol
;
--
iCol
;
continue
;
}
else
if
(
pTSchema
->
columns
[
jCol
].
colId
>
pTColumn
->
colId
)
{
continue
;
}
pTColVal
->
value
.
nData
=
pColVal
->
value
.
nData
;
if
(
pTColVal
->
value
.
nData
)
{
memcpy
(
pTColVal
->
value
.
pData
,
pColVal
->
value
.
pData
,
pTColVal
->
value
.
nData
);
tsdbRowGetColVal
(
pRow
,
pTSchema
,
jCol
++
,
pColVal
);
if
(
key
.
version
>
pMerger
->
version
)
{
if
(
!
COL_VAL_IS_NONE
(
pColVal
))
{
if
(
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
SColVal
*
pTColVal
=
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
!
COL_VAL_IS_NULL
(
pColVal
))
{
code
=
tRealloc
(
&
pTColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
return
code
;
pTColVal
->
value
.
nData
=
pColVal
->
value
.
nData
;
if
(
pTColVal
->
value
.
nData
)
{
memcpy
(
pTColVal
->
value
.
pData
,
pColVal
->
value
.
pData
,
pTColVal
->
value
.
nData
);
}
pTColVal
->
flag
=
0
;
}
else
{
tFree
(
pTColVal
->
value
.
pData
);
taosArraySet
(
pMerger
->
pArray
,
iCol
,
pColVal
);
}
pTColVal
->
flag
=
0
;
}
else
{
tFree
(
pTColVal
->
value
.
pData
);
taosArraySet
(
pMerger
->
pArray
,
iCol
,
pColVal
);
}
}
else
{
taosArraySet
(
pMerger
->
pArray
,
iCol
,
pColVal
);
}
}
}
else
if
(
key
.
version
<
pMerger
->
version
)
{
SColVal
*
tColVal
=
(
SColVal
*
)
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
COL_VAL_IS_NONE
(
tColVal
)
&&
!
COL_VAL_IS_NONE
(
pColVal
))
{
if
((
!
COL_VAL_IS_NULL
(
pColVal
))
&&
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
code
=
tRealloc
(
&
tColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
return
code
;
tColVal
->
value
.
nData
=
pColVal
->
value
.
nData
;
if
(
pColVal
->
value
.
nData
)
{
memcpy
(
tColVal
->
value
.
pData
,
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
}
else
if
(
key
.
version
<
pMerger
->
version
)
{
SColVal
*
tColVal
=
(
SColVal
*
)
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
COL_VAL_IS_NONE
(
tColVal
)
&&
!
COL_VAL_IS_NONE
(
pColVal
))
{
if
((
!
COL_VAL_IS_NULL
(
pColVal
))
&&
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
code
=
tRealloc
(
&
tColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
if
(
code
)
return
code
;
tColVal
->
value
.
nData
=
pColVal
->
value
.
nData
;
if
(
pColVal
->
value
.
nData
)
{
memcpy
(
tColVal
->
value
.
pData
,
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
);
}
tColVal
->
flag
=
0
;
}
else
{
taosArraySet
(
pMerger
->
pArray
,
iCol
,
pColVal
);
}
tColVal
->
flag
=
0
;
}
else
{
taosArraySet
(
pMerger
->
pArray
,
iCol
,
pColVal
);
}
}
else
{
ASSERT
(
0
&&
"dup versions not allowed"
);
}
}
else
{
ASSERT
(
0
&&
"dup versions not allowed"
);
}
}
pMerger
->
version
=
key
.
version
;
return
code
;
pMerger
->
version
=
key
.
version
;
return
code
;
}
}
/*
int32_t tsdbRowMergerInit(SRowMerger *pMerger, TSDBROW *pRow, STSchema *pTSchema) {
int32_t code = 0;
TSDBKEY key = TSDBROW_KEY(pRow);
SColVal *pColVal = &(SColVal){0};
STColumn *pTColumn;
pMerger->pTSchema = pTSchema;
pMerger->version = key.version;
pMerger->pArray = taosArrayInit(pTSchema->numOfCols, sizeof(SColVal));
int32_t
tsdbRowMergerInit
(
SRowMerger
*
pMerger
,
STSchema
*
pSchema
)
{
pMerger
->
pTSchema
=
pSchema
;
pMerger
->
pArray
=
taosArrayInit
(
pSchema
->
numOfCols
,
sizeof
(
SColVal
));
if
(
pMerger
->
pArray
==
NULL
)
{
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
// ts
pTColumn = &pTSchema->columns[0];
ASSERT(pTColumn->type == TSDB_DATA_TYPE_TIMESTAMP);
*pColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.val = key.ts});
if (taosArrayPush(pMerger->pArray, pColVal) == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
// other
for (int16_t iCol = 1; iCol < pTSchema->numOfCols; iCol++) {
tsdbRowGetColVal(pRow, pTSchema, iCol, pColVal);
if ((!COL_VAL_IS_NONE(pColVal)) && (!COL_VAL_IS_NULL(pColVal)) && IS_VAR_DATA_TYPE(pColVal->type)) {
uint8_t *pVal = pColVal->value.pData;
pColVal->value.pData = NULL;
code = tRealloc(&pColVal->value.pData, pColVal->value.nData);
if (code) goto _exit;
if (pColVal->value.nData) {
memcpy(pColVal->value.pData, pVal, pColVal->value.nData);
}
}
if (taosArrayPush(pMerger->pArray, pColVal) == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
return
TSDB_CODE_OUT_OF_MEMORY
;
}
else
{
return
TSDB_CODE_SUCCESS
;
}
_exit:
return code;
}
*/
void
tsdbRowMergerClear
(
SRowMerger
*
pMerger
)
{
void
tsdbRowMergerClear
(
SRowMerger
*
pMerger
)
{
for
(
int32_t
iCol
=
1
;
iCol
<
pMerger
->
pTSchema
->
numOfCols
;
iCol
++
)
{
SColVal
*
pTColVal
=
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
IS_VAR_DATA_TYPE
(
pTColVal
->
type
))
{
...
...
@@ -838,74 +782,21 @@ void tsdbRowMergerClear(SRowMerger *pMerger) {
}
}
taosArray
Destroy
(
pMerger
->
pArray
);
taosArray
Clear
(
pMerger
->
pArray
);
}
/*
int32_t tsdbRowMerge(SRowMerger *pMerger, TSDBROW *pRow) {
int32_t code = 0;
TSDBKEY key = TSDBROW_KEY(pRow);
SColVal *pColVal = &(SColVal){0};
ASSERT(((SColVal *)pMerger->pArray->pData)->value.val == key.ts);
for (int32_t iCol = 1; iCol < pMerger->pTSchema->numOfCols; iCol++) {
tsdbRowGetColVal(pRow, pMerger->pTSchema, iCol, pColVal);
if (key.version > pMerger->version) {
if (!COL_VAL_IS_NONE(pColVal)) {
if (IS_VAR_DATA_TYPE(pColVal->type)) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
if (!COL_VAL_IS_NULL(pColVal)) {
code = tRealloc(&pTColVal->value.pData, pColVal->value.nData);
if (code) goto _exit;
pTColVal->value.nData = pColVal->value.nData;
if (pTColVal->value.nData) {
memcpy(pTColVal->value.pData, pColVal->value.pData, pTColVal->value.nData);
}
pTColVal->flag = 0;
} else {
tFree(pTColVal->value.pData);
pTColVal->value.pData = NULL;
taosArraySet(pMerger->pArray, iCol, pColVal);
}
} else {
taosArraySet(pMerger->pArray, iCol, pColVal);
}
}
} else if (key.version < pMerger->version) {
SColVal *tColVal = (SColVal *)taosArrayGet(pMerger->pArray, iCol);
if (COL_VAL_IS_NONE(tColVal) && !COL_VAL_IS_NONE(pColVal)) {
if (IS_VAR_DATA_TYPE(pColVal->type)) {
if (!COL_VAL_IS_NULL(pColVal)) {
code = tRealloc(&tColVal->value.pData, pColVal->value.nData);
if (code) goto _exit;
tColVal->value.nData = pColVal->value.nData;
if (tColVal->value.nData) {
memcpy(tColVal->value.pData, pColVal->value.pData, tColVal->value.nData);
}
tColVal->flag = 0;
} else {
tFree(tColVal->value.pData);
tColVal->value.pData = NULL;
taosArraySet(pMerger->pArray, iCol, pColVal);
}
} else {
taosArraySet(pMerger->pArray, iCol, pColVal);
}
}
} else {
ASSERT(0);
void
tsdbRowMergerCleanup
(
SRowMerger
*
pMerger
)
{
int32_t
numOfCols
=
taosArrayGetSize
(
pMerger
->
pArray
);
for
(
int32_t
iCol
=
1
;
iCol
<
numOfCols
;
iCol
++
)
{
SColVal
*
pTColVal
=
taosArrayGet
(
pMerger
->
pArray
,
iCol
);
if
(
IS_VAR_DATA_TYPE
(
pTColVal
->
type
))
{
tFree
(
pTColVal
->
value
.
pData
);
}
}
pMerger->version = key.version;
_exit:
return code;
taosArrayDestroy
(
pMerger
->
pArray
);
}
*/
int32_t
tsdbRowMergerGetRow
(
SRowMerger
*
pMerger
,
SRow
**
ppRow
)
{
return
tRowBuild
(
pMerger
->
pArray
,
pMerger
->
pTSchema
,
ppRow
);
}
...
...
@@ -1160,8 +1051,6 @@ int32_t tBlockDataCreate(SBlockData *pBlockData) {
pBlockData
->
aTSKEY
=
NULL
;
pBlockData
->
nColData
=
0
;
pBlockData
->
aColData
=
NULL
;
_exit:
return
code
;
}
...
...
@@ -1218,9 +1107,10 @@ int32_t tBlockDataInit(SBlockData *pBlockData, TABLEID *pId, STSchema *pTSchema,
int32_t
iColumn
=
1
;
STColumn
*
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
for
(
int32_t
iCid
=
0
;
iCid
<
nCid
;
iCid
++
)
{
if
(
ASSERTS
(
pTColumn
!=
NULL
,
"invalid input param"
))
{
code
=
TSDB_CODE_INVALID_PARA
;
goto
_exit
;
// aCid array (from taos client catalog) contains columns that does not exist in the pTSchema. the pTSchema is newer
if
(
pTColumn
==
NULL
)
{
continue
;
}
while
(
pTColumn
->
colId
<
aCid
[
iCid
])
{
...
...
@@ -1229,9 +1119,8 @@ int32_t tBlockDataInit(SBlockData *pBlockData, TABLEID *pId, STSchema *pTSchema,
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
}
if
(
ASSERTS
(
pTColumn
->
colId
==
aCid
[
iCid
],
"invalid input param"
))
{
code
=
TSDB_CODE_INVALID_PARA
;
goto
_exit
;
if
(
pTColumn
->
colId
!=
aCid
[
iCid
])
{
continue
;
}
tColDataInit
(
&
pBlockData
->
aColData
[
iCid
],
pTColumn
->
colId
,
pTColumn
->
type
,
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
2984c5a7
...
...
@@ -1398,7 +1398,7 @@ _exit:
// clear
taosArrayDestroy
(
newTbUids
);
tDestroySSubmitReq
2
(
pSubmitReq
,
0
==
pMsg
->
version
?
TSDB_MSG_FLG_CMPT
:
TSDB_MSG_FLG_DECODE
);
tDestroySSubmitReq
(
pSubmitReq
,
0
==
pMsg
->
version
?
TSDB_MSG_FLG_CMPT
:
TSDB_MSG_FLG_DECODE
);
tDestroySSubmitRsp2
(
pSubmitRsp
,
TSDB_MSG_FLG_ENCODE
);
if
(
code
)
terrno
=
code
;
...
...
source/libs/catalog/inc/catalogInt.h
浏览文件 @
2984c5a7
...
...
@@ -58,6 +58,7 @@ typedef enum {
CTG_CI_OTHERTABLE_META
,
CTG_CI_TBL_SMA
,
CTG_CI_TBL_CFG
,
CTG_CI_TBL_TAG
,
CTG_CI_INDEX_INFO
,
CTG_CI_USER
,
CTG_CI_UDF
,
...
...
@@ -110,6 +111,7 @@ typedef enum {
CTG_TASK_GET_SVR_VER
,
CTG_TASK_GET_TB_META_BATCH
,
CTG_TASK_GET_TB_HASH_BATCH
,
CTG_TASK_GET_TB_TAG
,
}
CTG_TASK_TYPE
;
typedef
enum
{
...
...
@@ -152,6 +154,11 @@ typedef struct SCtgTbCacheInfo {
int32_t
tbType
;
}
SCtgTbCacheInfo
;
typedef
struct
SCtgTbMetaParam
{
SName
*
pName
;
int32_t
flag
;
}
SCtgTbMetaParam
;
typedef
struct
SCtgTbMetaCtx
{
SCtgTbCacheInfo
tbInfo
;
int32_t
vgId
;
...
...
@@ -186,6 +193,11 @@ typedef struct SCtgTbCfgCtx {
SVgroupInfo
*
pVgInfo
;
}
SCtgTbCfgCtx
;
typedef
struct
SCtgTbTagCtx
{
SName
*
pName
;
SVgroupInfo
*
pVgInfo
;
}
SCtgTbTagCtx
;
typedef
struct
SCtgDbVgCtx
{
char
dbFName
[
TSDB_DB_FNAME_LEN
];
}
SCtgDbVgCtx
;
...
...
@@ -304,6 +316,7 @@ typedef struct SCtgJob {
catalogCallback
userFp
;
int32_t
tbMetaNum
;
int32_t
tbHashNum
;
int32_t
tbTagNum
;
int32_t
dbVgNum
;
int32_t
udfNum
;
int32_t
qnodeNum
;
...
...
@@ -346,6 +359,7 @@ typedef struct SCtgSubRes {
struct
SCtgTask
{
CTG_TASK_TYPE
type
;
bool
subTask
;
int32_t
taskId
;
SCtgJob
*
pJob
;
void
*
taskCtx
;
...
...
@@ -623,6 +637,7 @@ typedef struct SCtgCacheItemInfo {
#define CTG_FLAG_SYS_DB 0x8
#define CTG_FLAG_FORCE_UPDATE 0x10
#define CTG_FLAG_ONLY_CACHE 0x20
#define CTG_FLAG_SYNC_OP 0x40
#define CTG_FLAG_SET(_flag, _v) ((_flag) |= (_v))
...
...
@@ -925,6 +940,10 @@ void ctgReleaseVgMetaToCache(SCatalog* pCtg, SCtgDBCache* dbCache, SCtgTbCach
void
ctgReleaseTbMetaToCache
(
SCatalog
*
pCtg
,
SCtgDBCache
*
dbCache
,
SCtgTbCache
*
pCache
);
void
ctgGetGlobalCacheStat
(
SCtgCacheStat
*
pStat
);
int32_t
ctgChkSetAuthRes
(
SCatalog
*
pCtg
,
SCtgAuthReq
*
req
,
SCtgAuthRsp
*
res
);
int32_t
ctgGetTbMeta
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
SCtgTbMetaCtx
*
ctx
,
STableMeta
**
pTableMeta
);
int32_t
ctgGetCachedStbNameFromSuid
(
SCatalog
*
pCtg
,
char
*
dbFName
,
uint64_t
suid
,
char
**
stbName
);
int32_t
ctgGetTbTagCb
(
SCtgTask
*
pTask
);
int32_t
ctgGetUserCb
(
SCtgTask
*
pTask
);
extern
SCatalogMgmt
gCtgMgmt
;
extern
SCtgDebug
gCTGDebug
;
...
...
source/libs/catalog/src/catalog.c
浏览文件 @
2984c5a7
...
...
@@ -208,7 +208,7 @@ int32_t ctgGetTbMeta(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgTbMetaCtx* ctx
}
while
(
true
)
{
CTG_ERR_JRET
(
ctgRefreshTbMeta
(
pCtg
,
pConn
,
ctx
,
&
output
,
false
));
CTG_ERR_JRET
(
ctgRefreshTbMeta
(
pCtg
,
pConn
,
ctx
,
&
output
,
ctx
->
flag
&
CTG_FLAG_SYNC_OP
));
if
(
CTG_IS_META_TABLE
(
output
->
metaType
))
{
*
pTableMeta
=
output
->
tbMeta
;
...
...
@@ -429,6 +429,48 @@ int32_t ctgGetTbCfg(SCatalog* pCtg, SRequestConnInfo* pConn, SName* pTableName,
CTG_RET
(
TSDB_CODE_SUCCESS
);
}
int32_t
ctgGetTbTag
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
SName
*
pTableName
,
SArray
**
pRes
)
{
SVgroupInfo
vgroupInfo
=
{
0
};
STableCfg
*
pCfg
=
NULL
;
int32_t
code
=
0
;
CTG_ERR_RET
(
ctgGetTbHashVgroup
(
pCtg
,
pConn
,
pTableName
,
&
vgroupInfo
,
NULL
));
CTG_ERR_RET
(
ctgGetTableCfgFromVnode
(
pCtg
,
pConn
,
pTableName
,
&
vgroupInfo
,
&
pCfg
,
NULL
));
if
(
NULL
==
pCfg
->
pTags
||
pCfg
->
tagsLen
<=
0
)
{
ctgError
(
"invalid tag in tbCfg rsp, pTags:%p, len:%d"
,
pCfg
->
pTags
,
pCfg
->
tagsLen
);
CTG_ERR_JRET
(
TSDB_CODE_INVALID_MSG
);
}
SArray
*
pTagVals
=
NULL
;
STag
*
pTag
=
(
STag
*
)
pCfg
->
pTags
;
if
(
tTagIsJson
(
pTag
))
{
pTagVals
=
taosArrayInit
(
1
,
sizeof
(
STagVal
));
if
(
NULL
==
pTagVals
)
{
CTG_ERR_JRET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
char
*
pJson
=
parseTagDatatoJson
(
pTag
);
STagVal
tagVal
;
tagVal
.
cid
=
0
;
tagVal
.
type
=
TSDB_DATA_TYPE_JSON
;
tagVal
.
pData
=
pJson
;
tagVal
.
nData
=
strlen
(
pJson
);
taosArrayPush
(
pTagVals
,
&
tagVal
);
}
else
{
CTG_ERR_JRET
(
tTagToValArray
((
const
STag
*
)
pCfg
->
pTags
,
&
pTagVals
));
}
*
pRes
=
pTagVals
;
_return:
tFreeSTableCfgRsp
((
STableCfgRsp
*
)
pCfg
);
CTG_RET
(
code
);
}
int32_t
ctgGetTbDistVgInfo
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
SName
*
pTableName
,
SArray
**
pVgList
)
{
STableMeta
*
tbMeta
=
NULL
;
int32_t
code
=
0
;
...
...
@@ -1414,6 +1456,21 @@ _return:
CTG_API_LEAVE
(
code
);
}
int32_t
catalogGetTableTag
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
const
SName
*
pTableName
,
SArray
**
pRes
)
{
CTG_API_ENTER
();
if
(
NULL
==
pCtg
||
NULL
==
pConn
||
NULL
==
pTableName
||
NULL
==
pRes
)
{
CTG_API_LEAVE
(
TSDB_CODE_CTG_INVALID_INPUT
);
}
int32_t
code
=
0
;
CTG_ERR_JRET
(
ctgGetTbTag
(
pCtg
,
pConn
,
(
SName
*
)
pTableName
,
pRes
));
_return:
CTG_API_LEAVE
(
code
);
}
int32_t
catalogRefreshGetTableCfg
(
SCatalog
*
pCtg
,
SRequestConnInfo
*
pConn
,
const
SName
*
pTableName
,
STableCfg
**
pCfg
)
{
CTG_API_ENTER
();
...
...
source/libs/catalog/src/ctgAsync.c
浏览文件 @
2984c5a7
...
...
@@ -21,7 +21,8 @@
#include "trpc.h"
int32_t
ctgInitGetTbMetaTask
(
SCtgJob
*
pJob
,
int32_t
taskIdx
,
void
*
param
)
{
SName
*
name
=
(
SName
*
)
param
;
SCtgTbMetaParam
*
pParam
=
(
SCtgTbMetaParam
*
)
param
;
SName
*
name
=
pParam
->
pName
;
SCtgTask
task
=
{
0
};
task
.
type
=
CTG_TASK_GET_TB_META
;
...
...
@@ -41,7 +42,7 @@ int32_t ctgInitGetTbMetaTask(SCtgJob* pJob, int32_t taskIdx, void* param) {
}
memcpy
(
ctx
->
pName
,
name
,
sizeof
(
*
name
));
ctx
->
flag
=
CTG_FLAG_UNKNOWN_STB
;
ctx
->
flag
=
pParam
->
flag
|
CTG_FLAG_UNKNOWN_STB
;
taosArrayPush
(
pJob
->
pTasks
,
&
task
);
...
...
@@ -386,6 +387,37 @@ int32_t ctgInitGetTbCfgTask(SCtgJob* pJob, int32_t taskIdx, void* param) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
ctgInitGetTbTagTask
(
SCtgJob
*
pJob
,
int32_t
taskIdx
,
void
*
param
)
{
SName
*
name
=
(
SName
*
)
param
;
SCtgTask
task
=
{
0
};
task
.
type
=
CTG_TASK_GET_TB_TAG
;
task
.
taskId
=
taskIdx
;
task
.
pJob
=
pJob
;
task
.
taskCtx
=
taosMemoryCalloc
(
1
,
sizeof
(
SCtgTbTagCtx
));
if
(
NULL
==
task
.
taskCtx
)
{
CTG_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
SCtgTbTagCtx
*
ctx
=
task
.
taskCtx
;
ctx
->
pName
=
taosMemoryMalloc
(
sizeof
(
*
name
));
if
(
NULL
==
ctx
->
pName
)
{
taosMemoryFree
(
task
.
taskCtx
);
CTG_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
memcpy
(
ctx
->
pName
,
name
,
sizeof
(
*
name
));
taosArrayPush
(
pJob
->
pTasks
,
&
task
);
qDebug
(
"QID:0x%"
PRIx64
" the %dth task type %s initialized, tbName:%s"
,
pJob
->
queryId
,
taskIdx
,
ctgTaskTypeStr
(
task
.
type
),
name
->
tname
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
ctgHandleForceUpdate
(
SCatalog
*
pCtg
,
int32_t
taskNum
,
SCtgJob
*
pJob
,
const
SCatalogReq
*
pReq
)
{
SHashObj
*
pDb
=
taosHashInit
(
taskNum
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
SHashObj
*
pTb
=
taosHashInit
(
taskNum
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
...
...
@@ -437,6 +469,15 @@ int32_t ctgHandleForceUpdate(SCatalog* pCtg, int32_t taskNum, SCtgJob* pJob, con
char
dbFName
[
TSDB_DB_FNAME_LEN
];
tNameGetFullDbName
(
name
,
dbFName
);
taosHashPut
(
pDb
,
dbFName
,
strlen
(
dbFName
),
dbFName
,
TSDB_DB_FNAME_LEN
);
taosHashPut
(
pTb
,
name
,
sizeof
(
SName
),
name
,
sizeof
(
SName
));
}
for
(
int32_t
i
=
0
;
i
<
pJob
->
tbTagNum
;
++
i
)
{
SName
*
name
=
taosArrayGet
(
pReq
->
pTableTag
,
i
);
char
dbFName
[
TSDB_DB_FNAME_LEN
];
tNameGetFullDbName
(
name
,
dbFName
);
taosHashPut
(
pDb
,
dbFName
,
strlen
(
dbFName
),
dbFName
,
TSDB_DB_FNAME_LEN
);
taosHashPut
(
pTb
,
name
,
sizeof
(
SName
),
name
,
sizeof
(
SName
));
}
char
*
dbFName
=
taosHashIterate
(
pDb
,
NULL
);
...
...
@@ -505,9 +546,10 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const
int32_t
dbInfoNum
=
(
int32_t
)
taosArrayGetSize
(
pReq
->
pDbInfo
);
int32_t
tbIndexNum
=
(
int32_t
)
taosArrayGetSize
(
pReq
->
pTableIndex
);
int32_t
tbCfgNum
=
(
int32_t
)
taosArrayGetSize
(
pReq
->
pTableCfg
);
int32_t
tbTagNum
=
(
int32_t
)
taosArrayGetSize
(
pReq
->
pTableTag
);
int32_t
taskNum
=
tbMetaNum
+
dbVgNum
+
udfNum
+
tbHashNum
+
qnodeNum
+
dnodeNum
+
svrVerNum
+
dbCfgNum
+
indexNum
+
userNum
+
dbInfoNum
+
tbIndexNum
+
tbCfgNum
;
userNum
+
dbInfoNum
+
tbIndexNum
+
tbCfgNum
+
tbTagNum
;
*
job
=
taosMemoryCalloc
(
1
,
sizeof
(
SCtgJob
));
if
(
NULL
==
*
job
)
{
...
...
@@ -537,6 +579,7 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const
pJob
->
tbIndexNum
=
tbIndexNum
;
pJob
->
tbCfgNum
=
tbCfgNum
;
pJob
->
svrVerNum
=
svrVerNum
;
pJob
->
tbTagNum
=
tbTagNum
;
#if CTG_BATCH_FETCH
pJob
->
pBatchs
=
...
...
@@ -604,6 +647,12 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const
CTG_ERR_JRET
(
ctgInitTask
(
pJob
,
CTG_TASK_GET_TB_CFG
,
name
,
NULL
));
}
for
(
int32_t
i
=
0
;
i
<
tbTagNum
;
++
i
)
{
SName
*
name
=
taosArrayGet
(
pReq
->
pTableTag
,
i
);
CTG_ERR_JRET
(
ctgInitTask
(
pJob
,
CTG_TASK_GET_TB_TAG
,
name
,
NULL
));
}
for
(
int32_t
i
=
0
;
i
<
indexNum
;
++
i
)
{
char
*
indexName
=
taosArrayGet
(
pReq
->
pIndex
,
i
);
CTG_ERR_JRET
(
ctgInitTask
(
pJob
,
CTG_TASK_GET_INDEX_INFO
,
indexName
,
NULL
));
...
...
@@ -650,6 +699,10 @@ _return:
}
int32_t
ctgDumpTbMetaRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pTableMeta
)
{
pJob
->
jobRes
.
pTableMeta
=
taosArrayInit
(
pJob
->
tbMetaNum
,
sizeof
(
SMetaRes
));
...
...
@@ -665,6 +718,10 @@ int32_t ctgDumpTbMetaRes(SCtgTask* pTask) {
}
int32_t
ctgDumpTbMetasRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
pJob
->
jobRes
.
pTableMeta
=
pTask
->
res
;
...
...
@@ -673,6 +730,10 @@ int32_t ctgDumpTbMetasRes(SCtgTask* pTask) {
}
int32_t
ctgDumpDbVgRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pDbVgroup
)
{
pJob
->
jobRes
.
pDbVgroup
=
taosArrayInit
(
pJob
->
dbVgNum
,
sizeof
(
SMetaRes
));
...
...
@@ -688,6 +749,10 @@ int32_t ctgDumpDbVgRes(SCtgTask* pTask) {
}
int32_t
ctgDumpTbHashRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pTableHash
)
{
pJob
->
jobRes
.
pTableHash
=
taosArrayInit
(
pJob
->
tbHashNum
,
sizeof
(
SMetaRes
));
...
...
@@ -703,6 +768,10 @@ int32_t ctgDumpTbHashRes(SCtgTask* pTask) {
}
int32_t
ctgDumpTbHashsRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
pJob
->
jobRes
.
pTableHash
=
pTask
->
res
;
...
...
@@ -711,9 +780,17 @@ int32_t ctgDumpTbHashsRes(SCtgTask* pTask) {
}
int32_t
ctgDumpTbIndexRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pTableIndex
)
{
pJob
->
jobRes
.
pTableIndex
=
taosArrayInit
(
pJob
->
tbIndexNum
,
sizeof
(
SMetaRes
));
SArray
*
pRes
=
taosArrayInit
(
pJob
->
tbIndexNum
,
sizeof
(
SMetaRes
));
if
(
atomic_val_compare_exchange_ptr
(
&
pJob
->
jobRes
.
pTableIndex
,
NULL
,
pRes
))
{
taosArrayDestroy
(
pRes
);
}
if
(
NULL
==
pJob
->
jobRes
.
pTableIndex
)
{
CTG_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
...
...
@@ -726,9 +803,17 @@ int32_t ctgDumpTbIndexRes(SCtgTask* pTask) {
}
int32_t
ctgDumpTbCfgRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pTableCfg
)
{
pJob
->
jobRes
.
pTableCfg
=
taosArrayInit
(
pJob
->
tbCfgNum
,
sizeof
(
SMetaRes
));
SArray
*
pRes
=
taosArrayInit
(
pJob
->
tbCfgNum
,
sizeof
(
SMetaRes
));
if
(
atomic_val_compare_exchange_ptr
(
&
pJob
->
jobRes
.
pTableCfg
,
NULL
,
pRes
))
{
taosArrayDestroy
(
pRes
);
}
if
(
NULL
==
pJob
->
jobRes
.
pTableCfg
)
{
CTG_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
...
...
@@ -740,7 +825,35 @@ int32_t ctgDumpTbCfgRes(SCtgTask* pTask) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
ctgDumpTbTagRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pTableTag
)
{
SArray
*
pRes
=
taosArrayInit
(
pJob
->
tbTagNum
,
sizeof
(
SMetaRes
));
if
(
atomic_val_compare_exchange_ptr
(
&
pJob
->
jobRes
.
pTableTag
,
NULL
,
pRes
))
{
taosArrayDestroy
(
pRes
);
}
if
(
NULL
==
pJob
->
jobRes
.
pTableTag
)
{
CTG_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
}
SMetaRes
res
=
{.
code
=
pTask
->
code
,
.
pRes
=
pTask
->
res
};
taosArrayPush
(
pJob
->
jobRes
.
pTableTag
,
&
res
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
ctgDumpIndexRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pIndex
)
{
pJob
->
jobRes
.
pIndex
=
taosArrayInit
(
pJob
->
indexNum
,
sizeof
(
SMetaRes
));
...
...
@@ -756,6 +869,10 @@ int32_t ctgDumpIndexRes(SCtgTask* pTask) {
}
int32_t
ctgDumpQnodeRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pQnodeList
)
{
pJob
->
jobRes
.
pQnodeList
=
taosArrayInit
(
1
,
sizeof
(
SMetaRes
));
...
...
@@ -771,6 +888,10 @@ int32_t ctgDumpQnodeRes(SCtgTask* pTask) {
}
int32_t
ctgDumpDnodeRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pDnodeList
)
{
pJob
->
jobRes
.
pDnodeList
=
taosArrayInit
(
1
,
sizeof
(
SMetaRes
));
...
...
@@ -786,6 +907,10 @@ int32_t ctgDumpDnodeRes(SCtgTask* pTask) {
}
int32_t
ctgDumpDbCfgRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pDbCfg
)
{
pJob
->
jobRes
.
pDbCfg
=
taosArrayInit
(
pJob
->
dbCfgNum
,
sizeof
(
SMetaRes
));
...
...
@@ -801,6 +926,10 @@ int32_t ctgDumpDbCfgRes(SCtgTask* pTask) {
}
int32_t
ctgDumpDbInfoRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pDbInfo
)
{
pJob
->
jobRes
.
pDbInfo
=
taosArrayInit
(
pJob
->
dbInfoNum
,
sizeof
(
SMetaRes
));
...
...
@@ -816,6 +945,10 @@ int32_t ctgDumpDbInfoRes(SCtgTask* pTask) {
}
int32_t
ctgDumpUdfRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pUdfList
)
{
pJob
->
jobRes
.
pUdfList
=
taosArrayInit
(
pJob
->
udfNum
,
sizeof
(
SMetaRes
));
...
...
@@ -831,6 +964,10 @@ int32_t ctgDumpUdfRes(SCtgTask* pTask) {
}
int32_t
ctgDumpUserRes
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pUser
)
{
pJob
->
jobRes
.
pUser
=
taosArrayInit
(
pJob
->
userNum
,
sizeof
(
SMetaRes
));
...
...
@@ -846,6 +983,10 @@ int32_t ctgDumpUserRes(SCtgTask* pTask) {
}
int32_t
ctgDumpSvrVer
(
SCtgTask
*
pTask
)
{
if
(
pTask
->
subTask
)
{
return
TSDB_CODE_SUCCESS
;
}
SCtgJob
*
pJob
=
pTask
->
pJob
;
if
(
NULL
==
pJob
->
jobRes
.
pSvrVer
)
{
pJob
->
jobRes
.
pSvrVer
=
taosMemoryCalloc
(
1
,
sizeof
(
SMetaRes
));
...
...
@@ -1075,7 +1216,7 @@ int32_t ctgHandleGetTbMetaRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf
STableMetaOutput
*
pOut
=
(
STableMetaOutput
*
)
pMsgCtx
->
out
;
ctgUpdateTbMetaToCache
(
pCtg
,
pOut
,
f
alse
);
ctgUpdateTbMetaToCache
(
pCtg
,
pOut
,
f
lag
&
CTG_FLAG_SYNC_OP
);
if
(
CTG_IS_META_BOTH
(
pOut
->
metaType
))
{
memcpy
(
pOut
->
tbMeta
,
&
pOut
->
ctbMeta
,
sizeof
(
pOut
->
ctbMeta
));
...
...
@@ -1473,6 +1614,49 @@ _return:
CTG_RET
(
code
);
}
int32_t
ctgHandleGetTbTagRsp
(
SCtgTaskReq
*
tReq
,
int32_t
reqType
,
const
SDataBuf
*
pMsg
,
int32_t
rspCode
)
{
int32_t
code
=
0
;
SCtgTask
*
pTask
=
tReq
->
pTask
;
SCatalog
*
pCtg
=
pTask
->
pJob
->
pCtg
;
CTG_ERR_JRET
(
ctgProcessRspMsg
(
&
pTask
->
msgCtx
.
out
,
reqType
,
pMsg
->
pData
,
pMsg
->
len
,
rspCode
,
pTask
->
msgCtx
.
target
));
STableCfgRsp
*
pRsp
=
(
STableCfgRsp
*
)
pTask
->
msgCtx
.
out
;
if
(
NULL
==
pRsp
->
pTags
||
pRsp
->
tagsLen
<=
0
)
{
ctgError
(
"invalid tag in tbCfg rsp, pTags:%p, len:%d"
,
pRsp
->
pTags
,
pRsp
->
tagsLen
);
CTG_ERR_JRET
(
TSDB_CODE_INVALID_MSG
);
}
SArray
*
pTagVals
=
NULL
;
STag
*
pTag
=
(
STag
*
)
pRsp
->
pTags
;
if
(
tTagIsJson
(
pTag
))
{
pTagVals
=
taosArrayInit
(
1
,
sizeof
(
STagVal
));
if
(
NULL
==
pTagVals
)
{
CTG_ERR_JRET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
char
*
pJson
=
parseTagDatatoJson
(
pTag
);
STagVal
tagVal
;
tagVal
.
cid
=
0
;
tagVal
.
type
=
TSDB_DATA_TYPE_JSON
;
tagVal
.
pData
=
pJson
;
tagVal
.
nData
=
strlen
(
pJson
);
taosArrayPush
(
pTagVals
,
&
tagVal
);
}
else
{
CTG_ERR_JRET
(
tTagToValArray
((
const
STag
*
)
pRsp
->
pTags
,
&
pTagVals
));
}
pTask
->
res
=
pTagVals
;
_return:
ctgHandleTaskEnd
(
pTask
,
code
);
CTG_RET
(
code
);
}
int32_t
ctgHandleGetDbCfgRsp
(
SCtgTaskReq
*
tReq
,
int32_t
reqType
,
const
SDataBuf
*
pMsg
,
int32_t
rspCode
)
{
int32_t
code
=
0
;
SCtgTask
*
pTask
=
tReq
->
pTask
;
...
...
@@ -1905,7 +2089,10 @@ int32_t ctgLaunchGetTbCfgTask(SCtgTask* pTask) {
if
(
pCtx
->
tbType
<=
0
)
{
CTG_ERR_JRET
(
ctgReadTbTypeFromCache
(
pCtg
,
dbFName
,
pCtx
->
pName
->
tname
,
&
pCtx
->
tbType
));
if
(
pCtx
->
tbType
<=
0
)
{
CTG_ERR_JRET
(
ctgLaunchSubTask
(
pTask
,
CTG_TASK_GET_TB_META
,
ctgGetTbCfgCb
,
pCtx
->
pName
));
SCtgTbMetaParam
param
;
param
.
pName
=
pCtx
->
pName
;
param
.
flag
=
0
;
CTG_ERR_JRET
(
ctgLaunchSubTask
(
pTask
,
CTG_TASK_GET_TB_META
,
ctgGetTbCfgCb
,
&
param
));
return
TSDB_CODE_SUCCESS
;
}
}
...
...
@@ -1935,6 +2122,45 @@ _return:
CTG_RET
(
code
);
}
int32_t
ctgLaunchGetTbTagTask
(
SCtgTask
*
pTask
)
{
int32_t
code
=
0
;
SCatalog
*
pCtg
=
pTask
->
pJob
->
pCtg
;
SRequestConnInfo
*
pConn
=
&
pTask
->
pJob
->
conn
;
SCtgTbTagCtx
*
pCtx
=
(
SCtgTbTagCtx
*
)
pTask
->
taskCtx
;
SArray
*
pRes
=
NULL
;
char
dbFName
[
TSDB_DB_FNAME_LEN
];
tNameGetFullDbName
(
pCtx
->
pName
,
dbFName
);
SCtgJob
*
pJob
=
pTask
->
pJob
;
SCtgMsgCtx
*
pMsgCtx
=
CTG_GET_TASK_MSGCTX
(
pTask
,
-
1
);
if
(
NULL
==
pMsgCtx
->
pBatchs
)
{
pMsgCtx
->
pBatchs
=
pJob
->
pBatchs
;
}
if
(
NULL
==
pCtx
->
pVgInfo
)
{
CTG_ERR_JRET
(
ctgGetTbHashVgroupFromCache
(
pCtg
,
pCtx
->
pName
,
&
pCtx
->
pVgInfo
));
if
(
NULL
==
pCtx
->
pVgInfo
)
{
CTG_ERR_JRET
(
ctgLaunchSubTask
(
pTask
,
CTG_TASK_GET_DB_VGROUP
,
ctgGetTbTagCb
,
dbFName
));
return
TSDB_CODE_SUCCESS
;
}
}
CTG_CACHE_NHIT_INC
(
CTG_CI_TBL_TAG
,
1
);
CTG_ERR_JRET
(
ctgGetTableCfgFromVnode
(
pCtg
,
pConn
,
pCtx
->
pName
,
pCtx
->
pVgInfo
,
NULL
,
pTask
));
return
TSDB_CODE_SUCCESS
;
_return:
if
(
CTG_TASK_LAUNCHED
==
pTask
->
status
)
{
ctgHandleTaskEnd
(
pTask
,
code
);
}
CTG_RET
(
code
);
}
int32_t
ctgLaunchGetQnodeTask
(
SCtgTask
*
pTask
)
{
SCatalog
*
pCtg
=
pTask
->
pJob
->
pCtg
;
SRequestConnInfo
*
pConn
=
&
pTask
->
pJob
->
conn
;
...
...
@@ -2077,6 +2303,8 @@ int32_t ctgLaunchGetUserTask(SCtgTask* pTask) {
if
(
inCache
)
{
pTask
->
res
=
rsp
.
pRawRes
;
ctgTaskDebug
(
"Final res got, pass:%d, pCond:%p"
,
rsp
.
pRawRes
->
pass
,
rsp
.
pRawRes
->
pCond
);
CTG_ERR_RET
(
ctgHandleTaskEnd
(
pTask
,
0
));
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2084,7 +2312,10 @@ int32_t ctgLaunchGetUserTask(SCtgTask* pTask) {
taosMemoryFreeClear
(
rsp
.
pRawRes
);
if
(
rsp
.
metaNotExists
)
{
CTG_ERR_RET
(
ctgLaunchSubTask
(
pTask
,
CTG_TASK_GET_TB_META
,
ctgGetTbCfgCb
,
&
pCtx
->
user
.
tbName
));
SCtgTbMetaParam
param
;
param
.
pName
=
&
pCtx
->
user
.
tbName
;
param
.
flag
=
CTG_FLAG_SYNC_OP
;
CTG_ERR_RET
(
ctgLaunchSubTask
(
pTask
,
CTG_TASK_GET_TB_META
,
ctgGetUserCb
,
&
param
));
}
else
{
CTG_ERR_RET
(
ctgGetUserDbAuthFromMnode
(
pCtg
,
pConn
,
pCtx
->
user
.
user
,
NULL
,
pTask
));
}
...
...
@@ -2138,6 +2369,27 @@ _return:
CTG_RET
(
ctgHandleTaskEnd
(
pTask
,
pTask
->
subRes
.
code
));
}
int32_t
ctgGetTbTagCb
(
SCtgTask
*
pTask
)
{
int32_t
code
=
0
;
CTG_ERR_JRET
(
pTask
->
subRes
.
code
);
SCtgTbTagCtx
*
pCtx
=
(
SCtgTbTagCtx
*
)
pTask
->
taskCtx
;
SDBVgInfo
*
pDb
=
(
SDBVgInfo
*
)
pTask
->
subRes
.
res
;
if
(
NULL
==
pCtx
->
pVgInfo
)
{
pCtx
->
pVgInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SVgroupInfo
));
CTG_ERR_JRET
(
ctgGetVgInfoFromHashValue
(
pTask
->
pJob
->
pCtg
,
pDb
,
pCtx
->
pName
,
pCtx
->
pVgInfo
));
}
CTG_RET
(
ctgLaunchGetTbTagTask
(
pTask
));
_return:
CTG_RET
(
ctgHandleTaskEnd
(
pTask
,
pTask
->
subRes
.
code
));
}
int32_t
ctgGetUserCb
(
SCtgTask
*
pTask
)
{
int32_t
code
=
0
;
...
...
@@ -2162,8 +2414,12 @@ int32_t ctgCompDbVgTasks(SCtgTask* pTask, void* param, bool* equal) {
int32_t
ctgCompTbMetaTasks
(
SCtgTask
*
pTask
,
void
*
param
,
bool
*
equal
)
{
SCtgTbMetaCtx
*
ctx
=
pTask
->
taskCtx
;
SCtgTbMetaParam
*
pParam
=
(
SCtgTbMetaParam
*
)
param
;
*
equal
=
tNameTbNameEqual
(
ctx
->
pName
,
(
SName
*
)
param
);
*
equal
=
tNameTbNameEqual
(
ctx
->
pName
,
(
SName
*
)
pParam
->
pName
);
if
(
*
equal
)
{
ctx
->
flag
|=
pParam
->
flag
;
}
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2197,6 +2453,7 @@ SCtgAsyncFps gCtgAsyncFps[] = {
{
ctgInitGetSvrVerTask
,
ctgLaunchGetSvrVerTask
,
ctgHandleGetSvrVerRsp
,
ctgDumpSvrVer
,
NULL
,
NULL
},
{
ctgInitGetTbMetasTask
,
ctgLaunchGetTbMetasTask
,
ctgHandleGetTbMetasRsp
,
ctgDumpTbMetasRes
,
NULL
,
NULL
},
{
ctgInitGetTbHashsTask
,
ctgLaunchGetTbHashsTask
,
ctgHandleGetTbHashsRsp
,
ctgDumpTbHashsRes
,
NULL
,
NULL
},
{
ctgInitGetTbTagTask
,
ctgLaunchGetTbTagTask
,
ctgHandleGetTbTagRsp
,
ctgDumpTbTagRes
,
NULL
,
NULL
},
};
int32_t
ctgMakeAsyncRes
(
SCtgJob
*
pJob
)
{
...
...
@@ -2284,6 +2541,9 @@ int32_t ctgLaunchSubTask(SCtgTask* pTask, CTG_TASK_TYPE type, ctgSubTaskCbFp fp,
}
SCtgTask
*
pSub
=
taosArrayGet
(
pJob
->
pTasks
,
subTaskId
);
if
(
newTask
)
{
pSub
->
subTask
=
true
;
}
CTG_ERR_RET
(
ctgSetSubTaskCb
(
pSub
,
pTask
));
...
...
source/libs/catalog/src/ctgCache.c
浏览文件 @
2984c5a7
...
...
@@ -703,7 +703,31 @@ _return:
CTG_RET
(
code
);
}
int32_t
ctgGetCachedStbNameFromSuid
(
SCatalog
*
pCtg
,
char
*
dbFName
,
uint64_t
suid
,
char
**
stbName
)
{
*
stbName
=
NULL
;
SCtgDBCache
*
dbCache
=
NULL
;
ctgAcquireDBCache
(
pCtg
,
dbFName
,
&
dbCache
);
if
(
NULL
==
dbCache
)
{
ctgDebug
(
"db %s not in cache"
,
dbFName
);
return
TSDB_CODE_SUCCESS
;
}
char
*
stb
=
taosHashAcquire
(
dbCache
->
stbCache
,
&
suid
,
sizeof
(
suid
));
if
(
NULL
==
stb
)
{
ctgDebug
(
"stb 0x%"
PRIx64
" not in cache, dbFName:%s"
,
suid
,
dbFName
);
return
TSDB_CODE_SUCCESS
;
}
*
stbName
=
taosStrdup
(
stb
);
taosHashRelease
(
dbCache
->
stbCache
,
stb
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
ctgChkAuthFromCache
(
SCatalog
*
pCtg
,
SUserAuthInfo
*
pReq
,
bool
*
inCache
,
SCtgAuthRsp
*
pRes
)
{
int32_t
code
=
0
;
if
(
IS_SYS_DBNAME
(
pReq
->
tbName
.
dbname
))
{
*
inCache
=
true
;
pRes
->
pRawRes
->
pass
=
true
;
...
...
@@ -728,7 +752,7 @@ int32_t ctgChkAuthFromCache(SCatalog *pCtg, SUserAuthInfo *pReq, bool *inCache,
CTG_LOCK
(
CTG_READ
,
&
pUser
->
lock
);
memcpy
(
&
req
.
authInfo
,
&
pUser
->
userAuth
,
sizeof
(
pUser
->
userAuth
));
int32_t
code
=
ctgChkSetAuthRes
(
pCtg
,
&
req
,
pRes
);
code
=
ctgChkSetAuthRes
(
pCtg
,
&
req
,
pRes
);
CTG_UNLOCK
(
CTG_READ
,
&
pUser
->
lock
);
CTG_ERR_JRET
(
code
);
...
...
@@ -742,8 +766,9 @@ _return:
*
inCache
=
false
;
CTG_CACHE_NHIT_INC
(
CTG_CI_USER
,
1
);
ctgDebug
(
"Get user from cache failed, user:%s, metaNotExists:%d, code:%d"
,
pReq
->
user
,
pRes
->
metaNotExists
,
code
);
return
TSDB_CODE_SUCCESS
;
return
code
;
}
void
ctgDequeue
(
SCtgCacheOperation
**
op
)
{
...
...
source/libs/catalog/src/ctgUtil.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/executor/src/dataDeleter.c
浏览文件 @
2984c5a7
...
...
@@ -179,7 +179,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryE
static
int32_t
getDataBlock
(
SDataSinkHandle
*
pHandle
,
SOutputData
*
pOutput
)
{
SDataDeleterHandle
*
pDeleter
=
(
SDataDeleterHandle
*
)
pHandle
;
if
(
NULL
==
pDeleter
->
nextOutput
.
pData
)
{
assert
(
pDeleter
->
queryEnd
);
ASSERT
(
pDeleter
->
queryEnd
);
pOutput
->
useconds
=
pDeleter
->
useconds
;
pOutput
->
precision
=
pDeleter
->
pSchema
->
precision
;
pOutput
->
bufStatus
=
DS_BUF_EMPTY
;
...
...
source/libs/executor/src/dataDispatcher.c
浏览文件 @
2984c5a7
...
...
@@ -185,7 +185,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryE
static
int32_t
getDataBlock
(
SDataSinkHandle
*
pHandle
,
SOutputData
*
pOutput
)
{
SDataDispatchHandle
*
pDispatcher
=
(
SDataDispatchHandle
*
)
pHandle
;
if
(
NULL
==
pDispatcher
->
nextOutput
.
pData
)
{
assert
(
pDispatcher
->
queryEnd
);
ASSERT
(
pDispatcher
->
queryEnd
);
pOutput
->
useconds
=
pDispatcher
->
useconds
;
pOutput
->
precision
=
pDispatcher
->
pSchema
->
precision
;
pOutput
->
bufStatus
=
DS_BUF_EMPTY
;
...
...
source/libs/executor/src/dataInserter.c
浏览文件 @
2984c5a7
...
...
@@ -301,7 +301,7 @@ _end:
if
(
terrno
!=
0
)
{
*
ppReq
=
NULL
;
if
(
pReq
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
}
return
terrno
;
...
...
@@ -326,7 +326,7 @@ int32_t dataBlocksToSubmitReq(SDataInserterHandle* pInserter, void** pMsg, int32
code
=
buildSubmitReqFromBlock
(
pInserter
,
&
pReq
,
pDataBlock
,
pTSchema
,
uid
,
vgId
,
suid
);
if
(
code
)
{
if
(
pReq
)
{
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
}
...
...
@@ -335,7 +335,7 @@ int32_t dataBlocksToSubmitReq(SDataInserterHandle* pInserter, void** pMsg, int32
}
code
=
submitReqToMsg
(
vgId
,
pReq
,
pMsg
,
msgLen
);
tDestroySSubmitReq
2
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
tDestroySSubmitReq
(
pReq
,
TSDB_MSG_FLG_ENCODE
);
taosMemoryFree
(
pReq
);
return
code
;
...
...
source/libs/executor/src/executil.c
浏览文件 @
2984c5a7
...
...
@@ -88,7 +88,6 @@ void resetResultRow(SResultRow* pResultRow, size_t entrySize) {
// TODO refactor: use macro
SResultRowEntryInfo
*
getResultEntryInfo
(
const
SResultRow
*
pRow
,
int32_t
index
,
const
int32_t
*
offset
)
{
assert
(
index
>=
0
&&
offset
!=
NULL
);
return
(
SResultRowEntryInfo
*
)((
char
*
)
pRow
->
pEntryInfo
+
offset
[
index
]);
}
...
...
source/libs/executor/src/groupoperator.c
浏览文件 @
2984c5a7
...
...
@@ -926,7 +926,6 @@ int32_t setGroupResultOutputBuf(SOperatorInfo* pOperator, SOptrBasicInfo* binfo,
SResultRow
*
pResultRow
=
doSetResultOutBufByKey
(
pBuf
,
pResultRowInfo
,
(
char
*
)
pData
,
bytes
,
true
,
groupId
,
pTaskInfo
,
false
,
pAggSup
,
false
);
assert
(
pResultRow
!=
NULL
);
setResultRowInitCtx
(
pResultRow
,
pCtx
,
numOfCols
,
pOperator
->
exprSupp
.
rowEntryInfoOffset
);
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/executor/src/tfill.c
浏览文件 @
2984c5a7
...
...
@@ -408,7 +408,7 @@ static int64_t appendFilledResult(SFillInfo* pFillInfo, SSDataBlock* pBlock, int
pFillInfo
->
numOfTotal
+=
pFillInfo
->
numOfCurrent
;
assert
(
pFillInfo
->
numOfCurrent
==
resultCapacity
);
ASSERT
(
pFillInfo
->
numOfCurrent
==
resultCapacity
);
return
resultCapacity
;
}
...
...
@@ -558,7 +558,7 @@ int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, TSKEY ekey, int32_t ma
numOfRes
=
taosTimeCountInterval
(
lastKey
,
pFillInfo
->
currentKey
,
pFillInfo
->
interval
.
sliding
,
pFillInfo
->
interval
.
slidingUnit
,
pFillInfo
->
interval
.
precision
);
numOfRes
+=
1
;
assert
(
numOfRes
>=
numOfRows
);
ASSERT
(
numOfRes
>=
numOfRows
);
}
else
{
// reach the end of data
if
((
ekey1
<
pFillInfo
->
currentKey
&&
FILL_IS_ASC_FILL
(
pFillInfo
))
||
(
ekey1
>=
pFillInfo
->
currentKey
&&
!
FILL_IS_ASC_FILL
(
pFillInfo
)))
{
...
...
@@ -593,14 +593,14 @@ int64_t taosFillResultDataBlock(SFillInfo* pFillInfo, SSDataBlock* p, int32_t ca
int32_t
remain
=
taosNumOfRemainRows
(
pFillInfo
);
int64_t
numOfRes
=
getNumOfResultsAfterFillGap
(
pFillInfo
,
pFillInfo
->
end
,
capacity
);
assert
(
numOfRes
<=
capacity
);
ASSERT
(
numOfRes
<=
capacity
);
// no data existed for fill operation now, append result according to the fill strategy
if
(
remain
==
0
)
{
appendFilledResult
(
pFillInfo
,
p
,
numOfRes
);
}
else
{
fillResultImpl
(
pFillInfo
,
p
,
(
int32_t
)
numOfRes
);
assert
(
numOfRes
==
pFillInfo
->
numOfCurrent
);
ASSERT
(
numOfRes
==
pFillInfo
->
numOfCurrent
);
}
qDebug
(
"fill:%p, generated fill result, src block:%d, index:%d, brange:%"
PRId64
"-%"
PRId64
", currentKey:%"
PRId64
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/executor/src/tsort.c
浏览文件 @
2984c5a7
...
...
@@ -155,7 +155,7 @@ void tsortDestroySortHandle(SSortHandle* pSortHandle) {
int64_t
fetchUs
=
0
,
fetchNum
=
0
;
tsortClearOrderdSource
(
pSortHandle
->
pOrderedSource
,
&
fetchUs
,
&
fetchNum
);
q
Error
(
"all source fetch time: %"
PRId64
"us num:%"
PRId64
" %s"
,
fetchUs
,
fetchNum
,
pSortHandle
->
idStr
);
q
Debug
(
"all source fetch time: %"
PRId64
"us num:%"
PRId64
" %s"
,
fetchUs
,
fetchNum
,
pSortHandle
->
idStr
);
taosArrayDestroy
(
pSortHandle
->
pOrderedSource
);
taosMemoryFreeClear
(
pSortHandle
);
...
...
@@ -229,7 +229,7 @@ static int32_t doAddToBuf(SSDataBlock* pDataBlock, SSortHandle* pHandle) {
taosArrayPush
(
pPageIdList
,
&
pageId
);
int32_t
size
=
blockDataGetSize
(
p
)
+
sizeof
(
int32_t
)
+
taosArrayGetSize
(
p
->
pDataBlock
)
*
sizeof
(
int32_t
);
assert
(
size
<=
getBufPageSize
(
pHandle
->
pBuf
));
ASSERT
(
size
<=
getBufPageSize
(
pHandle
->
pBuf
));
blockDataToBuf
(
pPage
,
p
);
...
...
@@ -316,7 +316,7 @@ static int32_t sortComparInit(SMsortComparParam* pParam, SArray* pSources, int32
}
int64_t
et
=
taosGetTimestampUs
();
q
Error
(
"init for merge sort completed, elapsed time:%.2f ms, %s"
,
(
et
-
st
)
/
1000
.
0
,
pHandle
->
idStr
);
q
Debug
(
"init for merge sort completed, elapsed time:%.2f ms, %s"
,
(
et
-
st
)
/
1000
.
0
,
pHandle
->
idStr
);
}
return
code
;
...
...
@@ -592,7 +592,7 @@ static int32_t doInternalMergeSort(SSortHandle* pHandle) {
int32_t
size
=
blockDataGetSize
(
pDataBlock
)
+
sizeof
(
int32_t
)
+
taosArrayGetSize
(
pDataBlock
->
pDataBlock
)
*
sizeof
(
int32_t
);
assert
(
size
<=
getBufPageSize
(
pHandle
->
pBuf
));
ASSERT
(
size
<=
getBufPageSize
(
pHandle
->
pBuf
));
blockDataToBuf
(
pPage
,
pDataBlock
);
...
...
source/libs/index/src/indexFstDfa.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/parser/src/parAuthenticator.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/parser/src/parInsertSql.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/parser/src/parInsertUtil.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/parser/src/parTranslater.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/planner/src/planLogicCreater.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/qcom/src/querymsg.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/scalar/src/scalar.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/libs/scalar/src/sclfunc.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/os/src/osFile.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tarray.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tcache.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/thash.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tlist.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tlog.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tlrucache.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
source/util/src/tsimplehash.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/parallel_test/cases.task
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/script/tsim/user/privilege_table.sim
0 → 100644
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/script/win-test-file
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/0-others/multilevel.py
0 → 100644
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/1-insert/alter_replica.py
0 → 100644
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/1-insert/database_pre_suf.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/1-insert/delete_systable.py
0 → 100644
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/2-query/select_null.py
0 → 100755
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/2-query/slimit.py
0 → 100644
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/6-cluster/clusterCommonCreate.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/subscribeDb3.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/tmqCommon.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/tmqConsumerGroup.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
tests/system-test/7-tmq/tmqDnodeRestart1.py
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
utils/test/c/sml_test.c
浏览文件 @
2984c5a7
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录