Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
9f127dae
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,发现更多精彩内容 >>
未验证
提交
9f127dae
编写于
4月 07, 2023
作者:
W
wei liu
提交者:
GitHub
4月 07, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enable balance channel (#23227)
Signed-off-by:
N
Wei Liu
<
wei.liu@zilliz.com
>
上级
c855ea31
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
95 addition
and
4 deletion
+95
-4
internal/querycoordv2/balance/rowcount_based_balancer.go
internal/querycoordv2/balance/rowcount_based_balancer.go
+55
-0
internal/querycoordv2/balance/rowcount_based_balancer_test.go
...rnal/querycoordv2/balance/rowcount_based_balancer_test.go
+40
-4
未找到文件。
internal/querycoordv2/balance/rowcount_based_balancer.go
浏览文件 @
9f127dae
...
...
@@ -268,6 +268,61 @@ func (b *RowCountBasedBalancer) getChannelPlan(replica *meta.Replica, onlineNode
}
channelPlans
=
append
(
channelPlans
,
plans
...
)
}
if
len
(
channelPlans
)
==
0
&&
len
(
onlineNodes
)
>
1
{
// start to balance channels on all available nodes
channels
:=
b
.
dist
.
ChannelDistManager
.
GetByCollection
(
replica
.
CollectionID
)
channelsOnNode
:=
lo
.
GroupBy
(
channels
,
func
(
channel
*
meta
.
DmChannel
)
int64
{
return
channel
.
Node
})
nodes
:=
replica
.
GetNodes
()
getChannelNum
:=
func
(
node
int64
)
int
{
if
channelsOnNode
[
node
]
==
nil
{
return
0
}
return
len
(
channelsOnNode
[
node
])
}
sort
.
Slice
(
nodes
,
func
(
i
,
j
int
)
bool
{
return
getChannelNum
(
nodes
[
i
])
<
getChannelNum
(
nodes
[
j
])
})
start
:=
int64
(
0
)
end
:=
int64
(
len
(
nodes
)
-
1
)
averageChannel
:=
len
(
channels
)
/
len
(
onlineNodes
)
if
averageChannel
==
0
||
getChannelNum
(
nodes
[
start
])
>=
getChannelNum
(
nodes
[
end
])
{
return
channelPlans
}
for
start
<
end
{
sourceNode
:=
nodes
[
start
]
targetNode
:=
nodes
[
end
]
// remove channel from end node
selectChannel
:=
channelsOnNode
[
targetNode
][
0
]
channelsOnNode
[
targetNode
]
=
channelsOnNode
[
targetNode
][
1
:
]
// add channel to start node
if
channelsOnNode
[
sourceNode
]
==
nil
{
channelsOnNode
[
sourceNode
]
=
make
([]
*
meta
.
DmChannel
,
0
)
}
channelsOnNode
[
sourceNode
]
=
append
(
channelsOnNode
[
sourceNode
],
selectChannel
)
// generate channel plan
plan
:=
ChannelAssignPlan
{
Channel
:
selectChannel
,
From
:
targetNode
,
To
:
sourceNode
,
ReplicaID
:
replica
.
ID
,
Weight
:
GetWeight
(
1
),
}
channelPlans
=
append
(
channelPlans
,
plan
)
for
end
>
0
&&
getChannelNum
(
nodes
[
end
])
<=
averageChannel
{
end
--
}
for
start
<
end
&&
getChannelNum
(
nodes
[
start
])
>=
averageChannel
{
start
++
}
}
}
return
channelPlans
}
...
...
internal/querycoordv2/balance/rowcount_based_balancer_test.go
浏览文件 @
9f127dae
...
...
@@ -210,20 +210,56 @@ func (suite *RowCountBasedBalancerTestSuite) TestBalance() {
{
Channel
:
&
meta
.
DmChannel
{
VchannelInfo
:
&
datapb
.
VchannelInfo
{
CollectionID
:
1
,
ChannelName
:
"v3"
},
Node
:
3
},
From
:
3
,
To
:
1
,
ReplicaID
:
1
,
Weight
:
weightHigh
},
},
},
{
name
:
"balance channel"
,
nodes
:
[]
int64
{
2
,
3
},
segmentCnts
:
[]
int
{
2
,
2
},
states
:
[]
session
.
State
{
session
.
NodeStateNormal
,
session
.
NodeStateNormal
},
shouldMock
:
true
,
distributions
:
map
[
int64
][]
*
meta
.
Segment
{
2
:
{
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
2
,
CollectionID
:
1
,
NumOfRows
:
20
},
Node
:
2
},
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
3
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
2
},
},
3
:
{
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
4
,
CollectionID
:
1
,
NumOfRows
:
10
},
Node
:
3
},
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
5
,
CollectionID
:
1
,
NumOfRows
:
10
},
Node
:
3
},
},
},
distributionChannels
:
map
[
int64
][]
*
meta
.
DmChannel
{
2
:
{
{
VchannelInfo
:
&
datapb
.
VchannelInfo
{
CollectionID
:
1
,
ChannelName
:
"v2"
},
Node
:
2
},
{
VchannelInfo
:
&
datapb
.
VchannelInfo
{
CollectionID
:
1
,
ChannelName
:
"v3"
},
Node
:
2
},
},
3
:
{},
},
expectPlans
:
[]
SegmentAssignPlan
{},
expectChannelPlans
:
[]
ChannelAssignPlan
{
{
Channel
:
&
meta
.
DmChannel
{
VchannelInfo
:
&
datapb
.
VchannelInfo
{
CollectionID
:
1
,
ChannelName
:
"v2"
},
Node
:
2
},
From
:
2
,
To
:
3
,
ReplicaID
:
1
,
Weight
:
weightHigh
},
},
},
{
name
:
"already balanced"
,
nodes
:
[]
int64
{
1
,
2
},
nodes
:
[]
int64
{
1
1
,
2
2
},
notExistedNodes
:
[]
int64
{
10
},
segmentCnts
:
[]
int
{
1
,
2
},
states
:
[]
session
.
State
{
session
.
NodeStateNormal
,
session
.
NodeStateNormal
},
distributions
:
map
[
int64
][]
*
meta
.
Segment
{
1
:
{{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
1
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
1
}},
1
:
{{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
1
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
1
1
}},
2
:
{
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
2
,
CollectionID
:
1
,
NumOfRows
:
20
},
Node
:
2
},
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
3
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
2
},
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
2
,
CollectionID
:
1
,
NumOfRows
:
20
},
Node
:
2
2
},
{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
3
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
2
2
},
},
10
:
{{
SegmentInfo
:
&
datapb
.
SegmentInfo
{
ID
:
4
,
CollectionID
:
1
,
NumOfRows
:
30
},
Node
:
10
}},
},
// distributionChannels: map[int64][]*meta.DmChannel{
// 1: {
// {VchannelInfo: &datapb.VchannelInfo{CollectionID: 1, ChannelName: "v2"}, Node: 1},
// },
// 2: {
// {VchannelInfo: &datapb.VchannelInfo{CollectionID: 1, ChannelName: "v3"}, Node: 2},
// },
// },
expectPlans
:
[]
SegmentAssignPlan
{},
expectChannelPlans
:
[]
ChannelAssignPlan
{},
},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录