Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
7124e91d
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
261
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
7124e91d
编写于
3月 07, 2022
作者:
Y
yah01
提交者:
GitHub
3月 07, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor assigning loading segments task in QueryCoord (#15895)
Signed-off-by:
N
yah01
<
yang.cen@zilliz.com
>
上级
a5c3f4ee
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
35 deletion
+31
-35
internal/querycoord/task.go
internal/querycoord/task.go
+31
-35
未找到文件。
internal/querycoord/task.go
浏览文件 @
7124e91d
...
...
@@ -20,6 +20,7 @@ import (
"context"
"errors"
"fmt"
"sort"
"sync"
"time"
...
...
@@ -1933,49 +1934,48 @@ func assignInternalTask(ctx context.Context,
}
log
.
Debug
(
"assignInternalTask: assign dmChannel to node success"
)
mergedLoadSegmentReqs
:=
make
(
map
[
UniqueID
]
map
[
int64
][]
*
querypb
.
LoadSegmentsRequest
)
sizeCounts
:=
make
(
map
[
UniqueID
]
map
[
int64
]
int
)
for
_
,
req
:=
range
loadSegmentRequests
{
nodeID
:=
req
.
DstNodeID
collectionID
:=
req
.
CollectionID
if
_
,
ok
:=
mergedLoadSegmentReqs
[
collectionID
];
!
ok
{
mergedLoadSegmentReqs
[
collectionID
]
=
make
(
map
[
int64
][]
*
querypb
.
LoadSegmentsRequest
)
sizeCounts
[
collectionID
]
=
make
(
map
[
int64
]
int
)
}
mergedLoadSegmentReqsPerCol
:=
mergedLoadSegmentReqs
[
collectionID
]
sizeCountsPerCol
:=
sizeCounts
[
collectionID
]
sizeOfReq
:=
getSizeOfLoadSegmentReq
(
req
)
if
_
,
ok
:=
mergedLoadSegmentReqsPerCol
[
nodeID
];
!
ok
{
mergedLoadSegmentReqsPerCol
[
nodeID
]
=
[]
*
querypb
.
LoadSegmentsRequest
{}
mergedLoadSegmentReqsPerCol
[
nodeID
]
=
append
(
mergedLoadSegmentReqsPerCol
[
nodeID
],
req
)
sizeCountsPerCol
[
nodeID
]
=
sizeOfReq
}
else
{
if
sizeCountsPerCol
[
nodeID
]
+
sizeOfReq
>
MaxSendSizeToEtcd
{
mergedLoadSegmentReqsPerCol
[
nodeID
]
=
append
(
mergedLoadSegmentReqsPerCol
[
nodeID
],
req
)
sizeCountsPerCol
[
nodeID
]
=
sizeOfReq
}
else
{
lastReq
:=
mergedLoadSegmentReqsPerCol
[
nodeID
][
len
(
mergedLoadSegmentReqsPerCol
[
nodeID
])
-
1
]
lastReq
.
Infos
=
append
(
lastReq
.
Infos
,
req
.
Infos
...
)
sizeCountsPerCol
[
nodeID
]
+=
sizeOfReq
}
}
}
if
len
(
loadSegmentRequests
)
>
0
{
sort
.
Slice
(
loadSegmentRequests
,
func
(
i
,
j
int
)
bool
{
return
loadSegmentRequests
[
i
]
.
CollectionID
<
loadSegmentRequests
[
j
]
.
CollectionID
||
loadSegmentRequests
[
i
]
.
CollectionID
==
loadSegmentRequests
[
j
]
.
CollectionID
&&
loadSegmentRequests
[
i
]
.
DstNodeID
<
loadSegmentRequests
[
j
]
.
DstNodeID
})
for
_
,
loadSegmentsReqsPerCol
:=
range
mergedLoadSegmentReqs
{
for
_
,
loadSegmentReqs
:=
range
loadSegmentsReqsPerCol
{
for
_
,
req
:=
range
loadSegmentReqs
{
batchReq
:=
loadSegmentRequests
[
0
]
batchSize
:=
proto
.
Size
(
batchReq
)
for
_
,
req
:=
range
loadSegmentRequests
[
1
:
]
{
// Pack current batch, switch to new batch
if
req
.
CollectionID
!=
batchReq
.
CollectionID
||
req
.
DstNodeID
!=
batchReq
.
DstNodeID
||
batchSize
+
proto
.
Size
(
req
)
>
MaxSendSizeToEtcd
{
baseTask
:=
newBaseTask
(
ctx
,
parentTask
.
getTriggerCondition
())
baseTask
.
setParentTask
(
parentTask
)
loadSegmentTask
:=
&
loadSegmentTask
{
baseTask
:
baseTask
,
LoadSegmentsRequest
:
r
eq
,
LoadSegmentsRequest
:
batchR
eq
,
meta
:
meta
,
cluster
:
cluster
,
excludeNodeIDs
:
excludeNodeIDs
,
}
internalTasks
=
append
(
internalTasks
,
loadSegmentTask
)
batchReq
=
req
batchSize
=
proto
.
Size
(
batchReq
)
}
else
{
batchReq
.
Infos
=
append
(
batchReq
.
Infos
,
req
.
Infos
...
)
batchSize
+=
proto
.
Size
(
req
)
}
}
// Pack the last batch
baseTask
:=
newBaseTask
(
ctx
,
parentTask
.
getTriggerCondition
())
baseTask
.
setParentTask
(
parentTask
)
loadSegmentTask
:=
&
loadSegmentTask
{
baseTask
:
baseTask
,
LoadSegmentsRequest
:
batchReq
,
meta
:
meta
,
cluster
:
cluster
,
excludeNodeIDs
:
excludeNodeIDs
,
}
internalTasks
=
append
(
internalTasks
,
loadSegmentTask
)
}
for
_
,
req
:=
range
watchDmChannelRequests
{
...
...
@@ -1994,10 +1994,6 @@ func assignInternalTask(ctx context.Context,
return
internalTasks
,
nil
}
func
getSizeOfLoadSegmentReq
(
req
*
querypb
.
LoadSegmentsRequest
)
int
{
return
proto
.
Size
(
req
)
}
func
generateWatchDeltaChannelInfo
(
info
*
datapb
.
VchannelInfo
)
(
*
datapb
.
VchannelInfo
,
error
)
{
deltaChannelName
,
err
:=
rootcoord
.
ConvertChannelName
(
info
.
ChannelName
,
Params
.
CommonCfg
.
RootCoordDml
,
Params
.
CommonCfg
.
RootCoordDelta
)
if
err
!=
nil
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录