Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
599df650
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
599df650
编写于
7月 18, 2020
作者:
dengyihao
提交者:
GitHub
7月 18, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into hotfix/TD-884
上级
3c4e620f
f28c39da
变更
207
展开全部
显示空白变更内容
内联
并排
Showing
207 changed file
with
2585 addition
and
2037 deletion
+2585
-2037
importSampleData/app/main.go
importSampleData/app/main.go
+122
-126
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+4
-2
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+4
-4
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+17
-26
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+5
-15
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+26
-18
src/client/src/tscServer.c
src/client/src/tscServer.c
+63
-59
src/client/src/tscSql.c
src/client/src/tscSql.c
+3
-3
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+133
-115
src/client/src/tscSystem.c
src/client/src/tscSystem.c
+3
-4
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+17
-17
src/common/inc/tglobal.h
src/common/inc/tglobal.h
+0
-2
src/common/src/tglobal.c
src/common/src/tglobal.c
+15
-25
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
...or/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
+0
-1
src/cq/src/cqMain.c
src/cq/src/cqMain.c
+3
-3
src/dnode/inc/dnodeMgmt.h
src/dnode/inc/dnodeMgmt.h
+2
-2
src/dnode/src/dnodeMgmt.c
src/dnode/src/dnodeMgmt.c
+52
-53
src/dnode/src/dnodePeer.c
src/dnode/src/dnodePeer.c
+12
-12
src/dnode/src/dnodeShell.c
src/dnode/src/dnodeShell.c
+2
-2
src/inc/dnode.h
src/inc/dnode.h
+3
-3
src/inc/taosdef.h
src/inc/taosdef.h
+2
-3
src/inc/taosmsg.h
src/inc/taosmsg.h
+7
-7
src/inc/trpc.h
src/inc/trpc.h
+7
-7
src/inc/tsdb.h
src/inc/tsdb.h
+1
-7
src/kit/taosmigrate/taosmigrate.c
src/kit/taosmigrate/taosmigrate.c
+4
-4
src/kit/taosmigrate/taosmigrate.h
src/kit/taosmigrate/taosmigrate.h
+1
-1
src/kit/taosmigrate/taosmigrateDnodeCfg.c
src/kit/taosmigrate/taosmigrateDnodeCfg.c
+18
-18
src/mnode/inc/mnodeDef.h
src/mnode/inc/mnodeDef.h
+3
-3
src/mnode/inc/mnodeMnode.h
src/mnode/inc/mnodeMnode.h
+3
-3
src/mnode/inc/mnodeVgroup.h
src/mnode/inc/mnodeVgroup.h
+3
-3
src/mnode/src/mnodeBalance.c
src/mnode/src/mnodeBalance.c
+2
-2
src/mnode/src/mnodeDnode.c
src/mnode/src/mnodeDnode.c
+30
-16
src/mnode/src/mnodeMnode.c
src/mnode/src/mnodeMnode.c
+24
-24
src/mnode/src/mnodePeer.c
src/mnode/src/mnodePeer.c
+7
-7
src/mnode/src/mnodeRead.c
src/mnode/src/mnodeRead.c
+7
-7
src/mnode/src/mnodeSdb.c
src/mnode/src/mnodeSdb.c
+1
-1
src/mnode/src/mnodeShow.c
src/mnode/src/mnodeShow.c
+2
-2
src/mnode/src/mnodeTable.c
src/mnode/src/mnodeTable.c
+14
-14
src/mnode/src/mnodeVgroup.c
src/mnode/src/mnodeVgroup.c
+35
-34
src/mnode/src/mnodeWrite.c
src/mnode/src/mnodeWrite.c
+8
-8
src/plugins/monitor/src/monitorMain.c
src/plugins/monitor/src/monitorMain.c
+4
-0
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+1
-2
src/query/inc/qUtil.h
src/query/inc/qUtil.h
+19
-4
src/query/inc/qresultBuf.h
src/query/inc/qresultBuf.h
+13
-17
src/query/inc/tsqlfunction.h
src/query/inc/tsqlfunction.h
+1
-4
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+257
-223
src/query/src/qUtil.c
src/query/src/qUtil.c
+5
-12
src/query/src/qast.c
src/query/src/qast.c
+3
-4
src/query/src/qresultBuf.c
src/query/src/qresultBuf.c
+25
-64
src/rpc/src/rpcMain.c
src/rpc/src/rpcMain.c
+30
-30
src/rpc/src/rpcTcp.c
src/rpc/src/rpcTcp.c
+1
-1
src/rpc/test/rclient.c
src/rpc/test/rclient.c
+15
-15
src/rpc/test/rsclient.c
src/rpc/test/rsclient.c
+13
-13
src/rpc/test/rserver.c
src/rpc/test/rserver.c
+1
-1
src/tsdb/src/tsdbMain.c
src/tsdb/src/tsdbMain.c
+2
-1
src/tsdb/src/tsdbMemTable.c
src/tsdb/src/tsdbMemTable.c
+6
-1
src/tsdb/src/tsdbMeta.c
src/tsdb/src/tsdbMeta.c
+1
-1
src/tsdb/src/tsdbRWHelper.c
src/tsdb/src/tsdbRWHelper.c
+20
-9
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+140
-97
src/tsdb/tests/tsdbTests.cpp
src/tsdb/tests/tsdbTests.cpp
+9
-6
src/util/src/tcache.c
src/util/src/tcache.c
+3
-43
src/vnode/src/vnodeMain.c
src/vnode/src/vnodeMain.c
+7
-9
tests/comparisonTest/tdengine/q5.txt
tests/comparisonTest/tdengine/q5.txt
+1
-0
tests/comparisonTest/tdengine/tdengineTest.c
tests/comparisonTest/tdengine/tdengineTest.c
+54
-21
tests/perftest-scripts/tdengineTestQ1Loop.sh
tests/perftest-scripts/tdengineTestQ1Loop.sh
+127
-0
tests/perftest-scripts/tdengineTestQ2Loop.sh
tests/perftest-scripts/tdengineTestQ2Loop.sh
+348
-0
tests/perftest-scripts/tdengineTestQ3Loop.sh
tests/perftest-scripts/tdengineTestQ3Loop.sh
+124
-0
tests/perftest-scripts/tdengineTestQ4Loop.sh
tests/perftest-scripts/tdengineTestQ4Loop.sh
+124
-0
tests/perftest-scripts/tdengineTestQ5Loop.sh
tests/perftest-scripts/tdengineTestQ5Loop.sh
+107
-0
tests/perftest-scripts/tdengineTestWriteLoop.sh
tests/perftest-scripts/tdengineTestWriteLoop.sh
+116
-0
tests/pytest/tag_lite/add.py
tests/pytest/tag_lite/add.py
+2
-0
tests/pytest/util/dnodes-no-random-fail.py
tests/pytest/util/dnodes-no-random-fail.py
+0
-1
tests/pytest/util/dnodes-random-fail.py
tests/pytest/util/dnodes-random-fail.py
+0
-1
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+0
-1
tests/script/general/alter/cached_schema_after_alter.sim
tests/script/general/alter/cached_schema_after_alter.sim
+2
-2
tests/script/general/db/alter_option.sim
tests/script/general/db/alter_option.sim
+0
-1
tests/script/general/db/basic.sim
tests/script/general/db/basic.sim
+1
-3
tests/script/general/db/delete.sim
tests/script/general/db/delete.sim
+0
-1
tests/script/general/db/delete_reuse1.sim
tests/script/general/db/delete_reuse1.sim
+0
-5
tests/script/general/db/delete_reuse2.sim
tests/script/general/db/delete_reuse2.sim
+0
-5
tests/script/general/db/delete_reusevnode.sim
tests/script/general/db/delete_reusevnode.sim
+0
-7
tests/script/general/db/delete_reusevnode2.sim
tests/script/general/db/delete_reusevnode2.sim
+0
-3
tests/script/general/db/delete_writing1.sim
tests/script/general/db/delete_writing1.sim
+0
-5
tests/script/general/db/delete_writing2.sim
tests/script/general/db/delete_writing2.sim
+0
-1
tests/script/general/db/len.sim
tests/script/general/db/len.sim
+0
-1
tests/script/general/db/repeat.sim
tests/script/general/db/repeat.sim
+0
-1
tests/script/general/db/vnodes.sim
tests/script/general/db/vnodes.sim
+0
-1
tests/script/general/parser/bug.sim
tests/script/general/parser/bug.sim
+0
-1
tests/script/general/parser/first_last_query.sim
tests/script/general/parser/first_last_query.sim
+11
-0
tests/script/general/parser/null_char.sim
tests/script/general/parser/null_char.sim
+15
-0
tests/script/general/parser/select_across_vnodes.sim
tests/script/general/parser/select_across_vnodes.sim
+0
-1
tests/script/general/parser/select_from_cache_disk.sim
tests/script/general/parser/select_from_cache_disk.sim
+0
-1
tests/script/general/parser/slimit.sim
tests/script/general/parser/slimit.sim
+0
-1
tests/script/general/parser/slimit1.sim
tests/script/general/parser/slimit1.sim
+0
-1
tests/script/general/parser/slimit_alter_tags.sim
tests/script/general/parser/slimit_alter_tags.sim
+0
-1
tests/script/general/parser/testSuite.sim
tests/script/general/parser/testSuite.sim
+3
-5
tests/script/general/parser/timestamp.sim
tests/script/general/parser/timestamp.sim
+0
-1
tests/script/general/parser/union.sim
tests/script/general/parser/union.sim
+82
-78
tests/script/general/stable/disk.sim
tests/script/general/stable/disk.sim
+0
-1
tests/script/general/stable/dnode3.sim
tests/script/general/stable/dnode3.sim
+0
-4
tests/script/general/stable/metrics.sim
tests/script/general/stable/metrics.sim
+0
-1
tests/script/general/stable/refcount.sim
tests/script/general/stable/refcount.sim
+0
-1
tests/script/general/stable/show.sim
tests/script/general/stable/show.sim
+0
-1
tests/script/general/stable/values.sim
tests/script/general/stable/values.sim
+0
-1
tests/script/general/stable/vnode3.sim
tests/script/general/stable/vnode3.sim
+0
-2
tests/script/general/stream/metrics_replica1_vnoden.sim
tests/script/general/stream/metrics_replica1_vnoden.sim
+0
-1
tests/script/general/stream/table_replica1_vnoden.sim
tests/script/general/stream/table_replica1_vnoden.sim
+0
-1
tests/script/general/table/delete_reuse1.sim
tests/script/general/table/delete_reuse1.sim
+0
-5
tests/script/general/table/delete_reuse2.sim
tests/script/general/table/delete_reuse2.sim
+0
-5
tests/script/general/table/delete_writing.sim
tests/script/general/table/delete_writing.sim
+0
-5
tests/script/general/table/limit.sim
tests/script/general/table/limit.sim
+0
-1
tests/script/general/table/vgroup.sim
tests/script/general/table/vgroup.sim
+1
-8
tests/script/sh/clear.sh
tests/script/sh/clear.sh
+0
-1
tests/script/sh/deploy.sh
tests/script/sh/deploy.sh
+0
-1
tests/script/tmp/http.sim
tests/script/tmp/http.sim
+0
-5
tests/script/tmp/mnodes.sim
tests/script/tmp/mnodes.sim
+0
-4
tests/script/unique/account/authority.sim
tests/script/unique/account/authority.sim
+0
-1
tests/script/unique/arbitrator/dn2_mn1_cache_file_sync.sim
tests/script/unique/arbitrator/dn2_mn1_cache_file_sync.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_full_createTableFail.sim
...script/unique/arbitrator/dn3_mn1_full_createTableFail.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_full_dropDnodeFail.sim
...s/script/unique/arbitrator/dn3_mn1_full_dropDnodeFail.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_multiCreateDropTable.sim
...script/unique/arbitrator/dn3_mn1_multiCreateDropTable.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_nw_disable_timeout_autoDropDnode.sim
...e/arbitrator/dn3_mn1_nw_disable_timeout_autoDropDnode.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_r2_vnode_delDir.sim
tests/script/unique/arbitrator/dn3_mn1_r2_vnode_delDir.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_r3_vnode_delDir.sim
tests/script/unique/arbitrator/dn3_mn1_r3_vnode_delDir.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_replica2_wal1_AddDelDnode.sim
...t/unique/arbitrator/dn3_mn1_replica2_wal1_AddDelDnode.sim
+6
-13
tests/script/unique/arbitrator/dn3_mn1_replica_change.sim
tests/script/unique/arbitrator/dn3_mn1_replica_change.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_replica_change_dropDnod.sim
...ipt/unique/arbitrator/dn3_mn1_replica_change_dropDnod.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_stopDnode_timeout.sim
tests/script/unique/arbitrator/dn3_mn1_stopDnode_timeout.sim
+5
-10
tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim
tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_offline.sim
...t/unique/arbitrator/dn3_mn1_vnode_corruptFile_offline.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim
...pt/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_createErrData_online.sim
.../unique/arbitrator/dn3_mn1_vnode_createErrData_online.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_delDir.sim
tests/script/unique/arbitrator/dn3_mn1_vnode_delDir.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_noCorruptFile_offline.sim
...unique/arbitrator/dn3_mn1_vnode_noCorruptFile_offline.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn1_vnode_nomaster.sim
tests/script/unique/arbitrator/dn3_mn1_vnode_nomaster.sim
+4
-9
tests/script/unique/arbitrator/dn3_mn2_killDnode.sim
tests/script/unique/arbitrator/dn3_mn2_killDnode.sim
+4
-9
tests/script/unique/arbitrator/insert_duplicationTs.sim
tests/script/unique/arbitrator/insert_duplicationTs.sim
+4
-9
tests/script/unique/arbitrator/offline_replica2_alterTable_online.sim
.../unique/arbitrator/offline_replica2_alterTable_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica2_alterTag_online.sim
...pt/unique/arbitrator/offline_replica2_alterTag_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica2_createTable_online.sim
...unique/arbitrator/offline_replica2_createTable_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica2_dropDb_online.sim
...ript/unique/arbitrator/offline_replica2_dropDb_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica2_dropTable_online.sim
...t/unique/arbitrator/offline_replica2_dropTable_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica3_alterTable_online.sim
.../unique/arbitrator/offline_replica3_alterTable_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica3_alterTag_online.sim
...pt/unique/arbitrator/offline_replica3_alterTag_online.sim
+4
-4
tests/script/unique/arbitrator/offline_replica3_createTable_online.sim
...unique/arbitrator/offline_replica3_createTable_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica3_dropDb_online.sim
...ript/unique/arbitrator/offline_replica3_dropDb_online.sim
+4
-9
tests/script/unique/arbitrator/offline_replica3_dropTable_online.sim
...t/unique/arbitrator/offline_replica3_dropTable_online.sim
+4
-9
tests/script/unique/arbitrator/replica_changeWithArbitrator.sim
...script/unique/arbitrator/replica_changeWithArbitrator.sim
+6
-11
tests/script/unique/arbitrator/sync_replica2_alterTable_add.sim
...script/unique/arbitrator/sync_replica2_alterTable_add.sim
+4
-9
tests/script/unique/arbitrator/sync_replica2_alterTable_drop.sim
...cript/unique/arbitrator/sync_replica2_alterTable_drop.sim
+4
-9
tests/script/unique/arbitrator/sync_replica2_dropDb.sim
tests/script/unique/arbitrator/sync_replica2_dropDb.sim
+4
-9
tests/script/unique/arbitrator/sync_replica2_dropTable.sim
tests/script/unique/arbitrator/sync_replica2_dropTable.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_alterTable_add.sim
...script/unique/arbitrator/sync_replica3_alterTable_add.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_alterTable_drop.sim
...cript/unique/arbitrator/sync_replica3_alterTable_drop.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_createTable.sim
tests/script/unique/arbitrator/sync_replica3_createTable.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim
...ator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_dropDb.sim
tests/script/unique/arbitrator/sync_replica3_dropDb.sim
+4
-9
tests/script/unique/arbitrator/sync_replica3_dropTable.sim
tests/script/unique/arbitrator/sync_replica3_dropTable.sim
+4
-9
tests/script/unique/big/balance.sim
tests/script/unique/big/balance.sim
+0
-5
tests/script/unique/big/maxvnodes.sim
tests/script/unique/big/maxvnodes.sim
+0
-2
tests/script/unique/big/restartSpeed.sim
tests/script/unique/big/restartSpeed.sim
+0
-2
tests/script/unique/cluster/balance1.sim
tests/script/unique/cluster/balance1.sim
+0
-9
tests/script/unique/cluster/balance2.sim
tests/script/unique/cluster/balance2.sim
+0
-9
tests/script/unique/cluster/balance3.sim
tests/script/unique/cluster/balance3.sim
+0
-9
tests/script/unique/cluster/client1_0.sim
tests/script/unique/cluster/client1_0.sim
+0
-5
tests/script/unique/cluster/cluster_main.sim
tests/script/unique/cluster/cluster_main.sim
+5
-11
tests/script/unique/cluster/cluster_main0.sim
tests/script/unique/cluster/cluster_main0.sim
+5
-11
tests/script/unique/cluster/cluster_main1.sim
tests/script/unique/cluster/cluster_main1.sim
+5
-11
tests/script/unique/cluster/cluster_main2.sim
tests/script/unique/cluster/cluster_main2.sim
+5
-11
tests/script/unique/cluster/main1_client1_0.sim
tests/script/unique/cluster/main1_client1_0.sim
+1
-2
tests/script/unique/cluster/main2_client1_0.sim
tests/script/unique/cluster/main2_client1_0.sim
+0
-1
tests/script/unique/db/delete.sim
tests/script/unique/db/delete.sim
+0
-3
tests/script/unique/db/delete_part.sim
tests/script/unique/db/delete_part.sim
+4
-9
tests/script/unique/db/replica_add12.sim
tests/script/unique/db/replica_add12.sim
+0
-5
tests/script/unique/db/replica_add13.sim
tests/script/unique/db/replica_add13.sim
+0
-5
tests/script/unique/db/replica_add23.sim
tests/script/unique/db/replica_add23.sim
+0
-5
tests/script/unique/db/replica_part.sim
tests/script/unique/db/replica_part.sim
+0
-3
tests/script/unique/db/replica_reduce21.sim
tests/script/unique/db/replica_reduce21.sim
+0
-6
tests/script/unique/db/replica_reduce31.sim
tests/script/unique/db/replica_reduce31.sim
+0
-3
tests/script/unique/db/replica_reduce32.sim
tests/script/unique/db/replica_reduce32.sim
+0
-3
tests/script/unique/dnode/alternativeRole.sim
tests/script/unique/dnode/alternativeRole.sim
+3
-3
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeDir.sim
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeDir.sim
+4
-9
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir.sim
...s/script/unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir.sim
+4
-9
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir_stopAll_starAll.sim
...migrate/mn2_vn2_repl2_rmMnodeVnodeDir_stopAll_starAll.sim
+4
-9
tests/script/unique/migrate/mn2_vn2_repl2_rmVnodeDir.sim
tests/script/unique/migrate/mn2_vn2_repl2_rmVnodeDir.sim
+4
-9
tests/script/unique/stable/balance_replica1.sim
tests/script/unique/stable/balance_replica1.sim
+0
-2
tests/script/unique/stable/dnode2.sim
tests/script/unique/stable/dnode2.sim
+0
-2
tests/script/unique/stable/dnode2_stop.sim
tests/script/unique/stable/dnode2_stop.sim
+0
-2
tests/script/unique/stable/dnode3.sim
tests/script/unique/stable/dnode3.sim
+0
-3
tests/script/unique/stable/replica2_dnode4.sim
tests/script/unique/stable/replica2_dnode4.sim
+0
-4
tests/script/unique/stable/replica2_vnode3.sim
tests/script/unique/stable/replica2_vnode3.sim
+0
-2
tests/script/unique/stable/replica3_dnode6.sim
tests/script/unique/stable/replica3_dnode6.sim
+0
-7
tests/script/unique/stable/replica3_vnode3.sim
tests/script/unique/stable/replica3_vnode3.sim
+0
-4
tests/script/unique/stream/metrics_balance.sim
tests/script/unique/stream/metrics_balance.sim
+0
-2
tests/script/unique/stream/metrics_replica1_dnode2.sim
tests/script/unique/stream/metrics_replica1_dnode2.sim
+0
-2
tests/script/unique/stream/metrics_replica2_dnode2_vnoden.sim
...s/script/unique/stream/metrics_replica2_dnode2_vnoden.sim
+0
-2
tests/script/unique/stream/metrics_replica2_dnode3.sim
tests/script/unique/stream/metrics_replica2_dnode3.sim
+0
-3
tests/script/unique/stream/metrics_replica3_dnode4.sim
tests/script/unique/stream/metrics_replica3_dnode4.sim
+0
-4
tests/script/unique/stream/table_balance.sim
tests/script/unique/stream/table_balance.sim
+0
-4
tests/script/unique/stream/table_move.sim
tests/script/unique/stream/table_move.sim
+0
-10
tests/script/unique/stream/table_replica1_dnode2.sim
tests/script/unique/stream/table_replica1_dnode2.sim
+0
-4
tests/script/unique/stream/table_replica2_dnode2_vnoden.sim
tests/script/unique/stream/table_replica2_dnode2_vnoden.sim
+0
-2
tests/script/unique/stream/table_replica2_dnode3.sim
tests/script/unique/stream/table_replica2_dnode3.sim
+0
-3
tests/script/unique/stream/table_replica3_dnode4.sim
tests/script/unique/stream/table_replica3_dnode4.sim
+0
-4
tests/script/unique/vnode/many.sim
tests/script/unique/vnode/many.sim
+0
-4
tests/script/unique/vnode/replica2_basic2.sim
tests/script/unique/vnode/replica2_basic2.sim
+0
-5
tests/tsim/src/simExe.c
tests/tsim/src/simExe.c
+13
-3
未找到文件。
importSampleData/app/main.go
浏览文件 @
599df650
...
@@ -7,7 +7,6 @@ import (
...
@@ -7,7 +7,6 @@ import (
"encoding/json"
"encoding/json"
"flag"
"flag"
"fmt"
"fmt"
"github.com/taosdata/TDengine/importSampleData/import"
"hash/crc32"
"hash/crc32"
"io"
"io"
"log"
"log"
...
@@ -18,6 +17,8 @@ import (
...
@@ -18,6 +17,8 @@ import (
"sync"
"sync"
"time"
"time"
dataimport
"github.com/taosdata/TDengine/importSampleData/import"
_
"github.com/taosdata/driver-go/taosSql"
_
"github.com/taosdata/driver-go/taosSql"
)
)
...
@@ -26,7 +27,7 @@ const (
...
@@ -26,7 +27,7 @@ const (
DATETIME
=
"datetime"
DATETIME
=
"datetime"
MILLISECOND
=
"millisecond"
MILLISECOND
=
"millisecond"
DEFAULT_STARTTIME
int64
=
-
1
DEFAULT_STARTTIME
int64
=
-
1
DEFAULT_INTERVAL
int64
=
1
*
1000
DEFAULT_INTERVAL
int64
=
1
*
1000
DEFAULT_DELAY
int64
=
-
1
DEFAULT_DELAY
int64
=
-
1
DEFAULT_STATISTIC_TABLE
=
"statistic"
DEFAULT_STATISTIC_TABLE
=
"statistic"
...
@@ -41,7 +42,6 @@ const (
...
@@ -41,7 +42,6 @@ const (
)
)
var
(
var
(
cfg
string
cfg
string
cases
string
cases
string
hnum
int
hnum
int
...
@@ -127,7 +127,7 @@ func init() {
...
@@ -127,7 +127,7 @@ func init() {
if
db
==
""
{
if
db
==
""
{
//db = "go"
//db = "go"
db
=
fmt
.
Sprintf
(
"test_%s"
,
time
.
Now
()
.
Format
(
"20060102"
))
db
=
fmt
.
Sprintf
(
"test_%s"
,
time
.
Now
()
.
Format
(
"20060102"
))
}
}
if
auto
==
1
&&
len
(
starttimestr
)
==
0
{
if
auto
==
1
&&
len
(
starttimestr
)
==
0
{
...
@@ -141,7 +141,7 @@ func init() {
...
@@ -141,7 +141,7 @@ func init() {
}
}
startTime
=
t
.
UnixNano
()
/
1e6
// as millisecond
startTime
=
t
.
UnixNano
()
/
1e6
// as millisecond
}
else
{
}
else
{
startTime
=
DEFAULT_STARTTIME
startTime
=
DEFAULT_STARTTIME
}
}
...
@@ -179,7 +179,7 @@ func main() {
...
@@ -179,7 +179,7 @@ func main() {
_
,
exists
:=
superTableConfigMap
[
caseConfig
.
Stname
]
_
,
exists
:=
superTableConfigMap
[
caseConfig
.
Stname
]
if
!
exists
{
if
!
exists
{
superTableConfigMap
[
caseConfig
.
Stname
]
=
&
superTableConfig
{
config
:
caseConfig
}
superTableConfigMap
[
caseConfig
.
Stname
]
=
&
superTableConfig
{
config
:
caseConfig
}
}
else
{
}
else
{
log
.
Fatalf
(
"the stname of case %s already exist.
\n
"
,
caseConfig
.
Stname
)
log
.
Fatalf
(
"the stname of case %s already exist.
\n
"
,
caseConfig
.
Stname
)
}
}
...
@@ -259,27 +259,27 @@ func main() {
...
@@ -259,27 +259,27 @@ func main() {
total
:=
getTotalRows
(
successRows
)
total
:=
getTotalRows
(
successRows
)
log
.
Printf
(
"finished insert %d rows, used %d ms, speed %d rows/s"
,
total
,
usedTime
/
1e6
,
total
*
1e9
/
int64
(
usedTime
))
log
.
Printf
(
"finished insert %d rows, used %d ms, speed %d rows/s"
,
total
,
usedTime
/
1e6
,
total
*
1e3
/
usedTime
.
Milliseconds
(
))
if
vnum
==
0
{
if
vnum
==
0
{
// continue waiting for insert data
// continue waiting for insert data
wait
:=
make
(
chan
string
)
wait
:=
make
(
chan
string
)
v
:=
<-
wait
v
:=
<-
wait
log
.
Printf
(
"program receive %s, exited.
\n
"
,
v
)
log
.
Printf
(
"program receive %s, exited.
\n
"
,
v
)
}
else
{
}
else
{
timeTicker
.
Stop
()
timeTicker
.
Stop
()
}
}
}
}
func
staticSpeed
(){
func
staticSpeed
()
{
connection
:=
getConnection
()
connection
:=
getConnection
()
defer
connection
.
Close
()
defer
connection
.
Close
()
if
save
==
1
{
if
save
==
1
{
connection
.
Exec
(
"use "
+
db
)
connection
.
Exec
(
"use "
+
db
)
_
,
err
:=
connection
.
Exec
(
"create table if not exists "
+
saveTable
+
"(ts timestamp, speed int)"
)
_
,
err
:=
connection
.
Exec
(
"create table if not exists "
+
saveTable
+
"(ts timestamp, speed int)"
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Fatalf
(
"create %s Table error: %s
\n
"
,
saveTable
,
err
)
log
.
Fatalf
(
"create %s Table error: %s
\n
"
,
saveTable
,
err
)
}
}
...
@@ -308,7 +308,7 @@ func staticSpeed(){
...
@@ -308,7 +308,7 @@ func staticSpeed(){
}
}
func
getTotalRows
(
successRows
[]
int64
)
int64
{
func
getTotalRows
(
successRows
[]
int64
)
int64
{
var
total
int64
=
0
var
total
int64
=
0
for
j
:=
0
;
j
<
len
(
successRows
);
j
++
{
for
j
:=
0
;
j
<
len
(
successRows
);
j
++
{
total
+=
successRows
[
j
]
total
+=
successRows
[
j
]
...
@@ -316,18 +316,18 @@ func getTotalRows(successRows []int64) int64{
...
@@ -316,18 +316,18 @@ func getTotalRows(successRows []int64) int64{
return
total
return
total
}
}
func
getSuperTableTimeConfig
(
fileRows
dataRows
)
(
start
,
cycleTime
,
avgInterval
int64
){
func
getSuperTableTimeConfig
(
fileRows
dataRows
)
(
start
,
cycleTime
,
avgInterval
int64
)
{
if
auto
==
1
{
if
auto
==
1
{
// use auto generate data time
// use auto generate data time
start
=
startTime
start
=
startTime
avgInterval
=
interval
avgInterval
=
interval
maxTableRows
:=
normalizationDataWithSameInterval
(
fileRows
,
avgInterval
)
maxTableRows
:=
normalizationDataWithSameInterval
(
fileRows
,
avgInterval
)
cycleTime
=
maxTableRows
*
avgInterval
+
avgInterval
cycleTime
=
maxTableRows
*
avgInterval
+
avgInterval
}
else
{
}
else
{
// use the sample data primary timestamp
// use the sample data primary timestamp
sort
.
Sort
(
fileRows
)
// sort the file data by the primarykey
sort
.
Sort
(
fileRows
)
// sort the file data by the primarykey
minTime
:=
getPrimaryKey
(
fileRows
.
rows
[
0
][
fileRows
.
config
.
Timestamp
])
minTime
:=
getPrimaryKey
(
fileRows
.
rows
[
0
][
fileRows
.
config
.
Timestamp
])
maxTime
:=
getPrimaryKey
(
fileRows
.
rows
[
len
(
fileRows
.
rows
)
-
1
][
fileRows
.
config
.
Timestamp
])
maxTime
:=
getPrimaryKey
(
fileRows
.
rows
[
len
(
fileRows
.
rows
)
-
1
][
fileRows
.
config
.
Timestamp
])
...
@@ -340,8 +340,8 @@ func getSuperTableTimeConfig(fileRows dataRows) (start, cycleTime, avgInterval i
...
@@ -340,8 +340,8 @@ func getSuperTableTimeConfig(fileRows dataRows) (start, cycleTime, avgInterval i
if
minTime
==
maxTime
{
if
minTime
==
maxTime
{
avgInterval
=
interval
avgInterval
=
interval
cycleTime
=
tableNum
*
avgInterval
+
avgInterval
cycleTime
=
tableNum
*
avgInterval
+
avgInterval
}
else
{
}
else
{
avgInterval
=
(
maxTime
-
minTime
)
/
int64
(
len
(
fileRows
.
rows
))
*
tableNum
avgInterval
=
(
maxTime
-
minTime
)
/
int64
(
len
(
fileRows
.
rows
))
*
tableNum
cycleTime
=
maxTime
-
minTime
+
avgInterval
cycleTime
=
maxTime
-
minTime
+
avgInterval
}
}
...
@@ -350,11 +350,11 @@ func getSuperTableTimeConfig(fileRows dataRows) (start, cycleTime, avgInterval i
...
@@ -350,11 +350,11 @@ func getSuperTableTimeConfig(fileRows dataRows) (start, cycleTime, avgInterval i
return
return
}
}
func
createStatisticTable
(){
func
createStatisticTable
()
{
connection
:=
getConnection
()
connection
:=
getConnection
()
defer
connection
.
Close
()
defer
connection
.
Close
()
_
,
err
:=
connection
.
Exec
(
"create table if not exist "
+
db
+
"."
+
saveTable
+
"(ts timestamp, speed int)"
)
_
,
err
:=
connection
.
Exec
(
"create table if not exist "
+
db
+
"."
+
saveTable
+
"(ts timestamp, speed int)"
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Fatalf
(
"createStatisticTable error: %s
\n
"
,
err
)
log
.
Fatalf
(
"createStatisticTable error: %s
\n
"
,
err
)
}
}
...
@@ -389,12 +389,12 @@ func createSubTable(subTableMaps map[string]*dataRows) {
...
@@ -389,12 +389,12 @@ func createSubTable(subTableMaps map[string]*dataRows) {
buffers
.
WriteString
(
" using "
)
buffers
.
WriteString
(
" using "
)
buffers
.
WriteString
(
superTableName
)
buffers
.
WriteString
(
superTableName
)
buffers
.
WriteString
(
" tags("
)
buffers
.
WriteString
(
" tags("
)
for
_
,
tag
:=
range
subTableMaps
[
subTableName
]
.
config
.
Tags
{
for
_
,
tag
:=
range
subTableMaps
[
subTableName
]
.
config
.
Tags
{
tagValue
:=
fmt
.
Sprintf
(
"%v"
,
tagValues
[
strings
.
ToLower
(
tag
.
Name
)])
tagValue
:=
fmt
.
Sprintf
(
"%v"
,
tagValues
[
strings
.
ToLower
(
tag
.
Name
)])
buffers
.
WriteString
(
"'"
+
tagValue
+
"'"
)
buffers
.
WriteString
(
"'"
+
tagValue
+
"'"
)
buffers
.
WriteString
(
","
)
buffers
.
WriteString
(
","
)
}
}
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
WriteString
(
")"
)
buffers
.
WriteString
(
")"
)
createTableSql
:=
buffers
.
String
()
createTableSql
:=
buffers
.
String
()
...
@@ -451,14 +451,14 @@ func createSuperTable(superTableConfigMap map[string]*superTableConfig) {
...
@@ -451,14 +451,14 @@ func createSuperTable(superTableConfigMap map[string]*superTableConfig) {
buffer
.
WriteString
(
field
.
Name
+
" "
+
field
.
Type
+
","
)
buffer
.
WriteString
(
field
.
Name
+
" "
+
field
.
Type
+
","
)
}
}
buffer
.
Truncate
(
buffer
.
Len
()
-
1
)
buffer
.
Truncate
(
buffer
.
Len
()
-
1
)
buffer
.
WriteString
(
") tags( "
)
buffer
.
WriteString
(
") tags( "
)
for
_
,
tag
:=
range
superTableConf
.
config
.
Tags
{
for
_
,
tag
:=
range
superTableConf
.
config
.
Tags
{
buffer
.
WriteString
(
tag
.
Name
+
" "
+
tag
.
Type
+
","
)
buffer
.
WriteString
(
tag
.
Name
+
" "
+
tag
.
Type
+
","
)
}
}
buffer
.
Truncate
(
buffer
.
Len
()
-
1
)
buffer
.
Truncate
(
buffer
.
Len
()
-
1
)
buffer
.
WriteString
(
")"
)
buffer
.
WriteString
(
")"
)
createSql
:=
buffer
.
String
()
createSql
:=
buffer
.
String
()
...
@@ -477,14 +477,13 @@ func getScaleSubTableName(subTableName string, hnum int) string {
...
@@ -477,14 +477,13 @@ func getScaleSubTableName(subTableName string, hnum int) string {
if
hnum
==
0
{
if
hnum
==
0
{
return
subTableName
return
subTableName
}
}
return
fmt
.
Sprintf
(
"%s_%d"
,
subTableName
,
hnum
)
return
fmt
.
Sprintf
(
"%s_%d"
,
subTableName
,
hnum
)
}
}
func
getSuperTableName
(
stname
string
)
string
{
func
getSuperTableName
(
stname
string
)
string
{
return
SUPERTABLE_PREFIX
+
stname
return
SUPERTABLE_PREFIX
+
stname
}
}
/**
/**
* normalizationData , and return the num of subTables
* normalizationData , and return the num of subTables
*/
*/
...
@@ -510,7 +509,7 @@ func normalizationData(fileRows dataRows, minTime int64) int64 {
...
@@ -510,7 +509,7 @@ func normalizationData(fileRows dataRows, minTime int64) int64 {
}
}
tableNum
++
tableNum
++
}
else
{
}
else
{
value
.
rows
=
append
(
value
.
rows
,
row
)
value
.
rows
=
append
(
value
.
rows
,
row
)
}
}
}
}
...
@@ -518,7 +517,7 @@ func normalizationData(fileRows dataRows, minTime int64) int64 {
...
@@ -518,7 +517,7 @@ func normalizationData(fileRows dataRows, minTime int64) int64 {
}
}
// return the maximum table rows
// return the maximum table rows
func
normalizationDataWithSameInterval
(
fileRows
dataRows
,
avgInterval
int64
)
int64
{
func
normalizationDataWithSameInterval
(
fileRows
dataRows
,
avgInterval
int64
)
int64
{
// subTableMap
// subTableMap
currSubTableMap
:=
make
(
map
[
string
]
*
dataRows
)
currSubTableMap
:=
make
(
map
[
string
]
*
dataRows
)
for
_
,
row
:=
range
fileRows
.
rows
{
for
_
,
row
:=
range
fileRows
.
rows
{
...
@@ -537,7 +536,7 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
...
@@ -537,7 +536,7 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
rows
:
[]
map
[
string
]
interface
{}{
row
},
rows
:
[]
map
[
string
]
interface
{}{
row
},
config
:
fileRows
.
config
,
config
:
fileRows
.
config
,
}
}
}
else
{
}
else
{
row
[
fileRows
.
config
.
Timestamp
]
=
int64
(
len
(
value
.
rows
))
*
avgInterval
row
[
fileRows
.
config
.
Timestamp
]
=
int64
(
len
(
value
.
rows
))
*
avgInterval
value
.
rows
=
append
(
value
.
rows
,
row
)
value
.
rows
=
append
(
value
.
rows
,
row
)
}
}
...
@@ -545,7 +544,7 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
...
@@ -545,7 +544,7 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
}
}
var
maxRows
,
tableRows
int
=
0
,
0
var
maxRows
,
tableRows
int
=
0
,
0
for
tableName
:=
range
currSubTableMap
{
for
tableName
:=
range
currSubTableMap
{
tableRows
=
len
(
currSubTableMap
[
tableName
]
.
rows
)
tableRows
=
len
(
currSubTableMap
[
tableName
]
.
rows
)
subTableMap
[
tableName
]
=
currSubTableMap
[
tableName
]
// add to global subTableMap
subTableMap
[
tableName
]
=
currSubTableMap
[
tableName
]
// add to global subTableMap
if
tableRows
>
maxRows
{
if
tableRows
>
maxRows
{
...
@@ -556,12 +555,10 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
...
@@ -556,12 +555,10 @@ func normalizationDataWithSameInterval(fileRows dataRows, avgInterval int64) int
return
int64
(
maxRows
)
return
int64
(
maxRows
)
}
}
func
getSubTableName
(
subTableValue
string
,
superTableName
string
)
string
{
func
getSubTableName
(
subTableValue
string
,
superTableName
string
)
string
{
return
SUBTABLE_PREFIX
+
subTableValue
+
"_"
+
superTableName
return
SUBTABLE_PREFIX
+
subTableValue
+
"_"
+
superTableName
}
}
func
insertData
(
threadIndex
,
start
,
end
int
,
wg
*
sync
.
WaitGroup
,
successRows
[]
int64
)
{
func
insertData
(
threadIndex
,
start
,
end
int
,
wg
*
sync
.
WaitGroup
,
successRows
[]
int64
)
{
connection
:=
getConnection
()
connection
:=
getConnection
()
defer
connection
.
Close
()
defer
connection
.
Close
()
...
@@ -591,9 +588,9 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -591,9 +588,9 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
var
tableEndTime
int64
var
tableEndTime
int64
if
vnum
==
0
{
if
vnum
==
0
{
// need continue generate data
// need continue generate data
tableEndTime
=
time
.
Now
()
.
UnixNano
()
/
1e6
tableEndTime
=
time
.
Now
()
.
UnixNano
()
/
1e6
}
else
{
}
else
{
tableEndTime
=
tableStartTime
+
superTableConf
.
cycleTime
*
int64
(
vnum
)
-
superTableConf
.
avgInterval
tableEndTime
=
tableStartTime
+
superTableConf
.
cycleTime
*
int64
(
vnum
)
-
superTableConf
.
avgInterval
}
}
insertRows
:=
scaleTableMap
[
tableName
]
.
insertRows
insertRows
:=
scaleTableMap
[
tableName
]
.
insertRows
...
@@ -603,7 +600,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -603,7 +600,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
rowIndex
:=
insertRows
%
subTableRows
rowIndex
:=
insertRows
%
subTableRows
currentRow
:=
subTableInfo
.
rows
[
rowIndex
]
currentRow
:=
subTableInfo
.
rows
[
rowIndex
]
currentTime
:=
getPrimaryKey
(
currentRow
[
subTableInfo
.
config
.
Timestamp
])
+
loopNum
*
superTableConf
.
cycleTime
+
tableStartTime
currentTime
:=
getPrimaryKey
(
currentRow
[
subTableInfo
.
config
.
Timestamp
])
+
loopNum
*
superTableConf
.
cycleTime
+
tableStartTime
if
currentTime
<=
tableEndTime
{
if
currentTime
<=
tableEndTime
{
// append
// append
...
@@ -618,7 +615,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -618,7 +615,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
buffers
.
WriteString
(
","
)
buffers
.
WriteString
(
","
)
// fieldNum := len(subTableInfo.config.Fields)
// fieldNum := len(subTableInfo.config.Fields)
for
_
,
field
:=
range
subTableInfo
.
config
.
Fields
{
for
_
,
field
:=
range
subTableInfo
.
config
.
Fields
{
buffers
.
WriteString
(
getFieldValue
(
currentRow
[
strings
.
ToLower
(
field
.
Name
)]))
buffers
.
WriteString
(
getFieldValue
(
currentRow
[
strings
.
ToLower
(
field
.
Name
)]))
buffers
.
WriteString
(
","
)
buffers
.
WriteString
(
","
)
// if( i != fieldNum -1){
// if( i != fieldNum -1){
...
@@ -626,7 +623,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -626,7 +623,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
// }
// }
}
}
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
WriteString
(
") "
)
buffers
.
WriteString
(
") "
)
appendRows
++
appendRows
++
...
@@ -645,7 +642,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -645,7 +642,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
lastTableName
=
""
lastTableName
=
""
appendRows
=
0
appendRows
=
0
}
}
}
else
{
}
else
{
// finished insert current table
// finished insert current table
break
break
}
}
...
@@ -676,7 +673,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -676,7 +673,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
break
break
}
}
if
(
num
==
0
)
{
if
num
==
0
{
wg
.
Done
()
//finished insert history data
wg
.
Done
()
//finished insert history data
num
++
num
++
}
}
...
@@ -691,7 +688,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
...
@@ -691,7 +688,7 @@ func insertData(threadIndex, start, end int, wg *sync.WaitGroup, successRows []
}
}
func
buildSql
(
rows
[]
tableRows
)
string
{
func
buildSql
(
rows
[]
tableRows
)
string
{
var
lastTableName
string
var
lastTableName
string
...
@@ -709,7 +706,7 @@ func buildSql(rows []tableRows) string{
...
@@ -709,7 +706,7 @@ func buildSql(rows []tableRows) string{
if
lastTableName
==
row
.
tableName
{
if
lastTableName
==
row
.
tableName
{
buffers
.
WriteString
(
row
.
value
)
buffers
.
WriteString
(
row
.
value
)
}
else
{
}
else
{
buffers
.
WriteString
(
" "
)
buffers
.
WriteString
(
" "
)
buffers
.
WriteString
(
row
.
tableName
)
buffers
.
WriteString
(
row
.
tableName
)
buffers
.
WriteString
(
" values"
)
buffers
.
WriteString
(
" values"
)
...
@@ -722,7 +719,7 @@ func buildSql(rows []tableRows) string{
...
@@ -722,7 +719,7 @@ func buildSql(rows []tableRows) string{
return
inserSql
return
inserSql
}
}
func
buildRow
(
tableName
string
,
currentTime
int64
,
subTableInfo
*
dataRows
,
currentRow
map
[
string
]
interface
{})
tableRows
{
func
buildRow
(
tableName
string
,
currentTime
int64
,
subTableInfo
*
dataRows
,
currentRow
map
[
string
]
interface
{})
tableRows
{
tableRows
:=
tableRows
{
tableName
:
tableName
}
tableRows
:=
tableRows
{
tableName
:
tableName
}
...
@@ -732,12 +729,12 @@ func buildRow(tableName string, currentTime int64, subTableInfo *dataRows, curre
...
@@ -732,12 +729,12 @@ func buildRow(tableName string, currentTime int64, subTableInfo *dataRows, curre
buffers
.
WriteString
(
fmt
.
Sprintf
(
"%v"
,
currentTime
))
buffers
.
WriteString
(
fmt
.
Sprintf
(
"%v"
,
currentTime
))
buffers
.
WriteString
(
","
)
buffers
.
WriteString
(
","
)
for
_
,
field
:=
range
subTableInfo
.
config
.
Fields
{
for
_
,
field
:=
range
subTableInfo
.
config
.
Fields
{
buffers
.
WriteString
(
getFieldValue
(
currentRow
[
strings
.
ToLower
(
field
.
Name
)]))
buffers
.
WriteString
(
getFieldValue
(
currentRow
[
strings
.
ToLower
(
field
.
Name
)]))
buffers
.
WriteString
(
","
)
buffers
.
WriteString
(
","
)
}
}
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
Truncate
(
buffers
.
Len
()
-
1
)
buffers
.
WriteString
(
")"
)
buffers
.
WriteString
(
")"
)
insertSql
:=
buffers
.
String
()
insertSql
:=
buffers
.
String
()
...
@@ -764,7 +761,7 @@ func getFieldValue(fieldValue interface{}) string {
...
@@ -764,7 +761,7 @@ func getFieldValue(fieldValue interface{}) string {
return
fmt
.
Sprintf
(
"'%v'"
,
fieldValue
)
return
fmt
.
Sprintf
(
"'%v'"
,
fieldValue
)
}
}
func
getConnection
()
*
sql
.
DB
{
func
getConnection
()
*
sql
.
DB
{
db
,
err
:=
sql
.
Open
(
DRIVER_NAME
,
dataSourceName
)
db
,
err
:=
sql
.
Open
(
DRIVER_NAME
,
dataSourceName
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
panic
(
err
)
...
@@ -772,7 +769,6 @@ func getConnection() *sql.DB{
...
@@ -772,7 +769,6 @@ func getConnection() *sql.DB{
return
db
return
db
}
}
func
getSubTableNameValue
(
suffix
interface
{})
string
{
func
getSubTableNameValue
(
suffix
interface
{})
string
{
return
fmt
.
Sprintf
(
"%v"
,
suffix
)
return
fmt
.
Sprintf
(
"%v"
,
suffix
)
}
}
...
@@ -950,7 +946,7 @@ func parseMillisecond(str interface{}, layout string) int64 {
...
@@ -950,7 +946,7 @@ func parseMillisecond(str interface{}, layout string) int64 {
log
.
Println
(
err
)
log
.
Println
(
err
)
return
-
1
return
-
1
}
}
return
t
.
UnixNano
()
/
1e6
return
t
.
UnixNano
()
/
1e6
}
}
// lowerMapKey transfer all the map key to lowercase
// lowerMapKey transfer all the map key to lowercase
...
@@ -1009,7 +1005,7 @@ func checkUserCaseConfig(caseName string, caseConfig *dataimport.CaseConfig) {
...
@@ -1009,7 +1005,7 @@ func checkUserCaseConfig(caseName string, caseConfig *dataimport.CaseConfig) {
if
i
<
len
(
caseConfig
.
Fields
)
-
1
{
if
i
<
len
(
caseConfig
.
Fields
)
-
1
{
// delete middle item, a = a[:i+copy(a[i:], a[i+1:])]
// delete middle item, a = a[:i+copy(a[i:], a[i+1:])]
caseConfig
.
Fields
=
caseConfig
.
Fields
[
:
i
+
copy
(
caseConfig
.
Fields
[
i
:
],
caseConfig
.
Fields
[
i
+
1
:
])]
caseConfig
.
Fields
=
caseConfig
.
Fields
[
:
i
+
copy
(
caseConfig
.
Fields
[
i
:
],
caseConfig
.
Fields
[
i
+
1
:
])]
}
else
{
}
else
{
// delete the last item
// delete the last item
caseConfig
.
Fields
=
caseConfig
.
Fields
[
:
len
(
caseConfig
.
Fields
)
-
1
]
caseConfig
.
Fields
=
caseConfig
.
Fields
[
:
len
(
caseConfig
.
Fields
)
-
1
]
}
}
...
...
src/client/inc/tscUtil.h
浏览文件 @
599df650
...
@@ -263,10 +263,12 @@ int16_t tscGetJoinTagColIdByUid(STagCond* pTagCond, uint64_t uid);
...
@@ -263,10 +263,12 @@ int16_t tscGetJoinTagColIdByUid(STagCond* pTagCond, uint64_t uid);
void
tscPrintSelectClause
(
SSqlObj
*
pSql
,
int32_t
subClauseIndex
);
void
tscPrintSelectClause
(
SSqlObj
*
pSql
,
int32_t
subClauseIndex
);
bool
hasMoreVnodesToTry
(
SSqlObj
*
pSql
);
bool
hasMoreVnodesToTry
(
SSqlObj
*
pSql
);
bool
hasMoreClauseToTry
(
SSqlObj
*
pSql
);
void
tscTryQueryNextVnode
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
);
void
tscTryQueryNextVnode
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
);
void
tscAsyncQuerySingleRowForNextVnode
(
void
*
param
,
TAOS_RES
*
tres
,
int
numOfRows
);
void
tscAsyncQuerySingleRowForNextVnode
(
void
*
param
,
TAOS_RES
*
tres
,
int
numOfRows
);
void
tscTryQueryNextClause
(
SSqlObj
*
pSql
,
void
(
*
queryFp
)()
);
void
tscTryQueryNextClause
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
);
int
tscSetMgmt
IpLis
tFromCfg
(
const
char
*
first
,
const
char
*
second
);
int
tscSetMgmt
EpSe
tFromCfg
(
const
char
*
first
,
const
char
*
second
);
void
*
malloc_throw
(
size_t
size
);
void
*
malloc_throw
(
size_t
size
);
void
*
calloc_throw
(
size_t
nmemb
,
size_t
size
);
void
*
calloc_throw
(
size_t
nmemb
,
size_t
size
);
...
...
src/client/inc/tsclient.h
浏览文件 @
599df650
...
@@ -314,7 +314,7 @@ typedef struct SSqlObj {
...
@@ -314,7 +314,7 @@ typedef struct SSqlObj {
char
*
sqlstr
;
char
*
sqlstr
;
char
retry
;
char
retry
;
char
maxRetry
;
char
maxRetry
;
SRpc
IpSet
ipLis
t
;
SRpc
EpSet
epSe
t
;
char
listed
;
char
listed
;
tsem_t
rspSem
;
tsem_t
rspSem
;
SSqlCmd
cmd
;
SSqlCmd
cmd
;
...
@@ -358,7 +358,7 @@ void tscInitMsgsFp();
...
@@ -358,7 +358,7 @@ void tscInitMsgsFp();
int
tsParseSql
(
SSqlObj
*
pSql
,
bool
initial
);
int
tsParseSql
(
SSqlObj
*
pSql
,
bool
initial
);
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpc
IpSet
*
pI
pSet
);
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpc
EpSet
*
pE
pSet
);
int
tscProcessSql
(
SSqlObj
*
pSql
);
int
tscProcessSql
(
SSqlObj
*
pSql
);
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
char
*
tableId
);
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
char
*
tableId
);
...
@@ -430,7 +430,6 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
...
@@ -430,7 +430,6 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
int32_t
bytes
=
pInfo
->
pSqlExpr
->
resBytes
;
int32_t
bytes
=
pInfo
->
pSqlExpr
->
resBytes
;
char
*
pData
=
pRes
->
data
+
pInfo
->
pSqlExpr
->
offset
*
pRes
->
numOfRows
+
bytes
*
pRes
->
row
;
char
*
pData
=
pRes
->
data
+
pInfo
->
pSqlExpr
->
offset
*
pRes
->
numOfRows
+
bytes
*
pRes
->
row
;
if
(
type
==
TSDB_DATA_TYPE_NCHAR
||
type
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
type
==
TSDB_DATA_TYPE_NCHAR
||
type
==
TSDB_DATA_TYPE_BINARY
)
{
int32_t
realLen
=
varDataLen
(
pData
);
int32_t
realLen
=
varDataLen
(
pData
);
assert
(
realLen
<=
bytes
-
VARSTR_HEADER_SIZE
);
assert
(
realLen
<=
bytes
-
VARSTR_HEADER_SIZE
);
...
@@ -465,7 +464,8 @@ extern void * tscQhandle;
...
@@ -465,7 +464,8 @@ extern void * tscQhandle;
extern
int
tscKeepConn
[];
extern
int
tscKeepConn
[];
extern
int
tsInsertHeadSize
;
extern
int
tsInsertHeadSize
;
extern
int
tscNumOfThreads
;
extern
int
tscNumOfThreads
;
extern
SRpcCorIpSet
tscMgmtIpSet
;
extern
SRpcCorEpSet
tscMgmtEpSet
;
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
...
...
src/client/src/tscAsync.c
浏览文件 @
599df650
...
@@ -169,7 +169,11 @@ static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRo
...
@@ -169,7 +169,11 @@ static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRo
pCmd
->
command
=
(
pCmd
->
command
>
TSDB_SQL_MGMT
)
?
TSDB_SQL_RETRIEVE
:
TSDB_SQL_FETCH
;
pCmd
->
command
=
(
pCmd
->
command
>
TSDB_SQL_MGMT
)
?
TSDB_SQL_RETRIEVE
:
TSDB_SQL_FETCH
;
}
}
if
(
pCmd
->
command
==
TSDB_SQL_TABLE_JOIN_RETRIEVE
)
{
tscFetchDatablockFromSubquery
(
pSql
);
}
else
{
tscProcessSql
(
pSql
);
tscProcessSql
(
pSql
);
}
}
}
/*
/*
...
@@ -474,9 +478,8 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -474,9 +478,8 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
// in case of insert, redo parsing the sql string and build new submit data block for two reasons:
// in case of insert, redo parsing the sql string and build new submit data block for two reasons:
// 1. the table Id(tid & uid) may have been update, the submit block needs to be updated accordingly.
// 1. the table Id(tid & uid) may have been update, the submit block needs to be updated accordingly.
// 2. vnode may need the schema information along with submit block to update its local table schema.
// 2. vnode may need the schema information along with submit block to update its local table schema.
if
(
pCmd
->
command
==
TSDB_SQL_INSERT
)
{
if
(
pCmd
->
command
==
TSDB_SQL_INSERT
||
pCmd
->
command
==
TSDB_SQL_SELECT
)
{
tscDebug
(
"%p redo parse sql string to build submit block"
,
pSql
);
tscDebug
(
"%p redo parse sql string and proceed"
,
pSql
);
pCmd
->
parseFinished
=
false
;
pCmd
->
parseFinished
=
false
;
tscResetSqlCmdObj
(
pCmd
);
tscResetSqlCmdObj
(
pCmd
);
...
@@ -488,6 +491,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -488,6 +491,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
goto
_error
;
goto
_error
;
}
}
if
(
pCmd
->
command
==
TSDB_SQL_INSERT
)
{
/*
/*
* Discard previous built submit blocks, and then parse the sql string again and build up all submit blocks,
* Discard previous built submit blocks, and then parse the sql string again and build up all submit blocks,
* and send the required submit block according to index value in supporter to server.
* and send the required submit block according to index value in supporter to server.
...
@@ -495,22 +499,9 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -495,22 +499,9 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
pSql
->
fp
=
pSql
->
fetchFp
;
// restore the fp
pSql
->
fp
=
pSql
->
fetchFp
;
// restore the fp
tscHandleInsertRetry
(
pSql
);
tscHandleInsertRetry
(
pSql
);
}
else
if
(
pCmd
->
command
==
TSDB_SQL_SELECT
)
{
// in case of other query type, continue
}
else
if
(
pCmd
->
command
==
TSDB_SQL_SELECT
)
{
// in case of other query type, continue
tscDebug
(
"%p redo parse sql string and proceed"
,
pSql
);
//tscDebug("before %p fp:%p, fetchFp:%p", pSql, pSql->fp, pSql->fetchFp);
pCmd
->
parseFinished
=
false
;
tscResetSqlCmdObj
(
pCmd
);
//tscDebug("after %p fp:%p, fetchFp:%p", pSql, pSql->fp, pSql->fetchFp);
code
=
tsParseSql
(
pSql
,
true
);
if
(
code
==
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
return
;
}
else
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
tscProcessSql
(
pSql
);
tscProcessSql
(
pSql
);
}
else
{
// in all other cases, simple retry
}
}
else
{
// in all other cases, simple retry
tscProcessSql
(
pSql
);
tscProcessSql
(
pSql
);
}
}
...
...
src/client/src/tscFunctionImpl.c
浏览文件 @
599df650
...
@@ -1481,7 +1481,7 @@ static bool first_last_function_setup(SQLFunctionCtx *pCtx) {
...
@@ -1481,7 +1481,7 @@ static bool first_last_function_setup(SQLFunctionCtx *pCtx) {
// todo opt for null block
// todo opt for null block
static
void
first_function
(
SQLFunctionCtx
*
pCtx
)
{
static
void
first_function
(
SQLFunctionCtx
*
pCtx
)
{
if
(
pCtx
->
order
==
TSDB_ORDER_DESC
)
{
if
(
pCtx
->
order
==
TSDB_ORDER_DESC
||
pCtx
->
preAggVals
.
dataBlockLoaded
==
false
)
{
return
;
return
;
}
}
...
@@ -1550,28 +1550,17 @@ static void first_data_assign_impl(SQLFunctionCtx *pCtx, char *pData, int32_t in
...
@@ -1550,28 +1550,17 @@ static void first_data_assign_impl(SQLFunctionCtx *pCtx, char *pData, int32_t in
* to decide if the value is earlier than current intermediate result
* to decide if the value is earlier than current intermediate result
*/
*/
static
void
first_dist_function
(
SQLFunctionCtx
*
pCtx
)
{
static
void
first_dist_function
(
SQLFunctionCtx
*
pCtx
)
{
assert
(
pCtx
->
size
>
0
);
if
(
pCtx
->
size
==
0
)
{
return
;
}
/*
/*
* do not to check data in the following cases:
* do not to check data in the following cases:
* 1. data block that are not loaded
* 1. data block that are not loaded
* 2. scan data files in desc order
* 2. scan data files in desc order
*/
*/
if
(
pCtx
->
order
==
TSDB_ORDER_DESC
)
{
if
(
pCtx
->
order
==
TSDB_ORDER_DESC
||
pCtx
->
preAggVals
.
dataBlockLoaded
==
false
)
{
return
;
return
;
}
}
int32_t
notNullElems
=
0
;
int32_t
notNullElems
=
0
;
// data block is discard, not loaded, do not need to check it
if
(
!
pCtx
->
preAggVals
.
dataBlockLoaded
)
{
return
;
}
// find the first not null value
// find the first not null value
for
(
int32_t
i
=
0
;
i
<
pCtx
->
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pCtx
->
size
;
++
i
)
{
char
*
data
=
GET_INPUT_CHAR_INDEX
(
pCtx
,
i
);
char
*
data
=
GET_INPUT_CHAR_INDEX
(
pCtx
,
i
);
...
@@ -1655,7 +1644,7 @@ static void first_dist_func_second_merge(SQLFunctionCtx *pCtx) {
...
@@ -1655,7 +1644,7 @@ static void first_dist_func_second_merge(SQLFunctionCtx *pCtx) {
* least one data in this block that is not null.(TODO opt for this case)
* least one data in this block that is not null.(TODO opt for this case)
*/
*/
static
void
last_function
(
SQLFunctionCtx
*
pCtx
)
{
static
void
last_function
(
SQLFunctionCtx
*
pCtx
)
{
if
(
pCtx
->
order
!=
pCtx
->
param
[
0
].
i64Key
)
{
if
(
pCtx
->
order
!=
pCtx
->
param
[
0
].
i64Key
||
pCtx
->
preAggVals
.
dataBlockLoaded
==
false
)
{
return
;
return
;
}
}
...
@@ -2303,8 +2292,9 @@ static void top_func_second_merge(SQLFunctionCtx *pCtx) {
...
@@ -2303,8 +2292,9 @@ static void top_func_second_merge(SQLFunctionCtx *pCtx) {
// the intermediate result is binary, we only use the output data type
// the intermediate result is binary, we only use the output data type
for
(
int32_t
i
=
0
;
i
<
pInput
->
num
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pInput
->
num
;
++
i
)
{
int16_t
type
=
(
pCtx
->
outputType
==
TSDB_DATA_TYPE_FLOAT
)
?
TSDB_DATA_TYPE_DOUBLE
:
pCtx
->
outputType
;
do_top_function_add
(
pOutput
,
pCtx
->
param
[
0
].
i64Key
,
&
pInput
->
res
[
i
]
->
v
.
i64Key
,
pInput
->
res
[
i
]
->
timestamp
,
do_top_function_add
(
pOutput
,
pCtx
->
param
[
0
].
i64Key
,
&
pInput
->
res
[
i
]
->
v
.
i64Key
,
pInput
->
res
[
i
]
->
timestamp
,
pCtx
->
outputT
ype
,
&
pCtx
->
tagInfo
,
pInput
->
res
[
i
]
->
pTags
,
pCtx
->
currentStage
);
t
ype
,
&
pCtx
->
tagInfo
,
pInput
->
res
[
i
]
->
pTags
,
pCtx
->
currentStage
);
}
}
SET_VAL
(
pCtx
,
pInput
->
num
,
pOutput
->
num
);
SET_VAL
(
pCtx
,
pInput
->
num
,
pOutput
->
num
);
...
...
src/client/src/tscSQLParser.c
浏览文件 @
599df650
...
@@ -485,7 +485,6 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -485,7 +485,6 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
}
case
TSDB_SQL_SELECT
:
{
case
TSDB_SQL_SELECT
:
{
assert
(
pCmd
->
numOfClause
==
1
);
const
char
*
msg1
=
"columns in select clause not identical"
;
const
char
*
msg1
=
"columns in select clause not identical"
;
for
(
int32_t
i
=
pCmd
->
numOfClause
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
pCmd
->
numOfClause
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
...
@@ -496,16 +495,19 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -496,16 +495,19 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
}
assert
(
pCmd
->
numOfClause
==
pInfo
->
subclauseInfo
.
numOfClause
);
assert
(
pCmd
->
numOfClause
==
pInfo
->
subclauseInfo
.
numOfClause
);
for
(
int32_t
i
=
0
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
pCmd
->
clauseIndex
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
SQuerySQL
*
pQuerySql
=
pInfo
->
subclauseInfo
.
pClause
[
i
];
SQuerySQL
*
pQuerySql
=
pInfo
->
subclauseInfo
.
pClause
[
i
];
tscTrace
(
"%p start to parse %dth subclause, total:%d"
,
pSql
,
i
,
pInfo
->
subclauseInfo
.
numOfClause
);
if
((
code
=
doCheckForQuery
(
pSql
,
pQuerySql
,
i
))
!=
TSDB_CODE_SUCCESS
)
{
if
((
code
=
doCheckForQuery
(
pSql
,
pQuerySql
,
i
))
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
return
code
;
}
}
tscPrintSelectClause
(
pSql
,
i
);
tscPrintSelectClause
(
pSql
,
i
);
pCmd
->
clauseIndex
+=
1
;
}
}
// restore the clause index
pCmd
->
clauseIndex
=
0
;
// set the command/global limit parameters from the first subclause to the sqlcmd object
// set the command/global limit parameters from the first subclause to the sqlcmd object
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
pCmd
->
command
=
pQueryInfo1
->
command
;
pCmd
->
command
=
pQueryInfo1
->
command
;
...
@@ -1385,6 +1387,11 @@ static int32_t doAddProjectionExprAndResultFields(SQueryInfo* pQueryInfo, SColum
...
@@ -1385,6 +1387,11 @@ static int32_t doAddProjectionExprAndResultFields(SQueryInfo* pQueryInfo, SColum
return
numOfTotalColumns
;
return
numOfTotalColumns
;
}
}
static
void
tscInsertPrimaryTSSourceColumn
(
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
SColumnIndex
tsCol
=
{.
tableIndex
=
pIndex
->
tableIndex
,
.
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
tscColumnListInsert
(
pQueryInfo
->
colList
,
&
tsCol
);
}
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSQLExprItem
*
pItem
)
{
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSQLExprItem
*
pItem
)
{
const
char
*
msg0
=
"invalid column name"
;
const
char
*
msg0
=
"invalid column name"
;
const
char
*
msg1
=
"tag for normal table query is not allowed"
;
const
char
*
msg1
=
"tag for normal table query is not allowed"
;
...
@@ -1427,6 +1434,8 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
...
@@ -1427,6 +1434,8 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
addProjectQueryCol
(
pQueryInfo
,
startPos
,
&
index
,
pItem
);
addProjectQueryCol
(
pQueryInfo
,
startPos
,
&
index
,
pItem
);
}
}
tscInsertPrimaryTSSourceColumn
(
pQueryInfo
,
&
index
);
}
else
{
}
else
{
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
}
...
@@ -1499,8 +1508,8 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -1499,8 +1508,8 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
switch
(
optr
)
{
switch
(
optr
)
{
case
TK_COUNT
:
{
case
TK_COUNT
:
{
if
(
pItem
->
pNode
->
pParam
!=
NULL
&&
pItem
->
pNode
->
pParam
->
nExpr
!=
1
)
{
/* more than one parameter for count() function */
/* more than one parameter for count() function */
if
(
pItem
->
pNode
->
pParam
!=
NULL
&&
pItem
->
pNode
->
pParam
->
nExpr
!=
1
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
}
...
@@ -1551,11 +1560,12 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -1551,11 +1560,12 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
}
}
else
{
// count(*) is equalled to count(primary_timestamp_key)
}
else
{
// count(*) is equalled to count(primary_timestamp_key)
index
=
(
SColumnIndex
){
0
,
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
index
=
(
SColumnIndex
){
0
,
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
int32_t
size
=
tDataTypeDesc
[
TSDB_DATA_TYPE_BIGINT
].
nSize
;
int32_t
size
=
tDataTypeDesc
[
TSDB_DATA_TYPE_BIGINT
].
nSize
;
pExpr
=
tscSqlExprAppend
(
pQueryInfo
,
functionID
,
&
index
,
TSDB_DATA_TYPE_BIGINT
,
size
,
size
,
false
);
pExpr
=
tscSqlExprAppend
(
pQueryInfo
,
functionID
,
&
index
,
TSDB_DATA_TYPE_BIGINT
,
size
,
size
,
false
);
}
}
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
index
.
tableIndex
);
memset
(
pExpr
->
aliasName
,
0
,
tListLen
(
pExpr
->
aliasName
));
memset
(
pExpr
->
aliasName
,
0
,
tListLen
(
pExpr
->
aliasName
));
getColumnName
(
pItem
,
pExpr
->
aliasName
,
sizeof
(
pExpr
->
aliasName
)
-
1
);
getColumnName
(
pItem
,
pExpr
->
aliasName
,
sizeof
(
pExpr
->
aliasName
)
-
1
);
...
@@ -1570,9 +1580,8 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -1570,9 +1580,8 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
}
// the time stamp may be always needed
// the time stamp may be always needed
if
(
index
.
tableIndex
>
0
&&
index
.
tableIndex
<
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
))
{
if
(
index
.
tableIndex
<
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
))
{
SColumnIndex
tsCol
=
{.
tableIndex
=
index
.
tableIndex
,
.
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
tscInsertPrimaryTSSourceColumn
(
pQueryInfo
,
&
index
);
tscColumnListInsert
(
pQueryInfo
->
colList
,
&
tsCol
);
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -1683,9 +1692,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -1683,9 +1692,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
}
}
}
SColumnIndex
tsCol
=
{.
tableIndex
=
index
.
tableIndex
,
.
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
tscInsertPrimaryTSSourceColumn
(
pQueryInfo
,
&
index
);
tscColumnListInsert
(
pQueryInfo
->
colList
,
&
tsCol
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
case
TK_FIRST
:
case
TK_FIRST
:
...
@@ -2348,9 +2355,9 @@ bool validateIpAddress(const char* ip, size_t size) {
...
@@ -2348,9 +2355,9 @@ bool validateIpAddress(const char* ip, size_t size) {
strncpy
(
tmp
,
ip
,
size
);
strncpy
(
tmp
,
ip
,
size
);
in_addr_t
i
pAddr
=
inet_addr
(
tmp
);
in_addr_t
e
pAddr
=
inet_addr
(
tmp
);
return
i
pAddr
!=
INADDR_NONE
;
return
e
pAddr
!=
INADDR_NONE
;
}
}
int32_t
tscTansformSQLFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
tscTansformSQLFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
)
{
...
@@ -5862,6 +5869,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5862,6 +5869,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
pTableMetaInfo
=
tscAddEmptyMetaInfo
(
pQueryInfo
);
pTableMetaInfo
=
tscAddEmptyMetaInfo
(
pQueryInfo
);
}
}
assert
(
pCmd
->
clauseIndex
==
index
);
// too many result columns not support order by in query
// too many result columns not support order by in query
if
(
pQuerySql
->
pSelection
->
nExpr
>
TSDB_MAX_COLUMNS
)
{
if
(
pQuerySql
->
pSelection
->
nExpr
>
TSDB_MAX_COLUMNS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg8
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg8
);
...
@@ -5975,12 +5984,11 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5975,12 +5984,11 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
pQueryInfo
->
window
.
ekey
=
pQueryInfo
->
window
.
ekey
/
1000
;
pQueryInfo
->
window
.
ekey
=
pQueryInfo
->
window
.
ekey
/
1000
;
}
}
}
else
{
// set the time rang
}
else
{
// set the time rang
pQueryInfo
->
window
.
skey
=
TSKEY_INITIAL_VAL
;
pQueryInfo
->
window
=
TSWINDOW_INITIALIZER
;
pQueryInfo
->
window
.
ekey
=
INT64_MAX
;
}
}
// user does not specified the query time window, twa is not allowed in such case.
// user does not specified the query time window, twa is not allowed in such case.
if
((
pQueryInfo
->
window
.
skey
==
0
||
pQueryInfo
->
window
.
ekey
==
INT64_MAX
||
if
((
pQueryInfo
->
window
.
skey
==
INT64_MIN
||
pQueryInfo
->
window
.
ekey
==
INT64_MAX
||
(
pQueryInfo
->
window
.
ekey
==
INT64_MAX
/
1000
&&
tinfo
.
precision
==
TSDB_TIME_PRECISION_MILLI
))
&&
tscIsTWAQuery
(
pQueryInfo
))
{
(
pQueryInfo
->
window
.
ekey
==
INT64_MAX
/
1000
&&
tinfo
.
precision
==
TSDB_TIME_PRECISION_MILLI
))
&&
tscIsTWAQuery
(
pQueryInfo
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg9
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg9
);
}
}
...
...
src/client/src/tscServer.c
浏览文件 @
599df650
...
@@ -30,8 +30,8 @@
...
@@ -30,8 +30,8 @@
#define TSC_MGMT_VNODE 999
#define TSC_MGMT_VNODE 999
SRpcCor
IpSet
tscMgmtI
pSet
;
SRpcCor
EpSet
tscMgmtE
pSet
;
SRpc
IpSet
tscDnodeI
pSet
;
SRpc
EpSet
tscDnodeE
pSet
;
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
=
{
0
};
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
=
{
0
};
...
@@ -45,18 +45,18 @@ void tscSaveSubscriptionProgress(void* sub);
...
@@ -45,18 +45,18 @@ void tscSaveSubscriptionProgress(void* sub);
static
int32_t
minMsgSize
()
{
return
tsRpcHeadSize
+
100
;
}
static
int32_t
minMsgSize
()
{
return
tsRpcHeadSize
+
100
;
}
static
void
tscSetDnode
IpLis
t
(
SSqlObj
*
pSql
,
SCMVgroupInfo
*
pVgroupInfo
)
{
static
void
tscSetDnode
EpSe
t
(
SSqlObj
*
pSql
,
SCMVgroupInfo
*
pVgroupInfo
)
{
SRpc
IpSet
*
pIpList
=
&
pSql
->
ipLis
t
;
SRpc
EpSet
*
pEpSet
=
&
pSql
->
epSe
t
;
p
IpLis
t
->
inUse
=
0
;
p
EpSe
t
->
inUse
=
0
;
if
(
pVgroupInfo
==
NULL
)
{
if
(
pVgroupInfo
==
NULL
)
{
p
IpList
->
numOfI
ps
=
0
;
p
EpSet
->
numOfE
ps
=
0
;
return
;
return
;
}
}
p
IpList
->
numOfIps
=
pVgroupInfo
->
numOfI
ps
;
p
EpList
->
numOfEps
=
pVgroupInfo
->
numOfE
ps
;
for
(
int32_t
i
=
0
;
i
<
pVgroupInfo
->
numOf
I
ps
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroupInfo
->
numOf
E
ps
;
++
i
)
{
strcpy
(
p
IpList
->
fqdn
[
i
],
pVgroupInfo
->
i
pAddr
[
i
].
fqdn
);
strcpy
(
p
EpList
->
fqdn
[
i
],
pVgroupInfo
->
e
pAddr
[
i
].
fqdn
);
p
IpList
->
port
[
i
]
=
pVgroupInfo
->
i
pAddr
[
i
].
port
;
p
EpList
->
port
[
i
]
=
pVgroupInfo
->
e
pAddr
[
i
].
port
;
}
}
}
}
void
tscIpSetCopy
(
SRpcIpSet
*
dst
,
SRpcIpSet
*
src
)
{
void
tscIpSetCopy
(
SRpcIpSet
*
dst
,
SRpcIpSet
*
src
)
{
...
@@ -118,21 +118,21 @@ static void tscUpdateVgroupInfo(SSqlObj *pObj, SRpcIpSet *pIpSet) {
...
@@ -118,21 +118,21 @@ static void tscUpdateVgroupInfo(SSqlObj *pObj, SRpcIpSet *pIpSet) {
taosCorBeginWrite
(
&
pVgroupInfo
->
version
);
taosCorBeginWrite
(
&
pVgroupInfo
->
version
);
//TODO(dengyihao), dont care vgid
//TODO(dengyihao), dont care vgid
pVgroupInfo
->
inUse
=
p
I
pSet
->
inUse
;
pVgroupInfo
->
inUse
=
p
E
pSet
->
inUse
;
pVgroupInfo
->
numOf
Ips
=
pIpSet
->
numOfI
ps
;
pVgroupInfo
->
numOf
Eps
=
pEpSet
->
numOfE
ps
;
for
(
int32_t
i
=
0
;
pVgroupInfo
->
numOf
I
ps
;
i
++
)
{
for
(
int32_t
i
=
0
;
pVgroupInfo
->
numOf
E
ps
;
i
++
)
{
strncpy
(
pVgroupInfo
->
ipAddr
[
i
].
fqdn
,
pI
pSet
->
fqdn
[
i
],
TSDB_FQDN_LEN
);
strncpy
(
pVgroupInfo
->
epAddr
[
i
].
fqdn
,
pE
pSet
->
fqdn
[
i
],
TSDB_FQDN_LEN
);
pVgroupInfo
->
ipAddr
[
i
].
port
=
pI
pSet
->
port
[
i
];
pVgroupInfo
->
epAddr
[
i
].
port
=
pE
pSet
->
port
[
i
];
}
}
taosCorEndWrite
(
&
pVgroupInfo
->
version
);
taosCorEndWrite
(
&
pVgroupInfo
->
version
);
}
}
void
tscPrintMgmt
I
p
()
{
void
tscPrintMgmt
E
p
()
{
SRpc
I
pSet
dump
;
SRpc
E
pSet
dump
;
tscDumpMgmt
I
pSet
(
&
dump
);
tscDumpMgmt
E
pSet
(
&
dump
);
if
(
dump
.
numOf
I
ps
<=
0
)
{
if
(
dump
.
numOf
E
ps
<=
0
)
{
tscError
(
"invalid mnode
IP list:%d"
,
dump
.
numOfIp
s
);
tscError
(
"invalid mnode
EP list:%d"
,
dump
.
numOfEP
s
);
}
else
{
}
else
{
for
(
int
i
=
0
;
i
<
dump
.
numOf
I
ps
;
++
i
)
{
for
(
int
i
=
0
;
i
<
dump
.
numOf
E
ps
;
++
i
)
{
tscDebug
(
"mnode index:%d %s:%d"
,
i
,
dump
.
fqdn
[
i
],
dump
.
port
[
i
]);
tscDebug
(
"mnode index:%d %s:%d"
,
i
,
dump
.
fqdn
[
i
],
dump
.
port
[
i
]);
}
}
}
}
...
@@ -148,9 +148,9 @@ void tscPrintMgmtIp() {
...
@@ -148,9 +148,9 @@ void tscPrintMgmtIp() {
UNUSED_FUNC
UNUSED_FUNC
static
int32_t
tscGetMgmtConnMaxRetryTimes
()
{
static
int32_t
tscGetMgmtConnMaxRetryTimes
()
{
int32_t
factor
=
2
;
int32_t
factor
=
2
;
SRpc
I
pSet
dump
;
SRpc
E
pSet
dump
;
tscDumpMgmt
I
pSet
(
&
dump
);
tscDumpMgmt
E
pSet
(
&
dump
);
return
dump
.
numOf
I
ps
*
factor
;
return
dump
.
numOf
E
ps
*
factor
;
}
}
void
tscProcessHeartBeatRsp
(
void
*
param
,
TAOS_RES
*
tres
,
int
code
)
{
void
tscProcessHeartBeatRsp
(
void
*
param
,
TAOS_RES
*
tres
,
int
code
)
{
...
@@ -166,10 +166,10 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
...
@@ -166,10 +166,10 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
if
(
code
==
0
)
{
if
(
code
==
0
)
{
SCMHeartBeatRsp
*
pRsp
=
(
SCMHeartBeatRsp
*
)
pRes
->
pRsp
;
SCMHeartBeatRsp
*
pRsp
=
(
SCMHeartBeatRsp
*
)
pRes
->
pRsp
;
SRpc
IpSet
*
pIpList
=
&
pRsp
->
i
pList
;
SRpc
EpSet
*
pEpList
=
&
pRsp
->
e
pList
;
if
(
p
IpList
->
numOfI
ps
>
0
)
{
if
(
p
EpList
->
numOfE
ps
>
0
)
{
tsc
IpSetHtons
(
pI
pList
);
tsc
EpSetHtons
(
pE
pList
);
tscUpdateMgmt
IpList
(
pI
pList
);
tscUpdateMgmt
EpList
(
pE
pList
);
}
}
pSql
->
pTscObj
->
connId
=
htonl
(
pRsp
->
connId
);
pSql
->
pTscObj
->
connId
=
htonl
(
pRsp
->
connId
);
...
@@ -242,7 +242,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
...
@@ -242,7 +242,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
// set the mgmt ip list
// set the mgmt ip list
if
(
pSql
->
cmd
.
command
>=
TSDB_SQL_MGMT
)
{
if
(
pSql
->
cmd
.
command
>=
TSDB_SQL_MGMT
)
{
tscDumpMgmt
IpSet
(
&
pSql
->
i
pList
);
tscDumpMgmt
EpSet
(
&
pSql
->
e
pList
);
}
}
memcpy
(
pMsg
,
pSql
->
cmd
.
payload
,
pSql
->
cmd
.
payloadLen
);
memcpy
(
pMsg
,
pSql
->
cmd
.
payload
,
pSql
->
cmd
.
payloadLen
);
...
@@ -260,11 +260,11 @@ int tscSendMsgToServer(SSqlObj *pSql) {
...
@@ -260,11 +260,11 @@ int tscSendMsgToServer(SSqlObj *pSql) {
// Otherwise, the pSql object may have been released already during the response function, which is
// Otherwise, the pSql object may have been released already during the response function, which is
// processMsgFromServer function. In the meanwhile, the assignment of the rpc context to sql object will absolutely
// processMsgFromServer function. In the meanwhile, the assignment of the rpc context to sql object will absolutely
// cause crash.
// cause crash.
rpcSendRequest
(
pObj
->
pDnodeConn
,
&
pSql
->
ipLis
t
,
&
rpcMsg
);
rpcSendRequest
(
pObj
->
pDnodeConn
,
&
pSql
->
epSe
t
,
&
rpcMsg
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpc
IpSet
*
pI
pSet
)
{
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpc
EpSet
*
pE
pSet
)
{
SSqlObj
*
pSql
=
(
SSqlObj
*
)
rpcMsg
->
ahandle
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
rpcMsg
->
ahandle
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
tscError
(
"%p sql is already released"
,
pSql
);
tscError
(
"%p sql is already released"
,
pSql
);
...
@@ -293,14 +293,14 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) {
...
@@ -293,14 +293,14 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) {
return
;
return
;
}
}
if
(
p
I
pSet
)
{
if
(
p
E
pSet
)
{
//SRpc
I
pSet dump;
//SRpc
E
pSet dump;
tsc
IpSetHtons
(
pI
pSet
);
tsc
EpSetHtons
(
pE
pSet
);
if
(
tsc
IpSetIsEqual
(
&
pSql
->
ipList
,
pI
pSet
))
{
if
(
tsc
EpSetIsEqual
(
&
pSql
->
epList
,
pE
pSet
))
{
if
(
pCmd
->
command
<
TSDB_SQL_MGMT
)
{
if
(
pCmd
->
command
<
TSDB_SQL_MGMT
)
{
tscUpdateVgroupInfo
(
pSql
,
p
I
pSet
);
tscUpdateVgroupInfo
(
pSql
,
p
E
pSet
);
}
else
{
}
else
{
tscUpdateMgmt
IpList
(
pI
pSet
);
tscUpdateMgmt
EpList
(
pE
pSet
);
}
}
}
}
}
}
...
@@ -484,8 +484,9 @@ int tscProcessSql(SSqlObj *pSql) {
...
@@ -484,8 +484,9 @@ int tscProcessSql(SSqlObj *pSql) {
return
pSql
->
res
.
code
;
return
pSql
->
res
.
code
;
}
}
}
else
if
(
pCmd
->
command
<
TSDB_SQL_LOCAL
)
{
}
else
if
(
pCmd
->
command
<
TSDB_SQL_LOCAL
)
{
//tscDumpMgmtIpSet(&pSql->ipList);
}
else
{
//pSql->epSet = tscMgmtEpSet;
}
else
{
// local handler
return
(
*
tscProcessMsgRsp
[
pCmd
->
command
])(
pSql
);
return
(
*
tscProcessMsgRsp
[
pCmd
->
command
])(
pSql
);
}
}
...
@@ -538,7 +539,7 @@ int tscBuildFetchMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -538,7 +539,7 @@ int tscBuildFetchMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pSql
->
cmd
.
payload
;
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pSql
->
cmd
.
payload
;
pRetrieveMsg
->
qhandle
=
htobe64
(
pSql
->
res
.
qhandle
);
pRetrieveMsg
->
qhandle
=
htobe64
(
pSql
->
res
.
qhandle
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
// todo valid the vgroupId at the client side
// todo valid the vgroupId at the client side
...
@@ -588,10 +589,10 @@ int tscBuildSubmitMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -588,10 +589,10 @@ int tscBuildSubmitMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// pSql->cmd.payloadLen is set during copying data into payload
// pSql->cmd.payloadLen is set during copying data into payload
pSql
->
cmd
.
msgType
=
TSDB_MSG_TYPE_SUBMIT
;
pSql
->
cmd
.
msgType
=
TSDB_MSG_TYPE_SUBMIT
;
tscDump
IpSetFromVgroupInfo
(
&
pTableMeta
->
corVgroupInfo
,
&
pSql
->
i
pList
);
tscDump
EpSetFromVgroupInfo
(
&
pTableMeta
->
corVgroupInfo
,
&
pSql
->
e
pList
);
tscDebug
(
"%p build submit msg, vgId:%d numOfTables:%d numberOf
I
P:%d"
,
pSql
,
vgId
,
pSql
->
cmd
.
numOfTablesInSubmit
,
tscDebug
(
"%p build submit msg, vgId:%d numOfTables:%d numberOf
E
P:%d"
,
pSql
,
vgId
,
pSql
->
cmd
.
numOfTablesInSubmit
,
pSql
->
ipList
.
numOfI
ps
);
pSql
->
epSet
.
numOfE
ps
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -630,7 +631,8 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
...
@@ -630,7 +631,8 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
}
else
{
}
else
{
pVgroupInfo
=
&
pTableMeta
->
vgroupInfo
;
pVgroupInfo
=
&
pTableMeta
->
vgroupInfo
;
}
}
tscSetDnodeIpList
(
pSql
,
pVgroupInfo
);
tscSetDnodeEpList
(
pSql
,
pVgroupInfo
);
if
(
pVgroupInfo
!=
NULL
)
{
if
(
pVgroupInfo
!=
NULL
)
{
pQueryMsg
->
head
.
vgId
=
htonl
(
pVgroupInfo
->
vgId
);
pQueryMsg
->
head
.
vgId
=
htonl
(
pVgroupInfo
->
vgId
);
}
}
...
@@ -642,7 +644,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
...
@@ -642,7 +644,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
pQueryMsg
->
numOfTables
=
htonl
(
1
);
// set the number of tables
pQueryMsg
->
numOfTables
=
htonl
(
1
);
// set the number of tables
pMsg
+=
sizeof
(
STableIdInfo
);
pMsg
+=
sizeof
(
STableIdInfo
);
}
else
{
// it is a subquery of the super table query, this
I
P info is acquired from vgroupInfo
}
else
{
// it is a subquery of the super table query, this
E
P info is acquired from vgroupInfo
int32_t
index
=
pTableMetaInfo
->
vgroupIndex
;
int32_t
index
=
pTableMetaInfo
->
vgroupIndex
;
int32_t
numOfVgroups
=
taosArrayGetSize
(
pTableMetaInfo
->
pVgroupTables
);
int32_t
numOfVgroups
=
taosArrayGetSize
(
pTableMetaInfo
->
pVgroupTables
);
assert
(
index
>=
0
&&
index
<
numOfVgroups
);
assert
(
index
>=
0
&&
index
<
numOfVgroups
);
...
@@ -652,7 +654,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
...
@@ -652,7 +654,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
SVgroupTableInfo
*
pTableIdList
=
taosArrayGet
(
pTableMetaInfo
->
pVgroupTables
,
index
);
SVgroupTableInfo
*
pTableIdList
=
taosArrayGet
(
pTableMetaInfo
->
pVgroupTables
,
index
);
// set the vgroup info
// set the vgroup info
tscSetDnode
I
pList
(
pSql
,
&
pTableIdList
->
vgInfo
);
tscSetDnode
E
pList
(
pSql
,
&
pTableIdList
->
vgInfo
);
pQueryMsg
->
head
.
vgId
=
htonl
(
pTableIdList
->
vgInfo
.
vgId
);
pQueryMsg
->
head
.
vgId
=
htonl
(
pTableIdList
->
vgInfo
.
vgId
);
int32_t
numOfTables
=
taosArrayGetSize
(
pTableIdList
->
itemList
);
int32_t
numOfTables
=
taosArrayGetSize
(
pTableIdList
->
itemList
);
...
@@ -1385,7 +1387,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
...
@@ -1385,7 +1387,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
tscDump
IpSetFromVgroupInfo
(
&
pTableMetaInfo
->
pTableMeta
->
corVgroupInfo
,
&
pSql
->
i
pList
);
tscDump
EpSetFromVgroupInfo
(
&
pTableMetaInfo
->
pTableMeta
->
corVgroupInfo
,
&
pSql
->
e
pList
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -1720,8 +1722,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
...
@@ -1720,8 +1722,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
pMetaMsg
->
contLen
=
htons
(
pMetaMsg
->
contLen
);
pMetaMsg
->
contLen
=
htons
(
pMetaMsg
->
contLen
);
pMetaMsg
->
numOfColumns
=
htons
(
pMetaMsg
->
numOfColumns
);
pMetaMsg
->
numOfColumns
=
htons
(
pMetaMsg
->
numOfColumns
);
if
(
pMetaMsg
->
sid
<
0
||
pMetaMsg
->
vgroup
.
numOf
I
ps
<
0
)
{
if
(
pMetaMsg
->
sid
<
0
||
pMetaMsg
->
vgroup
.
numOf
E
ps
<
0
)
{
tscError
(
"invalid meter vgId:%d, sid%d"
,
pMetaMsg
->
vgroup
.
numOf
I
ps
,
pMetaMsg
->
sid
);
tscError
(
"invalid meter vgId:%d, sid%d"
,
pMetaMsg
->
vgroup
.
numOf
E
ps
,
pMetaMsg
->
sid
);
return
TSDB_CODE_TSC_INVALID_VALUE
;
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
}
...
@@ -1735,8 +1737,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
...
@@ -1735,8 +1737,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
return
TSDB_CODE_TSC_INVALID_VALUE
;
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
}
for
(
int
i
=
0
;
i
<
pMetaMsg
->
vgroup
.
numOf
I
ps
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pMetaMsg
->
vgroup
.
numOf
E
ps
;
++
i
)
{
pMetaMsg
->
vgroup
.
ipAddr
[
i
].
port
=
htons
(
pMetaMsg
->
vgroup
.
i
pAddr
[
i
].
port
);
pMetaMsg
->
vgroup
.
epAddr
[
i
].
port
=
htons
(
pMetaMsg
->
vgroup
.
e
pAddr
[
i
].
port
);
}
}
SSchema
*
pSchema
=
pMetaMsg
->
schema
;
SSchema
*
pSchema
=
pMetaMsg
->
schema
;
...
@@ -1912,9 +1914,11 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
...
@@ -1912,9 +1914,11 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
//just init, no need to lock
//just init, no need to lock
SCMVgroupInfo
*
pVgroups
=
&
pInfo
->
vgroupList
->
vgroups
[
j
];
SCMVgroupInfo
*
pVgroups
=
&
pInfo
->
vgroupList
->
vgroups
[
j
];
pVgroups
->
vgId
=
htonl
(
pVgroups
->
vgId
);
pVgroups
->
vgId
=
htonl
(
pVgroups
->
vgId
);
assert
(
pVgroups
->
numOfIps
>=
1
);
assert
(
pVgroups
->
numOfEps
>=
1
);
for
(
int32_t
k
=
0
;
k
<
pVgroups
->
numOfIps
;
++
k
)
{
pVgroups
->
ipAddr
[
k
].
port
=
htons
(
pVgroups
->
ipAddr
[
k
].
port
);
for
(
int32_t
k
=
0
;
k
<
pVgroups
->
numOfEps
;
++
k
)
{
pVgroups
->
epAddr
[
k
].
port
=
htons
(
pVgroups
->
epAddr
[
k
].
port
);
}
}
pMsg
+=
size
;
pMsg
+=
size
;
...
@@ -2007,9 +2011,9 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
...
@@ -2007,9 +2011,9 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
assert
(
len
<=
sizeof
(
pObj
->
db
));
assert
(
len
<=
sizeof
(
pObj
->
db
));
tstrncpy
(
pObj
->
db
,
temp
,
sizeof
(
pObj
->
db
));
tstrncpy
(
pObj
->
db
,
temp
,
sizeof
(
pObj
->
db
));
if
(
pConnect
->
ipList
.
numOfI
ps
>
0
)
{
if
(
pConnect
->
epList
.
numOfE
ps
>
0
)
{
tsc
IpSetHtons
(
&
pConnect
->
i
pList
);
tsc
EpSetHtons
(
&
pConnect
->
e
pList
);
tscUpdateMgmt
IpList
(
&
pConnect
->
i
pList
);
tscUpdateMgmt
EpList
(
&
pConnect
->
e
pList
);
}
}
strcpy
(
pObj
->
sversion
,
pConnect
->
serverVersion
);
strcpy
(
pObj
->
sversion
,
pConnect
->
serverVersion
);
...
...
src/client/src/tscSql.c
浏览文件 @
599df650
...
@@ -62,8 +62,8 @@ SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
...
@@ -62,8 +62,8 @@ SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
}
}
if
(
ip
)
{
if
(
ip
)
{
if
(
tscSetMgmt
I
pListFromCfg
(
ip
,
NULL
)
<
0
)
return
NULL
;
if
(
tscSetMgmt
E
pListFromCfg
(
ip
,
NULL
)
<
0
)
return
NULL
;
if
(
port
)
tscMgmt
IpSet
.
i
pSet
.
port
[
0
]
=
port
;
if
(
port
)
tscMgmt
EpSet
.
e
pSet
.
port
[
0
]
=
port
;
}
}
void
*
pDnodeConn
=
NULL
;
void
*
pDnodeConn
=
NULL
;
...
@@ -424,7 +424,7 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
...
@@ -424,7 +424,7 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
}
}
// current data set are exhausted, fetch more data from node
// current data set are exhausted, fetch more data from node
if
(
pRes
->
row
>=
pRes
->
numOfRows
&&
(
pRes
->
completed
!=
true
||
hasMoreVnodesToTry
(
pSql
))
&&
if
(
pRes
->
row
>=
pRes
->
numOfRows
&&
(
pRes
->
completed
!=
true
||
hasMoreVnodesToTry
(
pSql
)
||
hasMoreClauseToTry
(
pSql
)
)
&&
(
pCmd
->
command
==
TSDB_SQL_RETRIEVE
||
(
pCmd
->
command
==
TSDB_SQL_RETRIEVE
||
pCmd
->
command
==
TSDB_SQL_RETRIEVE_LOCALMERGE
||
pCmd
->
command
==
TSDB_SQL_RETRIEVE_LOCALMERGE
||
pCmd
->
command
==
TSDB_SQL_TABLE_JOIN_RETRIEVE
||
pCmd
->
command
==
TSDB_SQL_TABLE_JOIN_RETRIEVE
||
...
...
src/client/src/tscSubquery.c
浏览文件 @
599df650
...
@@ -458,7 +458,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr
...
@@ -458,7 +458,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr
break
;
break
;
}
}
}
}
assert
(
info
.
vgInfo
.
numOf
I
ps
!=
0
);
assert
(
info
.
vgInfo
.
numOf
E
ps
!=
0
);
vgTables
=
taosArrayInit
(
4
,
sizeof
(
STableIdInfo
));
vgTables
=
taosArrayInit
(
4
,
sizeof
(
STableIdInfo
));
info
.
itemList
=
vgTables
;
info
.
itemList
=
vgTables
;
...
@@ -848,13 +848,14 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
...
@@ -848,13 +848,14 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
);
// TODO put to async res?
if
(
taos_errno
(
pSql
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
taos_errno
(
pSql
)
!=
TSDB_CODE_SUCCESS
)
{
assert
(
numOfRows
==
taos_errno
(
pSql
));
assert
(
numOfRows
==
taos_errno
(
pSql
));
pParentSql
->
res
.
code
=
numOfRows
;
pParentSql
->
res
.
code
=
numOfRows
;
tscError
(
"%p retrieve failed, index:%d, code:%s"
,
pSql
,
pSupporter
->
subqueryIndex
,
tstrerror
(
numOfRows
));
tscError
(
"%p retrieve failed, index:%d, code:%s"
,
pSql
,
pSupporter
->
subqueryIndex
,
tstrerror
(
numOfRows
));
tscQueueAsyncRes
(
pParentSql
);
return
;
}
}
if
(
numOfRows
>=
0
)
{
if
(
numOfRows
>=
0
)
{
...
@@ -941,14 +942,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
...
@@ -941,14 +942,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
SSqlRes
*
pRes
=
&
pSub
->
res
;
SSqlRes
*
pRes
=
&
pSub
->
res
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSub
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSub
->
cmd
,
0
);
// STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
// if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0)) {
// if (pRes->row >= pRes->numOfRows && pTableMetaInfo->vgroupIndex < pTableMetaInfo->vgroupList->numOfVgroups &&
// (!tscHasReachLimitation(pQueryInfo, pRes)) && !pRes->completed) {
// numOfFetch++;
// }
// } else {
if
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
{
if
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
{
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
hasData
=
false
;
hasData
=
false
;
...
@@ -963,9 +957,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
...
@@ -963,9 +957,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
break
;
break
;
}
}
}
}
}
}
// }
// has data remains in client side, and continue to return data to app
// has data remains in client side, and continue to return data to app
if
(
hasData
)
{
if
(
hasData
)
{
...
@@ -1026,7 +1018,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
...
@@ -1026,7 +1018,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
tscDebug
(
"%p all subquery response, retrieve data
"
,
pSql
);
tscDebug
(
"%p all subquery response, retrieve data
for subclause:%d"
,
pSql
,
pCmd
->
clauseIndex
);
// the column transfer support struct has been built
// the column transfer support struct has been built
if
(
pRes
->
pColumnIndex
!=
NULL
)
{
if
(
pRes
->
pColumnIndex
!=
NULL
)
{
...
@@ -1195,7 +1187,10 @@ int32_t tscLaunchJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
...
@@ -1195,7 +1187,10 @@ int32_t tscLaunchJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
pNew
->
cmd
.
numOfCols
=
0
;
pNew
->
cmd
.
numOfCols
=
0
;
pNewQueryInfo
->
intervalTime
=
0
;
pNewQueryInfo
->
intervalTime
=
0
;
memset
(
&
pNewQueryInfo
->
limit
,
0
,
sizeof
(
SLimitVal
));
pSupporter
->
limit
=
pNewQueryInfo
->
limit
;
pNewQueryInfo
->
limit
.
limit
=
-
1
;
pNewQueryInfo
->
limit
.
offset
=
0
;
// backup the data and clear it in the sqlcmd object
// backup the data and clear it in the sqlcmd object
pSupporter
->
groupbyExpr
=
pNewQueryInfo
->
groupbyExpr
;
pSupporter
->
groupbyExpr
=
pNewQueryInfo
->
groupbyExpr
;
...
@@ -1605,8 +1600,8 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
...
@@ -1605,8 +1600,8 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
// data in from current vnode is stored in cache and disk
// data in from current vnode is stored in cache and disk
uint32_t
numOfRowsFromSubquery
=
trsupport
->
pExtMemBuffer
[
idx
]
->
numOfTotalElems
+
trsupport
->
localBuffer
->
num
;
uint32_t
numOfRowsFromSubquery
=
trsupport
->
pExtMemBuffer
[
idx
]
->
numOfTotalElems
+
trsupport
->
localBuffer
->
num
;
tscDebug
(
"%p sub:%p all data retrieved from
i
p:%s, vgId:%d, numOfRows:%d, orderOfSub:%d"
,
pParentSql
,
pSql
,
tscDebug
(
"%p sub:%p all data retrieved from
e
p:%s, vgId:%d, numOfRows:%d, orderOfSub:%d"
,
pParentSql
,
pSql
,
pTableMetaInfo
->
vgroupList
->
vgroups
[
0
].
i
pAddr
[
0
].
fqdn
,
pTableMetaInfo
->
vgroupList
->
vgroups
[
0
].
vgId
,
pTableMetaInfo
->
vgroupList
->
vgroups
[
0
].
e
pAddr
[
0
].
fqdn
,
pTableMetaInfo
->
vgroupList
->
vgroups
[
0
].
vgId
,
numOfRowsFromSubquery
,
idx
);
numOfRowsFromSubquery
,
idx
);
tColModelCompact
(
pDesc
->
pColumnModel
,
trsupport
->
localBuffer
,
pDesc
->
pColumnModel
->
capacity
);
tColModelCompact
(
pDesc
->
pColumnModel
,
trsupport
->
localBuffer
,
pDesc
->
pColumnModel
->
capacity
);
...
@@ -1724,8 +1719,8 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
...
@@ -1724,8 +1719,8 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
assert
(
pRes
->
numOfRows
==
numOfRows
);
assert
(
pRes
->
numOfRows
==
numOfRows
);
int64_t
num
=
atomic_add_fetch_64
(
&
pState
->
numOfRetrievedRows
,
numOfRows
);
int64_t
num
=
atomic_add_fetch_64
(
&
pState
->
numOfRetrievedRows
,
numOfRows
);
tscDebug
(
"%p sub:%p retrieve numOfRows:%"
PRId64
" totalNumOfRows:%"
PRIu64
" from
i
p:%s, orderOfSub:%d"
,
pParentSql
,
pSql
,
tscDebug
(
"%p sub:%p retrieve numOfRows:%"
PRId64
" totalNumOfRows:%"
PRIu64
" from
e
p:%s, orderOfSub:%d"
,
pParentSql
,
pSql
,
pRes
->
numOfRows
,
pState
->
numOfRetrievedRows
,
pSql
->
ipList
.
fqdn
[
pSql
->
ipLis
t
.
inUse
],
idx
);
pRes
->
numOfRows
,
pState
->
numOfRetrievedRows
,
pSql
->
epSet
.
fqdn
[
pSql
->
epSe
t
.
inUse
],
idx
);
if
(
num
>
tsMaxNumOfOrderedResults
&&
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
if
(
num
>
tsMaxNumOfOrderedResults
&&
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
tscError
(
"%p sub:%p num of OrderedRes is too many, max allowed:%"
PRId32
" , current:%"
PRId64
,
tscError
(
"%p sub:%p num of OrderedRes is too many, max allowed:%"
PRId32
" , current:%"
PRId64
,
...
@@ -1833,8 +1828,8 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
...
@@ -1833,8 +1828,8 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
return
;
return
;
}
}
tscTrace
(
"%p sub:%p query complete,
i
p:%s, vgId:%d, orderOfSub:%d, retrieve data"
,
trsupport
->
pParentSql
,
pSql
,
tscTrace
(
"%p sub:%p query complete,
e
p:%s, vgId:%d, orderOfSub:%d, retrieve data"
,
trsupport
->
pParentSql
,
pSql
,
pVgroup
->
i
pAddr
[
0
].
fqdn
,
pVgroup
->
vgId
,
trsupport
->
subqueryIndex
);
pVgroup
->
e
pAddr
[
0
].
fqdn
,
pVgroup
->
vgId
,
trsupport
->
subqueryIndex
);
if
(
pSql
->
res
.
qhandle
==
0
)
{
// qhandle is NULL, code is TSDB_CODE_SUCCESS means no results generated from this vnode
if
(
pSql
->
res
.
qhandle
==
0
)
{
// qhandle is NULL, code is TSDB_CODE_SUCCESS means no results generated from this vnode
tscRetrieveFromDnodeCallBack
(
param
,
pSql
,
0
);
tscRetrieveFromDnodeCallBack
(
param
,
pSql
,
0
);
...
@@ -1982,88 +1977,119 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
...
@@ -1982,88 +1977,119 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
void
tscBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
static
char
*
getResultBlockPosition
(
SSqlCmd
*
pCmd
,
SSqlRes
*
pRes
,
int32_t
columnIndex
,
int16_t
*
bytes
)
{
S
SqlRes
*
pRes
=
&
pSql
->
res
;
S
QueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
)
;
if
(
pRes
->
code
!=
TSDB_CODE_SUCCESS
)
{
SFieldSupInfo
*
pInfo
=
(
SFieldSupInfo
*
)
TARRAY_GET_ELEM
(
pQueryInfo
->
fieldsInfo
.
pSupportInfo
,
columnIndex
);
tscQueueAsyncRes
(
pSql
);
assert
(
pInfo
->
pSqlExpr
!=
NULL
);
return
;
}
while
(
1
)
{
*
bytes
=
pInfo
->
pSqlExpr
->
resBytes
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
char
*
pData
=
pRes
->
data
+
pInfo
->
pSqlExpr
->
offset
*
pRes
->
numOfRows
;
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
if
(
pRes
->
tsrow
==
NULL
)
{
return
pData
;
pRes
->
tsrow
=
calloc
(
numOfExprs
,
POINTER_BYTES
);
}
pRes
->
length
=
calloc
(
numOfExprs
,
sizeof
(
int32_t
));
}
bool
success
=
false
;
static
void
doBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
int32_t
numOfTableHasRes
=
0
;
int32_t
numOfRes
=
INT32_MAX
;
for
(
int32_t
i
=
0
;
i
<
pSql
->
numOfSubs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pSql
->
numOfSubs
;
++
i
)
{
if
(
pSql
->
pSubs
[
i
]
!=
NULL
)
{
if
(
pSql
->
pSubs
[
i
]
==
NULL
)
{
numOfTableHasRes
++
;
continue
;
}
}
}
if
(
numOfTableHasRes
>=
2
)
{
// do merge result
numOfRes
=
MIN
(
numOfRes
,
pSql
->
pSubs
[
i
]
->
res
.
numOfRows
);
success
=
(
doSetResultRowData
(
pSql
->
pSubs
[
0
],
false
)
!=
NULL
)
&&
(
doSetResultRowData
(
pSql
->
pSubs
[
1
],
false
)
!=
NULL
);
}
else
{
// only one subquery
SSqlObj
*
pSub
=
pSql
->
pSubs
[
0
];
if
(
pSub
==
NULL
)
{
pSub
=
pSql
->
pSubs
[
1
];
}
}
success
=
(
doSetResultRowData
(
pSub
,
false
)
!=
NULL
);
int32_t
totalSize
=
tscGetResRowLength
(
pQueryInfo
->
exprList
);
}
pRes
->
pRsp
=
realloc
(
pRes
->
pRsp
,
numOfRes
*
totalSize
);
pRes
->
data
=
pRes
->
pRsp
;
if
(
success
)
{
// current row of final output has been built, return to app
char
*
data
=
pRes
->
data
;
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
int16_t
bytes
=
0
;
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SColumnIndex
*
pIndex
=
&
pRes
->
pColumnIndex
[
i
];
SColumnIndex
*
pIndex
=
&
pRes
->
pColumnIndex
[
i
];
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
pIndex
->
tableIndex
]
->
res
;
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
pIndex
->
tableIndex
]
->
res
;
pRes
->
tsrow
[
i
]
=
pRes1
->
tsrow
[
pIndex
->
columnIndex
];
SSqlCmd
*
pCmd1
=
&
pSql
->
pSubs
[
pIndex
->
tableIndex
]
->
cmd
;
pRes
->
length
[
i
]
=
pRes1
->
length
[
pIndex
->
columnIndex
];
char
*
pData
=
getResultBlockPosition
(
pCmd1
,
pRes1
,
pIndex
->
columnIndex
,
&
bytes
);
memcpy
(
data
,
pData
,
bytes
*
numOfRes
);
data
+=
bytes
*
numOfRes
;
pRes1
->
row
=
numOfRes
;
}
}
pRes
->
numOfClauseTotal
++
;
pRes
->
numOfRows
=
numOfRes
;
break
;
pRes
->
numOfClauseTotal
+=
numOfRes
;
}
else
{
// continue retrieve data from vnode
}
if
(
!
tscHasRemainDataInSubqueryResultSet
(
pSql
))
{
tscDebug
(
"%p at least one subquery exhausted, free all other %d subqueries"
,
pSql
,
pSql
->
numOfSubs
-
1
);
SSubqueryState
*
pState
=
NULL
;
// free all sub sqlobj
void
tscBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
for
(
int32_t
i
=
0
;
i
<
pSql
->
numOfSubs
;
++
i
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlObj
*
pChildObj
=
pSql
->
pSubs
[
i
];
if
(
pChildObj
==
NULL
)
{
if
(
pRes
->
code
!=
TSDB_CODE_SUCCESS
)
{
continue
;
tscQueueAsyncRes
(
pSql
);
return
;
}
}
SJoinSupporter
*
pSupporter
=
(
SJoinSupporter
*
)
pChildObj
->
param
;
if
(
pRes
->
tsrow
==
NULL
)
{
pState
=
pSupporter
->
pState
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
)
;
tscDestroyJoinSupporter
(
pChildObj
->
param
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
taos_free_result
(
pChildObj
);
pRes
->
tsrow
=
calloc
(
numOfExprs
,
POINTER_BYTES
);
pRes
->
buffer
=
calloc
(
numOfExprs
,
POINTER_BYTES
);
pRes
->
length
=
calloc
(
numOfExprs
,
sizeof
(
int32_t
));
tscRestoreSQLFuncForSTableQuery
(
pQueryInfo
);
}
}
free
(
pState
);
while
(
1
)
{
if
(
pRes
->
row
<
pRes
->
numOfRows
)
{
assert
(
0
);
}
pRes
->
completed
=
true
;
// set query completed
doBuildResFromSubqueries
(
pSql
);
sem_post
(
&
pSql
->
rspSem
);
sem_post
(
&
pSql
->
rspSem
);
return
;
return
;
}
// continue retrieve data from vnode
// if (!tscHasRemainDataInSubqueryResultSet(pSql)) {
// tscDebug("%p at least one subquery exhausted, free all other %d subqueries", pSql, pSql->numOfSubs - 1);
// SSubqueryState* pState = NULL;
//
// // free all sub sqlobj
// for (int32_t i = 0; i < pSql->numOfSubs; ++i) {
// SSqlObj* pChildObj = pSql->pSubs[i];
// if (pChildObj == NULL) {
// continue;
// }
//
// SJoinSupporter* pSupporter = (SJoinSupporter*)pChildObj->param;
// pState = pSupporter->pState;
//
// tscDestroyJoinSupporter(pChildObj->param);
// taos_free_result(pChildObj);
// }
//
// free(pState);
//
// pRes->completed = true; // set query completed
// sem_post(&pSql->rspSem);
// return;
// }
tscFetchDatablockFromSubquery
(
pSql
);
tscFetchDatablockFromSubquery
(
pSql
);
if
(
pRes
->
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pRes
->
code
!=
TSDB_CODE_SUCCESS
)
{
return
;
return
;
}
}
}
}
}
if
(
pSql
->
res
.
code
==
TSDB_CODE_SUCCESS
)
{
if
(
pSql
->
res
.
code
==
TSDB_CODE_SUCCESS
)
{
(
*
pSql
->
fp
)(
pSql
->
param
,
pSql
,
0
);
(
*
pSql
->
fp
)(
pSql
->
param
,
pSql
,
pRes
->
numOfRows
);
}
else
{
}
else
{
tscQueueAsyncRes
(
pSql
);
tscQueueAsyncRes
(
pSql
);
}
}
...
@@ -2117,14 +2143,6 @@ void **doSetResultRowData(SSqlObj *pSql, bool finalResult) {
...
@@ -2117,14 +2143,6 @@ void **doSetResultRowData(SSqlObj *pSql, bool finalResult) {
assert
(
pRes
->
row
>=
0
&&
pRes
->
row
<=
pRes
->
numOfRows
);
assert
(
pRes
->
row
>=
0
&&
pRes
->
row
<=
pRes
->
numOfRows
);
if
(
pCmd
->
command
==
TSDB_SQL_TABLE_JOIN_RETRIEVE
)
{
if
(
pRes
->
completed
)
{
tfree
(
pRes
->
tsrow
);
}
return
pRes
->
tsrow
;
}
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
// all the results has returned to invoker
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
// all the results has returned to invoker
tfree
(
pRes
->
tsrow
);
tfree
(
pRes
->
tsrow
);
return
pRes
->
tsrow
;
return
pRes
->
tsrow
;
...
@@ -2182,7 +2200,7 @@ void **doSetResultRowData(SSqlObj *pSql, bool finalResult) {
...
@@ -2182,7 +2200,7 @@ void **doSetResultRowData(SSqlObj *pSql, bool finalResult) {
return
pRes
->
tsrow
;
return
pRes
->
tsrow
;
}
}
static
bool
tscHasRemainDataInSubqueryResultSet
(
SSqlObj
*
pSql
)
{
static
UNUSED_FUNC
bool
tscHasRemainDataInSubqueryResultSet
(
SSqlObj
*
pSql
)
{
bool
hasData
=
true
;
bool
hasData
=
true
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
...
...
src/client/src/tscSystem.c
浏览文件 @
599df650
...
@@ -41,8 +41,7 @@ int tscNumOfThreads;
...
@@ -41,8 +41,7 @@ int tscNumOfThreads;
static
pthread_once_t
tscinit
=
PTHREAD_ONCE_INIT
;
static
pthread_once_t
tscinit
=
PTHREAD_ONCE_INIT
;
void
taosInitNote
(
int
numOfNoteLines
,
int
maxNotes
,
char
*
lable
);
void
taosInitNote
(
int
numOfNoteLines
,
int
maxNotes
,
char
*
lable
);
//void tscUpdateIpSet(void *ahandle, SRpcIpSet *pIpSet);
//void tscUpdateEpSet(void *ahandle, SRpcEpSet *pEpSet);
void
tscCheckDiskUsage
(
void
*
UNUSED_PARAM
(
para
),
void
*
UNUSED_PARAM
(
param
))
{
void
tscCheckDiskUsage
(
void
*
UNUSED_PARAM
(
para
),
void
*
UNUSED_PARAM
(
param
))
{
taosGetDisk
();
taosGetDisk
();
...
@@ -117,8 +116,8 @@ void taos_init_imp() {
...
@@ -117,8 +116,8 @@ void taos_init_imp() {
taosInitNote
(
tsNumOfLogLines
/
10
,
1
,
(
char
*
)
"tsc_note"
);
taosInitNote
(
tsNumOfLogLines
/
10
,
1
,
(
char
*
)
"tsc_note"
);
}
}
if
(
tscSetMgmt
IpLis
tFromCfg
(
tsFirst
,
tsSecond
)
<
0
)
{
if
(
tscSetMgmt
EpSe
tFromCfg
(
tsFirst
,
tsSecond
)
<
0
)
{
tscError
(
"failed to init mnode
I
P list"
);
tscError
(
"failed to init mnode
E
P list"
);
return
;
return
;
}
}
...
...
src/client/src/tscUtil.c
浏览文件 @
599df650
...
@@ -1994,6 +1994,10 @@ bool hasMoreVnodesToTry(SSqlObj* pSql) {
...
@@ -1994,6 +1994,10 @@ bool hasMoreVnodesToTry(SSqlObj* pSql) {
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
&&
(
pTableMetaInfo
->
vgroupIndex
<
numOfVgroups
-
1
);
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
&&
(
pTableMetaInfo
->
vgroupIndex
<
numOfVgroups
-
1
);
}
}
bool
hasMoreClauseToTry
(
SSqlObj
*
pSql
)
{
return
pSql
->
cmd
.
clauseIndex
<
pSql
->
cmd
.
numOfClause
-
1
;
}
void
tscTryQueryNextVnode
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
)
{
void
tscTryQueryNextVnode
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
...
@@ -2050,7 +2054,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
...
@@ -2050,7 +2054,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
}
}
}
}
void
tscTryQueryNextClause
(
SSqlObj
*
pSql
,
void
(
*
queryFp
)()
)
{
void
tscTryQueryNextClause
(
SSqlObj
*
pSql
,
__async_cb_func_t
fp
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
...
@@ -2070,17 +2074,13 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
...
@@ -2070,17 +2074,13 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
tfree
(
pSql
->
pSubs
);
tfree
(
pSql
->
pSubs
);
pSql
->
numOfSubs
=
0
;
pSql
->
numOfSubs
=
0
;
pSql
->
fp
=
fp
;
if
(
pSql
->
fp
!=
NULL
)
{
pSql
->
fp
=
queryFp
;
assert
(
queryFp
!=
NULL
);
}
tscDebug
(
"%p try data in the next subclause:%d, total subclause:%d"
,
pSql
,
pCmd
->
clauseIndex
,
pCmd
->
numOfClause
);
tscDebug
(
"%p try data in the next subclause:%d, total subclause:%d"
,
pSql
,
pCmd
->
clauseIndex
,
pCmd
->
numOfClause
);
if
(
pCmd
->
command
>
TSDB_SQL_LOCAL
)
{
if
(
pCmd
->
command
>
TSDB_SQL_LOCAL
)
{
tscProcessLocalCmd
(
pSql
);
tscProcessLocalCmd
(
pSql
);
}
else
{
}
else
{
tsc
ProcessSql
(
pSql
);
tsc
DoQuery
(
pSql
);
}
}
}
}
...
@@ -2145,20 +2145,20 @@ char* strdup_throw(const char* str) {
...
@@ -2145,20 +2145,20 @@ char* strdup_throw(const char* str) {
return
p
;
return
p
;
}
}
int
tscSetMgmt
I
pListFromCfg
(
const
char
*
first
,
const
char
*
second
)
{
int
tscSetMgmt
E
pListFromCfg
(
const
char
*
first
,
const
char
*
second
)
{
// init mgmt ip set
// init mgmt ip set
tscMgmt
I
pSet
.
version
=
0
;
tscMgmt
E
pSet
.
version
=
0
;
SRpc
IpSet
*
mgmtIpSet
=
&
(
tscMgmtIpSet
.
i
pSet
);
SRpc
EpSet
*
mgmtEpSet
=
&
(
tscMgmtEpSet
.
e
pSet
);
mgmt
IpSet
->
numOfI
ps
=
0
;
mgmt
EpSet
->
numOfE
ps
=
0
;
mgmt
I
pSet
->
inUse
=
0
;
mgmt
E
pSet
->
inUse
=
0
;
if
(
first
&&
first
[
0
]
!=
0
)
{
if
(
first
&&
first
[
0
]
!=
0
)
{
if
(
strlen
(
first
)
>=
TSDB_EP_LEN
)
{
if
(
strlen
(
first
)
>=
TSDB_EP_LEN
)
{
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
return
-
1
;
return
-
1
;
}
}
taosGetFqdnPortFromEp
(
first
,
mgmt
IpSet
->
fqdn
[
mgmtIpSet
->
numOfIps
],
&
(
mgmtIpSet
->
port
[
mgmtIpSet
->
numOfI
ps
]));
taosGetFqdnPortFromEp
(
first
,
mgmt
EpSet
->
fqdn
[
mgmtEpSet
->
numOfEps
],
&
(
mgmtEpSet
->
port
[
mgmtEpSet
->
numOfE
ps
]));
mgmt
IpSet
->
numOfI
ps
++
;
mgmt
EpSet
->
numOfE
ps
++
;
}
}
if
(
second
&&
second
[
0
]
!=
0
)
{
if
(
second
&&
second
[
0
]
!=
0
)
{
...
@@ -2166,11 +2166,11 @@ int tscSetMgmtIpListFromCfg(const char *first, const char *second) {
...
@@ -2166,11 +2166,11 @@ int tscSetMgmtIpListFromCfg(const char *first, const char *second) {
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
return
-
1
;
return
-
1
;
}
}
taosGetFqdnPortFromEp
(
second
,
mgmt
IpSet
->
fqdn
[
mgmtIpSet
->
numOfIps
],
&
(
mgmtIpSet
->
port
[
mgmtIpSet
->
numOfI
ps
]));
taosGetFqdnPortFromEp
(
second
,
mgmt
EpSet
->
fqdn
[
mgmtEpSet
->
numOfEps
],
&
(
mgmtEpSet
->
port
[
mgmtEpSet
->
numOfE
ps
]));
mgmt
IpSet
->
numOfI
ps
++
;
mgmt
EpSet
->
numOfE
ps
++
;
}
}
if
(
mgmt
IpSet
->
numOfI
ps
==
0
)
{
if
(
mgmt
EpSet
->
numOfE
ps
==
0
)
{
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
terrno
=
TSDB_CODE_TSC_INVALID_FQDN
;
return
-
1
;
return
-
1
;
}
}
...
...
src/common/inc/tglobal.h
浏览文件 @
599df650
...
@@ -30,8 +30,6 @@ extern uint16_t tsDnodeShellPort;
...
@@ -30,8 +30,6 @@ extern uint16_t tsDnodeShellPort;
extern
uint16_t
tsDnodeDnodePort
;
extern
uint16_t
tsDnodeDnodePort
;
extern
uint16_t
tsSyncPort
;
extern
uint16_t
tsSyncPort
;
extern
int32_t
tsStatusInterval
;
extern
int32_t
tsStatusInterval
;
extern
int16_t
tsNumOfVnodesPerCore
;
extern
int16_t
tsNumOfTotalVnodes
;
extern
int32_t
tsNumOfMnodes
;
extern
int32_t
tsNumOfMnodes
;
extern
int32_t
tsEnableVnodeBak
;
extern
int32_t
tsEnableVnodeBak
;
...
...
src/common/src/tglobal.c
浏览文件 @
599df650
...
@@ -38,12 +38,9 @@ uint16_t tsDnodeShellPort = 6030; // udp[6035-6039] tcp[6035]
...
@@ -38,12 +38,9 @@ uint16_t tsDnodeShellPort = 6030; // udp[6035-6039] tcp[6035]
uint16_t
tsDnodeDnodePort
=
6035
;
// udp/tcp
uint16_t
tsDnodeDnodePort
=
6035
;
// udp/tcp
uint16_t
tsSyncPort
=
6040
;
uint16_t
tsSyncPort
=
6040
;
int32_t
tsStatusInterval
=
1
;
// second
int32_t
tsStatusInterval
=
1
;
// second
int16_t
tsNumOfVnodesPerCore
=
32
;
int16_t
tsNumOfTotalVnodes
=
TSDB_INVALID_VNODE_NUM
;
int32_t
tsNumOfMnodes
=
3
;
int32_t
tsNumOfMnodes
=
3
;
int32_t
tsEnableVnodeBak
=
1
;
int32_t
tsEnableVnodeBak
=
1
;
// common
// common
int32_t
tsRpcTimer
=
1000
;
int32_t
tsRpcTimer
=
1000
;
int32_t
tsRpcMaxTime
=
600
;
// seconds;
int32_t
tsRpcMaxTime
=
600
;
// seconds;
...
@@ -199,6 +196,9 @@ int32_t sDebugFlag = 135;
...
@@ -199,6 +196,9 @@ int32_t sDebugFlag = 135;
int32_t
wDebugFlag
=
135
;
int32_t
wDebugFlag
=
135
;
int32_t
tsdbDebugFlag
=
131
;
int32_t
tsdbDebugFlag
=
131
;
int32_t
(
*
monitorStartSystemFp
)()
=
NULL
;
void
(
*
monitorStopSystemFp
)()
=
NULL
;
static
pthread_once_t
tsInitGlobalCfgOnce
=
PTHREAD_ONCE_INIT
;
static
pthread_once_t
tsInitGlobalCfgOnce
=
PTHREAD_ONCE_INIT
;
void
taosSetAllDebugFlag
()
{
void
taosSetAllDebugFlag
()
{
...
@@ -248,11 +248,17 @@ bool taosCfgDynamicOptions(char *msg) {
...
@@ -248,11 +248,17 @@ bool taosCfgDynamicOptions(char *msg) {
*
((
int32_t
*
)
cfg
->
ptr
)
=
vint
;
*
((
int32_t
*
)
cfg
->
ptr
)
=
vint
;
if
(
strncasecmp
(
cfg
->
option
,
"monitor"
,
olen
)
==
0
)
{
if
(
strncasecmp
(
cfg
->
option
,
"monitor"
,
olen
)
==
0
)
{
// if (0 == vint) {
if
(
1
==
vint
)
{
// monitorStartSystem();
if
(
monitorStartSystemFp
)
{
// } else {
(
*
monitorStartSystemFp
)();
// monitorStopSystem();
uInfo
(
"monitor is enabled"
);
// }
}
}
else
{
if
(
monitorStopSystemFp
)
{
(
*
monitorStopSystemFp
)();
uInfo
(
"monitor is disabled"
);
}
}
return
true
;
return
true
;
}
}
...
@@ -393,16 +399,6 @@ static void doInitGlobalConfig() {
...
@@ -393,16 +399,6 @@ static void doInitGlobalConfig() {
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
taosInitConfigOption
(
cfg
);
taosInitConfigOption
(
cfg
);
cfg
.
option
=
"numOfTotalVnodes"
;
cfg
.
ptr
=
&
tsNumOfTotalVnodes
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT16
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
;
cfg
.
minValue
=
0
;
cfg
.
maxValue
=
TSDB_MAX_VNODES
;
cfg
.
ptrLength
=
0
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
taosInitConfigOption
(
cfg
);
cfg
.
option
=
"numOfMnodes"
;
cfg
.
option
=
"numOfMnodes"
;
cfg
.
ptr
=
&
tsNumOfMnodes
;
cfg
.
ptr
=
&
tsNumOfMnodes
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
...
@@ -444,7 +440,7 @@ static void doInitGlobalConfig() {
...
@@ -444,7 +440,7 @@ static void doInitGlobalConfig() {
taosInitConfigOption
(
cfg
);
taosInitConfigOption
(
cfg
);
// 0-any; 1-mnode; 2-vnode
// 0-any; 1-mnode; 2-vnode
cfg
.
option
=
"
alternativeR
ole"
;
cfg
.
option
=
"
r
ole"
;
cfg
.
ptr
=
&
tsAlternativeRole
;
cfg
.
ptr
=
&
tsAlternativeRole
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
;
...
@@ -1271,12 +1267,6 @@ bool taosCheckGlobalCfg() {
...
@@ -1271,12 +1267,6 @@ bool taosCheckGlobalCfg() {
tsNumOfCores
=
1
;
tsNumOfCores
=
1
;
}
}
if
(
tsNumOfTotalVnodes
==
TSDB_INVALID_VNODE_NUM
)
{
tsNumOfTotalVnodes
=
tsNumOfCores
*
tsNumOfVnodesPerCore
;
tsNumOfTotalVnodes
=
tsNumOfTotalVnodes
>
TSDB_MAX_VNODES
?
TSDB_MAX_VNODES
:
tsNumOfTotalVnodes
;
tsNumOfTotalVnodes
=
tsNumOfTotalVnodes
<
TSDB_MIN_VNODES
?
TSDB_MIN_VNODES
:
tsNumOfTotalVnodes
;
}
// todo refactor
// todo refactor
tsVersion
=
0
;
tsVersion
=
0
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
浏览文件 @
599df650
...
@@ -208,7 +208,6 @@ public class TDNode {
...
@@ -208,7 +208,6 @@ public class TDNode {
setCfgConfig
(
"mnodeEqualVnodeNum"
,
"0"
);
setCfgConfig
(
"mnodeEqualVnodeNum"
,
"0"
);
setCfgConfig
(
"walLevel"
,
"1"
);
setCfgConfig
(
"walLevel"
,
"1"
);
setCfgConfig
(
"statusInterval"
,
"1"
);
setCfgConfig
(
"statusInterval"
,
"1"
);
setCfgConfig
(
"numOfTotalVnodes"
,
"64"
);
setCfgConfig
(
"numOfMnodes"
,
"3"
);
setCfgConfig
(
"numOfMnodes"
,
"3"
);
setCfgConfig
(
"numOfThreadsPerCore"
,
"2.0"
);
setCfgConfig
(
"numOfThreadsPerCore"
,
"2.0"
);
setCfgConfig
(
"monitor"
,
"0"
);
setCfgConfig
(
"monitor"
,
"0"
);
...
...
src/cq/src/cqMain.c
浏览文件 @
599df650
...
@@ -103,9 +103,6 @@ void cqClose(void *handle) {
...
@@ -103,9 +103,6 @@ void cqClose(void *handle) {
SCqContext
*
pContext
=
handle
;
SCqContext
*
pContext
=
handle
;
if
(
handle
==
NULL
)
return
;
if
(
handle
==
NULL
)
return
;
taosTmrCleanUp
(
pContext
->
tmrCtrl
);
pContext
->
tmrCtrl
=
NULL
;
// stop all CQs
// stop all CQs
cqStop
(
pContext
);
cqStop
(
pContext
);
...
@@ -125,6 +122,9 @@ void cqClose(void *handle) {
...
@@ -125,6 +122,9 @@ void cqClose(void *handle) {
pthread_mutex_destroy
(
&
pContext
->
mutex
);
pthread_mutex_destroy
(
&
pContext
->
mutex
);
taosTmrCleanUp
(
pContext
->
tmrCtrl
);
pContext
->
tmrCtrl
=
NULL
;
cTrace
(
"vgId:%d, CQ is closed"
,
pContext
->
vgId
);
cTrace
(
"vgId:%d, CQ is closed"
,
pContext
->
vgId
);
free
(
pContext
);
free
(
pContext
);
}
}
...
...
src/dnode/inc/dnodeMgmt.h
浏览文件 @
599df650
...
@@ -35,8 +35,8 @@ void* dnodeGetVnodeTsdb(void *pVnode);
...
@@ -35,8 +35,8 @@ void* dnodeGetVnodeTsdb(void *pVnode);
void
dnodeReleaseVnode
(
void
*
pVnode
);
void
dnodeReleaseVnode
(
void
*
pVnode
);
void
dnodeSendRedirectMsg
(
SRpcMsg
*
rpcMsg
,
bool
forShell
);
void
dnodeSendRedirectMsg
(
SRpcMsg
*
rpcMsg
,
bool
forShell
);
void
dnodeGetMnode
IpSetForPeer
(
void
*
i
pSet
);
void
dnodeGetMnode
EpSetForPeer
(
void
*
e
pSet
);
void
dnodeGetMnode
IpSetForShell
(
void
*
i
pSet
);
void
dnodeGetMnode
EpSetForShell
(
void
*
e
pSet
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/dnode/src/dnodeMgmt.c
浏览文件 @
599df650
...
@@ -52,7 +52,7 @@ void * tsDnodeTmr = NULL;
...
@@ -52,7 +52,7 @@ void * tsDnodeTmr = NULL;
static
void
*
tsStatusTimer
=
NULL
;
static
void
*
tsStatusTimer
=
NULL
;
static
uint32_t
tsRebootTime
;
static
uint32_t
tsRebootTime
;
static
SRpc
IpSet
tsDMnodeI
pSet
=
{
0
};
static
SRpc
EpSet
tsDMnodeE
pSet
=
{
0
};
static
SDMMnodeInfos
tsDMnodeInfos
=
{
0
};
static
SDMMnodeInfos
tsDMnodeInfos
=
{
0
};
static
SDMDnodeCfg
tsDnodeCfg
=
{
0
};
static
SDMDnodeCfg
tsDnodeCfg
=
{
0
};
static
taos_qset
tsMgmtQset
=
NULL
;
static
taos_qset
tsMgmtQset
=
NULL
;
...
@@ -90,21 +90,21 @@ int32_t dnodeInitMgmt() {
...
@@ -90,21 +90,21 @@ int32_t dnodeInitMgmt() {
tsRebootTime
=
taosGetTimestampSec
();
tsRebootTime
=
taosGetTimestampSec
();
if
(
!
dnodeReadMnodeInfos
())
{
if
(
!
dnodeReadMnodeInfos
())
{
memset
(
&
tsDMnode
IpSet
,
0
,
sizeof
(
SRpcI
pSet
));
memset
(
&
tsDMnode
EpSet
,
0
,
sizeof
(
SRpcE
pSet
));
memset
(
&
tsDMnodeInfos
,
0
,
sizeof
(
SDMMnodeInfos
));
memset
(
&
tsDMnodeInfos
,
0
,
sizeof
(
SDMMnodeInfos
));
tsDMnode
IpSet
.
numOfI
ps
=
1
;
tsDMnode
EpSet
.
numOfE
ps
=
1
;
taosGetFqdnPortFromEp
(
tsFirst
,
tsDMnode
IpSet
.
fqdn
[
0
],
&
tsDMnodeI
pSet
.
port
[
0
]);
taosGetFqdnPortFromEp
(
tsFirst
,
tsDMnode
EpSet
.
fqdn
[
0
],
&
tsDMnodeE
pSet
.
port
[
0
]);
if
(
strcmp
(
tsSecond
,
tsFirst
)
!=
0
)
{
if
(
strcmp
(
tsSecond
,
tsFirst
)
!=
0
)
{
tsDMnode
IpSet
.
numOfI
ps
=
2
;
tsDMnode
EpSet
.
numOfE
ps
=
2
;
taosGetFqdnPortFromEp
(
tsSecond
,
tsDMnode
IpSet
.
fqdn
[
1
],
&
tsDMnodeI
pSet
.
port
[
1
]);
taosGetFqdnPortFromEp
(
tsSecond
,
tsDMnode
EpSet
.
fqdn
[
1
],
&
tsDMnodeE
pSet
.
port
[
1
]);
}
}
}
else
{
}
else
{
tsDMnode
I
pSet
.
inUse
=
tsDMnodeInfos
.
inUse
;
tsDMnode
E
pSet
.
inUse
=
tsDMnodeInfos
.
inUse
;
tsDMnode
IpSet
.
numOfI
ps
=
tsDMnodeInfos
.
nodeNum
;
tsDMnode
EpSet
.
numOfE
ps
=
tsDMnodeInfos
.
nodeNum
;
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
taosGetFqdnPortFromEp
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
tsDMnode
IpSet
.
fqdn
[
i
],
&
tsDMnodeI
pSet
.
port
[
i
]);
taosGetFqdnPortFromEp
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
tsDMnode
EpSet
.
fqdn
[
i
],
&
tsDMnodeE
pSet
.
port
[
i
]);
}
}
}
}
...
@@ -450,27 +450,27 @@ static int32_t dnodeProcessConfigDnodeMsg(SRpcMsg *pMsg) {
...
@@ -450,27 +450,27 @@ static int32_t dnodeProcessConfigDnodeMsg(SRpcMsg *pMsg) {
return
taosCfgDynamicOptions
(
pCfg
->
config
);
return
taosCfgDynamicOptions
(
pCfg
->
config
);
}
}
void
dnodeUpdateMnode
IpSetForPeer
(
SRpcIpSet
*
pI
pSet
)
{
void
dnodeUpdateMnode
EpSetForPeer
(
SRpcEpSet
*
pE
pSet
)
{
dInfo
(
"mnode
IP list for is changed, numOfIps:%d inUse:%d"
,
pIpSet
->
numOfIps
,
pI
pSet
->
inUse
);
dInfo
(
"mnode
EP list for is changed, numOfEps:%d inUse:%d"
,
pEpSet
->
numOfEps
,
pE
pSet
->
inUse
);
for
(
int
i
=
0
;
i
<
p
IpSet
->
numOfI
ps
;
++
i
)
{
for
(
int
i
=
0
;
i
<
p
EpSet
->
numOfE
ps
;
++
i
)
{
p
I
pSet
->
port
[
i
]
-=
TSDB_PORT_DNODEDNODE
;
p
E
pSet
->
port
[
i
]
-=
TSDB_PORT_DNODEDNODE
;
dInfo
(
"mnode index:%d %s:%u"
,
i
,
p
IpSet
->
fqdn
[
i
],
pI
pSet
->
port
[
i
])
dInfo
(
"mnode index:%d %s:%u"
,
i
,
p
EpSet
->
fqdn
[
i
],
pE
pSet
->
port
[
i
])
}
}
tsDMnode
IpSet
=
*
pI
pSet
;
tsDMnode
EpSet
=
*
pE
pSet
;
}
}
void
dnodeGetMnode
IpSetForPeer
(
void
*
i
pSetRaw
)
{
void
dnodeGetMnode
EpSetForPeer
(
void
*
e
pSetRaw
)
{
SRpc
IpSet
*
ipSet
=
i
pSetRaw
;
SRpc
EpSet
*
epSet
=
e
pSetRaw
;
*
ipSet
=
tsDMnodeI
pSet
;
*
epSet
=
tsDMnodeE
pSet
;
for
(
int
i
=
0
;
i
<
ipSet
->
numOfI
ps
;
++
i
)
for
(
int
i
=
0
;
i
<
epSet
->
numOfE
ps
;
++
i
)
i
pSet
->
port
[
i
]
+=
TSDB_PORT_DNODEDNODE
;
e
pSet
->
port
[
i
]
+=
TSDB_PORT_DNODEDNODE
;
}
}
void
dnodeGetMnode
IpSetForShell
(
void
*
i
pSetRaw
)
{
void
dnodeGetMnode
EpSetForShell
(
void
*
e
pSetRaw
)
{
SRpc
IpSet
*
ipSet
=
i
pSetRaw
;
SRpc
EpSet
*
epSet
=
e
pSetRaw
;
*
ipSet
=
tsDMnodeI
pSet
;
*
epSet
=
tsDMnodeE
pSet
;
}
}
static
void
dnodeProcessStatusRsp
(
SRpcMsg
*
pMsg
)
{
static
void
dnodeProcessStatusRsp
(
SRpcMsg
*
pMsg
)
{
...
@@ -536,10 +536,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
...
@@ -536,10 +536,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
dInfo
(
"mnode index:%d, %s"
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
);
dInfo
(
"mnode index:%d, %s"
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
);
}
}
tsDMnode
I
pSet
.
inUse
=
tsDMnodeInfos
.
inUse
;
tsDMnode
E
pSet
.
inUse
=
tsDMnodeInfos
.
inUse
;
tsDMnode
IpSet
.
numOfI
ps
=
tsDMnodeInfos
.
nodeNum
;
tsDMnode
EpSet
.
numOfE
ps
=
tsDMnodeInfos
.
nodeNum
;
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
taosGetFqdnPortFromEp
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
tsDMnode
IpSet
.
fqdn
[
i
],
&
tsDMnodeI
pSet
.
port
[
i
]);
taosGetFqdnPortFromEp
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
tsDMnode
EpSet
.
fqdn
[
i
],
&
tsDMnodeE
pSet
.
port
[
i
]);
}
}
dnodeSaveMnodeInfos
();
dnodeSaveMnodeInfos
();
...
@@ -549,10 +549,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
...
@@ -549,10 +549,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
static
bool
dnodeReadMnodeInfos
()
{
static
bool
dnodeReadMnodeInfos
()
{
char
ipFile
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
char
ipFile
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
sprintf
(
ipFile
,
"%s/mnode
IpLis
t.json"
,
tsDnodeDir
);
sprintf
(
ipFile
,
"%s/mnode
EpSe
t.json"
,
tsDnodeDir
);
FILE
*
fp
=
fopen
(
ipFile
,
"r"
);
FILE
*
fp
=
fopen
(
ipFile
,
"r"
);
if
(
!
fp
)
{
if
(
!
fp
)
{
dDebug
(
"failed to read mnode
IpLis
t.json, file not exist"
);
dDebug
(
"failed to read mnode
EpSe
t.json, file not exist"
);
return
false
;
return
false
;
}
}
...
@@ -563,40 +563,40 @@ static bool dnodeReadMnodeInfos() {
...
@@ -563,40 +563,40 @@ static bool dnodeReadMnodeInfos() {
if
(
len
<=
0
)
{
if
(
len
<=
0
)
{
free
(
content
);
free
(
content
);
fclose
(
fp
);
fclose
(
fp
);
dError
(
"failed to read mnode
IpLis
t.json, content is null"
);
dError
(
"failed to read mnode
EpSe
t.json, content is null"
);
return
false
;
return
false
;
}
}
content
[
len
]
=
0
;
content
[
len
]
=
0
;
cJSON
*
root
=
cJSON_Parse
(
content
);
cJSON
*
root
=
cJSON_Parse
(
content
);
if
(
root
==
NULL
)
{
if
(
root
==
NULL
)
{
dError
(
"failed to read mnode
IpLis
t.json, invalid json format"
);
dError
(
"failed to read mnode
EpSe
t.json, invalid json format"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
cJSON
*
inUse
=
cJSON_GetObjectItem
(
root
,
"inUse"
);
cJSON
*
inUse
=
cJSON_GetObjectItem
(
root
,
"inUse"
);
if
(
!
inUse
||
inUse
->
type
!=
cJSON_Number
)
{
if
(
!
inUse
||
inUse
->
type
!=
cJSON_Number
)
{
dError
(
"failed to read mnode
IpLis
t.json, inUse not found"
);
dError
(
"failed to read mnode
EpSe
t.json, inUse not found"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDMnodeInfos
.
inUse
=
inUse
->
valueint
;
tsDMnodeInfos
.
inUse
=
inUse
->
valueint
;
cJSON
*
nodeNum
=
cJSON_GetObjectItem
(
root
,
"nodeNum"
);
cJSON
*
nodeNum
=
cJSON_GetObjectItem
(
root
,
"nodeNum"
);
if
(
!
nodeNum
||
nodeNum
->
type
!=
cJSON_Number
)
{
if
(
!
nodeNum
||
nodeNum
->
type
!=
cJSON_Number
)
{
dError
(
"failed to read mnode
IpLis
t.json, nodeNum not found"
);
dError
(
"failed to read mnode
EpSe
t.json, nodeNum not found"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDMnodeInfos
.
nodeNum
=
nodeNum
->
valueint
;
tsDMnodeInfos
.
nodeNum
=
nodeNum
->
valueint
;
cJSON
*
nodeInfos
=
cJSON_GetObjectItem
(
root
,
"nodeInfos"
);
cJSON
*
nodeInfos
=
cJSON_GetObjectItem
(
root
,
"nodeInfos"
);
if
(
!
nodeInfos
||
nodeInfos
->
type
!=
cJSON_Array
)
{
if
(
!
nodeInfos
||
nodeInfos
->
type
!=
cJSON_Array
)
{
dError
(
"failed to read mnode
IpLis
t.json, nodeInfos not found"
);
dError
(
"failed to read mnode
EpSe
t.json, nodeInfos not found"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
int
size
=
cJSON_GetArraySize
(
nodeInfos
);
int
size
=
cJSON_GetArraySize
(
nodeInfos
);
if
(
size
!=
tsDMnodeInfos
.
nodeNum
)
{
if
(
size
!=
tsDMnodeInfos
.
nodeNum
)
{
dError
(
"failed to read mnode
IpLis
t.json, nodeInfos size not matched"
);
dError
(
"failed to read mnode
EpSe
t.json, nodeInfos size not matched"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
...
@@ -606,14 +606,14 @@ static bool dnodeReadMnodeInfos() {
...
@@ -606,14 +606,14 @@ static bool dnodeReadMnodeInfos() {
cJSON
*
nodeId
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeId"
);
cJSON
*
nodeId
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeId"
);
if
(
!
nodeId
||
nodeId
->
type
!=
cJSON_Number
)
{
if
(
!
nodeId
||
nodeId
->
type
!=
cJSON_Number
)
{
dError
(
"failed to read mnode
IpLis
t.json, nodeId not found"
);
dError
(
"failed to read mnode
EpSe
t.json, nodeId not found"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
=
nodeId
->
valueint
;
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
=
nodeId
->
valueint
;
cJSON
*
nodeEp
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeEp"
);
cJSON
*
nodeEp
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeEp"
);
if
(
!
nodeEp
||
nodeEp
->
type
!=
cJSON_String
||
nodeEp
->
valuestring
==
NULL
)
{
if
(
!
nodeEp
||
nodeEp
->
type
!=
cJSON_String
||
nodeEp
->
valuestring
==
NULL
)
{
dError
(
"failed to read mnode
IpLis
t.json, nodeName not found"
);
dError
(
"failed to read mnode
EpSe
t.json, nodeName not found"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
strncpy
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
nodeEp
->
valuestring
,
TSDB_EP_LEN
);
strncpy
(
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
,
nodeEp
->
valuestring
,
TSDB_EP_LEN
);
...
@@ -621,7 +621,7 @@ static bool dnodeReadMnodeInfos() {
...
@@ -621,7 +621,7 @@ static bool dnodeReadMnodeInfos() {
ret
=
true
;
ret
=
true
;
dInfo
(
"read mnode
iplist successed, numOfI
ps:%d inUse:%d"
,
tsDMnodeInfos
.
nodeNum
,
tsDMnodeInfos
.
inUse
);
dInfo
(
"read mnode
epSet successed, numOfE
ps:%d inUse:%d"
,
tsDMnodeInfos
.
nodeNum
,
tsDMnodeInfos
.
inUse
);
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
tsDMnodeInfos
.
nodeNum
;
i
++
)
{
dInfo
(
"mnode:%d, %s"
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
);
dInfo
(
"mnode:%d, %s"
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeId
,
tsDMnodeInfos
.
nodeInfos
[
i
].
nodeEp
);
}
}
...
@@ -635,7 +635,7 @@ PARSE_OVER:
...
@@ -635,7 +635,7 @@ PARSE_OVER:
static
void
dnodeSaveMnodeInfos
()
{
static
void
dnodeSaveMnodeInfos
()
{
char
ipFile
[
TSDB_FILENAME_LEN
]
=
{
0
};
char
ipFile
[
TSDB_FILENAME_LEN
]
=
{
0
};
sprintf
(
ipFile
,
"%s/mnode
IpLis
t.json"
,
tsDnodeDir
);
sprintf
(
ipFile
,
"%s/mnode
EpSe
t.json"
,
tsDnodeDir
);
FILE
*
fp
=
fopen
(
ipFile
,
"w"
);
FILE
*
fp
=
fopen
(
ipFile
,
"w"
);
if
(
!
fp
)
return
;
if
(
!
fp
)
return
;
...
@@ -663,11 +663,11 @@ static void dnodeSaveMnodeInfos() {
...
@@ -663,11 +663,11 @@ static void dnodeSaveMnodeInfos() {
fclose
(
fp
);
fclose
(
fp
);
free
(
content
);
free
(
content
);
dInfo
(
"save mnode
iplis
t successed"
);
dInfo
(
"save mnode
epSe
t successed"
);
}
}
char
*
dnodeGetMnodeMasterEp
()
{
char
*
dnodeGetMnodeMasterEp
()
{
return
tsDMnodeInfos
.
nodeInfos
[
tsDMnode
I
pSet
.
inUse
].
nodeEp
;
return
tsDMnodeInfos
.
nodeInfos
[
tsDMnode
E
pSet
.
inUse
].
nodeEp
;
}
}
void
*
dnodeGetMnodeInfos
()
{
void
*
dnodeGetMnodeInfos
()
{
...
@@ -699,7 +699,6 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
...
@@ -699,7 +699,6 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
pStatus
->
dnodeId
=
htonl
(
tsDnodeCfg
.
dnodeId
);
pStatus
->
dnodeId
=
htonl
(
tsDnodeCfg
.
dnodeId
);
strcpy
(
pStatus
->
dnodeEp
,
tsLocalEp
);
strcpy
(
pStatus
->
dnodeEp
,
tsLocalEp
);
pStatus
->
lastReboot
=
htonl
(
tsRebootTime
);
pStatus
->
lastReboot
=
htonl
(
tsRebootTime
);
pStatus
->
numOfTotalVnodes
=
htons
((
uint16_t
)
tsNumOfTotalVnodes
);
pStatus
->
numOfCores
=
htons
((
uint16_t
)
tsNumOfCores
);
pStatus
->
numOfCores
=
htons
((
uint16_t
)
tsNumOfCores
);
pStatus
->
diskAvailable
=
tsAvailDataDirGB
;
pStatus
->
diskAvailable
=
tsAvailDataDirGB
;
pStatus
->
alternativeRole
=
(
uint8_t
)
tsAlternativeRole
;
pStatus
->
alternativeRole
=
(
uint8_t
)
tsAlternativeRole
;
...
@@ -727,9 +726,9 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
...
@@ -727,9 +726,9 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
.
msgType
=
TSDB_MSG_TYPE_DM_STATUS
.
msgType
=
TSDB_MSG_TYPE_DM_STATUS
};
};
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
dnodeGetMnode
IpSetForPeer
(
&
i
pSet
);
dnodeGetMnode
EpSetForPeer
(
&
e
pSet
);
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMsg
);
}
}
static
bool
dnodeReadDnodeCfg
()
{
static
bool
dnodeReadDnodeCfg
()
{
...
@@ -818,20 +817,20 @@ void dnodeSendRedirectMsg(SRpcMsg *rpcMsg, bool forShell) {
...
@@ -818,20 +817,20 @@ void dnodeSendRedirectMsg(SRpcMsg *rpcMsg, bool forShell) {
SRpcConnInfo
connInfo
=
{
0
};
SRpcConnInfo
connInfo
=
{
0
};
rpcGetConnInfo
(
rpcMsg
->
handle
,
&
connInfo
);
rpcGetConnInfo
(
rpcMsg
->
handle
,
&
connInfo
);
SRpc
IpSet
i
pSet
=
{
0
};
SRpc
EpSet
e
pSet
=
{
0
};
if
(
forShell
)
{
if
(
forShell
)
{
dnodeGetMnode
IpSetForShell
(
&
i
pSet
);
dnodeGetMnode
EpSetForShell
(
&
e
pSet
);
}
else
{
}
else
{
dnodeGetMnode
IpSetForPeer
(
&
i
pSet
);
dnodeGetMnode
EpSetForPeer
(
&
e
pSet
);
}
}
dDebug
(
"msg:%s will be redirected, dnodeIp:%s user:%s, numOf
I
ps:%d inUse:%d"
,
taosMsg
[
rpcMsg
->
msgType
],
dDebug
(
"msg:%s will be redirected, dnodeIp:%s user:%s, numOf
E
ps:%d inUse:%d"
,
taosMsg
[
rpcMsg
->
msgType
],
taosIpStr
(
connInfo
.
clientIp
),
connInfo
.
user
,
ipSet
.
numOfIps
,
i
pSet
.
inUse
);
taosIpStr
(
connInfo
.
clientIp
),
connInfo
.
user
,
epSet
.
numOfEps
,
e
pSet
.
inUse
);
for
(
int
i
=
0
;
i
<
ipSet
.
numOfI
ps
;
++
i
)
{
for
(
int
i
=
0
;
i
<
epSet
.
numOfE
ps
;
++
i
)
{
dDebug
(
"mnode index:%d %s:%d"
,
i
,
ipSet
.
fqdn
[
i
],
i
pSet
.
port
[
i
]);
dDebug
(
"mnode index:%d %s:%d"
,
i
,
epSet
.
fqdn
[
i
],
e
pSet
.
port
[
i
]);
ipSet
.
port
[
i
]
=
htons
(
i
pSet
.
port
[
i
]);
epSet
.
port
[
i
]
=
htons
(
e
pSet
.
port
[
i
]);
}
}
rpcSendRedirectRsp
(
rpcMsg
->
handle
,
&
i
pSet
);
rpcSendRedirectRsp
(
rpcMsg
->
handle
,
&
e
pSet
);
}
}
src/dnode/src/dnodePeer.c
浏览文件 @
599df650
...
@@ -29,11 +29,11 @@
...
@@ -29,11 +29,11 @@
#include "dnodeVWrite.h"
#include "dnodeVWrite.h"
#include "dnodeMPeer.h"
#include "dnodeMPeer.h"
extern
void
dnodeUpdateMnode
IpSetForPeer
(
SRpcIpSet
*
pI
pSet
);
extern
void
dnodeUpdateMnode
EpSetForPeer
(
SRpcEpSet
*
pE
pSet
);
static
void
(
*
dnodeProcessReqMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
);
static
void
(
*
dnodeProcessReqMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
);
static
void
dnodeProcessReqMsgFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
I
pSet
*
);
static
void
dnodeProcessReqMsgFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
E
pSet
*
);
static
void
(
*
dnodeProcessRspMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
rpcMsg
);
static
void
(
*
dnodeProcessRspMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
rpcMsg
);
static
void
dnodeProcessRspFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
);
static
void
dnodeProcessRspFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
);
static
void
*
tsDnodeServerRpc
=
NULL
;
static
void
*
tsDnodeServerRpc
=
NULL
;
static
void
*
tsDnodeClientRpc
=
NULL
;
static
void
*
tsDnodeClientRpc
=
NULL
;
...
@@ -83,7 +83,7 @@ void dnodeCleanupServer() {
...
@@ -83,7 +83,7 @@ void dnodeCleanupServer() {
}
}
}
}
static
void
dnodeProcessReqMsgFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
)
{
static
void
dnodeProcessReqMsgFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
)
{
SRpcMsg
rspMsg
=
{
SRpcMsg
rspMsg
=
{
.
handle
=
pMsg
->
handle
,
.
handle
=
pMsg
->
handle
,
.
pCont
=
NULL
,
.
pCont
=
NULL
,
...
@@ -148,9 +148,9 @@ void dnodeCleanupClient() {
...
@@ -148,9 +148,9 @@ void dnodeCleanupClient() {
}
}
}
}
static
void
dnodeProcessRspFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
)
{
static
void
dnodeProcessRspFromDnode
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
)
{
if
(
pMsg
->
msgType
==
TSDB_MSG_TYPE_DM_STATUS_RSP
&&
p
I
pSet
)
{
if
(
pMsg
->
msgType
==
TSDB_MSG_TYPE_DM_STATUS_RSP
&&
p
E
pSet
)
{
dnodeUpdateMnode
IpSetForPeer
(
pI
pSet
);
dnodeUpdateMnode
EpSetForPeer
(
pE
pSet
);
}
}
if
(
dnodeProcessRspMsgFp
[
pMsg
->
msgType
])
{
if
(
dnodeProcessRspMsgFp
[
pMsg
->
msgType
])
{
...
@@ -166,12 +166,12 @@ void dnodeAddClientRspHandle(uint8_t msgType, void (*fp)(SRpcMsg *rpcMsg)) {
...
@@ -166,12 +166,12 @@ void dnodeAddClientRspHandle(uint8_t msgType, void (*fp)(SRpcMsg *rpcMsg)) {
dnodeProcessRspMsgFp
[
msgType
]
=
fp
;
dnodeProcessRspMsgFp
[
msgType
]
=
fp
;
}
}
void
dnodeSendMsgToDnode
(
SRpc
IpSet
*
i
pSet
,
SRpcMsg
*
rpcMsg
)
{
void
dnodeSendMsgToDnode
(
SRpc
EpSet
*
e
pSet
,
SRpcMsg
*
rpcMsg
)
{
rpcSendRequest
(
tsDnodeClientRpc
,
i
pSet
,
rpcMsg
);
rpcSendRequest
(
tsDnodeClientRpc
,
e
pSet
,
rpcMsg
);
}
}
void
dnodeSendMsgToDnodeRecv
(
SRpcMsg
*
rpcMsg
,
SRpcMsg
*
rpcRsp
)
{
void
dnodeSendMsgToDnodeRecv
(
SRpcMsg
*
rpcMsg
,
SRpcMsg
*
rpcRsp
)
{
SRpc
IpSet
i
pSet
=
{
0
};
SRpc
EpSet
e
pSet
=
{
0
};
dnodeGetMnode
IpSetForPeer
(
&
i
pSet
);
dnodeGetMnode
EpSetForPeer
(
&
e
pSet
);
rpcSendRecv
(
tsDnodeClientRpc
,
&
i
pSet
,
rpcMsg
,
rpcRsp
);
rpcSendRecv
(
tsDnodeClientRpc
,
&
e
pSet
,
rpcMsg
,
rpcRsp
);
}
}
src/dnode/src/dnodeShell.c
浏览文件 @
599df650
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#include "dnodeShell.h"
#include "dnodeShell.h"
static
void
(
*
dnodeProcessShellMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
);
static
void
(
*
dnodeProcessShellMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SRpcMsg
*
);
static
void
dnodeProcessMsgFromShell
(
SRpcMsg
*
pMsg
,
SRpc
I
pSet
*
);
static
void
dnodeProcessMsgFromShell
(
SRpcMsg
*
pMsg
,
SRpc
E
pSet
*
);
static
int
dnodeRetrieveUserAuthInfo
(
char
*
user
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
static
int
dnodeRetrieveUserAuthInfo
(
char
*
user
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
static
void
*
tsDnodeShellRpc
=
NULL
;
static
void
*
tsDnodeShellRpc
=
NULL
;
static
int32_t
tsDnodeQueryReqNum
=
0
;
static
int32_t
tsDnodeQueryReqNum
=
0
;
...
@@ -108,7 +108,7 @@ void dnodeCleanupShell() {
...
@@ -108,7 +108,7 @@ void dnodeCleanupShell() {
}
}
}
}
void
dnodeProcessMsgFromShell
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
)
{
void
dnodeProcessMsgFromShell
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
)
{
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
handle
=
pMsg
->
handle
,
.
handle
=
pMsg
->
handle
,
.
pCont
=
NULL
,
.
pCont
=
NULL
,
...
...
src/inc/dnode.h
浏览文件 @
599df650
...
@@ -39,13 +39,13 @@ SDnodeStatisInfo dnodeGetStatisInfo();
...
@@ -39,13 +39,13 @@ SDnodeStatisInfo dnodeGetStatisInfo();
bool
dnodeIsFirstDeploy
();
bool
dnodeIsFirstDeploy
();
char
*
dnodeGetMnodeMasterEp
();
char
*
dnodeGetMnodeMasterEp
();
void
dnodeGetMnode
IpSetForPeer
(
void
*
i
pSet
);
void
dnodeGetMnode
EpSetForPeer
(
void
*
e
pSet
);
void
dnodeGetMnode
IpSetForShell
(
void
*
i
pSet
);
void
dnodeGetMnode
EpSetForShell
(
void
*
e
pSet
);
void
*
dnodeGetMnodeInfos
();
void
*
dnodeGetMnodeInfos
();
int32_t
dnodeGetDnodeId
();
int32_t
dnodeGetDnodeId
();
void
dnodeAddClientRspHandle
(
uint8_t
msgType
,
void
(
*
fp
)(
SRpcMsg
*
rpcMsg
));
void
dnodeAddClientRspHandle
(
uint8_t
msgType
,
void
(
*
fp
)(
SRpcMsg
*
rpcMsg
));
void
dnodeSendMsgToDnode
(
SRpc
IpSet
*
i
pSet
,
SRpcMsg
*
rpcMsg
);
void
dnodeSendMsgToDnode
(
SRpc
EpSet
*
e
pSet
,
SRpcMsg
*
rpcMsg
);
void
dnodeSendMsgToDnodeRecv
(
SRpcMsg
*
rpcMsg
,
SRpcMsg
*
rpcRsp
);
void
dnodeSendMsgToDnodeRecv
(
SRpcMsg
*
rpcMsg
,
SRpcMsg
*
rpcRsp
);
void
*
dnodeSendCfgTableToRecv
(
int32_t
vgId
,
int32_t
sid
);
void
*
dnodeSendCfgTableToRecv
(
int32_t
vgId
,
int32_t
sid
);
...
...
src/inc/taosdef.h
浏览文件 @
599df650
...
@@ -274,9 +274,8 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
...
@@ -274,9 +274,8 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
#define TSDB_DEFAULT_PAYLOAD_SIZE 5120 // default payload size, greater than PATH_MAX value
#define TSDB_DEFAULT_PAYLOAD_SIZE 5120 // default payload size, greater than PATH_MAX value
#define TSDB_EXTRA_PAYLOAD_SIZE 128 // extra bytes for auth
#define TSDB_EXTRA_PAYLOAD_SIZE 128 // extra bytes for auth
#define TSDB_CQ_SQL_SIZE 1024
#define TSDB_CQ_SQL_SIZE 1024
#define TSDB_MIN_VNODES 64
#define TSDB_MAX_VNODES 2048
#define TSDB_MAX_VNODES 2048
#define TSDB_MIN_VNODES 256
#define TSDB_INVALID_VNODE_NUM 0
#define TSDB_DNODE_ROLE_ANY 0
#define TSDB_DNODE_ROLE_ANY 0
#define TSDB_DNODE_ROLE_MGMT 1
#define TSDB_DNODE_ROLE_MGMT 1
...
@@ -293,7 +292,7 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
...
@@ -293,7 +292,7 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
#define TSDB_MIN_TOTAL_BLOCKS 2
#define TSDB_MIN_TOTAL_BLOCKS 2
#define TSDB_MAX_TOTAL_BLOCKS 10000
#define TSDB_MAX_TOTAL_BLOCKS 10000
#define TSDB_DEFAULT_TOTAL_BLOCKS
4
#define TSDB_DEFAULT_TOTAL_BLOCKS
6
#define TSDB_MIN_TABLES 4
#define TSDB_MIN_TABLES 4
#define TSDB_MAX_TABLES 10000000
#define TSDB_MAX_TABLES 10000000
...
...
src/inc/taosmsg.h
浏览文件 @
599df650
...
@@ -176,7 +176,7 @@ extern char *taosMsg[];
...
@@ -176,7 +176,7 @@ extern char *taosMsg[];
typedef
struct
{
typedef
struct
{
char
fqdn
[
TSDB_FQDN_LEN
];
char
fqdn
[
TSDB_FQDN_LEN
];
uint16_t
port
;
uint16_t
port
;
}
S
I
pAddr
;
}
S
E
pAddr
;
typedef
struct
{
typedef
struct
{
int32_t
numOfVnodes
;
int32_t
numOfVnodes
;
...
@@ -306,7 +306,7 @@ typedef struct {
...
@@ -306,7 +306,7 @@ typedef struct {
int8_t
reserved1
;
int8_t
reserved1
;
int8_t
reserved2
;
int8_t
reserved2
;
int32_t
connId
;
int32_t
connId
;
SRpc
IpSet
ipLis
t
;
SRpc
EpSet
epSe
t
;
}
SCMConnectRsp
;
}
SCMConnectRsp
;
typedef
struct
{
typedef
struct
{
...
@@ -581,12 +581,12 @@ typedef struct {
...
@@ -581,12 +581,12 @@ typedef struct {
char
dnodeEp
[
TSDB_EP_LEN
];
char
dnodeEp
[
TSDB_EP_LEN
];
uint32_t
moduleStatus
;
uint32_t
moduleStatus
;
uint32_t
lastReboot
;
// time stamp for last reboot
uint32_t
lastReboot
;
// time stamp for last reboot
uint16_t
numOfTotalVnodes
;
// from config file
uint16_t
reserve1
;
// from config file
uint16_t
openVnodes
;
uint16_t
openVnodes
;
uint16_t
numOfCores
;
uint16_t
numOfCores
;
float
diskAvailable
;
// GB
float
diskAvailable
;
// GB
uint8_t
alternativeRole
;
uint8_t
alternativeRole
;
uint8_t
reserve
[
15
];
uint8_t
reserve
2
[
15
];
SClusterCfg
clusterCfg
;
SClusterCfg
clusterCfg
;
SVnodeLoad
load
[];
SVnodeLoad
load
[];
}
SDMStatusMsg
;
}
SDMStatusMsg
;
...
@@ -648,8 +648,8 @@ typedef struct SCMSTableVgroupMsg {
...
@@ -648,8 +648,8 @@ typedef struct SCMSTableVgroupMsg {
typedef
struct
{
typedef
struct
{
int32_t
vgId
;
int32_t
vgId
;
int8_t
numOf
I
ps
;
int8_t
numOf
E
ps
;
S
IpAddr
i
pAddr
[
TSDB_MAX_REPLICA
];
S
EpAddr
e
pAddr
[
TSDB_MAX_REPLICA
];
}
SCMVgroupInfo
;
}
SCMVgroupInfo
;
typedef
struct
{
typedef
struct
{
...
@@ -753,7 +753,7 @@ typedef struct {
...
@@ -753,7 +753,7 @@ typedef struct {
uint32_t
onlineDnodes
;
uint32_t
onlineDnodes
;
uint32_t
connId
;
uint32_t
connId
;
int8_t
killConnection
;
int8_t
killConnection
;
SRpc
IpSet
ipLis
t
;
SRpc
EpSet
epSe
t
;
}
SCMHeartBeatRsp
;
}
SCMHeartBeatRsp
;
typedef
struct
{
typedef
struct
{
...
...
src/inc/trpc.h
浏览文件 @
599df650
...
@@ -28,12 +28,12 @@ extern "C" {
...
@@ -28,12 +28,12 @@ extern "C" {
extern
int
tsRpcHeadSize
;
extern
int
tsRpcHeadSize
;
typedef
struct
SRpc
I
pSet
{
typedef
struct
SRpc
E
pSet
{
int8_t
inUse
;
int8_t
inUse
;
int8_t
numOf
I
ps
;
int8_t
numOf
E
ps
;
uint16_t
port
[
TSDB_MAX_REPLICA
];
uint16_t
port
[
TSDB_MAX_REPLICA
];
char
fqdn
[
TSDB_MAX_REPLICA
][
TSDB_FQDN_LEN
];
char
fqdn
[
TSDB_MAX_REPLICA
][
TSDB_FQDN_LEN
];
}
SRpc
I
pSet
;
}
SRpc
E
pSet
;
typedef
struct
SRpcCorIpSet
{
typedef
struct
SRpcCorIpSet
{
int32_t
version
;
int32_t
version
;
...
@@ -72,7 +72,7 @@ typedef struct SRpcInit {
...
@@ -72,7 +72,7 @@ typedef struct SRpcInit {
char
*
ckey
;
// ciphering key
char
*
ckey
;
// ciphering key
// call back to process incoming msg, code shall be ignored by server app
// call back to process incoming msg, code shall be ignored by server app
void
(
*
cfp
)(
SRpcMsg
*
,
SRpc
I
pSet
*
);
void
(
*
cfp
)(
SRpcMsg
*
,
SRpc
E
pSet
*
);
// call back to retrieve the client auth info, for server app only
// call back to retrieve the client auth info, for server app only
int
(
*
afp
)(
char
*
tableId
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
int
(
*
afp
)(
char
*
tableId
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
...
@@ -83,11 +83,11 @@ void rpcClose(void *);
...
@@ -83,11 +83,11 @@ void rpcClose(void *);
void
*
rpcMallocCont
(
int
contLen
);
void
*
rpcMallocCont
(
int
contLen
);
void
rpcFreeCont
(
void
*
pCont
);
void
rpcFreeCont
(
void
*
pCont
);
void
*
rpcReallocCont
(
void
*
ptr
,
int
contLen
);
void
*
rpcReallocCont
(
void
*
ptr
,
int
contLen
);
void
rpcSendRequest
(
void
*
thandle
,
const
SRpc
IpSet
*
pI
pSet
,
SRpcMsg
*
pMsg
);
void
rpcSendRequest
(
void
*
thandle
,
const
SRpc
EpSet
*
pE
pSet
,
SRpcMsg
*
pMsg
);
void
rpcSendResponse
(
const
SRpcMsg
*
pMsg
);
void
rpcSendResponse
(
const
SRpcMsg
*
pMsg
);
void
rpcSendRedirectRsp
(
void
*
pConn
,
const
SRpc
IpSet
*
pI
pSet
);
void
rpcSendRedirectRsp
(
void
*
pConn
,
const
SRpc
EpSet
*
pE
pSet
);
int
rpcGetConnInfo
(
void
*
thandle
,
SRpcConnInfo
*
pInfo
);
int
rpcGetConnInfo
(
void
*
thandle
,
SRpcConnInfo
*
pInfo
);
void
rpcSendRecv
(
void
*
shandle
,
SRpc
IpSet
*
pI
pSet
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
void
rpcSendRecv
(
void
*
shandle
,
SRpc
EpSet
*
pE
pSet
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
int
rpcReportProgress
(
void
*
pConn
,
char
*
pCont
,
int
contLen
);
int
rpcReportProgress
(
void
*
pConn
,
char
*
pCont
,
int
contLen
);
void
rpcCancelRequest
(
void
*
pContext
);
void
rpcCancelRequest
(
void
*
pContext
);
...
...
src/inc/tsdb.h
浏览文件 @
599df650
...
@@ -46,7 +46,6 @@ typedef struct {
...
@@ -46,7 +46,6 @@ typedef struct {
int
(
*
eventCallBack
)(
void
*
);
int
(
*
eventCallBack
)(
void
*
);
void
*
(
*
cqCreateFunc
)(
void
*
handle
,
uint64_t
uid
,
int
sid
,
char
*
sqlStr
,
STSchema
*
pSchema
);
void
*
(
*
cqCreateFunc
)(
void
*
handle
,
uint64_t
uid
,
int
sid
,
char
*
sqlStr
,
STSchema
*
pSchema
);
void
(
*
cqDropFunc
)(
void
*
handle
);
void
(
*
cqDropFunc
)(
void
*
handle
);
void
*
(
*
configFunc
)(
int32_t
vgId
,
int32_t
sid
);
}
STsdbAppH
;
}
STsdbAppH
;
// --------- TSDB REPOSITORY CONFIGURATION DEFINITION
// --------- TSDB REPOSITORY CONFIGURATION DEFINITION
...
@@ -175,11 +174,6 @@ typedef struct {
...
@@ -175,11 +174,6 @@ typedef struct {
SHashObj
*
map
;
// speedup acquire the tableQueryInfo from STableId
SHashObj
*
map
;
// speedup acquire the tableQueryInfo from STableId
}
STableGroupInfo
;
}
STableGroupInfo
;
typedef
struct
SQueryRowCond
{
int32_t
rel
;
TSKEY
ts
;
}
SQueryRowCond
;
/**
/**
* Get the data block iterator, starting from position according to the query condition
* Get the data block iterator, starting from position according to the query condition
*
*
...
@@ -276,7 +270,7 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T *tsdb, uint64_t uid, const char *pT
...
@@ -276,7 +270,7 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T *tsdb, uint64_t uid, const char *pT
* destory the created table group list, which is generated by tag query
* destory the created table group list, which is generated by tag query
* @param pGroupList
* @param pGroupList
*/
*/
void
tsdbDest
or
yTableGroup
(
STableGroupInfo
*
pGroupList
);
void
tsdbDest
ro
yTableGroup
(
STableGroupInfo
*
pGroupList
);
/**
/**
* create the table group result including only one table, used to handle the normal table query
* create the table group result including only one table, used to handle the normal table query
...
...
src/kit/taosmigrate/taosmigrate.c
浏览文件 @
599df650
...
@@ -210,10 +210,10 @@ int32_t main(int32_t argc, char *argv[]) {
...
@@ -210,10 +210,10 @@ int32_t main(int32_t argc, char *argv[]) {
(
void
)
snprintf
(
mnodeWal
,
TSDB_FILENAME_LEN
*
2
,
"%s/mnode/wal/wal0"
,
arguments
.
dataDir
);
(
void
)
snprintf
(
mnodeWal
,
TSDB_FILENAME_LEN
*
2
,
"%s/mnode/wal/wal0"
,
arguments
.
dataDir
);
walModWalFile
(
mnodeWal
);
walModWalFile
(
mnodeWal
);
// 2. modfiy dnode config: mnode
IpLis
t.json
// 2. modfiy dnode config: mnode
EpSe
t.json
char
dnode
IpLis
t
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
char
dnode
EpSe
t
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
(
void
)
snprintf
(
dnode
IpList
,
TSDB_FILENAME_LEN
*
2
,
"%s/dnode/mnodeIpLis
t.json"
,
arguments
.
dataDir
);
(
void
)
snprintf
(
dnode
EpSet
,
TSDB_FILENAME_LEN
*
2
,
"%s/dnode/mnodeEpSe
t.json"
,
arguments
.
dataDir
);
modDnode
IpList
(
dnodeIpLis
t
);
modDnode
EpSet
(
dnodeEpSe
t
);
// 3. modify vnode config: config.json
// 3. modify vnode config: config.json
char
vnodeDir
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
char
vnodeDir
[
TSDB_FILENAME_LEN
*
2
]
=
{
0
};
...
...
src/kit/taosmigrate/taosmigrate.h
浏览文件 @
599df650
...
@@ -71,7 +71,7 @@ int tSystemShell(const char * cmd);
...
@@ -71,7 +71,7 @@ int tSystemShell(const char * cmd);
void
taosMvFile
(
char
*
destFile
,
char
*
srcFile
)
;
void
taosMvFile
(
char
*
destFile
,
char
*
srcFile
)
;
void
walModWalFile
(
char
*
walfile
);
void
walModWalFile
(
char
*
walfile
);
SdnodeIfo
*
getDnodeInfo
(
int32_t
dnodeId
);
SdnodeIfo
*
getDnodeInfo
(
int32_t
dnodeId
);
void
modDnode
IpList
(
char
*
dnodeIpLis
t
);
void
modDnode
EpSet
(
char
*
dnodeEpSe
t
);
void
modAllVnode
(
char
*
vnodeDir
);
void
modAllVnode
(
char
*
vnodeDir
);
#endif
#endif
src/kit/taosmigrate/taosmigrateDnodeCfg.c
浏览文件 @
599df650
...
@@ -23,10 +23,10 @@
...
@@ -23,10 +23,10 @@
static
SDMMnodeInfos
tsDnodeIpInfos
=
{
0
};
static
SDMMnodeInfos
tsDnodeIpInfos
=
{
0
};
static
bool
dnodeReadMnodeInfos
(
char
*
dnode
IpLis
t
)
{
static
bool
dnodeReadMnodeInfos
(
char
*
dnode
EpSe
t
)
{
FILE
*
fp
=
fopen
(
dnode
IpLis
t
,
"r"
);
FILE
*
fp
=
fopen
(
dnode
EpSe
t
,
"r"
);
if
(
!
fp
)
{
if
(
!
fp
)
{
printf
(
"failed to read mnode
IpLis
t.json, file not exist
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, file not exist
\n
"
);
return
false
;
return
false
;
}
}
...
@@ -37,40 +37,40 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
...
@@ -37,40 +37,40 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
if
(
len
<=
0
)
{
if
(
len
<=
0
)
{
free
(
content
);
free
(
content
);
fclose
(
fp
);
fclose
(
fp
);
printf
(
"failed to read mnode
IpLis
t.json, content is null
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, content is null
\n
"
);
return
false
;
return
false
;
}
}
content
[
len
]
=
0
;
content
[
len
]
=
0
;
cJSON
*
root
=
cJSON_Parse
(
content
);
cJSON
*
root
=
cJSON_Parse
(
content
);
if
(
root
==
NULL
)
{
if
(
root
==
NULL
)
{
printf
(
"failed to read mnode
IpLis
t.json, invalid json format
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, invalid json format
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
cJSON
*
inUse
=
cJSON_GetObjectItem
(
root
,
"inUse"
);
cJSON
*
inUse
=
cJSON_GetObjectItem
(
root
,
"inUse"
);
if
(
!
inUse
||
inUse
->
type
!=
cJSON_Number
)
{
if
(
!
inUse
||
inUse
->
type
!=
cJSON_Number
)
{
printf
(
"failed to read mnode
IpLis
t.json, inUse not found
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, inUse not found
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDnodeIpInfos
.
inUse
=
inUse
->
valueint
;
tsDnodeIpInfos
.
inUse
=
inUse
->
valueint
;
cJSON
*
nodeNum
=
cJSON_GetObjectItem
(
root
,
"nodeNum"
);
cJSON
*
nodeNum
=
cJSON_GetObjectItem
(
root
,
"nodeNum"
);
if
(
!
nodeNum
||
nodeNum
->
type
!=
cJSON_Number
)
{
if
(
!
nodeNum
||
nodeNum
->
type
!=
cJSON_Number
)
{
printf
(
"failed to read mnode
IpLis
t.json, nodeNum not found
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, nodeNum not found
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDnodeIpInfos
.
nodeNum
=
nodeNum
->
valueint
;
tsDnodeIpInfos
.
nodeNum
=
nodeNum
->
valueint
;
cJSON
*
nodeInfos
=
cJSON_GetObjectItem
(
root
,
"nodeInfos"
);
cJSON
*
nodeInfos
=
cJSON_GetObjectItem
(
root
,
"nodeInfos"
);
if
(
!
nodeInfos
||
nodeInfos
->
type
!=
cJSON_Array
)
{
if
(
!
nodeInfos
||
nodeInfos
->
type
!=
cJSON_Array
)
{
printf
(
"failed to read mnode
IpLis
t.json, nodeInfos not found
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, nodeInfos not found
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
int
size
=
cJSON_GetArraySize
(
nodeInfos
);
int
size
=
cJSON_GetArraySize
(
nodeInfos
);
if
(
size
!=
tsDnodeIpInfos
.
nodeNum
)
{
if
(
size
!=
tsDnodeIpInfos
.
nodeNum
)
{
printf
(
"failed to read mnode
IpLis
t.json, nodeInfos size not matched
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, nodeInfos size not matched
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
...
@@ -80,14 +80,14 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
...
@@ -80,14 +80,14 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
cJSON
*
nodeId
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeId"
);
cJSON
*
nodeId
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeId"
);
if
(
!
nodeId
||
nodeId
->
type
!=
cJSON_Number
)
{
if
(
!
nodeId
||
nodeId
->
type
!=
cJSON_Number
)
{
printf
(
"failed to read mnode
IpLis
t.json, nodeId not found
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, nodeId not found
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
tsDnodeIpInfos
.
nodeInfos
[
i
].
nodeId
=
nodeId
->
valueint
;
tsDnodeIpInfos
.
nodeInfos
[
i
].
nodeId
=
nodeId
->
valueint
;
cJSON
*
nodeEp
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeEp"
);
cJSON
*
nodeEp
=
cJSON_GetObjectItem
(
nodeInfo
,
"nodeEp"
);
if
(
!
nodeEp
||
nodeEp
->
type
!=
cJSON_String
||
nodeEp
->
valuestring
==
NULL
)
{
if
(
!
nodeEp
||
nodeEp
->
type
!=
cJSON_String
||
nodeEp
->
valuestring
==
NULL
)
{
printf
(
"failed to read mnode
IpLis
t.json, nodeName not found
\n
"
);
printf
(
"failed to read mnode
EpSe
t.json, nodeName not found
\n
"
);
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
strncpy
(
tsDnodeIpInfos
.
nodeInfos
[
i
].
nodeEp
,
nodeEp
->
valuestring
,
TSDB_EP_LEN
);
strncpy
(
tsDnodeIpInfos
.
nodeInfos
[
i
].
nodeEp
,
nodeEp
->
valuestring
,
TSDB_EP_LEN
);
...
@@ -102,7 +102,7 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
...
@@ -102,7 +102,7 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
ret
=
true
;
ret
=
true
;
//printf("read mnode
iplist successed, numOfI
ps:%d inUse:%d\n", tsDnodeIpInfos.nodeNum, tsDnodeIpInfos.inUse);
//printf("read mnode
epSet successed, numOfE
ps:%d inUse:%d\n", tsDnodeIpInfos.nodeNum, tsDnodeIpInfos.inUse);
//for (int32_t i = 0; i < tsDnodeIpInfos.nodeNum; i++) {
//for (int32_t i = 0; i < tsDnodeIpInfos.nodeNum; i++) {
// printf("mnode:%d, %s\n", tsDnodeIpInfos.nodeInfos[i].nodeId, tsDnodeIpInfos.nodeInfos[i].nodeEp);
// printf("mnode:%d, %s\n", tsDnodeIpInfos.nodeInfos[i].nodeId, tsDnodeIpInfos.nodeInfos[i].nodeEp);
//}
//}
...
@@ -115,8 +115,8 @@ PARSE_OVER:
...
@@ -115,8 +115,8 @@ PARSE_OVER:
}
}
static
void
dnodeSaveMnodeInfos
(
char
*
dnode
IpLis
t
)
{
static
void
dnodeSaveMnodeInfos
(
char
*
dnode
EpSe
t
)
{
FILE
*
fp
=
fopen
(
dnode
IpLis
t
,
"w"
);
FILE
*
fp
=
fopen
(
dnode
EpSe
t
,
"w"
);
if
(
!
fp
)
return
;
if
(
!
fp
)
return
;
int32_t
len
=
0
;
int32_t
len
=
0
;
...
@@ -143,13 +143,13 @@ static void dnodeSaveMnodeInfos(char* dnodeIpList) {
...
@@ -143,13 +143,13 @@ static void dnodeSaveMnodeInfos(char* dnodeIpList) {
fclose
(
fp
);
fclose
(
fp
);
free
(
content
);
free
(
content
);
printf
(
"mod mnode
iplis
t successed
\n
"
);
printf
(
"mod mnode
epSe
t successed
\n
"
);
}
}
void
modDnode
IpList
(
char
*
dnodeIpLis
t
)
void
modDnode
EpSet
(
char
*
dnodeEpSe
t
)
{
{
(
void
)
dnodeReadMnodeInfos
(
dnode
IpLis
t
);
(
void
)
dnodeReadMnodeInfos
(
dnode
EpSe
t
);
dnodeSaveMnodeInfos
(
dnode
IpLis
t
);
dnodeSaveMnodeInfos
(
dnode
EpSe
t
);
return
;
return
;
}
}
...
...
src/mnode/inc/mnodeDef.h
浏览文件 @
599df650
...
@@ -40,7 +40,7 @@ typedef struct SDnodeObj {
...
@@ -40,7 +40,7 @@ typedef struct SDnodeObj {
int32_t
dnodeId
;
int32_t
dnodeId
;
int32_t
openVnodes
;
int32_t
openVnodes
;
int64_t
createdTime
;
int64_t
createdTime
;
int32_t
totalVnodes
;
// from dnode status msg, config information
int32_t
resever0
;
// from dnode status msg, config information
int32_t
customScore
;
// config by user
int32_t
customScore
;
// config by user
uint32_t
lastAccess
;
uint32_t
lastAccess
;
uint16_t
numOfCores
;
// from dnode status msg
uint16_t
numOfCores
;
// from dnode status msg
...
@@ -50,7 +50,7 @@ typedef struct SDnodeObj {
...
@@ -50,7 +50,7 @@ typedef struct SDnodeObj {
int8_t
alternativeRole
;
// from dnode status msg, 0-any, 1-mgmt, 2-dnode
int8_t
alternativeRole
;
// from dnode status msg, 0-any, 1-mgmt, 2-dnode
int8_t
status
;
// set in balance function
int8_t
status
;
// set in balance function
int8_t
isMgmt
;
int8_t
isMgmt
;
int8_t
reserve
d0
[
14
];
int8_t
reserve
1
[
14
];
int8_t
updateEnd
[
1
];
int8_t
updateEnd
[
1
];
int32_t
refCount
;
int32_t
refCount
;
uint32_t
moduleStatus
;
uint32_t
moduleStatus
;
...
@@ -61,7 +61,7 @@ typedef struct SDnodeObj {
...
@@ -61,7 +61,7 @@ typedef struct SDnodeObj {
int16_t
cpuAvgUsage
;
// calc from sys.cpu
int16_t
cpuAvgUsage
;
// calc from sys.cpu
int16_t
memoryAvgUsage
;
// calc from sys.mem
int16_t
memoryAvgUsage
;
// calc from sys.mem
int16_t
bandwidthUsage
;
// calc from sys.band
int16_t
bandwidthUsage
;
// calc from sys.band
int8_t
reserved
1
[
2
];
int8_t
reserved
2
[
2
];
}
SDnodeObj
;
}
SDnodeObj
;
typedef
struct
SMnodeObj
{
typedef
struct
SMnodeObj
{
...
...
src/mnode/inc/mnodeMnode.h
浏览文件 @
599df650
...
@@ -42,12 +42,12 @@ void mnodeIncMnodeRef(struct SMnodeObj *pMnode);
...
@@ -42,12 +42,12 @@ void mnodeIncMnodeRef(struct SMnodeObj *pMnode);
void
mnodeDecMnodeRef
(
struct
SMnodeObj
*
pMnode
);
void
mnodeDecMnodeRef
(
struct
SMnodeObj
*
pMnode
);
char
*
mnodeGetMnodeRoleStr
();
char
*
mnodeGetMnodeRoleStr
();
void
mnodeGetMnode
IpSetForPeer
(
SRpcIpSet
*
i
pSet
);
void
mnodeGetMnode
EpSetForPeer
(
SRpcEpSet
*
e
pSet
);
void
mnodeGetMnode
IpSetForShell
(
SRpcIpSet
*
i
pSet
);
void
mnodeGetMnode
EpSetForShell
(
SRpcEpSet
*
e
pSet
);
char
*
mnodeGetMnodeMasterEp
();
char
*
mnodeGetMnodeMasterEp
();
void
mnodeGetMnodeInfos
(
void
*
mnodes
);
void
mnodeGetMnodeInfos
(
void
*
mnodes
);
void
mnodeUpdateMnode
I
pSet
();
void
mnodeUpdateMnode
E
pSet
();
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/mnode/inc/mnodeVgroup.h
浏览文件 @
599df650
...
@@ -44,12 +44,12 @@ int32_t mnodeGetAvailableVgroup(struct SMnodeMsg *pMsg, SVgObj **pVgroup, int32_
...
@@ -44,12 +44,12 @@ int32_t mnodeGetAvailableVgroup(struct SMnodeMsg *pMsg, SVgObj **pVgroup, int32_
void
mnodeAddTableIntoVgroup
(
SVgObj
*
pVgroup
,
SChildTableObj
*
pTable
);
void
mnodeAddTableIntoVgroup
(
SVgObj
*
pVgroup
,
SChildTableObj
*
pTable
);
void
mnodeRemoveTableFromVgroup
(
SVgObj
*
pVgroup
,
SChildTableObj
*
pTable
);
void
mnodeRemoveTableFromVgroup
(
SVgObj
*
pVgroup
,
SChildTableObj
*
pTable
);
void
mnodeSendDropVnodeMsg
(
int32_t
vgId
,
SRpc
IpSet
*
i
pSet
,
void
*
ahandle
);
void
mnodeSendDropVnodeMsg
(
int32_t
vgId
,
SRpc
EpSet
*
e
pSet
,
void
*
ahandle
);
void
mnodeSendCreateVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
);
void
mnodeSendCreateVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
);
void
mnodeSendAlterVgroupMsg
(
SVgObj
*
pVgroup
);
void
mnodeSendAlterVgroupMsg
(
SVgObj
*
pVgroup
);
SRpc
IpSet
mnodeGetI
pSetFromVgroup
(
SVgObj
*
pVgroup
);
SRpc
EpSet
mnodeGetE
pSetFromVgroup
(
SVgObj
*
pVgroup
);
SRpc
IpSet
mnodeGetI
pSetFromIp
(
char
*
ep
);
SRpc
EpSet
mnodeGetE
pSetFromIp
(
char
*
ep
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/mnode/src/mnodeBalance.c
浏览文件 @
599df650
...
@@ -39,11 +39,11 @@ int32_t balanceAllocVnodes(SVgObj *pVgroup) {
...
@@ -39,11 +39,11 @@ int32_t balanceAllocVnodes(SVgObj *pVgroup) {
pIter
=
mnodeGetNextDnode
(
pIter
,
&
pDnode
);
pIter
=
mnodeGetNextDnode
(
pIter
,
&
pDnode
);
if
(
pDnode
==
NULL
)
break
;
if
(
pDnode
==
NULL
)
break
;
if
(
pDnode
->
totalVnodes
>
0
&&
pDnode
->
openVnodes
<
pDnode
->
totalVnodes
)
{
if
(
pDnode
->
numOfCores
>
0
&&
pDnode
->
openVnodes
<
TSDB_MAX_VNODES
)
{
float
openVnodes
=
pDnode
->
openVnodes
;
float
openVnodes
=
pDnode
->
openVnodes
;
if
(
pDnode
->
isMgmt
)
openVnodes
+=
tsMnodeEqualVnodeNum
;
if
(
pDnode
->
isMgmt
)
openVnodes
+=
tsMnodeEqualVnodeNum
;
float
usage
=
openVnodes
/
pDnode
->
totalVnod
es
;
float
usage
=
openVnodes
/
pDnode
->
numOfCor
es
;
if
(
usage
<=
vnodeUsage
)
{
if
(
usage
<=
vnodeUsage
)
{
pSelDnode
=
pDnode
;
pSelDnode
=
pDnode
;
vnodeUsage
=
usage
;
vnodeUsage
=
usage
;
...
...
src/mnode/src/mnodeDnode.c
浏览文件 @
599df650
...
@@ -289,14 +289,14 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -289,14 +289,14 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
}
}
}
}
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pCmCfgDnode
->
ep
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pCmCfgDnode
->
ep
);
if
(
dnodeId
!=
0
)
{
if
(
dnodeId
!=
0
)
{
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
dnodeId
);
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
dnodeId
);
if
(
pDnode
==
NULL
)
{
if
(
pDnode
==
NULL
)
{
mError
(
"failed to cfg dnode, invalid dnodeId:%d"
,
dnodeId
);
mError
(
"failed to cfg dnode, invalid dnodeId:%d"
,
dnodeId
);
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
}
}
ipSet
=
mnodeGetI
pSetFromIp
(
pDnode
->
dnodeEp
);
epSet
=
mnodeGetE
pSetFromIp
(
pDnode
->
dnodeEp
);
mnodeDecDnodeRef
(
pDnode
);
mnodeDecDnodeRef
(
pDnode
);
}
}
...
@@ -313,7 +313,7 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -313,7 +313,7 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
};
};
mInfo
(
"dnode:%s, is configured by %s"
,
pCmCfgDnode
->
ep
,
pMsg
->
pUser
->
user
);
mInfo
(
"dnode:%s, is configured by %s"
,
pCmCfgDnode
->
ep
,
pMsg
->
pUser
->
user
);
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMdCfgDnodeMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMdCfgDnodeMsg
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -345,7 +345,6 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
...
@@ -345,7 +345,6 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
pStatus
->
moduleStatus
=
htonl
(
pStatus
->
moduleStatus
);
pStatus
->
moduleStatus
=
htonl
(
pStatus
->
moduleStatus
);
pStatus
->
lastReboot
=
htonl
(
pStatus
->
lastReboot
);
pStatus
->
lastReboot
=
htonl
(
pStatus
->
lastReboot
);
pStatus
->
numOfCores
=
htons
(
pStatus
->
numOfCores
);
pStatus
->
numOfCores
=
htons
(
pStatus
->
numOfCores
);
pStatus
->
numOfTotalVnodes
=
htons
(
pStatus
->
numOfTotalVnodes
);
uint32_t
version
=
htonl
(
pStatus
->
version
);
uint32_t
version
=
htonl
(
pStatus
->
version
);
if
(
version
!=
tsVersion
)
{
if
(
version
!=
tsVersion
)
{
...
@@ -372,7 +371,6 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
...
@@ -372,7 +371,6 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
pDnode
->
numOfCores
=
pStatus
->
numOfCores
;
pDnode
->
numOfCores
=
pStatus
->
numOfCores
;
pDnode
->
diskAvailable
=
pStatus
->
diskAvailable
;
pDnode
->
diskAvailable
=
pStatus
->
diskAvailable
;
pDnode
->
alternativeRole
=
pStatus
->
alternativeRole
;
pDnode
->
alternativeRole
=
pStatus
->
alternativeRole
;
pDnode
->
totalVnodes
=
pStatus
->
numOfTotalVnodes
;
pDnode
->
moduleStatus
=
pStatus
->
moduleStatus
;
pDnode
->
moduleStatus
=
pStatus
->
moduleStatus
;
if
(
pStatus
->
dnodeId
==
0
)
{
if
(
pStatus
->
dnodeId
==
0
)
{
...
@@ -401,9 +399,9 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
...
@@ -401,9 +399,9 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
SVgObj
*
pVgroup
=
mnodeGetVgroup
(
pVload
->
vgId
);
SVgObj
*
pVgroup
=
mnodeGetVgroup
(
pVload
->
vgId
);
if
(
pVgroup
==
NULL
)
{
if
(
pVgroup
==
NULL
)
{
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pDnode
->
dnodeEp
);
mInfo
(
"dnode:%d, vgId:%d not exist in mnode, drop it"
,
pDnode
->
dnodeId
,
pVload
->
vgId
);
mInfo
(
"dnode:%d, vgId:%d not exist in mnode, drop it"
,
pDnode
->
dnodeId
,
pVload
->
vgId
);
mnodeSendDropVnodeMsg
(
pVload
->
vgId
,
&
i
pSet
,
NULL
);
mnodeSendDropVnodeMsg
(
pVload
->
vgId
,
&
e
pSet
,
NULL
);
}
else
{
}
else
{
mnodeUpdateVgroupStatus
(
pVgroup
,
pDnode
,
pVload
);
mnodeUpdateVgroupStatus
(
pVgroup
,
pDnode
,
pVload
);
pAccess
->
vgId
=
htonl
(
pVload
->
vgId
);
pAccess
->
vgId
=
htonl
(
pVload
->
vgId
);
...
@@ -452,17 +450,29 @@ static int32_t mnodeCreateDnode(char *ep, SMnodeMsg *pMsg) {
...
@@ -452,17 +450,29 @@ static int32_t mnodeCreateDnode(char *ep, SMnodeMsg *pMsg) {
return
grantCode
;
return
grantCode
;
}
}
char
dnodeEp
[
TSDB_EP_LEN
]
=
{
0
};
tstrncpy
(
dnodeEp
,
ep
,
TSDB_EP_LEN
);
strtrim
(
dnodeEp
);
char
*
temp
=
strchr
(
dnodeEp
,
':'
);
if
(
!
temp
)
{
int
len
=
strlen
(
dnodeEp
);
if
(
dnodeEp
[
len
-
1
]
==
';'
)
dnodeEp
[
len
-
1
]
=
0
;
len
=
strlen
(
dnodeEp
);
snprintf
(
dnodeEp
+
len
,
TSDB_EP_LEN
-
len
,
":%d"
,
tsServerPort
);
}
ep
=
dnodeEp
;
SDnodeObj
*
pDnode
=
mnodeGetDnodeByEp
(
ep
);
SDnodeObj
*
pDnode
=
mnodeGetDnodeByEp
(
ep
);
if
(
pDnode
!=
NULL
)
{
if
(
pDnode
!=
NULL
)
{
mnodeDecDnodeRef
(
pDnode
);
mnodeDecDnodeRef
(
pDnode
);
mError
(
"dnode:%d is alredy exist, %s:%d"
,
pDnode
->
dnodeId
,
pDnode
->
dnodeFqdn
,
pDnode
->
dnodePort
);
mError
(
"dnode:%d is alre
a
dy exist, %s:%d"
,
pDnode
->
dnodeId
,
pDnode
->
dnodeFqdn
,
pDnode
->
dnodePort
);
return
TSDB_CODE_MND_DNODE_ALREADY_EXIST
;
return
TSDB_CODE_MND_DNODE_ALREADY_EXIST
;
}
}
pDnode
=
(
SDnodeObj
*
)
calloc
(
1
,
sizeof
(
SDnodeObj
));
pDnode
=
(
SDnodeObj
*
)
calloc
(
1
,
sizeof
(
SDnodeObj
));
pDnode
->
createdTime
=
taosGetTimestampMs
();
pDnode
->
createdTime
=
taosGetTimestampMs
();
pDnode
->
status
=
TAOS_DN_STATUS_OFFLINE
;
pDnode
->
status
=
TAOS_DN_STATUS_OFFLINE
;
pDnode
->
totalVnodes
=
TSDB_INVALID_VNODE_NUM
;
tstrncpy
(
pDnode
->
dnodeEp
,
ep
,
TSDB_EP_LEN
);
tstrncpy
(
pDnode
->
dnodeEp
,
ep
,
TSDB_EP_LEN
);
taosGetFqdnPortFromEp
(
ep
,
pDnode
->
dnodeFqdn
,
&
pDnode
->
dnodePort
);
taosGetFqdnPortFromEp
(
ep
,
pDnode
->
dnodeFqdn
,
&
pDnode
->
dnodePort
);
...
@@ -506,10 +516,14 @@ int32_t mnodeDropDnode(SDnodeObj *pDnode, void *pMsg) {
...
@@ -506,10 +516,14 @@ int32_t mnodeDropDnode(SDnodeObj *pDnode, void *pMsg) {
static
int32_t
mnodeDropDnodeByEp
(
char
*
ep
,
SMnodeMsg
*
pMsg
)
{
static
int32_t
mnodeDropDnodeByEp
(
char
*
ep
,
SMnodeMsg
*
pMsg
)
{
SDnodeObj
*
pDnode
=
mnodeGetDnodeByEp
(
ep
);
SDnodeObj
*
pDnode
=
mnodeGetDnodeByEp
(
ep
);
if
(
pDnode
==
NULL
)
{
int32_t
dnodeId
=
(
int32_t
)
strtol
(
ep
,
NULL
,
10
);
pDnode
=
mnodeGetDnode
(
dnodeId
);
if
(
pDnode
==
NULL
)
{
if
(
pDnode
==
NULL
)
{
mError
(
"dnode:%s, is not exist"
,
ep
);
mError
(
"dnode:%s, is not exist"
,
ep
);
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
}
}
}
if
(
strcmp
(
pDnode
->
dnodeEp
,
mnodeGetMnodeMasterEp
())
==
0
)
{
if
(
strcmp
(
pDnode
->
dnodeEp
,
mnodeGetMnodeMasterEp
())
==
0
)
{
mError
(
"dnode:%d, can't drop dnode:%s which is master"
,
pDnode
->
dnodeId
,
ep
);
mError
(
"dnode:%d, can't drop dnode:%s which is master"
,
pDnode
->
dnodeId
,
ep
);
...
@@ -575,13 +589,13 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
...
@@ -575,13 +589,13 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
pShow
->
bytes
[
cols
]
=
2
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
strcpy
(
pSchema
[
cols
].
name
,
"
open_
vnodes"
);
strcpy
(
pSchema
[
cols
].
name
,
"vnodes"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
pShow
->
bytes
[
cols
]
=
2
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
strcpy
(
pSchema
[
cols
].
name
,
"
total_vnod
es"
);
strcpy
(
pSchema
[
cols
].
name
,
"
cor
es"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
...
@@ -593,7 +607,7 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
...
@@ -593,7 +607,7 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
pShow
->
bytes
[
cols
]
=
6
+
VARSTR_HEADER_SIZE
;
pShow
->
bytes
[
cols
]
=
6
+
VARSTR_HEADER_SIZE
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_BINARY
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_BINARY
;
strcpy
(
pSchema
[
cols
].
name
,
"
alternativeR
ole"
);
strcpy
(
pSchema
[
cols
].
name
,
"
r
ole"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
...
@@ -645,7 +659,7 @@ static int32_t mnodeRetrieveDnodes(SShowObj *pShow, char *data, int32_t rows, vo
...
@@ -645,7 +659,7 @@ static int32_t mnodeRetrieveDnodes(SShowObj *pShow, char *data, int32_t rows, vo
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int16_t
*
)
pWrite
=
pDnode
->
totalVnod
es
;
*
(
int16_t
*
)
pWrite
=
pDnode
->
numOfCor
es
;
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
...
...
src/mnode/src/mnodeMnode.c
浏览文件 @
599df650
...
@@ -35,8 +35,8 @@
...
@@ -35,8 +35,8 @@
static
void
*
tsMnodeSdb
=
NULL
;
static
void
*
tsMnodeSdb
=
NULL
;
static
int32_t
tsMnodeUpdateSize
=
0
;
static
int32_t
tsMnodeUpdateSize
=
0
;
static
SRpc
IpSet
tsMnodeI
pSetForShell
;
static
SRpc
EpSet
tsMnodeE
pSetForShell
;
static
SRpc
IpSet
tsMnodeI
pSetForPeer
;
static
SRpc
EpSet
tsMnodeE
pSetForPeer
;
static
SDMMnodeInfos
tsMnodeInfos
;
static
SDMMnodeInfos
tsMnodeInfos
;
static
int32_t
mnodeGetMnodeMeta
(
STableMetaMsg
*
pMeta
,
SShowObj
*
pShow
,
void
*
pConn
);
static
int32_t
mnodeGetMnodeMeta
(
STableMetaMsg
*
pMeta
,
SShowObj
*
pShow
,
void
*
pConn
);
static
int32_t
mnodeRetrieveMnodes
(
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
,
void
*
pConn
);
static
int32_t
mnodeRetrieveMnodes
(
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
,
void
*
pConn
);
...
@@ -123,7 +123,7 @@ static int32_t mnodeMnodeActionRestored() {
...
@@ -123,7 +123,7 @@ static int32_t mnodeMnodeActionRestored() {
sdbFreeIter
(
pIter
);
sdbFreeIter
(
pIter
);
}
}
mnodeUpdateMnode
I
pSet
();
mnodeUpdateMnode
E
pSet
();
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -204,13 +204,13 @@ char *mnodeGetMnodeRoleStr(int32_t role) {
...
@@ -204,13 +204,13 @@ char *mnodeGetMnodeRoleStr(int32_t role) {
}
}
}
}
void
mnodeUpdateMnode
I
pSet
()
{
void
mnodeUpdateMnode
E
pSet
()
{
mInfo
(
"update mnodes
ipset, numOfI
ps:%d "
,
mnodeGetMnodesNum
());
mInfo
(
"update mnodes
epSet, numOfE
ps:%d "
,
mnodeGetMnodesNum
());
mnodeMnodeWrLock
();
mnodeMnodeWrLock
();
memset
(
&
tsMnode
IpSetForShell
,
0
,
sizeof
(
SRpcI
pSet
));
memset
(
&
tsMnode
EpSetForShell
,
0
,
sizeof
(
SRpcE
pSet
));
memset
(
&
tsMnode
IpSetForPeer
,
0
,
sizeof
(
SRpcI
pSet
));
memset
(
&
tsMnode
EpSetForPeer
,
0
,
sizeof
(
SRpcE
pSet
));
memset
(
&
tsMnodeInfos
,
0
,
sizeof
(
SDMMnodeInfos
));
memset
(
&
tsMnodeInfos
,
0
,
sizeof
(
SDMMnodeInfos
));
int32_t
index
=
0
;
int32_t
index
=
0
;
...
@@ -222,20 +222,20 @@ void mnodeUpdateMnodeIpSet() {
...
@@ -222,20 +222,20 @@ void mnodeUpdateMnodeIpSet() {
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
pMnode
->
mnodeId
);
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
pMnode
->
mnodeId
);
if
(
pDnode
!=
NULL
)
{
if
(
pDnode
!=
NULL
)
{
strcpy
(
tsMnode
I
pSetForShell
.
fqdn
[
index
],
pDnode
->
dnodeFqdn
);
strcpy
(
tsMnode
E
pSetForShell
.
fqdn
[
index
],
pDnode
->
dnodeFqdn
);
tsMnode
I
pSetForShell
.
port
[
index
]
=
htons
(
pDnode
->
dnodePort
);
tsMnode
E
pSetForShell
.
port
[
index
]
=
htons
(
pDnode
->
dnodePort
);
mDebug
(
"mnode:%d, for shell fqdn:%s %d"
,
pDnode
->
dnodeId
,
tsMnode
IpSetForShell
.
fqdn
[
index
],
htons
(
tsMnodeI
pSetForShell
.
port
[
index
]));
mDebug
(
"mnode:%d, for shell fqdn:%s %d"
,
pDnode
->
dnodeId
,
tsMnode
EpSetForShell
.
fqdn
[
index
],
htons
(
tsMnodeE
pSetForShell
.
port
[
index
]));
strcpy
(
tsMnode
I
pSetForPeer
.
fqdn
[
index
],
pDnode
->
dnodeFqdn
);
strcpy
(
tsMnode
E
pSetForPeer
.
fqdn
[
index
],
pDnode
->
dnodeFqdn
);
tsMnode
I
pSetForPeer
.
port
[
index
]
=
htons
(
pDnode
->
dnodePort
+
TSDB_PORT_DNODEDNODE
);
tsMnode
E
pSetForPeer
.
port
[
index
]
=
htons
(
pDnode
->
dnodePort
+
TSDB_PORT_DNODEDNODE
);
mDebug
(
"mnode:%d, for peer fqdn:%s %d"
,
pDnode
->
dnodeId
,
tsMnode
IpSetForPeer
.
fqdn
[
index
],
htons
(
tsMnodeI
pSetForPeer
.
port
[
index
]));
mDebug
(
"mnode:%d, for peer fqdn:%s %d"
,
pDnode
->
dnodeId
,
tsMnode
EpSetForPeer
.
fqdn
[
index
],
htons
(
tsMnodeE
pSetForPeer
.
port
[
index
]));
tsMnodeInfos
.
nodeInfos
[
index
].
nodeId
=
htonl
(
pMnode
->
mnodeId
);
tsMnodeInfos
.
nodeInfos
[
index
].
nodeId
=
htonl
(
pMnode
->
mnodeId
);
strcpy
(
tsMnodeInfos
.
nodeInfos
[
index
].
nodeEp
,
pDnode
->
dnodeEp
);
strcpy
(
tsMnodeInfos
.
nodeInfos
[
index
].
nodeEp
,
pDnode
->
dnodeEp
);
if
(
pMnode
->
role
==
TAOS_SYNC_ROLE_MASTER
)
{
if
(
pMnode
->
role
==
TAOS_SYNC_ROLE_MASTER
)
{
tsMnode
I
pSetForShell
.
inUse
=
index
;
tsMnode
E
pSetForShell
.
inUse
=
index
;
tsMnode
I
pSetForPeer
.
inUse
=
index
;
tsMnode
E
pSetForPeer
.
inUse
=
index
;
tsMnodeInfos
.
inUse
=
index
;
tsMnodeInfos
.
inUse
=
index
;
}
}
...
@@ -248,23 +248,23 @@ void mnodeUpdateMnodeIpSet() {
...
@@ -248,23 +248,23 @@ void mnodeUpdateMnodeIpSet() {
}
}
tsMnodeInfos
.
nodeNum
=
index
;
tsMnodeInfos
.
nodeNum
=
index
;
tsMnode
IpSetForShell
.
numOfI
ps
=
index
;
tsMnode
EpSetForShell
.
numOfE
ps
=
index
;
tsMnode
IpSetForPeer
.
numOfI
ps
=
index
;
tsMnode
EpSetForPeer
.
numOfE
ps
=
index
;
sdbFreeIter
(
pIter
);
sdbFreeIter
(
pIter
);
mnodeMnodeUnLock
();
mnodeMnodeUnLock
();
}
}
void
mnodeGetMnode
IpSetForPeer
(
SRpcIpSet
*
i
pSet
)
{
void
mnodeGetMnode
EpSetForPeer
(
SRpcEpSet
*
e
pSet
)
{
mnodeMnodeRdLock
();
mnodeMnodeRdLock
();
*
ipSet
=
tsMnodeI
pSetForPeer
;
*
epSet
=
tsMnodeE
pSetForPeer
;
mnodeMnodeUnLock
();
mnodeMnodeUnLock
();
}
}
void
mnodeGetMnode
IpSetForShell
(
SRpcIpSet
*
i
pSet
)
{
void
mnodeGetMnode
EpSetForShell
(
SRpcEpSet
*
e
pSet
)
{
mnodeMnodeRdLock
();
mnodeMnodeRdLock
();
*
ipSet
=
tsMnodeI
pSetForShell
;
*
epSet
=
tsMnodeE
pSetForShell
;
mnodeMnodeUnLock
();
mnodeMnodeUnLock
();
}
}
...
@@ -295,7 +295,7 @@ int32_t mnodeAddMnode(int32_t dnodeId) {
...
@@ -295,7 +295,7 @@ int32_t mnodeAddMnode(int32_t dnodeId) {
code
=
TSDB_CODE_MND_SDB_ERROR
;
code
=
TSDB_CODE_MND_SDB_ERROR
;
}
}
mnodeUpdateMnode
I
pSet
();
mnodeUpdateMnode
E
pSet
();
return
code
;
return
code
;
}
}
...
@@ -308,7 +308,7 @@ void mnodeDropMnodeLocal(int32_t dnodeId) {
...
@@ -308,7 +308,7 @@ void mnodeDropMnodeLocal(int32_t dnodeId) {
mnodeDecMnodeRef
(
pMnode
);
mnodeDecMnodeRef
(
pMnode
);
}
}
mnodeUpdateMnode
I
pSet
();
mnodeUpdateMnode
E
pSet
();
}
}
int32_t
mnodeDropMnode
(
int32_t
dnodeId
)
{
int32_t
mnodeDropMnode
(
int32_t
dnodeId
)
{
...
@@ -330,7 +330,7 @@ int32_t mnodeDropMnode(int32_t dnodeId) {
...
@@ -330,7 +330,7 @@ int32_t mnodeDropMnode(int32_t dnodeId) {
sdbDecRef
(
tsMnodeSdb
,
pMnode
);
sdbDecRef
(
tsMnodeSdb
,
pMnode
);
mnodeUpdateMnode
I
pSet
();
mnodeUpdateMnode
E
pSet
();
return
code
;
return
code
;
}
}
...
...
src/mnode/src/mnodePeer.c
浏览文件 @
599df650
...
@@ -53,14 +53,14 @@ int32_t mnodeProcessPeerReq(SMnodeMsg *pMsg) {
...
@@ -53,14 +53,14 @@ int32_t mnodeProcessPeerReq(SMnodeMsg *pMsg) {
if
(
!
sdbIsMaster
())
{
if
(
!
sdbIsMaster
())
{
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SRpc
IpSet
*
ipSet
=
rpcMallocCont
(
sizeof
(
SRpcI
pSet
));
SRpc
EpSet
*
epSet
=
rpcMallocCont
(
sizeof
(
SRpcE
pSet
));
mnodeGetMnode
IpSetForPeer
(
i
pSet
);
mnodeGetMnode
EpSetForPeer
(
e
pSet
);
rpcRsp
->
rsp
=
i
pSet
;
rpcRsp
->
rsp
=
e
pSet
;
rpcRsp
->
len
=
sizeof
(
SRpc
I
pSet
);
rpcRsp
->
len
=
sizeof
(
SRpc
E
pSet
);
mDebug
(
"%p, msg:%s in mpeer queue, will be redireced inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
i
pSet
->
inUse
);
mDebug
(
"%p, msg:%s in mpeer queue, will be redireced inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
e
pSet
->
inUse
);
for
(
int32_t
i
=
0
;
i
<
ipSet
->
numOfI
ps
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
epSet
->
numOfE
ps
;
++
i
)
{
mDebug
(
"mnode index:%d
ip:%s:%d"
,
i
,
ipSet
->
fqdn
[
i
],
htons
(
i
pSet
->
port
[
i
]));
mDebug
(
"mnode index:%d
ep:%s:%d"
,
i
,
epSet
->
fqdn
[
i
],
htons
(
e
pSet
->
port
[
i
]));
}
}
return
TSDB_CODE_RPC_REDIRECT
;
return
TSDB_CODE_RPC_REDIRECT
;
...
...
src/mnode/src/mnodeRead.c
浏览文件 @
599df650
...
@@ -49,14 +49,14 @@ int32_t mnodeProcessRead(SMnodeMsg *pMsg) {
...
@@ -49,14 +49,14 @@ int32_t mnodeProcessRead(SMnodeMsg *pMsg) {
if
(
!
sdbIsMaster
())
{
if
(
!
sdbIsMaster
())
{
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SRpc
IpSet
*
ipSet
=
rpcMallocCont
(
sizeof
(
SRpcI
pSet
));
SRpc
EpSet
*
epSet
=
rpcMallocCont
(
sizeof
(
SRpcE
pSet
));
mnodeGetMnode
IpSetForShell
(
i
pSet
);
mnodeGetMnode
EpSetForShell
(
e
pSet
);
rpcRsp
->
rsp
=
i
pSet
;
rpcRsp
->
rsp
=
e
pSet
;
rpcRsp
->
len
=
sizeof
(
SRpc
I
pSet
);
rpcRsp
->
len
=
sizeof
(
SRpc
E
pSet
);
mDebug
(
"%p, msg:%s in mread queue, will be redireced, inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
i
pSet
->
inUse
);
mDebug
(
"%p, msg:%s in mread queue, will be redireced, inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
e
pSet
->
inUse
);
for
(
int32_t
i
=
0
;
i
<
ipSet
->
numOfI
ps
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
epSet
->
numOfE
ps
;
++
i
)
{
mDebug
(
"mnode index:%d
ip:%s:%d"
,
i
,
ipSet
->
fqdn
[
i
],
htons
(
i
pSet
->
port
[
i
]));
mDebug
(
"mnode index:%d
ep:%s:%d"
,
i
,
epSet
->
fqdn
[
i
],
htons
(
e
pSet
->
port
[
i
]));
}
}
return
TSDB_CODE_RPC_REDIRECT
;
return
TSDB_CODE_RPC_REDIRECT
;
...
...
src/mnode/src/mnodeSdb.c
浏览文件 @
599df650
...
@@ -219,7 +219,7 @@ void sdbUpdateMnodeRoles() {
...
@@ -219,7 +219,7 @@ void sdbUpdateMnodeRoles() {
}
}
}
}
mnodeUpdateMnode
I
pSet
();
mnodeUpdateMnode
E
pSet
();
}
}
static
uint32_t
sdbGetFileInfo
(
void
*
ahandle
,
char
*
name
,
uint32_t
*
index
,
uint32_t
eindex
,
int32_t
*
size
,
uint64_t
*
fversion
)
{
static
uint32_t
sdbGetFileInfo
(
void
*
ahandle
,
char
*
name
,
uint32_t
*
index
,
uint32_t
eindex
,
int32_t
*
size
,
uint64_t
*
fversion
)
{
...
...
src/mnode/src/mnodeShow.c
浏览文件 @
599df650
...
@@ -270,7 +270,7 @@ static int32_t mnodeProcessHeartBeatMsg(SMnodeMsg *pMsg) {
...
@@ -270,7 +270,7 @@ static int32_t mnodeProcessHeartBeatMsg(SMnodeMsg *pMsg) {
pHBRsp
->
onlineDnodes
=
htonl
(
mnodeGetOnlinDnodesNum
());
pHBRsp
->
onlineDnodes
=
htonl
(
mnodeGetOnlinDnodesNum
());
pHBRsp
->
totalDnodes
=
htonl
(
mnodeGetDnodesNum
());
pHBRsp
->
totalDnodes
=
htonl
(
mnodeGetDnodesNum
());
mnodeGetMnode
IpSetForShell
(
&
pHBRsp
->
ipLis
t
);
mnodeGetMnode
EpSetForShell
(
&
pHBRsp
->
epSe
t
);
pMsg
->
rpcRsp
.
rsp
=
pHBRsp
;
pMsg
->
rpcRsp
.
rsp
=
pHBRsp
;
pMsg
->
rpcRsp
.
len
=
sizeof
(
SCMHeartBeatRsp
);
pMsg
->
rpcRsp
.
len
=
sizeof
(
SCMHeartBeatRsp
);
...
@@ -335,7 +335,7 @@ static int32_t mnodeProcessConnectMsg(SMnodeMsg *pMsg) {
...
@@ -335,7 +335,7 @@ static int32_t mnodeProcessConnectMsg(SMnodeMsg *pMsg) {
pConnectRsp
->
writeAuth
=
pUser
->
writeAuth
;
pConnectRsp
->
writeAuth
=
pUser
->
writeAuth
;
pConnectRsp
->
superAuth
=
pUser
->
superAuth
;
pConnectRsp
->
superAuth
=
pUser
->
superAuth
;
mnodeGetMnode
IpSetForShell
(
&
pConnectRsp
->
ipLis
t
);
mnodeGetMnode
EpSetForShell
(
&
pConnectRsp
->
epSe
t
);
connect_over:
connect_over:
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
src/mnode/src/mnodeTable.c
浏览文件 @
599df650
...
@@ -910,9 +910,9 @@ static int32_t mnodeProcessDropSuperTableMsg(SMnodeMsg *pMsg) {
...
@@ -910,9 +910,9 @@ static int32_t mnodeProcessDropSuperTableMsg(SMnodeMsg *pMsg) {
mInfo
(
"app:%p:%p, stable:%s, send drop stable msg to vgId:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
pStable
->
info
.
tableId
,
mInfo
(
"app:%p:%p, stable:%s, send drop stable msg to vgId:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
pStable
->
info
.
tableId
,
pVgroup
->
vgId
);
pVgroup
->
vgId
);
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromVgroup
(
pVgroup
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromVgroup
(
pVgroup
);
SRpcMsg
rpcMsg
=
{.
pCont
=
pDrop
,
.
contLen
=
sizeof
(
SMDDropSTableMsg
),
.
msgType
=
TSDB_MSG_TYPE_MD_DROP_STABLE
};
SRpcMsg
rpcMsg
=
{.
pCont
=
pDrop
,
.
contLen
=
sizeof
(
SMDDropSTableMsg
),
.
msgType
=
TSDB_MSG_TYPE_MD_DROP_STABLE
};
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMsg
);
mnodeDecVgroupRef
(
pVgroup
);
mnodeDecVgroupRef
(
pVgroup
);
}
}
taosHashDestroyIter
(
pIter
);
taosHashDestroyIter
(
pIter
);
...
@@ -1484,10 +1484,10 @@ static int32_t mnodeProcessSuperTableVgroupMsg(SMnodeMsg *pMsg) {
...
@@ -1484,10 +1484,10 @@ static int32_t mnodeProcessSuperTableVgroupMsg(SMnodeMsg *pMsg) {
SDnodeObj
*
pDnode
=
pVgroup
->
vnodeGid
[
vn
].
pDnode
;
SDnodeObj
*
pDnode
=
pVgroup
->
vnodeGid
[
vn
].
pDnode
;
if
(
pDnode
==
NULL
)
break
;
if
(
pDnode
==
NULL
)
break
;
tstrncpy
(
pVgroupInfo
->
vgroups
[
vgSize
].
i
pAddr
[
vn
].
fqdn
,
pDnode
->
dnodeFqdn
,
TSDB_FQDN_LEN
);
tstrncpy
(
pVgroupInfo
->
vgroups
[
vgSize
].
e
pAddr
[
vn
].
fqdn
,
pDnode
->
dnodeFqdn
,
TSDB_FQDN_LEN
);
pVgroupInfo
->
vgroups
[
vgSize
].
i
pAddr
[
vn
].
port
=
htons
(
pDnode
->
dnodePort
);
pVgroupInfo
->
vgroups
[
vgSize
].
e
pAddr
[
vn
].
port
=
htons
(
pDnode
->
dnodePort
);
pVgroupInfo
->
vgroups
[
vgSize
].
numOf
I
ps
++
;
pVgroupInfo
->
vgroups
[
vgSize
].
numOf
E
ps
++
;
}
}
vgSize
++
;
vgSize
++
;
...
@@ -1615,7 +1615,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
...
@@ -1615,7 +1615,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
return
terrno
;
return
terrno
;
}
}
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromVgroup
(
pMsg
->
pVgroup
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromVgroup
(
pMsg
->
pVgroup
);
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
ahandle
=
pMsg
,
.
ahandle
=
pMsg
,
.
pCont
=
pMDCreate
,
.
pCont
=
pMDCreate
,
...
@@ -1624,7 +1624,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
...
@@ -1624,7 +1624,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
.
msgType
=
TSDB_MSG_TYPE_MD_CREATE_TABLE
.
msgType
=
TSDB_MSG_TYPE_MD_CREATE_TABLE
};
};
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMsg
);
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
}
...
@@ -1788,7 +1788,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
...
@@ -1788,7 +1788,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
pDrop
->
sid
=
htonl
(
pTable
->
sid
);
pDrop
->
sid
=
htonl
(
pTable
->
sid
);
pDrop
->
uid
=
htobe64
(
pTable
->
uid
);
pDrop
->
uid
=
htobe64
(
pTable
->
uid
);
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromVgroup
(
pMsg
->
pVgroup
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromVgroup
(
pMsg
->
pVgroup
);
mInfo
(
"app:%p:%p, table:%s, send drop ctable msg, vgId:%d sid:%d uid:%"
PRIu64
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
mInfo
(
"app:%p:%p, table:%s, send drop ctable msg, vgId:%d sid:%d uid:%"
PRIu64
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
pDrop
->
tableId
,
pTable
->
vgId
,
pTable
->
sid
,
pTable
->
uid
);
pDrop
->
tableId
,
pTable
->
vgId
,
pTable
->
sid
,
pTable
->
uid
);
...
@@ -1803,7 +1803,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
...
@@ -1803,7 +1803,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
if
(
!
needReturn
)
rpcMsg
.
ahandle
=
NULL
;
if
(
!
needReturn
)
rpcMsg
.
ahandle
=
NULL
;
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMsg
);
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
}
...
@@ -1842,7 +1842,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
...
@@ -1842,7 +1842,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
}
}
}
}
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromVgroup
(
pMsg
->
pVgroup
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromVgroup
(
pMsg
->
pVgroup
);
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
ahandle
=
pMsg
,
.
ahandle
=
pMsg
,
.
pCont
=
pMDCreate
,
.
pCont
=
pMDCreate
,
...
@@ -1854,7 +1854,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
...
@@ -1854,7 +1854,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
mDebug
(
"app:%p:%p, ctable %s, send alter column msg to vgId:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
pTable
->
info
.
tableId
,
mDebug
(
"app:%p:%p, ctable %s, send alter column msg to vgId:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
pTable
->
info
.
tableId
,
pMsg
->
pVgroup
->
vgId
);
pMsg
->
pVgroup
->
vgId
);
dnodeSendMsgToDnode
(
&
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
&
e
pSet
,
&
rpcMsg
);
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
}
...
@@ -1996,9 +1996,9 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
...
@@ -1996,9 +1996,9 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
for
(
int32_t
i
=
0
;
i
<
pMsg
->
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pMsg
->
pVgroup
->
numOfVnodes
;
++
i
)
{
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
pMsg
->
pVgroup
->
vnodeGid
[
i
].
dnodeId
);
SDnodeObj
*
pDnode
=
mnodeGetDnode
(
pMsg
->
pVgroup
->
vnodeGid
[
i
].
dnodeId
);
if
(
pDnode
==
NULL
)
break
;
if
(
pDnode
==
NULL
)
break
;
strcpy
(
pMeta
->
vgroup
.
i
pAddr
[
i
].
fqdn
,
pDnode
->
dnodeFqdn
);
strcpy
(
pMeta
->
vgroup
.
e
pAddr
[
i
].
fqdn
,
pDnode
->
dnodeFqdn
);
pMeta
->
vgroup
.
i
pAddr
[
i
].
port
=
htons
(
pDnode
->
dnodePort
+
TSDB_PORT_DNODESHELL
);
pMeta
->
vgroup
.
e
pAddr
[
i
].
port
=
htons
(
pDnode
->
dnodePort
+
TSDB_PORT_DNODESHELL
);
pMeta
->
vgroup
.
numOf
I
ps
++
;
pMeta
->
vgroup
.
numOf
E
ps
++
;
mnodeDecDnodeRef
(
pDnode
);
mnodeDecDnodeRef
(
pDnode
);
}
}
pMeta
->
vgroup
.
vgId
=
htonl
(
pMsg
->
pVgroup
->
vgId
);
pMeta
->
vgroup
.
vgId
=
htonl
(
pMsg
->
pVgroup
->
vgId
);
...
...
src/mnode/src/mnodeVgroup.c
浏览文件 @
599df650
...
@@ -317,9 +317,9 @@ void mnodeUpdateVgroupStatus(SVgObj *pVgroup, SDnodeObj *pDnode, SVnodeLoad *pVl
...
@@ -317,9 +317,9 @@ void mnodeUpdateVgroupStatus(SVgObj *pVgroup, SDnodeObj *pDnode, SVnodeLoad *pVl
}
}
if
(
!
dnodeExist
)
{
if
(
!
dnodeExist
)
{
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pDnode
->
dnodeEp
);
mError
(
"vgId:%d, dnode:%d not exist in mnode, drop it"
,
pVload
->
vgId
,
pDnode
->
dnodeId
);
mError
(
"vgId:%d, dnode:%d not exist in mnode, drop it"
,
pVload
->
vgId
,
pDnode
->
dnodeId
);
mnodeSendDropVnodeMsg
(
pVload
->
vgId
,
&
i
pSet
,
NULL
);
mnodeSendDropVnodeMsg
(
pVload
->
vgId
,
&
e
pSet
,
NULL
);
return
;
return
;
}
}
...
@@ -585,9 +585,9 @@ static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
...
@@ -585,9 +585,9 @@ static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
pShow
->
bytes
[
cols
]
=
4
;
pShow
->
bytes
[
cols
]
=
12
+
VARSTR_HEADER_SIZE
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_
INT
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_
BINARY
;
strcpy
(
pSchema
[
cols
].
name
,
"
poolSize
"
);
strcpy
(
pSchema
[
cols
].
name
,
"
status
"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
...
@@ -689,7 +689,8 @@ static int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, v
...
@@ -689,7 +689,8 @@ static int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, v
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int32_t
*
)
pWrite
=
taosIdPoolMaxSize
(
pVgroup
->
idPool
);
char
*
status
=
vgroupStatus
[
pVgroup
->
status
];
STR_TO_VARSTR
(
pWrite
,
status
);
cols
++
;
cols
++
;
int32_t
onlineVnodes
=
0
;
int32_t
onlineVnodes
=
0
;
...
@@ -808,29 +809,29 @@ static SMDCreateVnodeMsg *mnodeBuildVnodeMsg(SVgObj *pVgroup) {
...
@@ -808,29 +809,29 @@ static SMDCreateVnodeMsg *mnodeBuildVnodeMsg(SVgObj *pVgroup) {
return
pVnode
;
return
pVnode
;
}
}
SRpc
IpSet
mnodeGetI
pSetFromVgroup
(
SVgObj
*
pVgroup
)
{
SRpc
EpSet
mnodeGetE
pSetFromVgroup
(
SVgObj
*
pVgroup
)
{
SRpc
IpSet
i
pSet
=
{
SRpc
EpSet
e
pSet
=
{
.
numOf
I
ps
=
pVgroup
->
numOfVnodes
,
.
numOf
E
ps
=
pVgroup
->
numOfVnodes
,
.
inUse
=
0
,
.
inUse
=
0
,
};
};
for
(
int
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
strcpy
(
i
pSet
.
fqdn
[
i
],
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeFqdn
);
strcpy
(
e
pSet
.
fqdn
[
i
],
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeFqdn
);
i
pSet
.
port
[
i
]
=
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodePort
+
TSDB_PORT_DNODEDNODE
;
e
pSet
.
port
[
i
]
=
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodePort
+
TSDB_PORT_DNODEDNODE
;
}
}
return
i
pSet
;
return
e
pSet
;
}
}
SRpc
IpSet
mnodeGetI
pSetFromIp
(
char
*
ep
)
{
SRpc
EpSet
mnodeGetE
pSetFromIp
(
char
*
ep
)
{
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
ipSet
.
numOfI
ps
=
1
;
epSet
.
numOfE
ps
=
1
;
i
pSet
.
inUse
=
0
;
e
pSet
.
inUse
=
0
;
taosGetFqdnPortFromEp
(
ep
,
ipSet
.
fqdn
[
0
],
&
i
pSet
.
port
[
0
]);
taosGetFqdnPortFromEp
(
ep
,
epSet
.
fqdn
[
0
],
&
e
pSet
.
port
[
0
]);
i
pSet
.
port
[
0
]
+=
TSDB_PORT_DNODEDNODE
;
e
pSet
.
port
[
0
]
+=
TSDB_PORT_DNODEDNODE
;
return
i
pSet
;
return
e
pSet
;
}
}
static
void
mnodeSendAlterVnodeMsg
(
SVgObj
*
pVgroup
,
SRpc
IpSet
*
i
pSet
)
{
static
void
mnodeSendAlterVnodeMsg
(
SVgObj
*
pVgroup
,
SRpc
EpSet
*
e
pSet
)
{
SMDAlterVnodeMsg
*
pAlter
=
mnodeBuildVnodeMsg
(
pVgroup
);
SMDAlterVnodeMsg
*
pAlter
=
mnodeBuildVnodeMsg
(
pVgroup
);
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
ahandle
=
NULL
,
.
ahandle
=
NULL
,
...
@@ -839,21 +840,21 @@ static void mnodeSendAlterVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet) {
...
@@ -839,21 +840,21 @@ static void mnodeSendAlterVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet) {
.
code
=
0
,
.
code
=
0
,
.
msgType
=
TSDB_MSG_TYPE_MD_ALTER_VNODE
.
msgType
=
TSDB_MSG_TYPE_MD_ALTER_VNODE
};
};
dnodeSendMsgToDnode
(
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
e
pSet
,
&
rpcMsg
);
}
}
void
mnodeSendAlterVgroupMsg
(
SVgObj
*
pVgroup
)
{
void
mnodeSendAlterVgroupMsg
(
SVgObj
*
pVgroup
)
{
mDebug
(
"vgId:%d, send alter all vnodes msg, numOfVnodes:%d db:%s"
,
pVgroup
->
vgId
,
pVgroup
->
numOfVnodes
,
mDebug
(
"vgId:%d, send alter all vnodes msg, numOfVnodes:%d db:%s"
,
pVgroup
->
vgId
,
pVgroup
->
numOfVnodes
,
pVgroup
->
dbName
);
pVgroup
->
dbName
);
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
mDebug
(
"vgId:%d, index:%d, send alter vnode msg to dnode %s"
,
pVgroup
->
vgId
,
i
,
mDebug
(
"vgId:%d, index:%d, send alter vnode msg to dnode %s"
,
pVgroup
->
vgId
,
i
,
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
mnodeSendAlterVnodeMsg
(
pVgroup
,
&
i
pSet
);
mnodeSendAlterVnodeMsg
(
pVgroup
,
&
e
pSet
);
}
}
}
}
static
void
mnodeSendCreateVnodeMsg
(
SVgObj
*
pVgroup
,
SRpc
IpSet
*
i
pSet
,
void
*
ahandle
)
{
static
void
mnodeSendCreateVnodeMsg
(
SVgObj
*
pVgroup
,
SRpc
EpSet
*
e
pSet
,
void
*
ahandle
)
{
SMDCreateVnodeMsg
*
pCreate
=
mnodeBuildVnodeMsg
(
pVgroup
);
SMDCreateVnodeMsg
*
pCreate
=
mnodeBuildVnodeMsg
(
pVgroup
);
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
ahandle
=
ahandle
,
.
ahandle
=
ahandle
,
...
@@ -862,17 +863,17 @@ static void mnodeSendCreateVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet, void *aha
...
@@ -862,17 +863,17 @@ static void mnodeSendCreateVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet, void *aha
.
code
=
0
,
.
code
=
0
,
.
msgType
=
TSDB_MSG_TYPE_MD_CREATE_VNODE
.
msgType
=
TSDB_MSG_TYPE_MD_CREATE_VNODE
};
};
dnodeSendMsgToDnode
(
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
e
pSet
,
&
rpcMsg
);
}
}
void
mnodeSendCreateVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
)
{
void
mnodeSendCreateVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
)
{
mDebug
(
"vgId:%d, send create all vnodes msg, numOfVnodes:%d db:%s"
,
pVgroup
->
vgId
,
pVgroup
->
numOfVnodes
,
mDebug
(
"vgId:%d, send create all vnodes msg, numOfVnodes:%d db:%s"
,
pVgroup
->
vgId
,
pVgroup
->
numOfVnodes
,
pVgroup
->
dbName
);
pVgroup
->
dbName
);
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
mDebug
(
"vgId:%d, index:%d, send create vnode msg to dnode %s, ahandle:%p"
,
pVgroup
->
vgId
,
mDebug
(
"vgId:%d, index:%d, send create vnode msg to dnode %s, ahandle:%p"
,
pVgroup
->
vgId
,
i
,
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
,
ahandle
);
i
,
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
,
ahandle
);
mnodeSendCreateVnodeMsg
(
pVgroup
,
&
i
pSet
,
ahandle
);
mnodeSendCreateVnodeMsg
(
pVgroup
,
&
e
pSet
,
ahandle
);
}
}
}
}
...
@@ -925,7 +926,7 @@ static SMDDropVnodeMsg *mnodeBuildDropVnodeMsg(int32_t vgId) {
...
@@ -925,7 +926,7 @@ static SMDDropVnodeMsg *mnodeBuildDropVnodeMsg(int32_t vgId) {
return
pDrop
;
return
pDrop
;
}
}
void
mnodeSendDropVnodeMsg
(
int32_t
vgId
,
SRpc
IpSet
*
i
pSet
,
void
*
ahandle
)
{
void
mnodeSendDropVnodeMsg
(
int32_t
vgId
,
SRpc
EpSet
*
e
pSet
,
void
*
ahandle
)
{
SMDDropVnodeMsg
*
pDrop
=
mnodeBuildDropVnodeMsg
(
vgId
);
SMDDropVnodeMsg
*
pDrop
=
mnodeBuildDropVnodeMsg
(
vgId
);
SRpcMsg
rpcMsg
=
{
SRpcMsg
rpcMsg
=
{
.
ahandle
=
ahandle
,
.
ahandle
=
ahandle
,
...
@@ -934,16 +935,16 @@ void mnodeSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
...
@@ -934,16 +935,16 @@ void mnodeSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
.
code
=
0
,
.
code
=
0
,
.
msgType
=
TSDB_MSG_TYPE_MD_DROP_VNODE
.
msgType
=
TSDB_MSG_TYPE_MD_DROP_VNODE
};
};
dnodeSendMsgToDnode
(
i
pSet
,
&
rpcMsg
);
dnodeSendMsgToDnode
(
e
pSet
,
&
rpcMsg
);
}
}
static
void
mnodeSendDropVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
)
{
static
void
mnodeSendDropVgroupMsg
(
SVgObj
*
pVgroup
,
void
*
ahandle
)
{
pVgroup
->
status
=
TAOS_VG_STATUS_DROPPING
;
// deleting
pVgroup
->
status
=
TAOS_VG_STATUS_DROPPING
;
// deleting
mDebug
(
"vgId:%d, send drop all vnodes msg, ahandle:%p"
,
pVgroup
->
vgId
,
ahandle
);
mDebug
(
"vgId:%d, send drop all vnodes msg, ahandle:%p"
,
pVgroup
->
vgId
,
ahandle
);
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pVgroup
->
vnodeGid
[
i
].
pDnode
->
dnodeEp
);
mDebug
(
"vgId:%d, send drop vnode msg to dnode:%d, ahandle:%p"
,
pVgroup
->
vgId
,
pVgroup
->
vnodeGid
[
i
].
dnodeId
,
ahandle
);
mDebug
(
"vgId:%d, send drop vnode msg to dnode:%d, ahandle:%p"
,
pVgroup
->
vgId
,
pVgroup
->
vnodeGid
[
i
].
dnodeId
,
ahandle
);
mnodeSendDropVnodeMsg
(
pVgroup
->
vgId
,
&
i
pSet
,
ahandle
);
mnodeSendDropVnodeMsg
(
pVgroup
->
vgId
,
&
e
pSet
,
ahandle
);
}
}
}
}
...
@@ -997,8 +998,8 @@ static int32_t mnodeProcessVnodeCfgMsg(SMnodeMsg *pMsg) {
...
@@ -997,8 +998,8 @@ static int32_t mnodeProcessVnodeCfgMsg(SMnodeMsg *pMsg) {
}
}
mDebug
(
"vgId:%d, send create vnode msg to dnode %s for vnode cfg msg"
,
pVgroup
->
vgId
,
pDnode
->
dnodeEp
);
mDebug
(
"vgId:%d, send create vnode msg to dnode %s for vnode cfg msg"
,
pVgroup
->
vgId
,
pDnode
->
dnodeEp
);
SRpc
IpSet
ipSet
=
mnodeGetI
pSetFromIp
(
pDnode
->
dnodeEp
);
SRpc
EpSet
epSet
=
mnodeGetE
pSetFromIp
(
pDnode
->
dnodeEp
);
mnodeSendCreateVnodeMsg
(
pVgroup
,
&
i
pSet
,
NULL
);
mnodeSendCreateVnodeMsg
(
pVgroup
,
&
e
pSet
,
NULL
);
mnodeDecDnodeRef
(
pDnode
);
mnodeDecDnodeRef
(
pDnode
);
mnodeDecVgroupRef
(
pVgroup
);
mnodeDecVgroupRef
(
pVgroup
);
...
...
src/mnode/src/mnodeWrite.c
浏览文件 @
599df650
...
@@ -49,16 +49,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
...
@@ -49,16 +49,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
if
(
!
sdbIsMaster
())
{
if
(
!
sdbIsMaster
())
{
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SMnodeRsp
*
rpcRsp
=
&
pMsg
->
rpcRsp
;
SRpc
IpSet
*
ipSet
=
rpcMallocCont
(
sizeof
(
SRpcI
pSet
));
SRpc
EpSet
*
epSet
=
rpcMallocCont
(
sizeof
(
SRpcE
pSet
));
mnodeGetMnode
IpSetForShell
(
i
pSet
);
mnodeGetMnode
EpSetForShell
(
e
pSet
);
rpcRsp
->
rsp
=
i
pSet
;
rpcRsp
->
rsp
=
e
pSet
;
rpcRsp
->
len
=
sizeof
(
SRpc
I
pSet
);
rpcRsp
->
len
=
sizeof
(
SRpc
E
pSet
);
mDebug
(
"app:%p:%p, msg:%s will be redireced inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
mDebug
(
"app:%p:%p, msg:%s will be redireced inUse:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
i
pSet
->
inUse
);
e
pSet
->
inUse
);
for
(
int32_t
i
=
0
;
i
<
ipSet
->
numOfI
ps
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
epSet
->
numOfE
ps
;
++
i
)
{
mDebug
(
"app:%p:%p, mnode index:%d
ip:%s:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
i
,
i
pSet
->
fqdn
[
i
],
mDebug
(
"app:%p:%p, mnode index:%d
ep:%s:%d"
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
,
i
,
e
pSet
->
fqdn
[
i
],
htons
(
i
pSet
->
port
[
i
]));
htons
(
e
pSet
->
port
[
i
]));
}
}
return
TSDB_CODE_RPC_REDIRECT
;
return
TSDB_CODE_RPC_REDIRECT
;
...
...
src/plugins/monitor/src/monitorMain.c
浏览文件 @
599df650
...
@@ -76,6 +76,8 @@ static void monitorInitDatabase();
...
@@ -76,6 +76,8 @@ static void monitorInitDatabase();
static
void
monitorInitDatabaseCb
(
void
*
param
,
TAOS_RES
*
result
,
int32_t
code
);
static
void
monitorInitDatabaseCb
(
void
*
param
,
TAOS_RES
*
result
,
int32_t
code
);
static
void
monitorStartTimer
();
static
void
monitorStartTimer
();
static
void
monitorSaveSystemInfo
();
static
void
monitorSaveSystemInfo
();
extern
int32_t
(
*
monitorStartSystemFp
)();
extern
void
(
*
monitorStopSystemFp
)();
static
void
monitorCheckDiskUsage
(
void
*
para
,
void
*
unused
)
{
static
void
monitorCheckDiskUsage
(
void
*
para
,
void
*
unused
)
{
taosGetDisk
();
taosGetDisk
();
...
@@ -85,6 +87,8 @@ static void monitorCheckDiskUsage(void *para, void *unused) {
...
@@ -85,6 +87,8 @@ static void monitorCheckDiskUsage(void *para, void *unused) {
int32_t
monitorInitSystem
()
{
int32_t
monitorInitSystem
()
{
taos_init
();
taos_init
();
taosTmrReset
(
monitorCheckDiskUsage
,
CHECK_INTERVAL
,
NULL
,
tscTmr
,
&
tsMonitorConn
.
diskTimer
);
taosTmrReset
(
monitorCheckDiskUsage
,
CHECK_INTERVAL
,
NULL
,
tscTmr
,
&
tsMonitorConn
.
diskTimer
);
monitorStartSystemFp
=
monitorStartSystem
;
monitorStopSystemFp
=
monitorStopSystem
;
return
0
;
return
0
;
}
}
...
...
src/query/inc/qExecutor.h
浏览文件 @
599df650
...
@@ -121,7 +121,6 @@ typedef struct SQueryCostInfo {
...
@@ -121,7 +121,6 @@ typedef struct SQueryCostInfo {
uint32_t
loadBlockStatis
;
uint32_t
loadBlockStatis
;
uint32_t
discardBlocks
;
uint32_t
discardBlocks
;
uint64_t
elapsedTime
;
uint64_t
elapsedTime
;
uint64_t
ioTime
;
uint64_t
computTime
;
uint64_t
computTime
;
}
SQueryCostInfo
;
}
SQueryCostInfo
;
...
...
src/query/inc/qUtil.h
浏览文件 @
599df650
...
@@ -23,7 +23,7 @@ void copyTimeWindowResBuf(SQueryRuntimeEnv* pRuntimeEnv, SWindowResult* dst, con
...
@@ -23,7 +23,7 @@ void copyTimeWindowResBuf(SQueryRuntimeEnv* pRuntimeEnv, SWindowResult* dst, con
int32_t
initWindowResInfo
(
SWindowResInfo
*
pWindowResInfo
,
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
size
,
int32_t
initWindowResInfo
(
SWindowResInfo
*
pWindowResInfo
,
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
size
,
int32_t
threshold
,
int16_t
type
);
int32_t
threshold
,
int16_t
type
);
void
cleanupTimeWindowInfo
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
numOfCols
);
void
cleanupTimeWindowInfo
(
SWindowResInfo
*
pWindowResInfo
);
void
resetTimeWindowInfo
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SWindowResInfo
*
pWindowResInfo
);
void
resetTimeWindowInfo
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SWindowResInfo
*
pWindowResInfo
);
void
clearFirstNTimeWindow
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
num
);
void
clearFirstNTimeWindow
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
num
);
...
@@ -32,14 +32,29 @@ int32_t numOfClosedTimeWindow(SWindowResInfo* pWindowResInfo);
...
@@ -32,14 +32,29 @@ int32_t numOfClosedTimeWindow(SWindowResInfo* pWindowResInfo);
void
closeTimeWindow
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
void
closeTimeWindow
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
void
closeAllTimeWindow
(
SWindowResInfo
*
pWindowResInfo
);
void
closeAllTimeWindow
(
SWindowResInfo
*
pWindowResInfo
);
void
removeRedundantWindow
(
SWindowResInfo
*
pWindowResInfo
,
TSKEY
lastKey
,
int32_t
order
);
void
removeRedundantWindow
(
SWindowResInfo
*
pWindowResInfo
,
TSKEY
lastKey
,
int32_t
order
);
SWindowResult
*
getWindowResult
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
static
FORCE_INLINE
SWindowResult
*
getWindowResult
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
)
{
assert
(
pWindowResInfo
!=
NULL
&&
slot
>=
0
&&
slot
<
pWindowResInfo
->
size
);
return
&
pWindowResInfo
->
pResult
[
slot
];
}
#define curTimeWindow(_winres) ((_winres)->curIndex)
#define curTimeWindow(_winres) ((_winres)->curIndex)
#define GET_ROW_PARAM_FOR_MULTIOUTPUT(_q, tbq, sq) (((tbq) && (!sq))? (_q)->pSelectExpr[1].base.arg->argValue.i64:1)
bool
isWindowResClosed
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
bool
isWindowResClosed
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
int32_t
createQueryResultInfo
(
SQuery
*
pQuery
,
SWindowResult
*
pResultRow
,
bool
isSTableQuery
,
SPosInfo
*
posInfo
,
size_t
interBufSize
);
int32_t
createQueryResultInfo
(
SQuery
*
pQuery
,
SWindowResult
*
pResultRow
,
bool
isSTableQuery
,
size_t
interBufSize
);
static
FORCE_INLINE
char
*
getPosInResultPage
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
columnIndex
,
SWindowResult
*
pResult
)
{
assert
(
pResult
!=
NULL
&&
pRuntimeEnv
!=
NULL
);
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
tFilePage
*
page
=
GET_RES_BUF_PAGE_BY_ID
(
pRuntimeEnv
->
pResultBuf
,
pResult
->
pos
.
pageId
);
int32_t
realRowId
=
pResult
->
pos
.
rowId
*
GET_ROW_PARAM_FOR_MULTIOUTPUT
(
pQuery
,
pRuntimeEnv
->
topBotQuery
,
pRuntimeEnv
->
stableQuery
);
char
*
getPosInResultPage
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
columnIndex
,
SWindowResult
*
pResult
);
return
((
char
*
)
page
->
data
)
+
pRuntimeEnv
->
offset
[
columnIndex
]
*
pRuntimeEnv
->
numOfRowsPerPage
+
pQuery
->
pSelectExpr
[
columnIndex
].
bytes
*
realRowId
;
}
__filter_func_t
*
getRangeFilterFuncArray
(
int32_t
type
);
__filter_func_t
*
getRangeFilterFuncArray
(
int32_t
type
);
__filter_func_t
*
getValueFilterFuncArray
(
int32_t
type
);
__filter_func_t
*
getValueFilterFuncArray
(
int32_t
type
);
...
...
src/query/inc/qresultBuf.h
浏览文件 @
599df650
...
@@ -22,12 +22,9 @@ extern "C" {
...
@@ -22,12 +22,9 @@ extern "C" {
#include "os.h"
#include "os.h"
#include "qextbuffer.h"
#include "qextbuffer.h"
#include "hash.h"
typedef
struct
SIDList
{
typedef
struct
SArray
*
SIDList
;
uint32_t
alloc
;
int32_t
size
;
int32_t
*
pData
;
}
SIDList
;
typedef
struct
SDiskbasedResultBuf
{
typedef
struct
SDiskbasedResultBuf
{
int32_t
numOfRowsPerPage
;
int32_t
numOfRowsPerPage
;
...
@@ -39,9 +36,8 @@ typedef struct SDiskbasedResultBuf {
...
@@ -39,9 +36,8 @@ typedef struct SDiskbasedResultBuf {
char
*
pBuf
;
// mmap buffer pointer
char
*
pBuf
;
// mmap buffer pointer
char
*
path
;
// file path
char
*
path
;
// file path
uint32_t
numOfAllocGroupIds
;
// number of allocated id list
SHashObj
*
idsTable
;
// id hash table
void
*
idsTable
;
// id hash table
SIDList
list
;
// for each id, there is a page id list
SIDList
*
list
;
// for each id, there is a page id list
}
SDiskbasedResultBuf
;
}
SDiskbasedResultBuf
;
#define DEFAULT_INTERN_BUF_PAGE_SIZE (8192L*5)
#define DEFAULT_INTERN_BUF_PAGE_SIZE (8192L*5)
...
@@ -112,7 +108,7 @@ void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle);
...
@@ -112,7 +108,7 @@ void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle);
* @param pList
* @param pList
* @return
* @return
*/
*/
int32_t
getLastPageId
(
SIDList
*
pList
);
int32_t
getLastPageId
(
SIDList
pList
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/query/inc/tsqlfunction.h
浏览文件 @
599df650
...
@@ -132,13 +132,10 @@ typedef struct SQLPreAggVal {
...
@@ -132,13 +132,10 @@ typedef struct SQLPreAggVal {
typedef
struct
SInterpInfoDetail
{
typedef
struct
SInterpInfoDetail
{
TSKEY
ts
;
// interp specified timestamp
TSKEY
ts
;
// interp specified timestamp
int8_t
hasResult
;
int8_t
type
;
int8_t
type
;
int8_t
primaryCol
;
int8_t
primaryCol
;
}
SInterpInfoDetail
;
}
SInterpInfoDetail
;
typedef
struct
SInterpInfo
{
SInterpInfoDetail
*
pInterpDetail
;
}
SInterpInfo
;
typedef
struct
SResultInfo
{
typedef
struct
SResultInfo
{
int8_t
hasResult
;
// result generated, not NULL value
int8_t
hasResult
;
// result generated, not NULL value
bool
initialized
;
// output buffer has been initialized
bool
initialized
;
// output buffer has been initialized
...
@@ -146,7 +143,7 @@ typedef struct SResultInfo {
...
@@ -146,7 +143,7 @@ typedef struct SResultInfo {
bool
superTableQ
;
// is super table query
bool
superTableQ
;
// is super table query
int32_t
numOfRes
;
// num of output result in current buffer
int32_t
numOfRes
;
// num of output result in current buffer
int32_t
bufLen
;
// buffer size
int32_t
bufLen
;
// buffer size
void
*
interResultBuf
;
// output result buffer
void
*
interResultBuf
;
// output result buffer
}
SResultInfo
;
}
SResultInfo
;
struct
SQLFunctionCtx
;
struct
SQLFunctionCtx
;
...
...
src/query/src/qExecutor.c
浏览文件 @
599df650
此差异已折叠。
点击以展开。
src/query/src/qUtil.c
浏览文件 @
599df650
...
@@ -53,9 +53,9 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun
...
@@ -53,9 +53,9 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun
if
(
pWindowResInfo
->
pResult
==
NULL
)
{
if
(
pWindowResInfo
->
pResult
==
NULL
)
{
return
TSDB_CODE_QRY_OUT_OF_MEMORY
;
return
TSDB_CODE_QRY_OUT_OF_MEMORY
;
}
}
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
capacity
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
capacity
;
++
i
)
{
SPosInfo
posInfo
=
{
-
1
,
-
1
};
int32_t
code
=
createQueryResultInfo
(
pRuntimeEnv
->
pQuery
,
&
pWindowResInfo
->
pResult
[
i
],
pRuntimeEnv
->
stableQuery
,
pRuntimeEnv
->
interBufSize
);
int32_t
code
=
createQueryResultInfo
(
pRuntimeEnv
->
pQuery
,
&
pWindowResInfo
->
pResult
[
i
],
pRuntimeEnv
->
stableQuery
,
&
posInfo
,
pRuntimeEnv
->
interBufSize
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
return
code
;
}
}
...
@@ -64,16 +64,15 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun
...
@@ -64,16 +64,15 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
void
destroyTimeWindowRes
(
SWindowResult
*
pWindowRes
,
int32_t
nOutputCols
)
{
void
destroyTimeWindowRes
(
SWindowResult
*
pWindowRes
)
{
if
(
pWindowRes
==
NULL
)
{
if
(
pWindowRes
==
NULL
)
{
return
;
return
;
}
}
free
(
pWindowRes
->
resultInfo
[
0
].
interResultBuf
);
free
(
pWindowRes
->
resultInfo
);
free
(
pWindowRes
->
resultInfo
);
}
}
void
cleanupTimeWindowInfo
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
numOfCols
)
{
void
cleanupTimeWindowInfo
(
SWindowResInfo
*
pWindowResInfo
)
{
if
(
pWindowResInfo
==
NULL
)
{
if
(
pWindowResInfo
==
NULL
)
{
return
;
return
;
}
}
...
@@ -84,8 +83,7 @@ void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo, int32_t numOfCols) {
...
@@ -84,8 +83,7 @@ void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo, int32_t numOfCols) {
if
(
pWindowResInfo
->
pResult
!=
NULL
)
{
if
(
pWindowResInfo
->
pResult
!=
NULL
)
{
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
capacity
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
capacity
;
++
i
)
{
SWindowResult
*
pResult
=
&
pWindowResInfo
->
pResult
[
i
];
destroyTimeWindowRes
(
&
pWindowResInfo
->
pResult
[
i
]);
destroyTimeWindowRes
(
pResult
,
numOfCols
);
}
}
}
}
...
@@ -225,11 +223,6 @@ void removeRedundantWindow(SWindowResInfo *pWindowResInfo, TSKEY lastKey, int32_
...
@@ -225,11 +223,6 @@ void removeRedundantWindow(SWindowResInfo *pWindowResInfo, TSKEY lastKey, int32_
}
}
}
}
SWindowResult
*
getWindowResult
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
)
{
assert
(
pWindowResInfo
!=
NULL
&&
slot
>=
0
&&
slot
<
pWindowResInfo
->
size
);
return
&
pWindowResInfo
->
pResult
[
slot
];
}
bool
isWindowResClosed
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
)
{
bool
isWindowResClosed
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
)
{
return
(
getWindowResult
(
pWindowResInfo
,
slot
)
->
status
.
closed
==
true
);
return
(
getWindowResult
(
pWindowResInfo
,
slot
)
->
status
.
closed
==
true
);
}
}
...
...
src/query/src/qast.c
浏览文件 @
599df650
...
@@ -1064,10 +1064,9 @@ tExprNode* exprTreeFromTableName(const char* tbnameCond) {
...
@@ -1064,10 +1064,9 @@ tExprNode* exprTreeFromTableName(const char* tbnameCond) {
if
(
*
e
==
TS_PATH_DELIMITER
[
0
])
{
if
(
*
e
==
TS_PATH_DELIMITER
[
0
])
{
cond
=
e
+
1
;
cond
=
e
+
1
;
}
else
if
(
*
e
==
','
)
{
}
else
if
(
*
e
==
','
)
{
size_t
len
=
e
-
cond
+
VARSTR_HEADER_SIZE
;
size_t
len
=
e
-
cond
;
char
*
p
=
exception_malloc
(
len
);
char
*
p
=
exception_malloc
(
len
+
VARSTR_HEADER_SIZE
);
varDataSetLen
(
p
,
len
-
VARSTR_HEADER_SIZE
);
STR_WITH_SIZE_TO_VARSTR
(
p
,
cond
,
len
);
memcpy
(
varDataVal
(
p
),
cond
,
len
);
cond
+=
len
;
cond
+=
len
;
taosArrayPush
(
pVal
->
arr
,
&
p
);
taosArrayPush
(
pVal
->
arr
,
&
p
);
}
}
...
...
src/query/src/qresultBuf.c
浏览文件 @
599df650
...
@@ -2,7 +2,6 @@
...
@@ -2,7 +2,6 @@
#include "hash.h"
#include "hash.h"
#include "qextbuffer.h"
#include "qextbuffer.h"
#include "taoserror.h"
#include "taoserror.h"
#include "tsqlfunction.h"
#include "queryLog.h"
#include "queryLog.h"
int32_t
createDiskbasedResultBuffer
(
SDiskbasedResultBuf
**
pResultBuf
,
int32_t
size
,
int32_t
rowSize
,
void
*
handle
)
{
int32_t
createDiskbasedResultBuffer
(
SDiskbasedResultBuf
**
pResultBuf
,
int32_t
size
,
int32_t
rowSize
,
void
*
handle
)
{
...
@@ -20,35 +19,31 @@ int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t si
...
@@ -20,35 +19,31 @@ int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t si
// init id hash table
// init id hash table
pResBuf
->
idsTable
=
taosHashInit
(
size
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
false
);
pResBuf
->
idsTable
=
taosHashInit
(
size
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
false
);
pResBuf
->
list
=
calloc
(
size
,
sizeof
(
SIDList
));
pResBuf
->
list
=
taosArrayInit
(
size
,
POINTER_BYTES
);
pResBuf
->
numOfAllocGroupIds
=
size
;
char
path
[
4096
]
=
{
0
};
char
path
[
4096
]
=
{
0
};
getTmpfilePath
(
"tsdb_q
_
buf"
,
path
);
getTmpfilePath
(
"tsdb_qbuf"
,
path
);
pResBuf
->
path
=
strdup
(
path
);
pResBuf
->
path
=
strdup
(
path
);
pResBuf
->
fd
=
open
(
pResBuf
->
path
,
O_CREAT
|
O_RDWR
,
0666
);
pResBuf
->
fd
=
open
(
pResBuf
->
path
,
O_CREAT
|
O_RDWR
,
0666
);
memset
(
path
,
0
,
tListLen
(
path
));
if
(
!
FD_VALID
(
pResBuf
->
fd
))
{
if
(
!
FD_VALID
(
pResBuf
->
fd
))
{
qError
(
"failed to create tmp file: %s on disk. %s"
,
pResBuf
->
path
,
strerror
(
errno
));
qError
(
"failed to create tmp file: %s on disk. %s"
,
pResBuf
->
path
,
strerror
(
errno
));
return
T
SDB_CODE_QRY_NO_DISKSPACE
;
return
T
AOS_SYSTEM_ERROR
(
errno
)
;
}
}
int32_t
ret
=
ftruncate
(
pResBuf
->
fd
,
pResBuf
->
numOfPages
*
DEFAULT_INTERN_BUF_PAGE_SIZE
);
int32_t
ret
=
ftruncate
(
pResBuf
->
fd
,
pResBuf
->
numOfPages
*
DEFAULT_INTERN_BUF_PAGE_SIZE
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to create tmp file: %s on disk. %s"
,
pResBuf
->
path
,
strerror
(
errno
));
qError
(
"failed to create tmp file: %s on disk. %s"
,
pResBuf
->
path
,
strerror
(
errno
));
return
T
SDB_CODE_QRY_NO_DISKSPACE
;
return
T
AOS_SYSTEM_ERROR
(
errno
)
;
}
}
pResBuf
->
pBuf
=
mmap
(
NULL
,
pResBuf
->
totalBufSize
,
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
pResBuf
->
fd
,
0
);
pResBuf
->
pBuf
=
mmap
(
NULL
,
pResBuf
->
totalBufSize
,
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
pResBuf
->
fd
,
0
);
if
(
pResBuf
->
pBuf
==
MAP_FAILED
)
{
if
(
pResBuf
->
pBuf
==
MAP_FAILED
)
{
qError
(
"QInfo:%p failed to map temp file: %s. %s"
,
handle
,
pResBuf
->
path
,
strerror
(
errno
));
qError
(
"QInfo:%p failed to map temp file: %s. %s"
,
handle
,
pResBuf
->
path
,
strerror
(
errno
));
return
T
SDB_CODE_QRY_OUT_OF_MEMORY
;
// todo change error code
return
T
AOS_SYSTEM_ERROR
(
errno
);
}
}
qDebug
(
"QInfo:%p create tmp file for output result
,
%s, %"
PRId64
"bytes"
,
handle
,
pResBuf
->
path
,
qDebug
(
"QInfo:%p create tmp file for output result
:
%s, %"
PRId64
"bytes"
,
handle
,
pResBuf
->
path
,
pResBuf
->
totalBufSize
);
pResBuf
->
totalBufSize
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -86,11 +81,11 @@ static int32_t extendDiskFileSize(SDiskbasedResultBuf* pResultBuf, int32_t numOf
...
@@ -86,11 +81,11 @@ static int32_t extendDiskFileSize(SDiskbasedResultBuf* pResultBuf, int32_t numOf
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
bool
noMoreAvailablePages
(
SDiskbasedResultBuf
*
pResultBuf
)
{
static
FORCE_INLINE
bool
noMoreAvailablePages
(
SDiskbasedResultBuf
*
pResultBuf
)
{
return
(
pResultBuf
->
allocateId
==
pResultBuf
->
numOfPages
-
1
);
return
(
pResultBuf
->
allocateId
==
pResultBuf
->
numOfPages
-
1
);
}
}
static
int32_t
getGroupIndex
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
static
FORCE_INLINE
int32_t
getGroupIndex
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
assert
(
pResultBuf
!=
NULL
);
assert
(
pResultBuf
!=
NULL
);
char
*
p
=
taosHashGet
(
pResultBuf
->
idsTable
,
(
const
char
*
)
&
groupId
,
sizeof
(
int32_t
));
char
*
p
=
taosHashGet
(
pResultBuf
->
idsTable
,
(
const
char
*
)
&
groupId
,
sizeof
(
int32_t
));
...
@@ -99,51 +94,20 @@ static int32_t getGroupIndex(SDiskbasedResultBuf* pResultBuf, int32_t groupId) {
...
@@ -99,51 +94,20 @@ static int32_t getGroupIndex(SDiskbasedResultBuf* pResultBuf, int32_t groupId) {
}
}
int32_t
slot
=
GET_INT32_VAL
(
p
);
int32_t
slot
=
GET_INT32_VAL
(
p
);
assert
(
slot
>=
0
&&
slot
<
pResultBuf
->
numOfAllocGroupIds
);
assert
(
slot
>=
0
&&
slot
<
taosHashGetSize
(
pResultBuf
->
idsTable
)
);
return
slot
;
return
slot
;
}
}
static
int32_t
addNewGroupId
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
static
int32_t
addNewGroupId
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
int32_t
num
=
getNumOfResultBufGroupId
(
pResultBuf
);
// the num is the newest allocated group id slot
int32_t
num
=
getNumOfResultBufGroupId
(
pResultBuf
);
// the num is the newest allocated group id slot
if
(
pResultBuf
->
numOfAllocGroupIds
<=
num
)
{
size_t
n
=
pResultBuf
->
numOfAllocGroupIds
<<
1u
;
SIDList
*
p
=
(
SIDList
*
)
realloc
(
pResultBuf
->
list
,
sizeof
(
SIDList
)
*
n
);
assert
(
p
!=
NULL
);
memset
(
&
p
[
pResultBuf
->
numOfAllocGroupIds
],
0
,
sizeof
(
SIDList
)
*
pResultBuf
->
numOfAllocGroupIds
);
pResultBuf
->
list
=
p
;
pResultBuf
->
numOfAllocGroupIds
=
n
;
}
taosHashPut
(
pResultBuf
->
idsTable
,
(
const
char
*
)
&
groupId
,
sizeof
(
int32_t
),
&
num
,
sizeof
(
int32_t
));
taosHashPut
(
pResultBuf
->
idsTable
,
(
const
char
*
)
&
groupId
,
sizeof
(
int32_t
),
&
num
,
sizeof
(
int32_t
));
return
num
;
}
static
int32_t
doRegisterId
(
SIDList
*
pList
,
int32_t
id
)
{
if
(
pList
->
size
>=
pList
->
alloc
)
{
int32_t
s
=
0
;
if
(
pList
->
alloc
==
0
)
{
s
=
4
;
assert
(
pList
->
pData
==
NULL
);
}
else
{
s
=
pList
->
alloc
<<
1u
;
}
int32_t
*
c
=
realloc
(
pList
->
pData
,
s
*
sizeof
(
int32_t
));
assert
(
c
);
memset
(
&
c
[
pList
->
alloc
],
0
,
sizeof
(
int32_t
)
*
pList
->
alloc
);
SArray
*
pa
=
taosArrayInit
(
1
,
sizeof
(
int32_t
));
taosArrayPush
(
pResultBuf
->
list
,
&
pa
);
pList
->
pData
=
c
;
assert
(
taosArrayGetSize
(
pResultBuf
->
list
)
==
taosHashGetSize
(
pResultBuf
->
idsTable
));
pList
->
alloc
=
s
;
return
num
;
}
pList
->
pData
[
pList
->
size
++
]
=
id
;
return
0
;
}
}
static
void
registerPageId
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
,
int32_t
pageId
)
{
static
void
registerPageId
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
,
int32_t
pageId
)
{
...
@@ -152,8 +116,8 @@ static void registerPageId(SDiskbasedResultBuf* pResultBuf, int32_t groupId, int
...
@@ -152,8 +116,8 @@ static void registerPageId(SDiskbasedResultBuf* pResultBuf, int32_t groupId, int
slot
=
addNewGroupId
(
pResultBuf
,
groupId
);
slot
=
addNewGroupId
(
pResultBuf
,
groupId
);
}
}
SIDList
*
pList
=
&
pResultBuf
->
list
[
slot
]
;
SIDList
pList
=
taosArrayGetP
(
pResultBuf
->
list
,
slot
)
;
doRegisterId
(
pList
,
pageId
);
taosArrayPush
(
pList
,
&
pageId
);
}
}
tFilePage
*
getNewDataBuf
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
,
int32_t
*
pageId
)
{
tFilePage
*
getNewDataBuf
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
,
int32_t
*
pageId
)
{
...
@@ -178,12 +142,11 @@ tFilePage* getNewDataBuf(SDiskbasedResultBuf* pResultBuf, int32_t groupId, int32
...
@@ -178,12 +142,11 @@ tFilePage* getNewDataBuf(SDiskbasedResultBuf* pResultBuf, int32_t groupId, int32
int32_t
getNumOfRowsPerPage
(
SDiskbasedResultBuf
*
pResultBuf
)
{
return
pResultBuf
->
numOfRowsPerPage
;
}
int32_t
getNumOfRowsPerPage
(
SDiskbasedResultBuf
*
pResultBuf
)
{
return
pResultBuf
->
numOfRowsPerPage
;
}
SIDList
getDataBufPagesIdList
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
SIDList
getDataBufPagesIdList
(
SDiskbasedResultBuf
*
pResultBuf
,
int32_t
groupId
)
{
SIDList
list
=
{
0
};
int32_t
slot
=
getGroupIndex
(
pResultBuf
,
groupId
);
int32_t
slot
=
getGroupIndex
(
pResultBuf
,
groupId
);
if
(
slot
<
0
)
{
if
(
slot
<
0
)
{
return
list
;
return
taosArrayInit
(
1
,
sizeof
(
int32_t
))
;
}
else
{
}
else
{
return
pResultBuf
->
list
[
slot
]
;
return
taosArrayGetP
(
pResultBuf
->
list
,
slot
)
;
}
}
}
}
...
@@ -202,22 +165,20 @@ void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle) {
...
@@ -202,22 +165,20 @@ void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle) {
tfree
(
pResultBuf
->
path
);
tfree
(
pResultBuf
->
path
);
for
(
int32_t
i
=
0
;
i
<
pResultBuf
->
numOfAllocGroupIds
;
++
i
)
{
size_t
size
=
taosArrayGetSize
(
pResultBuf
->
list
);
SIDList
*
pList
=
&
pResultBuf
->
list
[
i
];
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
tfree
(
pList
->
pData
);
SArray
*
pa
=
taosArrayGetP
(
pResultBuf
->
list
,
i
);
taosArrayDestroy
(
pa
);
}
}
t
free
(
pResultBuf
->
list
);
t
aosArrayDestroy
(
pResultBuf
->
list
);
taosHashCleanup
(
pResultBuf
->
idsTable
);
taosHashCleanup
(
pResultBuf
->
idsTable
);
tfree
(
pResultBuf
);
tfree
(
pResultBuf
);
}
}
int32_t
getLastPageId
(
SIDList
*
pList
)
{
int32_t
getLastPageId
(
SIDList
pList
)
{
if
(
pList
==
NULL
||
pList
->
size
<=
0
)
{
size_t
size
=
taosArrayGetSize
(
pList
);
return
-
1
;
return
*
(
int32_t
*
)
taosArrayGet
(
pList
,
size
-
1
);
}
return
pList
->
pData
[
pList
->
size
-
1
];
}
}
src/rpc/src/rpcMain.c
浏览文件 @
599df650
...
@@ -55,7 +55,7 @@ typedef struct {
...
@@ -55,7 +55,7 @@ typedef struct {
char
secret
[
TSDB_KEY_LEN
];
// secret for the link
char
secret
[
TSDB_KEY_LEN
];
// secret for the link
char
ckey
[
TSDB_KEY_LEN
];
// ciphering key
char
ckey
[
TSDB_KEY_LEN
];
// ciphering key
void
(
*
cfp
)(
SRpcMsg
*
,
SRpc
I
pSet
*
);
void
(
*
cfp
)(
SRpcMsg
*
,
SRpc
E
pSet
*
);
int
(
*
afp
)(
char
*
user
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
int
(
*
afp
)(
char
*
user
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
int32_t
refCount
;
int32_t
refCount
;
...
@@ -71,7 +71,7 @@ typedef struct {
...
@@ -71,7 +71,7 @@ typedef struct {
typedef
struct
{
typedef
struct
{
SRpcInfo
*
pRpc
;
// associated SRpcInfo
SRpcInfo
*
pRpc
;
// associated SRpcInfo
SRpc
IpSet
i
pSet
;
// ip list provided by app
SRpc
EpSet
e
pSet
;
// ip list provided by app
void
*
ahandle
;
// handle provided by app
void
*
ahandle
;
// handle provided by app
void
*
signature
;
// for validation
void
*
signature
;
// for validation
struct
SRpcConn
*
pConn
;
// pConn allocated
struct
SRpcConn
*
pConn
;
// pConn allocated
...
@@ -80,12 +80,12 @@ typedef struct {
...
@@ -80,12 +80,12 @@ typedef struct {
int32_t
contLen
;
// content length
int32_t
contLen
;
// content length
int32_t
code
;
// error code
int32_t
code
;
// error code
int16_t
numOfTry
;
// number of try for different servers
int16_t
numOfTry
;
// number of try for different servers
int8_t
oldInUse
;
// server
I
P inUse passed by app
int8_t
oldInUse
;
// server
E
P inUse passed by app
int8_t
redirect
;
// flag to indicate redirect
int8_t
redirect
;
// flag to indicate redirect
int8_t
connType
;
// connection type
int8_t
connType
;
// connection type
SRpcMsg
*
pRsp
;
// for synchronous API
SRpcMsg
*
pRsp
;
// for synchronous API
tsem_t
*
pSem
;
// for synchronous API
tsem_t
*
pSem
;
// for synchronous API
SRpc
I
pSet
*
pSet
;
// for synchronous API
SRpc
E
pSet
*
pSet
;
// for synchronous API
char
msg
[
0
];
// RpcHead starts from here
char
msg
[
0
];
// RpcHead starts from here
}
SRpcReqContext
;
}
SRpcReqContext
;
...
@@ -355,7 +355,7 @@ void *rpcReallocCont(void *ptr, int contLen) {
...
@@ -355,7 +355,7 @@ void *rpcReallocCont(void *ptr, int contLen) {
return
start
+
sizeof
(
SRpcReqContext
)
+
sizeof
(
SRpcHead
);
return
start
+
sizeof
(
SRpcReqContext
)
+
sizeof
(
SRpcHead
);
}
}
void
rpcSendRequest
(
void
*
shandle
,
const
SRpc
IpSet
*
pI
pSet
,
SRpcMsg
*
pMsg
)
{
void
rpcSendRequest
(
void
*
shandle
,
const
SRpc
EpSet
*
pE
pSet
,
SRpcMsg
*
pMsg
)
{
SRpcInfo
*
pRpc
=
(
SRpcInfo
*
)
shandle
;
SRpcInfo
*
pRpc
=
(
SRpcInfo
*
)
shandle
;
SRpcReqContext
*
pContext
;
SRpcReqContext
*
pContext
;
...
@@ -364,11 +364,11 @@ void rpcSendRequest(void *shandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg) {
...
@@ -364,11 +364,11 @@ void rpcSendRequest(void *shandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg) {
pContext
->
ahandle
=
pMsg
->
ahandle
;
pContext
->
ahandle
=
pMsg
->
ahandle
;
pContext
->
signature
=
pContext
;
pContext
->
signature
=
pContext
;
pContext
->
pRpc
=
(
SRpcInfo
*
)
shandle
;
pContext
->
pRpc
=
(
SRpcInfo
*
)
shandle
;
pContext
->
ipSet
=
*
pI
pSet
;
pContext
->
epSet
=
*
pE
pSet
;
pContext
->
contLen
=
contLen
;
pContext
->
contLen
=
contLen
;
pContext
->
pCont
=
pMsg
->
pCont
;
pContext
->
pCont
=
pMsg
->
pCont
;
pContext
->
msgType
=
pMsg
->
msgType
;
pContext
->
msgType
=
pMsg
->
msgType
;
pContext
->
oldInUse
=
p
I
pSet
->
inUse
;
pContext
->
oldInUse
=
p
E
pSet
->
inUse
;
pContext
->
connType
=
RPC_CONN_UDPC
;
pContext
->
connType
=
RPC_CONN_UDPC
;
if
(
contLen
>
tsRpcMaxUdpSize
)
pContext
->
connType
=
RPC_CONN_TCPC
;
if
(
contLen
>
tsRpcMaxUdpSize
)
pContext
->
connType
=
RPC_CONN_TCPC
;
...
@@ -458,15 +458,15 @@ void rpcSendResponse(const SRpcMsg *pRsp) {
...
@@ -458,15 +458,15 @@ void rpcSendResponse(const SRpcMsg *pRsp) {
return
;
return
;
}
}
void
rpcSendRedirectRsp
(
void
*
thandle
,
const
SRpc
IpSet
*
pI
pSet
)
{
void
rpcSendRedirectRsp
(
void
*
thandle
,
const
SRpc
EpSet
*
pE
pSet
)
{
SRpcMsg
rpcMsg
;
SRpcMsg
rpcMsg
;
memset
(
&
rpcMsg
,
0
,
sizeof
(
rpcMsg
));
memset
(
&
rpcMsg
,
0
,
sizeof
(
rpcMsg
));
rpcMsg
.
contLen
=
sizeof
(
SRpc
I
pSet
);
rpcMsg
.
contLen
=
sizeof
(
SRpc
E
pSet
);
rpcMsg
.
pCont
=
rpcMallocCont
(
rpcMsg
.
contLen
);
rpcMsg
.
pCont
=
rpcMallocCont
(
rpcMsg
.
contLen
);
if
(
rpcMsg
.
pCont
==
NULL
)
return
;
if
(
rpcMsg
.
pCont
==
NULL
)
return
;
memcpy
(
rpcMsg
.
pCont
,
p
IpSet
,
sizeof
(
SRpcI
pSet
));
memcpy
(
rpcMsg
.
pCont
,
p
EpSet
,
sizeof
(
SRpcE
pSet
));
rpcMsg
.
code
=
TSDB_CODE_RPC_REDIRECT
;
rpcMsg
.
code
=
TSDB_CODE_RPC_REDIRECT
;
rpcMsg
.
handle
=
thandle
;
rpcMsg
.
handle
=
thandle
;
...
@@ -488,7 +488,7 @@ int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo) {
...
@@ -488,7 +488,7 @@ int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo) {
return
0
;
return
0
;
}
}
void
rpcSendRecv
(
void
*
shandle
,
SRpc
IpSet
*
pI
pSet
,
SRpcMsg
*
pMsg
,
SRpcMsg
*
pRsp
)
{
void
rpcSendRecv
(
void
*
shandle
,
SRpc
EpSet
*
pE
pSet
,
SRpcMsg
*
pMsg
,
SRpcMsg
*
pRsp
)
{
SRpcReqContext
*
pContext
;
SRpcReqContext
*
pContext
;
pContext
=
(
SRpcReqContext
*
)
(
pMsg
->
pCont
-
sizeof
(
SRpcHead
)
-
sizeof
(
SRpcReqContext
));
pContext
=
(
SRpcReqContext
*
)
(
pMsg
->
pCont
-
sizeof
(
SRpcHead
)
-
sizeof
(
SRpcReqContext
));
...
@@ -498,9 +498,9 @@ void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pMsg, SRpcMsg *pRsp)
...
@@ -498,9 +498,9 @@ void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pMsg, SRpcMsg *pRsp)
tsem_init
(
&
sem
,
0
,
0
);
tsem_init
(
&
sem
,
0
,
0
);
pContext
->
pSem
=
&
sem
;
pContext
->
pSem
=
&
sem
;
pContext
->
pRsp
=
pRsp
;
pContext
->
pRsp
=
pRsp
;
pContext
->
pSet
=
p
I
pSet
;
pContext
->
pSet
=
p
E
pSet
;
rpcSendRequest
(
shandle
,
p
I
pSet
,
pMsg
);
rpcSendRequest
(
shandle
,
p
E
pSet
,
pMsg
);
tsem_wait
(
&
sem
);
tsem_wait
(
&
sem
);
tsem_destroy
(
&
sem
);
tsem_destroy
(
&
sem
);
...
@@ -755,11 +755,11 @@ static SRpcConn *rpcGetConnObj(SRpcInfo *pRpc, int sid, SRecvInfo *pRecv) {
...
@@ -755,11 +755,11 @@ static SRpcConn *rpcGetConnObj(SRpcInfo *pRpc, int sid, SRecvInfo *pRecv) {
static
SRpcConn
*
rpcSetupConnToServer
(
SRpcReqContext
*
pContext
)
{
static
SRpcConn
*
rpcSetupConnToServer
(
SRpcReqContext
*
pContext
)
{
SRpcConn
*
pConn
;
SRpcConn
*
pConn
;
SRpcInfo
*
pRpc
=
pContext
->
pRpc
;
SRpcInfo
*
pRpc
=
pContext
->
pRpc
;
SRpc
IpSet
*
pIpSet
=
&
pContext
->
i
pSet
;
SRpc
EpSet
*
pEpSet
=
&
pContext
->
e
pSet
;
pConn
=
rpcGetConnFromCache
(
pRpc
->
pCache
,
p
IpSet
->
fqdn
[
pIpSet
->
inUse
],
pIpSet
->
port
[
pI
pSet
->
inUse
],
pContext
->
connType
);
pConn
=
rpcGetConnFromCache
(
pRpc
->
pCache
,
p
EpSet
->
fqdn
[
pEpSet
->
inUse
],
pEpSet
->
port
[
pE
pSet
->
inUse
],
pContext
->
connType
);
if
(
pConn
==
NULL
||
pConn
->
user
[
0
]
==
0
)
{
if
(
pConn
==
NULL
||
pConn
->
user
[
0
]
==
0
)
{
pConn
=
rpcOpenConn
(
pRpc
,
p
IpSet
->
fqdn
[
pIpSet
->
inUse
],
pIpSet
->
port
[
pI
pSet
->
inUse
],
pContext
->
connType
);
pConn
=
rpcOpenConn
(
pRpc
,
p
EpSet
->
fqdn
[
pEpSet
->
inUse
],
pEpSet
->
port
[
pE
pSet
->
inUse
],
pContext
->
connType
);
}
}
if
(
pConn
)
{
if
(
pConn
)
{
...
@@ -1020,16 +1020,16 @@ static void rpcNotifyClient(SRpcReqContext *pContext, SRpcMsg *pMsg) {
...
@@ -1020,16 +1020,16 @@ static void rpcNotifyClient(SRpcReqContext *pContext, SRpcMsg *pMsg) {
pContext
->
pConn
=
NULL
;
pContext
->
pConn
=
NULL
;
if
(
pContext
->
pRsp
)
{
if
(
pContext
->
pRsp
)
{
// for synchronous API
// for synchronous API
memcpy
(
pContext
->
pSet
,
&
pContext
->
ipSet
,
sizeof
(
SRpcI
pSet
));
memcpy
(
pContext
->
pSet
,
&
pContext
->
epSet
,
sizeof
(
SRpcE
pSet
));
memcpy
(
pContext
->
pRsp
,
pMsg
,
sizeof
(
SRpcMsg
));
memcpy
(
pContext
->
pRsp
,
pMsg
,
sizeof
(
SRpcMsg
));
tsem_post
(
pContext
->
pSem
);
tsem_post
(
pContext
->
pSem
);
}
else
{
}
else
{
// for asynchronous API
// for asynchronous API
SRpc
IpSet
*
pI
pSet
=
NULL
;
SRpc
EpSet
*
pE
pSet
=
NULL
;
if
(
pContext
->
i
pSet
.
inUse
!=
pContext
->
oldInUse
||
pContext
->
redirect
)
if
(
pContext
->
e
pSet
.
inUse
!=
pContext
->
oldInUse
||
pContext
->
redirect
)
p
IpSet
=
&
pContext
->
i
pSet
;
p
EpSet
=
&
pContext
->
e
pSet
;
(
*
pRpc
->
cfp
)(
pMsg
,
p
I
pSet
);
(
*
pRpc
->
cfp
)(
pMsg
,
p
E
pSet
);
}
}
// free the request message
// free the request message
...
@@ -1070,9 +1070,9 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
...
@@ -1070,9 +1070,9 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
pConn
->
pContext
=
NULL
;
pConn
->
pContext
=
NULL
;
pConn
->
pReqMsg
=
NULL
;
pConn
->
pReqMsg
=
NULL
;
// for UDP, port may be changed by server, the port in
i
pSet shall be used for cache
// for UDP, port may be changed by server, the port in
e
pSet shall be used for cache
if
(
pHead
->
code
!=
TSDB_CODE_RPC_TOO_SLOW
)
{
if
(
pHead
->
code
!=
TSDB_CODE_RPC_TOO_SLOW
)
{
rpcAddConnIntoCache
(
pRpc
->
pCache
,
pConn
,
pConn
->
peerFqdn
,
pContext
->
ipSet
.
port
[
pContext
->
i
pSet
.
inUse
],
pConn
->
connType
);
rpcAddConnIntoCache
(
pRpc
->
pCache
,
pConn
,
pConn
->
peerFqdn
,
pContext
->
epSet
.
port
[
pContext
->
e
pSet
.
inUse
],
pConn
->
connType
);
}
else
{
}
else
{
rpcCloseConn
(
pConn
);
rpcCloseConn
(
pConn
);
}
}
...
@@ -1087,10 +1087,10 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
...
@@ -1087,10 +1087,10 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
if
(
pHead
->
code
==
TSDB_CODE_RPC_REDIRECT
)
{
if
(
pHead
->
code
==
TSDB_CODE_RPC_REDIRECT
)
{
pContext
->
numOfTry
=
0
;
pContext
->
numOfTry
=
0
;
memcpy
(
&
pContext
->
ipSet
,
pHead
->
content
,
sizeof
(
pContext
->
i
pSet
));
memcpy
(
&
pContext
->
epSet
,
pHead
->
content
,
sizeof
(
pContext
->
e
pSet
));
tDebug
(
"%s, redirect is received, numOf
Ips:%d"
,
pConn
->
info
,
pContext
->
ipSet
.
numOfI
ps
);
tDebug
(
"%s, redirect is received, numOf
Eps:%d"
,
pConn
->
info
,
pContext
->
epSet
.
numOfE
ps
);
for
(
int
i
=
0
;
i
<
pContext
->
ipSet
.
numOfI
ps
;
++
i
)
for
(
int
i
=
0
;
i
<
pContext
->
epSet
.
numOfE
ps
;
++
i
)
pContext
->
ipSet
.
port
[
i
]
=
htons
(
pContext
->
i
pSet
.
port
[
i
]);
pContext
->
epSet
.
port
[
i
]
=
htons
(
pContext
->
e
pSet
.
port
[
i
]);
rpcSendReqToServer
(
pRpc
,
pContext
);
rpcSendReqToServer
(
pRpc
,
pContext
);
rpcFreeCont
(
rpcMsg
.
pCont
);
rpcFreeCont
(
rpcMsg
.
pCont
);
}
else
if
(
pHead
->
code
==
TSDB_CODE_RPC_NOT_READY
)
{
}
else
if
(
pHead
->
code
==
TSDB_CODE_RPC_NOT_READY
)
{
...
@@ -1269,7 +1269,7 @@ static void rpcProcessConnError(void *param, void *id) {
...
@@ -1269,7 +1269,7 @@ static void rpcProcessConnError(void *param, void *id) {
tDebug
(
"%s %p, connection error happens"
,
pRpc
->
label
,
pContext
->
ahandle
);
tDebug
(
"%s %p, connection error happens"
,
pRpc
->
label
,
pContext
->
ahandle
);
if
(
pContext
->
numOfTry
>=
pContext
->
ipSet
.
numOfI
ps
)
{
if
(
pContext
->
numOfTry
>=
pContext
->
epSet
.
numOfE
ps
)
{
rpcMsg
.
msgType
=
pContext
->
msgType
+
1
;
rpcMsg
.
msgType
=
pContext
->
msgType
+
1
;
rpcMsg
.
ahandle
=
pContext
->
ahandle
;
rpcMsg
.
ahandle
=
pContext
->
ahandle
;
rpcMsg
.
code
=
pContext
->
code
;
rpcMsg
.
code
=
pContext
->
code
;
...
@@ -1279,8 +1279,8 @@ static void rpcProcessConnError(void *param, void *id) {
...
@@ -1279,8 +1279,8 @@ static void rpcProcessConnError(void *param, void *id) {
rpcNotifyClient
(
pContext
,
&
rpcMsg
);
rpcNotifyClient
(
pContext
,
&
rpcMsg
);
}
else
{
}
else
{
// move to next IP
// move to next IP
pContext
->
i
pSet
.
inUse
++
;
pContext
->
e
pSet
.
inUse
++
;
pContext
->
ipSet
.
inUse
=
pContext
->
ipSet
.
inUse
%
pContext
->
ipSet
.
numOfI
ps
;
pContext
->
epSet
.
inUse
=
pContext
->
epSet
.
inUse
%
pContext
->
epSet
.
numOfE
ps
;
rpcSendReqToServer
(
pRpc
,
pContext
);
rpcSendReqToServer
(
pRpc
,
pContext
);
}
}
}
}
...
...
src/rpc/src/rpcTcp.c
浏览文件 @
599df650
...
@@ -374,7 +374,7 @@ int taosSendTcpData(uint32_t ip, uint16_t port, void *data, int len, void *chand
...
@@ -374,7 +374,7 @@ int taosSendTcpData(uint32_t ip, uint16_t port, void *data, int len, void *chand
if
(
chandle
==
NULL
)
return
-
1
;
if
(
chandle
==
NULL
)
return
-
1
;
return
(
int
)
send
(
pFdObj
->
fd
,
data
,
(
size_t
)
len
,
0
);
return
taosWriteMsg
(
pFdObj
->
fd
,
data
,
len
);
}
}
static
void
taosReportBrokenLink
(
SFdObj
*
pFdObj
)
{
static
void
taosReportBrokenLink
(
SFdObj
*
pFdObj
)
{
...
...
src/rpc/test/rclient.c
浏览文件 @
599df650
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
typedef
struct
{
typedef
struct
{
int
index
;
int
index
;
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
int
num
;
int
num
;
int
numOfReqs
;
int
numOfReqs
;
int
msgSize
;
int
msgSize
;
...
@@ -32,11 +32,11 @@ typedef struct {
...
@@ -32,11 +32,11 @@ typedef struct {
void
*
pRpc
;
void
*
pRpc
;
}
SInfo
;
}
SInfo
;
static
void
processResponse
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
)
{
static
void
processResponse
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
)
{
SInfo
*
pInfo
=
(
SInfo
*
)
pMsg
->
ahandle
;
SInfo
*
pInfo
=
(
SInfo
*
)
pMsg
->
ahandle
;
tDebug
(
"thread:%d, response is received, type:%d contLen:%d code:0x%x"
,
pInfo
->
index
,
pMsg
->
msgType
,
pMsg
->
contLen
,
pMsg
->
code
);
tDebug
(
"thread:%d, response is received, type:%d contLen:%d code:0x%x"
,
pInfo
->
index
,
pMsg
->
msgType
,
pMsg
->
contLen
,
pMsg
->
code
);
if
(
p
IpSet
)
pInfo
->
ipSet
=
*
pI
pSet
;
if
(
p
EpSet
)
pInfo
->
epSet
=
*
pE
pSet
;
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
sem_post
(
&
pInfo
->
rspSem
);
sem_post
(
&
pInfo
->
rspSem
);
...
@@ -57,7 +57,7 @@ static void *sendRequest(void *param) {
...
@@ -57,7 +57,7 @@ static void *sendRequest(void *param) {
rpcMsg
.
ahandle
=
pInfo
;
rpcMsg
.
ahandle
=
pInfo
;
rpcMsg
.
msgType
=
1
;
rpcMsg
.
msgType
=
1
;
tDebug
(
"thread:%d, send request, contLen:%d num:%d"
,
pInfo
->
index
,
pInfo
->
msgSize
,
pInfo
->
num
);
tDebug
(
"thread:%d, send request, contLen:%d num:%d"
,
pInfo
->
index
,
pInfo
->
msgSize
,
pInfo
->
num
);
rpcSendRequest
(
pInfo
->
pRpc
,
&
pInfo
->
i
pSet
,
&
rpcMsg
);
rpcSendRequest
(
pInfo
->
pRpc
,
&
pInfo
->
e
pSet
,
&
rpcMsg
);
if
(
pInfo
->
num
%
20000
==
0
)
if
(
pInfo
->
num
%
20000
==
0
)
tInfo
(
"thread:%d, %d requests have been sent"
,
pInfo
->
index
,
pInfo
->
num
);
tInfo
(
"thread:%d, %d requests have been sent"
,
pInfo
->
index
,
pInfo
->
num
);
sem_wait
(
&
pInfo
->
rspSem
);
sem_wait
(
&
pInfo
->
rspSem
);
...
@@ -71,7 +71,7 @@ static void *sendRequest(void *param) {
...
@@ -71,7 +71,7 @@ static void *sendRequest(void *param) {
int
main
(
int
argc
,
char
*
argv
[])
{
int
main
(
int
argc
,
char
*
argv
[])
{
SRpcInit
rpcInit
;
SRpcInit
rpcInit
;
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
int
msgSize
=
128
;
int
msgSize
=
128
;
int
numOfReqs
=
0
;
int
numOfReqs
=
0
;
int
appThreads
=
1
;
int
appThreads
=
1
;
...
@@ -82,12 +82,12 @@ int main(int argc, char *argv[]) {
...
@@ -82,12 +82,12 @@ int main(int argc, char *argv[]) {
pthread_attr_t
thattr
;
pthread_attr_t
thattr
;
// server info
// server info
ipSet
.
numOfI
ps
=
1
;
epSet
.
numOfE
ps
=
1
;
i
pSet
.
inUse
=
0
;
e
pSet
.
inUse
=
0
;
i
pSet
.
port
[
0
]
=
7000
;
e
pSet
.
port
[
0
]
=
7000
;
i
pSet
.
port
[
1
]
=
7000
;
e
pSet
.
port
[
1
]
=
7000
;
strcpy
(
i
pSet
.
fqdn
[
0
],
serverIp
);
strcpy
(
e
pSet
.
fqdn
[
0
],
serverIp
);
strcpy
(
i
pSet
.
fqdn
[
1
],
"192.168.0.1"
);
strcpy
(
e
pSet
.
fqdn
[
1
],
"192.168.0.1"
);
// client info
// client info
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
...
@@ -105,9 +105,9 @@ int main(int argc, char *argv[]) {
...
@@ -105,9 +105,9 @@ int main(int argc, char *argv[]) {
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
argv
[
i
],
"-p"
)
==
0
&&
i
<
argc
-
1
)
{
if
(
strcmp
(
argv
[
i
],
"-p"
)
==
0
&&
i
<
argc
-
1
)
{
i
pSet
.
port
[
0
]
=
atoi
(
argv
[
++
i
]);
e
pSet
.
port
[
0
]
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-i"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-i"
)
==
0
&&
i
<
argc
-
1
)
{
tstrncpy
(
ipSet
.
fqdn
[
0
],
argv
[
++
i
],
sizeof
(
i
pSet
.
fqdn
[
0
]));
tstrncpy
(
epSet
.
fqdn
[
0
],
argv
[
++
i
],
sizeof
(
e
pSet
.
fqdn
[
0
]));
}
else
if
(
strcmp
(
argv
[
i
],
"-t"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-t"
)
==
0
&&
i
<
argc
-
1
)
{
rpcInit
.
numOfThreads
=
atoi
(
argv
[
++
i
]);
rpcInit
.
numOfThreads
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-m"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-m"
)
==
0
&&
i
<
argc
-
1
)
{
...
@@ -131,7 +131,7 @@ int main(int argc, char *argv[]) {
...
@@ -131,7 +131,7 @@ int main(int argc, char *argv[]) {
}
else
{
}
else
{
printf
(
"
\n
usage: %s [options]
\n
"
,
argv
[
0
]);
printf
(
"
\n
usage: %s [options]
\n
"
,
argv
[
0
]);
printf
(
" [-i ip]: first server IP address, default is:%s
\n
"
,
serverIp
);
printf
(
" [-i ip]: first server IP address, default is:%s
\n
"
,
serverIp
);
printf
(
" [-p port]: server port number, default is:%d
\n
"
,
i
pSet
.
port
[
0
]);
printf
(
" [-p port]: server port number, default is:%d
\n
"
,
e
pSet
.
port
[
0
]);
printf
(
" [-t threads]: number of rpc threads, default is:%d
\n
"
,
rpcInit
.
numOfThreads
);
printf
(
" [-t threads]: number of rpc threads, default is:%d
\n
"
,
rpcInit
.
numOfThreads
);
printf
(
" [-s sessions]: number of rpc sessions, default is:%d
\n
"
,
rpcInit
.
sessions
);
printf
(
" [-s sessions]: number of rpc sessions, default is:%d
\n
"
,
rpcInit
.
sessions
);
printf
(
" [-m msgSize]: message body size, default is:%d
\n
"
,
msgSize
);
printf
(
" [-m msgSize]: message body size, default is:%d
\n
"
,
msgSize
);
...
@@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
...
@@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
for
(
int
i
=
0
;
i
<
appThreads
;
++
i
)
{
for
(
int
i
=
0
;
i
<
appThreads
;
++
i
)
{
pInfo
->
index
=
i
;
pInfo
->
index
=
i
;
pInfo
->
ipSet
=
i
pSet
;
pInfo
->
epSet
=
e
pSet
;
pInfo
->
numOfReqs
=
numOfReqs
;
pInfo
->
numOfReqs
=
numOfReqs
;
pInfo
->
msgSize
=
msgSize
;
pInfo
->
msgSize
=
msgSize
;
sem_init
(
&
pInfo
->
rspSem
,
0
,
0
);
sem_init
(
&
pInfo
->
rspSem
,
0
,
0
);
...
...
src/rpc/test/rsclient.c
浏览文件 @
599df650
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
typedef
struct
{
typedef
struct
{
int
index
;
int
index
;
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
int
num
;
int
num
;
int
numOfReqs
;
int
numOfReqs
;
int
msgSize
;
int
msgSize
;
...
@@ -51,7 +51,7 @@ static void *sendRequest(void *param) {
...
@@ -51,7 +51,7 @@ static void *sendRequest(void *param) {
rpcMsg
.
msgType
=
1
;
rpcMsg
.
msgType
=
1
;
tDebug
(
"thread:%d, send request, contLen:%d num:%d"
,
pInfo
->
index
,
pInfo
->
msgSize
,
pInfo
->
num
);
tDebug
(
"thread:%d, send request, contLen:%d num:%d"
,
pInfo
->
index
,
pInfo
->
msgSize
,
pInfo
->
num
);
rpcSendRecv
(
pInfo
->
pRpc
,
&
pInfo
->
i
pSet
,
&
rpcMsg
,
&
rspMsg
);
rpcSendRecv
(
pInfo
->
pRpc
,
&
pInfo
->
e
pSet
,
&
rpcMsg
,
&
rspMsg
);
// handle response
// handle response
if
(
rspMsg
.
code
!=
0
)
terror
++
;
if
(
rspMsg
.
code
!=
0
)
terror
++
;
...
@@ -72,7 +72,7 @@ static void *sendRequest(void *param) {
...
@@ -72,7 +72,7 @@ static void *sendRequest(void *param) {
int
main
(
int
argc
,
char
*
argv
[])
{
int
main
(
int
argc
,
char
*
argv
[])
{
SRpcInit
rpcInit
;
SRpcInit
rpcInit
;
SRpc
IpSet
i
pSet
;
SRpc
EpSet
e
pSet
;
int
msgSize
=
128
;
int
msgSize
=
128
;
int
numOfReqs
=
0
;
int
numOfReqs
=
0
;
int
appThreads
=
1
;
int
appThreads
=
1
;
...
@@ -83,12 +83,12 @@ int main(int argc, char *argv[]) {
...
@@ -83,12 +83,12 @@ int main(int argc, char *argv[]) {
pthread_attr_t
thattr
;
pthread_attr_t
thattr
;
// server info
// server info
ipSet
.
numOfI
ps
=
1
;
epSet
.
numOfE
ps
=
1
;
i
pSet
.
inUse
=
0
;
e
pSet
.
inUse
=
0
;
i
pSet
.
port
[
0
]
=
7000
;
e
pSet
.
port
[
0
]
=
7000
;
i
pSet
.
port
[
1
]
=
7000
;
e
pSet
.
port
[
1
]
=
7000
;
strcpy
(
i
pSet
.
fqdn
[
0
],
serverIp
);
strcpy
(
e
pSet
.
fqdn
[
0
],
serverIp
);
strcpy
(
i
pSet
.
fqdn
[
1
],
"192.168.0.1"
);
strcpy
(
e
pSet
.
fqdn
[
1
],
"192.168.0.1"
);
// client info
// client info
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
...
@@ -106,9 +106,9 @@ int main(int argc, char *argv[]) {
...
@@ -106,9 +106,9 @@ int main(int argc, char *argv[]) {
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
argv
[
i
],
"-p"
)
==
0
&&
i
<
argc
-
1
)
{
if
(
strcmp
(
argv
[
i
],
"-p"
)
==
0
&&
i
<
argc
-
1
)
{
i
pSet
.
port
[
0
]
=
atoi
(
argv
[
++
i
]);
e
pSet
.
port
[
0
]
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-i"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-i"
)
==
0
&&
i
<
argc
-
1
)
{
tstrncpy
(
ipSet
.
fqdn
[
0
],
argv
[
++
i
],
sizeof
(
i
pSet
.
fqdn
[
0
]));
tstrncpy
(
epSet
.
fqdn
[
0
],
argv
[
++
i
],
sizeof
(
e
pSet
.
fqdn
[
0
]));
}
else
if
(
strcmp
(
argv
[
i
],
"-t"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-t"
)
==
0
&&
i
<
argc
-
1
)
{
rpcInit
.
numOfThreads
=
atoi
(
argv
[
++
i
]);
rpcInit
.
numOfThreads
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-m"
)
==
0
&&
i
<
argc
-
1
)
{
}
else
if
(
strcmp
(
argv
[
i
],
"-m"
)
==
0
&&
i
<
argc
-
1
)
{
...
@@ -132,7 +132,7 @@ int main(int argc, char *argv[]) {
...
@@ -132,7 +132,7 @@ int main(int argc, char *argv[]) {
}
else
{
}
else
{
printf
(
"
\n
usage: %s [options]
\n
"
,
argv
[
0
]);
printf
(
"
\n
usage: %s [options]
\n
"
,
argv
[
0
]);
printf
(
" [-i ip]: first server IP address, default is:%s
\n
"
,
serverIp
);
printf
(
" [-i ip]: first server IP address, default is:%s
\n
"
,
serverIp
);
printf
(
" [-p port]: server port number, default is:%d
\n
"
,
i
pSet
.
port
[
0
]);
printf
(
" [-p port]: server port number, default is:%d
\n
"
,
e
pSet
.
port
[
0
]);
printf
(
" [-t threads]: number of rpc threads, default is:%d
\n
"
,
rpcInit
.
numOfThreads
);
printf
(
" [-t threads]: number of rpc threads, default is:%d
\n
"
,
rpcInit
.
numOfThreads
);
printf
(
" [-s sessions]: number of rpc sessions, default is:%d
\n
"
,
rpcInit
.
sessions
);
printf
(
" [-s sessions]: number of rpc sessions, default is:%d
\n
"
,
rpcInit
.
sessions
);
printf
(
" [-m msgSize]: message body size, default is:%d
\n
"
,
msgSize
);
printf
(
" [-m msgSize]: message body size, default is:%d
\n
"
,
msgSize
);
...
@@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
...
@@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
for
(
int
i
=
0
;
i
<
appThreads
;
++
i
)
{
for
(
int
i
=
0
;
i
<
appThreads
;
++
i
)
{
pInfo
->
index
=
i
;
pInfo
->
index
=
i
;
pInfo
->
ipSet
=
i
pSet
;
pInfo
->
epSet
=
e
pSet
;
pInfo
->
numOfReqs
=
numOfReqs
;
pInfo
->
numOfReqs
=
numOfReqs
;
pInfo
->
msgSize
=
msgSize
;
pInfo
->
msgSize
=
msgSize
;
sem_init
(
&
pInfo
->
rspSem
,
0
,
0
);
sem_init
(
&
pInfo
->
rspSem
,
0
,
0
);
...
...
src/rpc/test/rserver.c
浏览文件 @
599df650
...
@@ -103,7 +103,7 @@ int retrieveAuthInfo(char *meterId, char *spi, char *encrypt, char *secret, char
...
@@ -103,7 +103,7 @@ int retrieveAuthInfo(char *meterId, char *spi, char *encrypt, char *secret, char
return
ret
;
return
ret
;
}
}
void
processRequestMsg
(
SRpcMsg
*
pMsg
,
SRpc
IpSet
*
pI
pSet
)
{
void
processRequestMsg
(
SRpcMsg
*
pMsg
,
SRpc
EpSet
*
pE
pSet
)
{
SRpcMsg
*
pTemp
;
SRpcMsg
*
pTemp
;
pTemp
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
));
pTemp
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
));
...
...
src/tsdb/src/tsdbMain.c
浏览文件 @
599df650
...
@@ -148,7 +148,7 @@ void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit) {
...
@@ -148,7 +148,7 @@ void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit) {
STsdbRepo
*
pRepo
=
(
STsdbRepo
*
)
repo
;
STsdbRepo
*
pRepo
=
(
STsdbRepo
*
)
repo
;
int
vgId
=
REPO_ID
(
pRepo
);
int
vgId
=
REPO_ID
(
pRepo
);
tsdbStopStream
(
r
epo
);
tsdbStopStream
(
pR
epo
);
if
(
toCommit
)
{
if
(
toCommit
)
{
tsdbAsyncCommit
(
pRepo
);
tsdbAsyncCommit
(
pRepo
);
...
@@ -1126,6 +1126,7 @@ static void tsdbStartStream(STsdbRepo *pRepo) {
...
@@ -1126,6 +1126,7 @@ static void tsdbStartStream(STsdbRepo *pRepo) {
}
}
}
}
static
void
tsdbStopStream
(
STsdbRepo
*
pRepo
)
{
static
void
tsdbStopStream
(
STsdbRepo
*
pRepo
)
{
STsdbMeta
*
pMeta
=
pRepo
->
tsdbMeta
;
STsdbMeta
*
pMeta
=
pRepo
->
tsdbMeta
;
...
...
src/tsdb/src/tsdbMemTable.c
浏览文件 @
599df650
...
@@ -172,7 +172,7 @@ void *tsdbAllocBytes(STsdbRepo *pRepo, int bytes) {
...
@@ -172,7 +172,7 @@ void *tsdbAllocBytes(STsdbRepo *pRepo, int bytes) {
STsdbBufBlock
*
pBufBlock
=
tsdbGetCurrBufBlock
(
pRepo
);
STsdbBufBlock
*
pBufBlock
=
tsdbGetCurrBufBlock
(
pRepo
);
if
(
pBufBlock
!=
NULL
&&
pBufBlock
->
remain
<
bytes
)
{
if
(
pBufBlock
!=
NULL
&&
pBufBlock
->
remain
<
bytes
)
{
if
(
listNEles
(
pRepo
->
mem
->
bufBlockList
)
>=
pCfg
->
totalBlocks
/
2
)
{
// need to commit mem
if
(
listNEles
(
pRepo
->
mem
->
bufBlockList
)
>=
pCfg
->
totalBlocks
/
3
)
{
// need to commit mem
if
(
tsdbAsyncCommit
(
pRepo
)
<
0
)
return
NULL
;
if
(
tsdbAsyncCommit
(
pRepo
)
<
0
)
return
NULL
;
}
else
{
}
else
{
if
(
tsdbLockRepo
(
pRepo
)
<
0
)
return
NULL
;
if
(
tsdbLockRepo
(
pRepo
)
<
0
)
return
NULL
;
...
@@ -204,6 +204,9 @@ void *tsdbAllocBytes(STsdbRepo *pRepo, int bytes) {
...
@@ -204,6 +204,9 @@ void *tsdbAllocBytes(STsdbRepo *pRepo, int bytes) {
pBufBlock
->
offset
+=
bytes
;
pBufBlock
->
offset
+=
bytes
;
pBufBlock
->
remain
-=
bytes
;
pBufBlock
->
remain
-=
bytes
;
tsdbTrace
(
"vgId:%d allocate %d bytes from buffer block, nBlocks %d offset %d remain %d"
,
REPO_ID
(
pRepo
),
bytes
,
listNEles
(
pRepo
->
mem
->
bufBlockList
),
pBufBlock
->
offset
,
pBufBlock
->
remain
);
return
ptr
;
return
ptr
;
}
}
...
@@ -324,6 +327,8 @@ static void tsdbFreeBytes(STsdbRepo *pRepo, void *ptr, int bytes) {
...
@@ -324,6 +327,8 @@ static void tsdbFreeBytes(STsdbRepo *pRepo, void *ptr, int bytes) {
pBufBlock
->
offset
-=
bytes
;
pBufBlock
->
offset
-=
bytes
;
pBufBlock
->
remain
+=
bytes
;
pBufBlock
->
remain
+=
bytes
;
ASSERT
(
ptr
==
POINTER_SHIFT
(
pBufBlock
->
data
,
pBufBlock
->
offset
));
ASSERT
(
ptr
==
POINTER_SHIFT
(
pBufBlock
->
data
,
pBufBlock
->
offset
));
tsdbTrace
(
"vgId:%d return %d bytes to buffer block, nBlocks %d offset %d remain %d"
,
REPO_ID
(
pRepo
),
bytes
,
listNEles
(
pRepo
->
mem
->
bufBlockList
),
pBufBlock
->
offset
,
pBufBlock
->
remain
);
}
}
static
SMemTable
*
tsdbNewMemTable
(
STsdbCfg
*
pCfg
)
{
static
SMemTable
*
tsdbNewMemTable
(
STsdbCfg
*
pCfg
)
{
...
...
src/tsdb/src/tsdbMeta.c
浏览文件 @
599df650
...
@@ -592,7 +592,7 @@ void tsdbUpdateTableSchema(STsdbRepo *pRepo, STable *pTable, STSchema *pSchema,
...
@@ -592,7 +592,7 @@ void tsdbUpdateTableSchema(STsdbRepo *pRepo, STable *pTable, STSchema *pSchema,
int
tlen
=
tsdbGetTableEncodeSize
(
TSDB_UPDATE_META
,
pCTable
);
int
tlen
=
tsdbGetTableEncodeSize
(
TSDB_UPDATE_META
,
pCTable
);
void
*
buf
=
tsdbAllocBytes
(
pRepo
,
tlen
);
void
*
buf
=
tsdbAllocBytes
(
pRepo
,
tlen
);
ASSERT
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
tsdbInsertTableAct
(
pRepo
,
TSDB_UPDATE_META
,
buf
,
pTable
);
tsdbInsertTableAct
(
pRepo
,
TSDB_UPDATE_META
,
buf
,
p
C
Table
);
}
}
}
}
...
...
src/tsdb/src/tsdbRWHelper.c
浏览文件 @
599df650
...
@@ -589,20 +589,25 @@ void tsdbGetDataStatis(SRWHelper *pHelper, SDataStatis *pStatis, int numOfCols)
...
@@ -589,20 +589,25 @@ void tsdbGetDataStatis(SRWHelper *pHelper, SDataStatis *pStatis, int numOfCols)
int
tsdbLoadBlockDataCols
(
SRWHelper
*
pHelper
,
SCompBlock
*
pCompBlock
,
SCompInfo
*
pCompInfo
,
int16_t
*
colIds
,
int
numOfColIds
)
{
int
tsdbLoadBlockDataCols
(
SRWHelper
*
pHelper
,
SCompBlock
*
pCompBlock
,
SCompInfo
*
pCompInfo
,
int16_t
*
colIds
,
int
numOfColIds
)
{
ASSERT
(
pCompBlock
->
numOfSubBlocks
>=
1
);
// Must be super block
ASSERT
(
pCompBlock
->
numOfSubBlocks
>=
1
);
// Must be super block
SCompBlock
*
pTCompBlock
=
pCompBlock
;
int
numOfSubBlocks
=
pCompBlock
->
numOfSubBlocks
;
int
numOfSubBlocks
=
pCompBlock
->
numOfSubBlocks
;
if
(
numOfSubBlocks
>
1
)
if
(
numOfSubBlocks
>
1
)
pCompBlock
=
(
SCompBlock
*
)
POINTER_SHIFT
((
pCompInfo
==
NULL
)
?
pHelper
->
pCompInfo
:
pCompInfo
,
pCompBlock
->
offset
);
p
T
CompBlock
=
(
SCompBlock
*
)
POINTER_SHIFT
((
pCompInfo
==
NULL
)
?
pHelper
->
pCompInfo
:
pCompInfo
,
pCompBlock
->
offset
);
tdResetDataCols
(
pHelper
->
pDataCols
[
0
]);
tdResetDataCols
(
pHelper
->
pDataCols
[
0
]);
if
(
tsdbLoadBlockDataColsImpl
(
pHelper
,
pCompBlock
,
pHelper
->
pDataCols
[
0
],
colIds
,
numOfColIds
)
<
0
)
goto
_err
;
if
(
tsdbLoadBlockDataColsImpl
(
pHelper
,
p
T
CompBlock
,
pHelper
->
pDataCols
[
0
],
colIds
,
numOfColIds
)
<
0
)
goto
_err
;
for
(
int
i
=
1
;
i
<
numOfSubBlocks
;
i
++
)
{
for
(
int
i
=
1
;
i
<
numOfSubBlocks
;
i
++
)
{
tdResetDataCols
(
pHelper
->
pDataCols
[
1
]);
tdResetDataCols
(
pHelper
->
pDataCols
[
1
]);
pCompBlock
++
;
p
T
CompBlock
++
;
if
(
tsdbLoadBlockDataColsImpl
(
pHelper
,
pCompBlock
,
pHelper
->
pDataCols
[
1
],
colIds
,
numOfColIds
)
<
0
)
goto
_err
;
if
(
tsdbLoadBlockDataColsImpl
(
pHelper
,
p
T
CompBlock
,
pHelper
->
pDataCols
[
1
],
colIds
,
numOfColIds
)
<
0
)
goto
_err
;
if
(
tdMergeDataCols
(
pHelper
->
pDataCols
[
0
],
pHelper
->
pDataCols
[
1
],
pHelper
->
pDataCols
[
1
]
->
numOfRows
)
<
0
)
goto
_err
;
if
(
tdMergeDataCols
(
pHelper
->
pDataCols
[
0
],
pHelper
->
pDataCols
[
1
],
pHelper
->
pDataCols
[
1
]
->
numOfRows
)
<
0
)
goto
_err
;
}
}
ASSERT
(
pHelper
->
pDataCols
[
0
]
->
numOfRows
==
pCompBlock
->
numOfRows
&&
dataColsKeyFirst
(
pHelper
->
pDataCols
[
0
])
==
pCompBlock
->
keyFirst
&&
dataColsKeyLast
(
pHelper
->
pDataCols
[
0
])
==
pCompBlock
->
keyLast
);
return
0
;
return
0
;
_err:
_err:
...
@@ -610,19 +615,25 @@ _err:
...
@@ -610,19 +615,25 @@ _err:
}
}
int
tsdbLoadBlockData
(
SRWHelper
*
pHelper
,
SCompBlock
*
pCompBlock
,
SCompInfo
*
pCompInfo
)
{
int
tsdbLoadBlockData
(
SRWHelper
*
pHelper
,
SCompBlock
*
pCompBlock
,
SCompInfo
*
pCompInfo
)
{
SCompBlock
*
pTCompBlock
=
pCompBlock
;
int
numOfSubBlock
=
pCompBlock
->
numOfSubBlocks
;
int
numOfSubBlock
=
pCompBlock
->
numOfSubBlocks
;
if
(
numOfSubBlock
>
1
)
if
(
numOfSubBlock
>
1
)
pCompBlock
=
(
SCompBlock
*
)
POINTER_SHIFT
((
pCompInfo
==
NULL
)
?
pHelper
->
pCompInfo
:
pCompInfo
,
pCompBlock
->
offset
);
p
T
CompBlock
=
(
SCompBlock
*
)
POINTER_SHIFT
((
pCompInfo
==
NULL
)
?
pHelper
->
pCompInfo
:
pCompInfo
,
pCompBlock
->
offset
);
tdResetDataCols
(
pHelper
->
pDataCols
[
0
]);
tdResetDataCols
(
pHelper
->
pDataCols
[
0
]);
if
(
tsdbLoadBlockDataImpl
(
pHelper
,
pCompBlock
,
pHelper
->
pDataCols
[
0
])
<
0
)
goto
_err
;
if
(
tsdbLoadBlockDataImpl
(
pHelper
,
p
T
CompBlock
,
pHelper
->
pDataCols
[
0
])
<
0
)
goto
_err
;
for
(
int
i
=
1
;
i
<
numOfSubBlock
;
i
++
)
{
for
(
int
i
=
1
;
i
<
numOfSubBlock
;
i
++
)
{
tdResetDataCols
(
pHelper
->
pDataCols
[
1
]);
tdResetDataCols
(
pHelper
->
pDataCols
[
1
]);
pCompBlock
++
;
p
T
CompBlock
++
;
if
(
tsdbLoadBlockDataImpl
(
pHelper
,
pCompBlock
,
pHelper
->
pDataCols
[
1
])
<
0
)
goto
_err
;
if
(
tsdbLoadBlockDataImpl
(
pHelper
,
p
T
CompBlock
,
pHelper
->
pDataCols
[
1
])
<
0
)
goto
_err
;
if
(
tdMergeDataCols
(
pHelper
->
pDataCols
[
0
],
pHelper
->
pDataCols
[
1
],
pHelper
->
pDataCols
[
1
]
->
numOfRows
)
<
0
)
goto
_err
;
if
(
tdMergeDataCols
(
pHelper
->
pDataCols
[
0
],
pHelper
->
pDataCols
[
1
],
pHelper
->
pDataCols
[
1
]
->
numOfRows
)
<
0
)
goto
_err
;
}
}
ASSERT
(
pHelper
->
pDataCols
[
0
]
->
numOfRows
==
pCompBlock
->
numOfRows
&&
dataColsKeyFirst
(
pHelper
->
pDataCols
[
0
])
==
pCompBlock
->
keyFirst
&&
dataColsKeyLast
(
pHelper
->
pDataCols
[
0
])
==
pCompBlock
->
keyLast
);
return
0
;
return
0
;
_err:
_err:
...
@@ -1227,7 +1238,6 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa
...
@@ -1227,7 +1238,6 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
goto
_err
;
}
}
ASSERT
(
pCompData
->
numOfCols
==
pCompBlock
->
numOfCols
);
int32_t
tsize
=
TSDB_GET_COMPCOL_LEN
(
pCompBlock
->
numOfCols
);
int32_t
tsize
=
TSDB_GET_COMPCOL_LEN
(
pCompBlock
->
numOfCols
);
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
pCompData
,
tsize
))
{
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
pCompData
,
tsize
))
{
...
@@ -1236,6 +1246,7 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa
...
@@ -1236,6 +1246,7 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
goto
_err
;
goto
_err
;
}
}
ASSERT
(
pCompData
->
numOfCols
==
pCompBlock
->
numOfCols
);
pDataCols
->
numOfRows
=
pCompBlock
->
numOfRows
;
pDataCols
->
numOfRows
=
pCompBlock
->
numOfRows
;
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
599df650
...
@@ -90,6 +90,12 @@ typedef struct SBlockOrderSupporter {
...
@@ -90,6 +90,12 @@ typedef struct SBlockOrderSupporter {
int32_t
*
numOfBlocksPerTable
;
int32_t
*
numOfBlocksPerTable
;
}
SBlockOrderSupporter
;
}
SBlockOrderSupporter
;
typedef
struct
SIOCostSummary
{
int64_t
blockLoadTime
;
int64_t
statisInfoLoadTime
;
int64_t
checkForNextTime
;
}
SIOCostSummary
;
typedef
struct
STsdbQueryHandle
{
typedef
struct
STsdbQueryHandle
{
STsdbRepo
*
pTsdb
;
STsdbRepo
*
pTsdb
;
SQueryFilePos
cur
;
// current position
SQueryFilePos
cur
;
// current position
...
@@ -101,7 +107,7 @@ typedef struct STsdbQueryHandle {
...
@@ -101,7 +107,7 @@ typedef struct STsdbQueryHandle {
bool
locateStart
;
bool
locateStart
;
int32_t
outputCapacity
;
int32_t
outputCapacity
;
int32_t
realNumOfRows
;
int32_t
realNumOfRows
;
SArray
*
pTableCheckInfo
;
//SArray<STableCheckInfo>
SArray
*
pTableCheckInfo
;
//
SArray<STableCheckInfo>
int32_t
activeIndex
;
int32_t
activeIndex
;
bool
checkFiles
;
// check file stage
bool
checkFiles
;
// check file stage
void
*
qinfo
;
// query info handle, for debug purpose
void
*
qinfo
;
// query info handle, for debug purpose
...
@@ -116,6 +122,8 @@ typedef struct STsdbQueryHandle {
...
@@ -116,6 +122,8 @@ typedef struct STsdbQueryHandle {
SArray
*
defaultLoadColumn
;
// default load column
SArray
*
defaultLoadColumn
;
// default load column
SDataBlockLoadInfo
dataBlockLoadInfo
;
/* record current block load information */
SDataBlockLoadInfo
dataBlockLoadInfo
;
/* record current block load information */
SLoadCompBlockInfo
compBlockLoadInfo
;
/* record current compblock information in SQuery */
SLoadCompBlockInfo
compBlockLoadInfo
;
/* record current compblock information in SQuery */
SIOCostSummary
cost
;
}
STsdbQueryHandle
;
}
STsdbQueryHandle
;
static
void
changeQueryHandleForLastrowQuery
(
TsdbQueryHandleT
pqHandle
);
static
void
changeQueryHandleForLastrowQuery
(
TsdbQueryHandleT
pqHandle
);
...
@@ -183,6 +191,7 @@ TsdbQueryHandleT* tsdbQueryTables(TSDB_REPO_T* tsdb, STsdbQueryCond* pCond, STab
...
@@ -183,6 +191,7 @@ TsdbQueryHandleT* tsdbQueryTables(TSDB_REPO_T* tsdb, STsdbQueryCond* pCond, STab
free
(
pQueryHandle
);
free
(
pQueryHandle
);
return
NULL
;
return
NULL
;
}
}
tsdbTakeMemSnapshot
(
pQueryHandle
->
pTsdb
,
&
pQueryHandle
->
mem
,
&
pQueryHandle
->
imem
);
tsdbTakeMemSnapshot
(
pQueryHandle
->
pTsdb
,
&
pQueryHandle
->
mem
,
&
pQueryHandle
->
imem
);
size_t
sizeOfGroup
=
taosArrayGetSize
(
groupList
->
pGroupList
);
size_t
sizeOfGroup
=
taosArrayGetSize
(
groupList
->
pGroupList
);
...
@@ -340,6 +349,11 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
...
@@ -340,6 +349,11 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
return
true
;
return
true
;
}
}
static
void
destroyTableMemIterator
(
STableCheckInfo
*
pCheckInfo
)
{
tSkipListDestroyIter
(
pCheckInfo
->
iter
);
tSkipListDestroyIter
(
pCheckInfo
->
iiter
);
}
SDataRow
getSDataRowInTableMem
(
STableCheckInfo
*
pCheckInfo
)
{
SDataRow
getSDataRowInTableMem
(
STableCheckInfo
*
pCheckInfo
)
{
SDataRow
rmem
=
NULL
,
rimem
=
NULL
;
SDataRow
rmem
=
NULL
,
rimem
=
NULL
;
if
(
pCheckInfo
->
iter
)
{
if
(
pCheckInfo
->
iter
)
{
...
@@ -384,7 +398,7 @@ SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo) {
...
@@ -384,7 +398,7 @@ SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo) {
return
NULL
;
return
NULL
;
}
}
bool
moveToNextRow
(
STableCheckInfo
*
pCheckInfo
)
{
static
bool
moveToNextRow
(
STableCheckInfo
*
pCheckInfo
)
{
bool
hasNext
=
false
;
bool
hasNext
=
false
;
if
(
pCheckInfo
->
chosen
==
0
)
{
if
(
pCheckInfo
->
chosen
==
0
)
{
if
(
pCheckInfo
->
iter
!=
NULL
)
{
if
(
pCheckInfo
->
iter
!=
NULL
)
{
...
@@ -507,7 +521,7 @@ static int32_t binarySearchForBlock(SCompBlock* pBlock, int32_t numOfBlocks, TSK
...
@@ -507,7 +521,7 @@ static int32_t binarySearchForBlock(SCompBlock* pBlock, int32_t numOfBlocks, TSK
return
midSlot
;
return
midSlot
;
}
}
static
int32_t
getFileCompInfo
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
*
numOfBlocks
,
int32_t
type
)
{
static
int32_t
getFileCompInfo
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
*
numOfBlocks
)
{
SFileGroup
*
fileGroup
=
pQueryHandle
->
pFileGroup
;
SFileGroup
*
fileGroup
=
pQueryHandle
->
pFileGroup
;
assert
(
fileGroup
->
files
[
TSDB_FILE_TYPE_HEAD
].
fname
>
0
);
assert
(
fileGroup
->
files
[
TSDB_FILE_TYPE_HEAD
].
fname
>
0
);
...
@@ -524,13 +538,15 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
...
@@ -524,13 +538,15 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
for
(
int32_t
i
=
0
;
i
<
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTables
;
++
i
)
{
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
pCheckInfo
->
numOfBlocks
=
0
;
SCompIdx
*
compIndex
=
&
pQueryHandle
->
rhelper
.
pCompIdx
[
pCheckInfo
->
tableId
.
tid
];
SCompIdx
*
compIndex
=
&
pQueryHandle
->
rhelper
.
pCompIdx
[
pCheckInfo
->
tableId
.
tid
];
if
(
compIndex
->
len
==
0
||
compIndex
->
numOfBlocks
==
0
||
compIndex
->
uid
!=
pCheckInfo
->
tableId
.
uid
)
{
// no data block in this file, try next file
// no data block in this file, try next file
pCheckInfo
->
numOfBlocks
=
0
;
if
(
compIndex
->
len
==
0
||
compIndex
->
numOfBlocks
==
0
||
compIndex
->
uid
!=
pCheckInfo
->
tableId
.
uid
)
{
continue
;
// no data blocks in the file belongs to pCheckInfo->pTable
continue
;
// no data blocks in the file belongs to pCheckInfo->pTable
}
else
{
}
if
(
pCheckInfo
->
compSize
<
compIndex
->
len
)
{
if
(
pCheckInfo
->
compSize
<
compIndex
->
len
)
{
assert
(
compIndex
->
len
>
0
);
assert
(
compIndex
->
len
>
0
);
...
@@ -546,8 +562,16 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
...
@@ -546,8 +562,16 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
tsdbLoadCompInfo
(
&
(
pQueryHandle
->
rhelper
),
(
void
*
)(
pCheckInfo
->
pCompInfo
));
tsdbLoadCompInfo
(
&
(
pQueryHandle
->
rhelper
),
(
void
*
)(
pCheckInfo
->
pCompInfo
));
SCompInfo
*
pCompInfo
=
pCheckInfo
->
pCompInfo
;
SCompInfo
*
pCompInfo
=
pCheckInfo
->
pCompInfo
;
TSKEY
s
=
MIN
(
pCheckInfo
->
lastKey
,
pQueryHandle
->
window
.
ekey
);
TSKEY
s
=
TSKEY_INITIAL_VAL
,
e
=
TSKEY_INITIAL_VAL
;
TSKEY
e
=
MAX
(
pCheckInfo
->
lastKey
,
pQueryHandle
->
window
.
ekey
);
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
assert
(
pCheckInfo
->
lastKey
<=
pQueryHandle
->
window
.
ekey
&&
pQueryHandle
->
window
.
skey
<=
pQueryHandle
->
window
.
ekey
);
}
else
{
assert
(
pCheckInfo
->
lastKey
>=
pQueryHandle
->
window
.
ekey
&&
pQueryHandle
->
window
.
skey
>=
pQueryHandle
->
window
.
ekey
);
}
s
=
MIN
(
pCheckInfo
->
lastKey
,
pQueryHandle
->
window
.
ekey
);
e
=
MAX
(
pCheckInfo
->
lastKey
,
pQueryHandle
->
window
.
ekey
);
// discard the unqualified data block based on the query time window
// discard the unqualified data block based on the query time window
int32_t
start
=
binarySearchForBlock
(
pCompInfo
->
blocks
,
compIndex
->
numOfBlocks
,
s
,
TSDB_ORDER_ASC
);
int32_t
start
=
binarySearchForBlock
(
pCompInfo
->
blocks
,
compIndex
->
numOfBlocks
,
s
,
TSDB_ORDER_ASC
);
...
@@ -570,7 +594,6 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
...
@@ -570,7 +594,6 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
(
*
numOfBlocks
)
+=
pCheckInfo
->
numOfBlocks
;
(
*
numOfBlocks
)
+=
pCheckInfo
->
numOfBlocks
;
}
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -583,22 +606,13 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
...
@@ -583,22 +606,13 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
.uid = (_checkInfo)->tableId.uid})
.uid = (_checkInfo)->tableId.uid})
static
bool
doLoadFileDataBlock
(
STsdbQueryHandle
*
pQueryHandle
,
SCompBlock
*
pBlock
,
STableCheckInfo
*
pCheckInfo
)
{
static
bool
doLoadFileDataBlock
(
STsdbQueryHandle
*
pQueryHandle
,
SCompBlock
*
pBlock
,
STableCheckInfo
*
pCheckInfo
)
{
STsdbRepo
*
pRepo
=
pQueryHandle
->
pTsdb
;
STsdbRepo
*
pRepo
=
pQueryHandle
->
pTsdb
;
// TODO refactor
SCompData
*
data
=
calloc
(
1
,
sizeof
(
SCompData
)
+
sizeof
(
SCompCol
)
*
pBlock
->
numOfCols
);
data
->
numOfCols
=
pBlock
->
numOfCols
;
data
->
uid
=
pCheckInfo
->
pTableObj
->
tableId
.
uid
;
bool
blockLoaded
=
false
;
bool
blockLoaded
=
false
;
int64_t
st
=
taosGetTimestampUs
();
int64_t
st
=
taosGetTimestampUs
();
if
(
pCheckInfo
->
pDataCols
==
NULL
)
{
if
(
pCheckInfo
->
pDataCols
==
NULL
)
{
STsdbMeta
*
pMeta
=
tsdbGetMeta
(
pRepo
);
STsdbMeta
*
pMeta
=
tsdbGetMeta
(
pRepo
);
// TODO
pCheckInfo
->
pDataCols
=
tdNewDataCols
(
pMeta
->
maxRowBytes
,
pMeta
->
maxCols
,
pRepo
->
config
.
maxRowsPerFileBlock
);
pCheckInfo
->
pDataCols
=
tdNewDataCols
(
pMeta
->
maxRowBytes
,
pMeta
->
maxCols
,
pRepo
->
config
.
maxRowsPerFileBlock
);
}
}
...
@@ -607,7 +621,9 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo
...
@@ -607,7 +621,9 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo
tdInitDataCols
(
pQueryHandle
->
rhelper
.
pDataCols
[
0
],
pSchema
);
tdInitDataCols
(
pQueryHandle
->
rhelper
.
pDataCols
[
0
],
pSchema
);
tdInitDataCols
(
pQueryHandle
->
rhelper
.
pDataCols
[
1
],
pSchema
);
tdInitDataCols
(
pQueryHandle
->
rhelper
.
pDataCols
[
1
],
pSchema
);
if
(
tsdbLoadBlockData
(
&
(
pQueryHandle
->
rhelper
),
pBlock
,
pCheckInfo
->
pCompInfo
)
==
0
)
{
int16_t
*
colIds
=
pQueryHandle
->
defaultLoadColumn
->
pData
;
int32_t
ret
=
tsdbLoadBlockDataCols
(
&
(
pQueryHandle
->
rhelper
),
pBlock
,
pCheckInfo
->
pCompInfo
,
colIds
,
QH_GET_NUM_OF_COLS
(
pQueryHandle
));
if
(
ret
==
TSDB_CODE_SUCCESS
)
{
SDataBlockLoadInfo
*
pBlockLoadInfo
=
&
pQueryHandle
->
dataBlockLoadInfo
;
SDataBlockLoadInfo
*
pBlockLoadInfo
=
&
pQueryHandle
->
dataBlockLoadInfo
;
pBlockLoadInfo
->
fileGroup
=
pQueryHandle
->
pFileGroup
;
pBlockLoadInfo
->
fileGroup
=
pQueryHandle
->
pFileGroup
;
...
@@ -621,10 +637,10 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo
...
@@ -621,10 +637,10 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo
assert
(
pCols
->
numOfRows
!=
0
&&
pCols
->
numOfRows
<=
pBlock
->
numOfRows
);
assert
(
pCols
->
numOfRows
!=
0
&&
pCols
->
numOfRows
<=
pBlock
->
numOfRows
);
pBlock
->
numOfRows
=
pCols
->
numOfRows
;
pBlock
->
numOfRows
=
pCols
->
numOfRows
;
tfree
(
data
);
int64_t
et
=
taosGetTimestampUs
()
-
st
;
int64_t
elapsedTime
=
(
taosGetTimestampUs
()
-
st
);
tsdbDebug
(
"%p load file block into buffer, elapsed time:%"
PRId64
" us"
,
pQueryHandle
,
et
);
pQueryHandle
->
cost
.
blockLoadTime
+=
elapsedTime
;
tsdbDebug
(
"%p load file block into buffer, elapsed time:%"
PRId64
" us"
,
pQueryHandle
,
elapsedTime
);
return
blockLoaded
;
return
blockLoaded
;
}
}
...
@@ -1367,7 +1383,6 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
...
@@ -1367,7 +1383,6 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
// todo opt for only one table case
static
int32_t
getDataBlocksInFilesImpl
(
STsdbQueryHandle
*
pQueryHandle
,
bool
*
exists
)
{
static
int32_t
getDataBlocksInFilesImpl
(
STsdbQueryHandle
*
pQueryHandle
,
bool
*
exists
)
{
pQueryHandle
->
numOfBlocks
=
0
;
pQueryHandle
->
numOfBlocks
=
0
;
SQueryFilePos
*
cur
=
&
pQueryHandle
->
cur
;
SQueryFilePos
*
cur
=
&
pQueryHandle
->
cur
;
...
@@ -1378,8 +1393,7 @@ static int32_t getDataBlocksInFilesImpl(STsdbQueryHandle* pQueryHandle, bool* ex
...
@@ -1378,8 +1393,7 @@ static int32_t getDataBlocksInFilesImpl(STsdbQueryHandle* pQueryHandle, bool* ex
int32_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
int32_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
while
((
pQueryHandle
->
pFileGroup
=
tsdbGetFileGroupNext
(
&
pQueryHandle
->
fileIter
))
!=
NULL
)
{
while
((
pQueryHandle
->
pFileGroup
=
tsdbGetFileGroupNext
(
&
pQueryHandle
->
fileIter
))
!=
NULL
)
{
int32_t
type
=
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)
?
QUERY_RANGE_GREATER_EQUAL
:
QUERY_RANGE_LESS_EQUAL
;
if
((
code
=
getFileCompInfo
(
pQueryHandle
,
&
numOfBlocks
))
!=
TSDB_CODE_SUCCESS
)
{
if
((
code
=
getFileCompInfo
(
pQueryHandle
,
&
numOfBlocks
,
type
))
!=
TSDB_CODE_SUCCESS
)
{
break
;
break
;
}
}
...
@@ -1488,6 +1502,9 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) {
...
@@ -1488,6 +1502,9 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) {
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pHandle
)
{
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pHandle
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
int64_t
stime
=
taosGetTimestampUs
();
int64_t
elapsedTime
=
stime
;
size_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
size_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
assert
(
numOfTables
>
0
);
assert
(
numOfTables
>
0
);
...
@@ -1514,7 +1531,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1514,7 +1531,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){
pQueryHandle
->
window
.
skey
,
pQueryHandle
->
window
.
skey
};
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){
pQueryHandle
->
window
.
skey
,
pQueryHandle
->
window
.
skey
};
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
pQueryHandle
->
cur
.
rows
=
1
;
pQueryHandle
->
cur
.
rows
=
1
;
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_
EXTERNA
L
;
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_
AL
L
;
return
true
;
return
true
;
}
else
{
}
else
{
STsdbQueryHandle
*
pSecQueryHandle
=
calloc
(
1
,
sizeof
(
STsdbQueryHandle
));
STsdbQueryHandle
*
pSecQueryHandle
=
calloc
(
1
,
sizeof
(
STsdbQueryHandle
));
...
@@ -1532,6 +1549,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1532,6 +1549,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
free
(
pSecQueryHandle
);
free
(
pSecQueryHandle
);
return
false
;
return
false
;
}
}
tsdbTakeMemSnapshot
(
pSecQueryHandle
->
pTsdb
,
&
pSecQueryHandle
->
mem
,
&
pSecQueryHandle
->
imem
);
tsdbTakeMemSnapshot
(
pSecQueryHandle
->
pTsdb
,
&
pSecQueryHandle
->
mem
,
&
pSecQueryHandle
->
imem
);
// allocate buffer in order to load data blocks from file
// allocate buffer in order to load data blocks from file
...
@@ -1547,7 +1565,6 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1547,7 +1565,6 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
colInfo
.
info
=
pCol
->
info
;
colInfo
.
info
=
pCol
->
info
;
colInfo
.
pData
=
calloc
(
1
,
EXTRA_BYTES
+
pQueryHandle
->
outputCapacity
*
pCol
->
info
.
bytes
);
colInfo
.
pData
=
calloc
(
1
,
EXTRA_BYTES
+
pQueryHandle
->
outputCapacity
*
pCol
->
info
.
bytes
);
taosArrayPush
(
pSecQueryHandle
->
pColumns
,
&
colInfo
);
taosArrayPush
(
pSecQueryHandle
->
pColumns
,
&
colInfo
);
pSecQueryHandle
->
statis
[
i
].
colId
=
colInfo
.
info
.
colId
;
}
}
size_t
si
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
size_t
si
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
...
@@ -1557,7 +1574,6 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1557,7 +1574,6 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
for
(
int32_t
j
=
0
;
j
<
si
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
si
;
++
j
)
{
STableCheckInfo
*
pCheckInfo
=
(
STableCheckInfo
*
)
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
j
);
STableCheckInfo
*
pCheckInfo
=
(
STableCheckInfo
*
)
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
j
);
STableCheckInfo
info
=
{
STableCheckInfo
info
=
{
.
lastKey
=
pSecQueryHandle
->
window
.
skey
,
.
lastKey
=
pSecQueryHandle
->
window
.
skey
,
.
tableId
=
pCheckInfo
->
tableId
,
.
tableId
=
pCheckInfo
->
tableId
,
...
@@ -1569,12 +1585,13 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1569,12 +1585,13 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
tsdbInitDataBlockLoadInfo
(
&
pSecQueryHandle
->
dataBlockLoadInfo
);
tsdbInitDataBlockLoadInfo
(
&
pSecQueryHandle
->
dataBlockLoadInfo
);
tsdbInitCompBlockLoadInfo
(
&
pSecQueryHandle
->
compBlockLoadInfo
);
tsdbInitCompBlockLoadInfo
(
&
pSecQueryHandle
->
compBlockLoadInfo
);
pSecQueryHandle
->
defaultLoadColumn
=
taosArrayClone
(
pQueryHandle
->
defaultLoadColumn
);
bool
ret
=
tsdbNextDataBlock
((
void
*
)
pSecQueryHandle
);
bool
ret
=
tsdbNextDataBlock
((
void
*
)
pSecQueryHandle
);
assert
(
ret
);
assert
(
ret
);
/*SDataBlockInfo* pBlockInfo =*/
tsdbRetrieveDataBlockInfo
((
void
*
)
pSecQueryHandle
,
&
blockInfo
);
tsdbRetrieveDataBlockInfo
((
void
*
)
pSecQueryHandle
,
&
blockInfo
);
/*SArray *pDataBlock = */
tsdbRetrieveDataBlock
((
void
*
)
pSecQueryHandle
,
pSecQueryHandle
->
defaultLoadColumn
);
tsdbRetrieveDataBlock
((
void
*
)
pSecQueryHandle
,
pSecQueryHandle
->
defaultLoadColumn
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
SColumnInfoData
*
pCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
...
@@ -1588,14 +1605,25 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1588,14 +1605,25 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
SColumnInfoData
*
pTSCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
0
);
SColumnInfoData
*
pTSCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
0
);
// it is ascending order
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){((
TSKEY
*
)
pTSCol
->
pData
)[
0
],
((
TSKEY
*
)
pTSCol
->
pData
)[
1
]};
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){((
TSKEY
*
)
pTSCol
->
pData
)[
0
],
((
TSKEY
*
)
pTSCol
->
pData
)[
1
]};
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
pQueryHandle
->
cur
.
rows
=
2
;
pQueryHandle
->
cur
.
rows
=
2
;
pQueryHandle
->
cur
.
mixBlock
=
true
;
pQueryHandle
->
order
=
TSDB_ORDER_DESC
;
int32_t
step
=
-
1
;
// one step for ascending order traverse
for
(
int32_t
j
=
0
;
j
<
si
;
++
j
)
{
STableCheckInfo
*
pCheckInfo
=
(
STableCheckInfo
*
)
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
j
);
pCheckInfo
->
lastKey
=
pQueryHandle
->
cur
.
win
.
ekey
+
step
;
}
tsdbCleanupQueryHandle
(
pSecQueryHandle
);
tsdbCleanupQueryHandle
(
pSecQueryHandle
);
}
}
//disable it after retrieve data
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_EXTERNAL
;
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_EXTERNAL
;
pQueryHandle
->
checkFiles
=
false
;
return
true
;
return
true
;
}
}
...
@@ -1607,6 +1635,8 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1607,6 +1635,8 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
}
}
if
(
exists
)
{
if
(
exists
)
{
elapsedTime
=
taosGetTimestampUs
()
-
stime
;
pQueryHandle
->
cost
.
checkForNextTime
+=
elapsedTime
;
return
exists
;
return
exists
;
}
}
...
@@ -1617,6 +1647,9 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -1617,6 +1647,9 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
// TODO: opt by consider the scan order
// TODO: opt by consider the scan order
bool
ret
=
doHasDataInBuffer
(
pQueryHandle
);
bool
ret
=
doHasDataInBuffer
(
pQueryHandle
);
terrno
=
TSDB_CODE_SUCCESS
;
terrno
=
TSDB_CODE_SUCCESS
;
elapsedTime
=
taosGetTimestampUs
()
-
stime
;
pQueryHandle
->
cost
.
checkForNextTime
+=
elapsedTime
;
return
ret
;
return
ret
;
}
}
...
@@ -1794,41 +1827,44 @@ void tsdbRetrieveDataBlockInfo(TsdbQueryHandleT* pQueryHandle, SDataBlockInfo* p
...
@@ -1794,41 +1827,44 @@ void tsdbRetrieveDataBlockInfo(TsdbQueryHandleT* pQueryHandle, SDataBlockInfo* p
int32_t
tsdbRetrieveDataBlockStatisInfo
(
TsdbQueryHandleT
*
pQueryHandle
,
SDataStatis
**
pBlockStatis
)
{
int32_t
tsdbRetrieveDataBlockStatisInfo
(
TsdbQueryHandleT
*
pQueryHandle
,
SDataStatis
**
pBlockStatis
)
{
STsdbQueryHandle
*
pHandle
=
(
STsdbQueryHandle
*
)
pQueryHandle
;
STsdbQueryHandle
*
pHandle
=
(
STsdbQueryHandle
*
)
pQueryHandle
;
SQueryFilePos
*
c
ur
=
&
pHandle
->
cur
;
SQueryFilePos
*
c
=
&
pHandle
->
cur
;
if
(
c
ur
->
mixBlock
)
{
if
(
c
->
mixBlock
)
{
*
pBlockStatis
=
NULL
;
*
pBlockStatis
=
NULL
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
assert
((
cur
->
slot
>=
0
&&
cur
->
slot
<
pHandle
->
numOfBlocks
)
||
STableBlockInfo
*
pBlockInfo
=
&
pHandle
->
pDataBlockInfo
[
c
->
slot
];
((
cur
->
slot
==
pHandle
->
numOfBlocks
)
&&
(
cur
->
slot
==
0
)));
assert
((
c
->
slot
>=
0
&&
c
->
slot
<
pHandle
->
numOfBlocks
)
||
((
c
->
slot
==
pHandle
->
numOfBlocks
)
&&
(
c
->
slot
==
0
)));
STableBlockInfo
*
pBlockInfo
=
&
pHandle
->
pDataBlockInfo
[
cur
->
slot
];
// file block with subblocks has no statistics data
// file block with sub
-
blocks has no statistics data
if
(
pBlockInfo
->
compBlock
->
numOfSubBlocks
>
1
)
{
if
(
pBlockInfo
->
compBlock
->
numOfSubBlocks
>
1
)
{
*
pBlockStatis
=
NULL
;
*
pBlockStatis
=
NULL
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int64_t
stime
=
taosGetTimestampUs
();
tsdbLoadCompData
(
&
pHandle
->
rhelper
,
pBlockInfo
->
compBlock
,
NULL
);
tsdbLoadCompData
(
&
pHandle
->
rhelper
,
pBlockInfo
->
compBlock
,
NULL
);
// todo opt perf
int16_t
*
colIds
=
pHandle
->
defaultLoadColumn
->
pData
;
size_t
numOfCols
=
QH_GET_NUM_OF_COLS
(
pHandle
);
size_t
numOfCols
=
QH_GET_NUM_OF_COLS
(
pHandle
);
memset
(
pHandle
->
statis
,
0
,
numOfCols
*
sizeof
(
SDataStatis
));
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SDataStatis
*
st
=
&
pHandle
->
statis
[
i
];
pHandle
->
statis
[
i
].
colId
=
colIds
[
i
];
int32_t
colId
=
st
->
colId
;
memset
(
st
,
0
,
sizeof
(
SDataStatis
));
st
->
colId
=
colId
;
}
}
tsdbGetDataStatis
(
&
pHandle
->
rhelper
,
pHandle
->
statis
,
numOfCols
);
tsdbGetDataStatis
(
&
pHandle
->
rhelper
,
pHandle
->
statis
,
numOfCols
);
*
pBlockStatis
=
pHandle
->
statis
;
// always load the first primary timestamp column data
SDataStatis
*
pPrimaryColStatis
=
&
pHandle
->
statis
[
0
];
assert
(
pPrimaryColStatis
->
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
);
pPrimaryColStatis
->
numOfNull
=
0
;
pPrimaryColStatis
->
min
=
pBlockInfo
->
compBlock
->
keyFirst
;
pPrimaryColStatis
->
max
=
pBlockInfo
->
compBlock
->
keyLast
;
//update the number of NULL data rows
//update the number of NULL data rows
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
1
;
i
<
numOfCols
;
++
i
)
{
if
(
pHandle
->
statis
[
i
].
numOfNull
==
-
1
)
{
// set the column data are all NULL
if
(
pHandle
->
statis
[
i
].
numOfNull
==
-
1
)
{
// set the column data are all NULL
pHandle
->
statis
[
i
].
numOfNull
=
pBlockInfo
->
compBlock
->
numOfRows
;
pHandle
->
statis
[
i
].
numOfNull
=
pBlockInfo
->
compBlock
->
numOfRows
;
}
}
...
@@ -1841,6 +1877,10 @@ int32_t tsdbRetrieveDataBlockStatisInfo(TsdbQueryHandleT* pQueryHandle, SDataSta
...
@@ -1841,6 +1877,10 @@ int32_t tsdbRetrieveDataBlockStatisInfo(TsdbQueryHandleT* pQueryHandle, SDataSta
}
}
}
}
int64_t
elapsed
=
taosGetTimestampUs
()
-
stime
;
pHandle
->
cost
.
statisInfoLoadTime
+=
elapsed
;
*
pBlockStatis
=
pHandle
->
statis
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -1893,8 +1933,6 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) {
...
@@ -1893,8 +1933,6 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) {
}
}
}
}
SArray
*
tsdbRetrieveDataRow
(
TsdbQueryHandleT
*
pQueryHandle
,
SArray
*
pIdList
,
SQueryRowCond
*
pCond
)
{
return
NULL
;
}
static
int32_t
getAllTableList
(
STable
*
pSuperTable
,
SArray
*
list
)
{
static
int32_t
getAllTableList
(
STable
*
pSuperTable
,
SArray
*
list
)
{
SSkipListIterator
*
iter
=
tSkipListCreateIter
(
pSuperTable
->
pIndex
);
SSkipListIterator
*
iter
=
tSkipListCreateIter
(
pSuperTable
->
pIndex
);
while
(
tSkipListIterNext
(
iter
))
{
while
(
tSkipListIterNext
(
iter
))
{
...
@@ -1923,6 +1961,7 @@ static void destroyHelper(void* param) {
...
@@ -1923,6 +1961,7 @@ static void destroyHelper(void* param) {
free
(
param
);
free
(
param
);
}
}
#define TAG_INVALID_COLUMN_INDEX -2
static
int32_t
getTagColumnIndex
(
STSchema
*
pTSchema
,
SSchema
*
pSchema
)
{
static
int32_t
getTagColumnIndex
(
STSchema
*
pTSchema
,
SSchema
*
pSchema
)
{
// filter on table name(TBNAME)
// filter on table name(TBNAME)
if
(
strcasecmp
(
pSchema
->
name
,
TSQL_TBNAME_L
)
==
0
)
{
if
(
strcasecmp
(
pSchema
->
name
,
TSQL_TBNAME_L
)
==
0
)
{
...
@@ -1954,9 +1993,8 @@ void filterPrepare(void* expr, void* param) {
...
@@ -1954,9 +1993,8 @@ void filterPrepare(void* expr, void* param) {
tVariant
*
pCond
=
pExpr
->
_node
.
pRight
->
pVal
;
tVariant
*
pCond
=
pExpr
->
_node
.
pRight
->
pVal
;
SSchema
*
pSchema
=
pExpr
->
_node
.
pLeft
->
pSchema
;
SSchema
*
pSchema
=
pExpr
->
_node
.
pLeft
->
pSchema
;
// todo : if current super table does not change schema yet, this function may fail to get correct schema, test case
int32_t
index
=
getTagColumnIndex
(
pTSSchema
,
pSchema
);
int32_t
index
=
getTagColumnIndex
(
pTSSchema
,
pSchema
);
assert
((
index
>=
0
&&
i
<
TSDB_MAX_TAGS
)
||
(
index
==
TSDB_TBNAME_COLUMN_INDEX
));
assert
((
index
>=
0
&&
i
<
TSDB_MAX_TAGS
)
||
(
index
==
TSDB_TBNAME_COLUMN_INDEX
)
||
index
==
TAG_INVALID_COLUMN_INDEX
);
pInfo
->
sch
=
*
pSchema
;
pInfo
->
sch
=
*
pSchema
;
pInfo
->
colIndex
=
index
;
pInfo
->
colIndex
=
index
;
...
@@ -2334,7 +2372,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
...
@@ -2334,7 +2372,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
size_t
size
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
size_t
size
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
STableCheckInfo
*
pTableCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
STableCheckInfo
*
pTableCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
tSkipListDestroyIter
(
pTableCheckInfo
->
iter
);
destroyTableMemIterator
(
pTableCheckInfo
);
if
(
pTableCheckInfo
->
pDataCols
!=
NULL
)
{
if
(
pTableCheckInfo
->
pDataCols
!=
NULL
)
{
tfree
(
pTableCheckInfo
->
pDataCols
->
buf
);
tfree
(
pTableCheckInfo
->
pDataCols
->
buf
);
...
@@ -2362,10 +2400,15 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
...
@@ -2362,10 +2400,15 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
tsdbUnRefMemTable
(
pQueryHandle
->
pTsdb
,
pQueryHandle
->
imem
);
tsdbUnRefMemTable
(
pQueryHandle
->
pTsdb
,
pQueryHandle
->
imem
);
tsdbDestroyHelper
(
&
pQueryHandle
->
rhelper
);
tsdbDestroyHelper
(
&
pQueryHandle
->
rhelper
);
SIOCostSummary
*
pCost
=
&
pQueryHandle
->
cost
;
tsdbDebug
(
":io-cost summary: statis-info:%"
PRId64
"us, datablock:%"
PRId64
"us, check data:%"
PRId64
"us, %p"
,
pCost
->
statisInfoLoadTime
,
pCost
->
blockLoadTime
,
pCost
->
checkForNextTime
,
pQueryHandle
->
qinfo
);
tfree
(
pQueryHandle
);
tfree
(
pQueryHandle
);
}
}
void
tsdbDest
or
yTableGroup
(
STableGroupInfo
*
pGroupList
)
{
void
tsdbDest
ro
yTableGroup
(
STableGroupInfo
*
pGroupList
)
{
assert
(
pGroupList
!=
NULL
);
assert
(
pGroupList
!=
NULL
);
size_t
numOfGroup
=
taosArrayGetSize
(
pGroupList
->
pGroupList
);
size_t
numOfGroup
=
taosArrayGetSize
(
pGroupList
->
pGroupList
);
...
...
src/tsdb/tests/tsdbTests.cpp
浏览文件 @
599df650
...
@@ -39,7 +39,9 @@ static int insertData(SInsertInfo *pInfo) {
...
@@ -39,7 +39,9 @@ static int insertData(SInsertInfo *pInfo) {
pBlock
->
uid
=
pInfo
->
uid
;
pBlock
->
uid
=
pInfo
->
uid
;
pBlock
->
tid
=
pInfo
->
tid
;
pBlock
->
tid
=
pInfo
->
tid
;
pBlock
->
sversion
=
pInfo
->
sversion
;
pBlock
->
sversion
=
pInfo
->
sversion
;
pBlock
->
len
=
0
;
pBlock
->
dataLen
=
0
;
pBlock
->
schemaLen
=
0
;
pBlock
->
numOfRows
=
0
;
for
(
int
i
=
0
;
i
<
pInfo
->
rowsPerSubmit
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pInfo
->
rowsPerSubmit
;
i
++
)
{
// start_time += 1000;
// start_time += 1000;
if
(
pInfo
->
isAscend
)
{
if
(
pInfo
->
isAscend
)
{
...
@@ -47,7 +49,7 @@ static int insertData(SInsertInfo *pInfo) {
...
@@ -47,7 +49,7 @@ static int insertData(SInsertInfo *pInfo) {
}
else
{
}
else
{
start_time
-=
pInfo
->
interval
;
start_time
-=
pInfo
->
interval
;
}
}
SDataRow
row
=
(
SDataRow
)(
pBlock
->
data
+
pBlock
->
l
en
);
SDataRow
row
=
(
SDataRow
)(
pBlock
->
data
+
pBlock
->
dataL
en
);
tdInitDataRow
(
row
,
pInfo
->
pSchema
);
tdInitDataRow
(
row
,
pInfo
->
pSchema
);
for
(
int
j
=
0
;
j
<
schemaNCols
(
pInfo
->
pSchema
);
j
++
)
{
for
(
int
j
=
0
;
j
<
schemaNCols
(
pInfo
->
pSchema
);
j
++
)
{
...
@@ -59,13 +61,15 @@ static int insertData(SInsertInfo *pInfo) {
...
@@ -59,13 +61,15 @@ static int insertData(SInsertInfo *pInfo) {
tdAppendColVal
(
row
,
(
void
*
)(
&
val
),
pTCol
->
type
,
pTCol
->
bytes
,
pTCol
->
offset
);
tdAppendColVal
(
row
,
(
void
*
)(
&
val
),
pTCol
->
type
,
pTCol
->
bytes
,
pTCol
->
offset
);
}
}
}
}
pBlock
->
len
+=
dataRowLen
(
row
);
pBlock
->
dataLen
+=
dataRowLen
(
row
);
pBlock
->
numOfRows
++
;
}
}
pMsg
->
length
=
pMsg
->
length
+
sizeof
(
SSubmitBlk
)
+
pBlock
->
l
en
;
pMsg
->
length
=
sizeof
(
SSubmitMsg
)
+
sizeof
(
SSubmitBlk
)
+
pBlock
->
dataL
en
;
pMsg
->
numOfBlocks
=
1
;
pMsg
->
numOfBlocks
=
1
;
pBlock
->
len
=
htonl
(
pBlock
->
l
en
);
pBlock
->
dataLen
=
htonl
(
pBlock
->
dataL
en
);
pBlock
->
numOfRows
=
htonl
(
pBlock
->
numOfRows
);
pBlock
->
numOfRows
=
htonl
(
pBlock
->
numOfRows
);
pBlock
->
schemaLen
=
htonl
(
pBlock
->
schemaLen
);
pBlock
->
uid
=
htobe64
(
pBlock
->
uid
);
pBlock
->
uid
=
htobe64
(
pBlock
->
uid
);
pBlock
->
tid
=
htonl
(
pBlock
->
tid
);
pBlock
->
tid
=
htonl
(
pBlock
->
tid
);
...
@@ -74,7 +78,6 @@ static int insertData(SInsertInfo *pInfo) {
...
@@ -74,7 +78,6 @@ static int insertData(SInsertInfo *pInfo) {
pMsg
->
length
=
htonl
(
pMsg
->
length
);
pMsg
->
length
=
htonl
(
pMsg
->
length
);
pMsg
->
numOfBlocks
=
htonl
(
pMsg
->
numOfBlocks
);
pMsg
->
numOfBlocks
=
htonl
(
pMsg
->
numOfBlocks
);
pMsg
->
compressed
=
htonl
(
pMsg
->
numOfBlocks
);
if
(
tsdbInsertData
(
pInfo
->
pRepo
,
pMsg
,
NULL
)
<
0
)
{
if
(
tsdbInsertData
(
pInfo
->
pRepo
,
pMsg
,
NULL
)
<
0
)
{
tfree
(
pMsg
);
tfree
(
pMsg
);
...
...
src/util/src/tcache.c
浏览文件 @
599df650
...
@@ -225,7 +225,7 @@ static void doCleanupDataCache(SCacheObj *pCacheObj);
...
@@ -225,7 +225,7 @@ static void doCleanupDataCache(SCacheObj *pCacheObj);
* refresh cache to remove data in both hash list and trash, if any nodes' refcount == 0, every pCacheObj->refreshTime
* refresh cache to remove data in both hash list and trash, if any nodes' refcount == 0, every pCacheObj->refreshTime
* @param handle Cache object handle
* @param handle Cache object handle
*/
*/
static
void
*
taosCacheTimedRefresh
(
void
*
pCacheObj
);
static
void
*
taosCacheTimedRefresh
(
void
*
handle
);
SCacheObj
*
taosCacheInit
(
int32_t
keyType
,
int64_t
refreshTimeInSeconds
,
bool
extendLifespan
,
__cache_free_fn_t
fn
,
const
char
*
cacheName
)
{
SCacheObj
*
taosCacheInit
(
int32_t
keyType
,
int64_t
refreshTimeInSeconds
,
bool
extendLifespan
,
__cache_free_fn_t
fn
,
const
char
*
cacheName
)
{
if
(
refreshTimeInSeconds
<=
0
)
{
if
(
refreshTimeInSeconds
<=
0
)
{
...
@@ -455,51 +455,11 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
...
@@ -455,51 +455,11 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
__cache_unlock
(
pCacheObj
);
__cache_unlock
(
pCacheObj
);
}
else
{
}
else
{
uDebug
(
"cache:%s, key:%p, %p is released, refcnt:%d"
,
pCacheObj
->
name
,
pNode
->
key
,
pNode
->
data
,
T_REF_VAL_GET
(
pNode
)
-
1
);
__cache_wr_lock
(
pCacheObj
);
// NOTE: once refcount is decrease, pNode may be freed by other thread immediately.
// NOTE: once refcount is decrease, pNode may be freed by other thread immediately.
int32_t
ref
=
T_REF_DEC
(
pNode
);
int32_t
ref
=
T_REF_DEC
(
pNode
);
uDebug
(
"cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d"
,
pCacheObj
->
name
,
pNode
->
key
,
pNode
->
data
,
ref
,
if
(
inTrashCan
&&
(
ref
==
0
))
{
inTrashCan
);
// Remove it if the ref count is 0.
// The ref count does not need to load and check again after lock acquired, since ref count can not be increased when
// the node is in trashcan.
assert
(
pNode
->
pTNodeHeader
->
pData
==
pNode
);
taosRemoveFromTrashCan
(
pCacheObj
,
pNode
->
pTNodeHeader
);
}
}
__cache_unlock
(
pCacheObj
);
}
// else {
// if (_remove) { // not in trash can, but need to remove it
// __cache_wr_lock(pCacheObj);
//
// /*
// * If not referenced by other users. Otherwise move this node to trashcan wait for all users
// * releasing this resources.
// *
// * NOTE: previous ref is 0, and current ref is still 0, remove it. If previous is not 0, there is another thread
// * that tries to do the same thing.
// */
// if (ref == 0) {
// if (T_REF_VAL_GET(pNode) == 0) {
// taosCacheReleaseNode(pCacheObj, pNode);
// } else {
// taosCacheMoveToTrash(pCacheObj, pNode);
// }
// } else if (ref > 0) {
// if (!pNode->inTrashCan) {
// assert(pNode->pTNodeHeader == NULL);
// taosCacheMoveToTrash(pCacheObj, pNode);
// }
// }
//
// __cache_unlock(pCacheObj);
// }
// }
}
}
void
taosCacheEmpty
(
SCacheObj
*
pCacheObj
)
{
void
taosCacheEmpty
(
SCacheObj
*
pCacheObj
)
{
...
...
src/vnode/src/vnodeMain.c
浏览文件 @
599df650
...
@@ -259,7 +259,6 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
...
@@ -259,7 +259,6 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
appH
.
cqH
=
pVnode
->
cq
;
appH
.
cqH
=
pVnode
->
cq
;
appH
.
cqCreateFunc
=
cqCreate
;
appH
.
cqCreateFunc
=
cqCreate
;
appH
.
cqDropFunc
=
cqDrop
;
appH
.
cqDropFunc
=
cqDrop
;
appH
.
configFunc
=
dnodeSendCfgTableToRecv
;
sprintf
(
temp
,
"%s/tsdb"
,
rootDir
);
sprintf
(
temp
,
"%s/tsdb"
,
rootDir
);
pVnode
->
tsdb
=
tsdbOpenRepo
(
temp
,
&
appH
);
pVnode
->
tsdb
=
tsdbOpenRepo
(
temp
,
&
appH
);
if
(
pVnode
->
tsdb
==
NULL
)
{
if
(
pVnode
->
tsdb
==
NULL
)
{
...
@@ -341,6 +340,13 @@ void vnodeRelease(void *pVnodeRaw) {
...
@@ -341,6 +340,13 @@ void vnodeRelease(void *pVnodeRaw) {
tsdbCloseRepo
(
pVnode
->
tsdb
,
1
);
tsdbCloseRepo
(
pVnode
->
tsdb
,
1
);
pVnode
->
tsdb
=
NULL
;
pVnode
->
tsdb
=
NULL
;
// stop continuous query
if
(
pVnode
->
cq
)
{
void
*
cq
=
pVnode
->
cq
;
pVnode
->
cq
=
NULL
;
cqClose
(
cq
);
}
if
(
pVnode
->
wal
)
if
(
pVnode
->
wal
)
walClose
(
pVnode
->
wal
);
walClose
(
pVnode
->
wal
);
pVnode
->
wal
=
NULL
;
pVnode
->
wal
=
NULL
;
...
@@ -512,13 +518,6 @@ static void vnodeCleanUp(SVnodeObj *pVnode) {
...
@@ -512,13 +518,6 @@ static void vnodeCleanUp(SVnodeObj *pVnode) {
syncStop
(
sync
);
syncStop
(
sync
);
}
}
// stop continuous query
if
(
pVnode
->
cq
)
{
void
*
cq
=
pVnode
->
cq
;
pVnode
->
cq
=
NULL
;
cqClose
(
cq
);
}
vTrace
(
"vgId:%d, vnode will cleanup, refCount:%d"
,
pVnode
->
vgId
,
pVnode
->
refCount
);
vTrace
(
"vgId:%d, vnode will cleanup, refCount:%d"
,
pVnode
->
vgId
,
pVnode
->
refCount
);
// release local resources only after cutting off outside connections
// release local resources only after cutting off outside connections
...
@@ -588,7 +587,6 @@ static int vnodeResetTsdb(SVnodeObj *pVnode)
...
@@ -588,7 +587,6 @@ static int vnodeResetTsdb(SVnodeObj *pVnode)
appH
.
cqH
=
pVnode
->
cq
;
appH
.
cqH
=
pVnode
->
cq
;
appH
.
cqCreateFunc
=
cqCreate
;
appH
.
cqCreateFunc
=
cqCreate
;
appH
.
cqDropFunc
=
cqDrop
;
appH
.
cqDropFunc
=
cqDrop
;
appH
.
configFunc
=
dnodeSendCfgTableToRecv
;
pVnode
->
tsdb
=
tsdbOpenRepo
(
rootDir
,
&
appH
);
pVnode
->
tsdb
=
tsdbOpenRepo
(
rootDir
,
&
appH
);
pVnode
->
status
=
TAOS_VN_STATUS_READY
;
pVnode
->
status
=
TAOS_VN_STATUS_READY
;
...
...
tests/comparisonTest/tdengine/q5.txt
0 → 100644
浏览文件 @
599df650
select * from db.devices;
tests/comparisonTest/tdengine/tdengineTest.c
浏览文件 @
599df650
...
@@ -13,8 +13,9 @@ typedef struct {
...
@@ -13,8 +13,9 @@ typedef struct {
char
sql
[
256
];
char
sql
[
256
];
char
dataDir
[
256
];
char
dataDir
[
256
];
int
filesNum
;
int
filesNum
;
int
writeC
lients
;
int
c
lients
;
int
rowsPerRequest
;
int
rowsPerRequest
;
int
write
;
}
ProArgs
;
}
ProArgs
;
typedef
struct
{
typedef
struct
{
...
@@ -41,7 +42,7 @@ int main(int argc, char *argv[]) {
...
@@ -41,7 +42,7 @@ int main(int argc, char *argv[]) {
statis
.
totalRows
=
0
;
statis
.
totalRows
=
0
;
parseArg
(
argc
,
argv
);
parseArg
(
argc
,
argv
);
if
(
arguments
.
write
Clients
>
0
)
{
if
(
arguments
.
write
)
{
writeData
();
writeData
();
}
else
{
}
else
{
readData
();
readData
();
...
@@ -52,7 +53,7 @@ void parseArg(int argc, char *argv[]) {
...
@@ -52,7 +53,7 @@ void parseArg(int argc, char *argv[]) {
strcpy
(
arguments
.
sql
,
"./sqlCmd.txt"
);
strcpy
(
arguments
.
sql
,
"./sqlCmd.txt"
);
strcpy
(
arguments
.
dataDir
,
"./testdata"
);
strcpy
(
arguments
.
dataDir
,
"./testdata"
);
arguments
.
filesNum
=
2
;
arguments
.
filesNum
=
2
;
arguments
.
writeClients
=
0
;
arguments
.
clients
=
1
;
arguments
.
rowsPerRequest
=
100
;
arguments
.
rowsPerRequest
=
100
;
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
...
@@ -83,12 +84,12 @@ void parseArg(int argc, char *argv[]) {
...
@@ -83,12 +84,12 @@ void parseArg(int argc, char *argv[]) {
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
}
}
else
if
(
strcmp
(
argv
[
i
],
"-
writeC
lients"
)
==
0
)
{
else
if
(
strcmp
(
argv
[
i
],
"-
c
lients"
)
==
0
)
{
if
(
i
<
argc
-
1
)
{
if
(
i
<
argc
-
1
)
{
arguments
.
writeC
lients
=
atoi
(
argv
[
++
i
]);
arguments
.
c
lients
=
atoi
(
argv
[
++
i
]);
}
}
else
{
else
{
fprintf
(
stderr
,
"'-
writeClients' requires a parameter, default:%d
\n
"
,
arguments
.
writeC
lients
);
fprintf
(
stderr
,
"'-
clients' requires a parameter, default:%d
\n
"
,
arguments
.
c
lients
);
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
}
}
...
@@ -101,6 +102,9 @@ void parseArg(int argc, char *argv[]) {
...
@@ -101,6 +102,9 @@ void parseArg(int argc, char *argv[]) {
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
}
}
else
if
(
strcmp
(
argv
[
i
],
"-w"
)
==
0
)
{
arguments
.
write
=
1
;
}
}
}
}
}
...
@@ -215,7 +219,7 @@ void writeDataImp(void *param) {
...
@@ -215,7 +219,7 @@ void writeDataImp(void *param) {
void
writeData
()
{
void
writeData
()
{
printf
(
"write data
\n
"
);
printf
(
"write data
\n
"
);
printf
(
"----
writeClients: %d
\n
"
,
arguments
.
writeC
lients
);
printf
(
"----
clients: %d
\n
"
,
arguments
.
c
lients
);
printf
(
"---- dataDir: %s
\n
"
,
arguments
.
dataDir
);
printf
(
"---- dataDir: %s
\n
"
,
arguments
.
dataDir
);
printf
(
"---- numOfFiles: %d
\n
"
,
arguments
.
filesNum
);
printf
(
"---- numOfFiles: %d
\n
"
,
arguments
.
filesNum
);
printf
(
"---- rowsPerRequest: %d
\n
"
,
arguments
.
rowsPerRequest
);
printf
(
"---- rowsPerRequest: %d
\n
"
,
arguments
.
rowsPerRequest
);
...
@@ -243,12 +247,12 @@ void writeData() {
...
@@ -243,12 +247,12 @@ void writeData() {
int64_t
st
=
getTimeStampMs
();
int64_t
st
=
getTimeStampMs
();
int
a
=
arguments
.
filesNum
/
arguments
.
writeC
lients
;
int
a
=
arguments
.
filesNum
/
arguments
.
c
lients
;
int
b
=
arguments
.
filesNum
%
arguments
.
writeC
lients
;
int
b
=
arguments
.
filesNum
%
arguments
.
c
lients
;
int
last
=
0
;
int
last
=
0
;
ThreadObj
*
threads
=
calloc
((
size_t
)
arguments
.
writeC
lients
,
sizeof
(
ThreadObj
));
ThreadObj
*
threads
=
calloc
((
size_t
)
arguments
.
c
lients
,
sizeof
(
ThreadObj
));
for
(
int
i
=
0
;
i
<
arguments
.
writeC
lients
;
++
i
)
{
for
(
int
i
=
0
;
i
<
arguments
.
c
lients
;
++
i
)
{
ThreadObj
*
pthread
=
threads
+
i
;
ThreadObj
*
pthread
=
threads
+
i
;
pthread_attr_t
thattr
;
pthread_attr_t
thattr
;
pthread
->
threadId
=
i
+
1
;
pthread
->
threadId
=
i
+
1
;
...
@@ -264,7 +268,7 @@ void writeData() {
...
@@ -264,7 +268,7 @@ void writeData() {
pthread_create
(
&
pthread
->
pid
,
&
thattr
,
(
void
*
(
*
)(
void
*
))
writeDataImp
,
pthread
);
pthread_create
(
&
pthread
->
pid
,
&
thattr
,
(
void
*
(
*
)(
void
*
))
writeDataImp
,
pthread
);
}
}
for
(
int
i
=
0
;
i
<
arguments
.
writeC
lients
;
i
++
)
{
for
(
int
i
=
0
;
i
<
arguments
.
c
lients
;
i
++
)
{
pthread_join
(
threads
[
i
].
pid
,
NULL
);
pthread_join
(
threads
[
i
].
pid
,
NULL
);
}
}
...
@@ -272,17 +276,15 @@ void writeData() {
...
@@ -272,17 +276,15 @@ void writeData() {
float
seconds
=
(
float
)
elapsed
/
1000
;
float
seconds
=
(
float
)
elapsed
/
1000
;
float
rs
=
(
float
)
statis
.
totalRows
/
seconds
;
float
rs
=
(
float
)
statis
.
totalRows
/
seconds
;
free
(
threads
);
printf
(
"---- Spent %f seconds to insert %ld records, speed: %f Rows/Second
\n
"
,
seconds
,
statis
.
totalRows
,
rs
);
printf
(
"---- Spent %f seconds to insert %ld records, speed: %f Rows/Second
\n
"
,
seconds
,
statis
.
totalRows
,
rs
);
}
}
void
readData
()
{
void
readDataImp
(
void
*
param
)
printf
(
"read data
\n
"
);
{
printf
(
"---- sql: %s
\n
"
,
arguments
.
sql
);
ThreadObj
*
pThread
=
(
ThreadObj
*
)
param
;
printf
(
"Thread %d
\n
"
,
pThread
->
threadId
);
void
*
taos
=
taos_connect
(
"127.0.0.1"
,
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
taos_error
(
taos
);
FILE
*
fp
=
fopen
(
arguments
.
sql
,
"r"
);
FILE
*
fp
=
fopen
(
arguments
.
sql
,
"r"
);
if
(
fp
==
NULL
)
{
if
(
fp
==
NULL
)
{
printf
(
"failed to open file %s
\n
"
,
arguments
.
sql
);
printf
(
"failed to open file %s
\n
"
,
arguments
.
sql
);
...
@@ -290,6 +292,10 @@ void readData() {
...
@@ -290,6 +292,10 @@ void readData() {
}
}
printf
(
"open file %s success
\n
"
,
arguments
.
sql
);
printf
(
"open file %s success
\n
"
,
arguments
.
sql
);
void
*
taos
=
taos_connect
(
"127.0.0.1"
,
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
taos_error
(
taos
);
char
*
line
=
NULL
;
char
*
line
=
NULL
;
size_t
len
=
0
;
size_t
len
=
0
;
while
(
!
feof
(
fp
))
{
while
(
!
feof
(
fp
))
{
...
@@ -325,9 +331,36 @@ void readData() {
...
@@ -325,9 +331,36 @@ void readData() {
int64_t
elapsed
=
getTimeStampMs
()
-
st
;
int64_t
elapsed
=
getTimeStampMs
()
-
st
;
float
seconds
=
(
float
)
elapsed
/
1000
;
float
seconds
=
(
float
)
elapsed
/
1000
;
printf
(
"---- Spent %f seconds to
query: %s"
,
seconds
,
line
);
printf
(
"---- Spent %f seconds to
retrieve %d records, Thread:%d query: %s
\n
"
,
seconds
,
rows
,
pThread
->
threadId
,
line
);
}
}
fclose
(
fp
);
fclose
(
fp
);
}
}
void
readData
()
{
printf
(
"read data
\n
"
);
printf
(
"---- sql: %s
\n
"
,
arguments
.
sql
);
printf
(
"---- clients: %d
\n
"
,
arguments
.
clients
);
void
*
taos
=
taos_connect
(
"127.0.0.1"
,
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
taos_error
(
taos
);
ThreadObj
*
threads
=
calloc
((
size_t
)
arguments
.
clients
,
sizeof
(
ThreadObj
));
for
(
int
i
=
0
;
i
<
arguments
.
clients
;
++
i
)
{
ThreadObj
*
pthread
=
threads
+
i
;
pthread_attr_t
thattr
;
pthread
->
threadId
=
i
+
1
;
pthread_attr_init
(
&
thattr
);
pthread_attr_setdetachstate
(
&
thattr
,
PTHREAD_CREATE_JOINABLE
);
pthread_create
(
&
pthread
->
pid
,
&
thattr
,
(
void
*
(
*
)(
void
*
))
readDataImp
,
pthread
);
}
for
(
int
i
=
0
;
i
<
arguments
.
clients
;
i
++
)
{
pthread_join
(
threads
[
i
].
pid
,
NULL
);
}
free
(
threads
);
}
tests/perftest-scripts/tdengineTestQ1Loop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/perftest-scripts/tdengineTestQ2Loop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/perftest-scripts/tdengineTestQ3Loop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/perftest-scripts/tdengineTestQ4Loop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/perftest-scripts/tdengineTestQ5Loop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/perftest-scripts/tdengineTestWriteLoop.sh
0 → 100755
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/pytest/tag_lite/add.py
浏览文件 @
599df650
...
@@ -100,6 +100,8 @@ class TDTestCase:
...
@@ -100,6 +100,8 @@ class TDTestCase:
# TSIM: sql alter table $mt add tag tgcol4 int
# TSIM: sql alter table $mt add tag tgcol4 int
tdLog
.
info
(
'alter table %s add tag tgcol4 int'
%
(
mt
))
tdLog
.
info
(
'alter table %s add tag tgcol4 int'
%
(
mt
))
tdSql
.
execute
(
'alter table %s add tag tgcol4 int'
%
(
mt
))
tdSql
.
execute
(
'alter table %s add tag tgcol4 int'
%
(
mt
))
tdLog
.
info
(
'select * from %s where tgcol4=6'
%
(
mt
))
tdSql
.
query
(
'select * from %s where tgcol4=6'
%
(
mt
))
# TSIM: sql reset query cache
# TSIM: sql reset query cache
tdLog
.
info
(
'reset query cache'
)
tdLog
.
info
(
'reset query cache'
)
tdSql
.
execute
(
'reset query cache'
)
tdSql
.
execute
(
'reset query cache'
)
...
...
tests/pytest/util/dnodes-no-random-fail.py
浏览文件 @
599df650
...
@@ -178,7 +178,6 @@ class TDDnode:
...
@@ -178,7 +178,6 @@ class TDDnode:
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"numOfTotalVnodes"
,
"64"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"monitor"
,
"0"
)
self
.
cfg
(
"monitor"
,
"0"
)
...
...
tests/pytest/util/dnodes-random-fail.py
浏览文件 @
599df650
...
@@ -178,7 +178,6 @@ class TDDnode:
...
@@ -178,7 +178,6 @@ class TDDnode:
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"numOfTotalVnodes"
,
"64"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"monitor"
,
"0"
)
self
.
cfg
(
"monitor"
,
"0"
)
...
...
tests/pytest/util/dnodes.py
浏览文件 @
599df650
...
@@ -180,7 +180,6 @@ class TDDnode:
...
@@ -180,7 +180,6 @@ class TDDnode:
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"walLevel"
,
"2"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"fsync"
,
"1000"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"statusInterval"
,
"1"
)
self
.
cfg
(
"numOfTotalVnodes"
,
"64"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfMnodes"
,
"3"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"numOfThreadsPerCore"
,
"2.0"
)
self
.
cfg
(
"monitor"
,
"0"
)
self
.
cfg
(
"monitor"
,
"0"
)
...
...
tests/script/general/alter/cached_schema_after_alter.sim
浏览文件 @
599df650
...
@@ -68,7 +68,7 @@ endi
...
@@ -68,7 +68,7 @@ endi
if $data01 != 1 then
if $data01 != 1 then
return -1
return -1
endi
endi
if $data02 !=
NULL
then
if $data02 !=
1
then
return -1
return -1
endi
endi
...
@@ -80,7 +80,7 @@ endi
...
@@ -80,7 +80,7 @@ endi
if $data01 != 1 then
if $data01 != 1 then
return -1
return -1
endi
endi
if $data02 !=
NULL
then
if $data02 !=
1
then
return -1
return -1
endi
endi
...
...
tests/script/general/db/alter_option.sim
浏览文件 @
599df650
system sh/stop_dnodes.sh
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 0
system sh/cfg.sh -n dnode1 -c wallevel -v 0
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode1 -s start
...
...
tests/script/general/db/basic.sim
浏览文件 @
599df650
...
@@ -99,9 +99,7 @@ $db = $dbPrefix . $i
...
@@ -99,9 +99,7 @@ $db = $dbPrefix . $i
$tb = $tbPrefix . $i
$tb = $tbPrefix . $i
sql create database $db
sql create database $db
sql use $db
sql use $db
sql create table $tb (ts timestamp, speed int) -x step6
sql create table $tb (ts timestamp, speed int)
return -1
step6:
print =============== step7
print =============== step7
$i = 0
$i = 0
...
...
tests/script/general/db/delete.sim
浏览文件 @
599df650
system sh/stop_dnodes.sh
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 10
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 10
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
...
...
tests/script/general/db/delete_reuse1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/delete_reuse2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/delete_reusevnode.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/delete_reusevnode2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/delete_writing1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/delete_writing2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/len.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/repeat.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/db/vnodes.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/bug.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/first_last_query.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/null_char.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/select_across_vnodes.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/select_from_cache_disk.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit_alter_tags.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/testSuite.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/timestamp.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/parser/union.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/disk.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/dnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/metrics.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/refcount.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/show.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/values.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stable/vnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stream/metrics_replica1_vnoden.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/stream/table_replica1_vnoden.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/table/delete_reuse1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/table/delete_reuse2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/table/delete_writing.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/table/limit.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/general/table/vgroup.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/sh/clear.sh
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/sh/deploy.sh
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/tmp/http.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/tmp/mnodes.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/account/authority.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn2_mn1_cache_file_sync.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_full_createTableFail.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_full_dropDnodeFail.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_multiCreateDropTable.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_nw_disable_timeout_autoDropDnode.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_r2_vnode_delDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_r3_vnode_delDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_replica2_wal1_AddDelDnode.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_replica_change.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_replica_change_dropDnod.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_stopDnode_timeout.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_offline.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_createErrData_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_delDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_noCorruptFile_offline.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn1_vnode_nomaster.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/dn3_mn2_killDnode.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/insert_duplicationTs.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica2_alterTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica2_alterTag_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica2_createTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica2_dropDb_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica2_dropTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica3_alterTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica3_alterTag_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica3_createTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica3_dropDb_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/offline_replica3_dropTable_online.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/replica_changeWithArbitrator.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica2_alterTable_add.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica2_alterTable_drop.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica2_dropDb.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica2_dropTable.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_alterTable_add.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_alterTable_drop.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_createTable.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_dropDb.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/arbitrator/sync_replica3_dropTable.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/big/balance.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/big/maxvnodes.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/big/restartSpeed.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/balance1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/balance2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/balance3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/client1_0.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/cluster_main.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/cluster_main0.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/cluster_main1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/cluster_main2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/main1_client1_0.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/cluster/main2_client1_0.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/delete.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/delete_part.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_add12.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_add13.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_add23.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_part.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_reduce21.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_reduce31.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/db/replica_reduce32.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/dnode/alternativeRole.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/migrate/mn2_vn2_repl2_rmMnodeVnodeDir_stopAll_starAll.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/migrate/mn2_vn2_repl2_rmVnodeDir.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/balance_replica1.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/dnode2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/dnode2_stop.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/dnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/replica2_dnode4.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/replica2_vnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/replica3_dnode6.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stable/replica3_vnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/metrics_balance.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/metrics_replica1_dnode2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/metrics_replica2_dnode2_vnoden.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/metrics_replica2_dnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/metrics_replica3_dnode4.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_balance.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_move.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_replica1_dnode2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_replica2_dnode2_vnoden.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_replica2_dnode3.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/stream/table_replica3_dnode4.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/vnode/many.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/script/unique/vnode/replica2_basic2.sim
浏览文件 @
599df650
此差异已折叠。
点击以展开。
tests/tsim/src/simExe.c
浏览文件 @
599df650
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录