Skip to content

Commit 97220c8

Browse files
committed
feat(scheduler): add support for filtering hosts by type in ListHosts
Signed-off-by: chlins <chlins.zhang@gmail.com>
1 parent be4e3ec commit 97220c8

File tree

7 files changed

+41
-17
lines changed

7 files changed

+41
-17
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.23.8
44

55
require (
66
cloud.google.com/go/storage v1.50.0
7-
d7y.io/api/v2 v2.1.60
7+
d7y.io/api/v2 v2.1.69
88
github.com/MysteriousPotato/go-lockable v1.0.0
99
github.com/Showmax/go-fqdn v1.0.0
1010
github.com/VividCortex/mysqlerr v1.0.0
@@ -96,7 +96,7 @@ require (
9696
golang.org/x/time v0.12.0
9797
google.golang.org/api v0.248.0
9898
google.golang.org/grpc v1.75.0
99-
google.golang.org/protobuf v1.36.8
99+
google.golang.org/protobuf v1.36.9
100100
gopkg.in/natefinch/lumberjack.v2 v2.0.0
101101
gopkg.in/yaml.v3 v3.0.1
102102
gorm.io/driver/mysql v1.4.7

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6Q
6363
cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY=
6464
cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4=
6565
cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI=
66-
d7y.io/api/v2 v2.1.60 h1:Imk1mw30wmTJNdqKFF5VO/eqI/t1H5PfIPPK4ryKX2U=
67-
d7y.io/api/v2 v2.1.60/go.mod h1:WzakPywEgs27gr/TwrlRarPRRK2o5nN0YrTzHDdFii8=
66+
d7y.io/api/v2 v2.1.69 h1:F0G9Vdi5Nk9IOp7hGSrw0o/mEr01La/bRSNQP6e/KSk=
67+
d7y.io/api/v2 v2.1.69/go.mod h1:Zd/KrYRZ1saG0c+n+G5/6HqIFKTHHLKrZzOpqi3nmLw=
6868
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
6969
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
7070
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
@@ -2186,8 +2186,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
21862186
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
21872187
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
21882188
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
2189-
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
2190-
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
2189+
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
2190+
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
21912191
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
21922192
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
21932193
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

pkg/rpc/scheduler/client/client_v2.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"golang.org/x/sync/errgroup"
3232
"google.golang.org/grpc"
3333
"google.golang.org/grpc/balancer"
34-
"google.golang.org/protobuf/types/known/emptypb"
3534

3635
commonv2 "d7y.io/api/v2/pkg/apis/common/v2"
3736
schedulerv2 "d7y.io/api/v2/pkg/apis/scheduler/v2"
@@ -155,7 +154,7 @@ type V2 interface {
155154
AnnounceHost(context.Context, *schedulerv2.AnnounceHostRequest, ...grpc.CallOption) error
156155

157156
// ListHosts lists hosts in scheduler.
158-
ListHosts(ctx context.Context, taskID string, opts ...grpc.CallOption) (*schedulerv2.ListHostsResponse, error)
157+
ListHosts(ctx context.Context, taskID string, req *schedulerv2.ListHostsRequest, opts ...grpc.CallOption) (*schedulerv2.ListHostsResponse, error)
159158

160159
// DeleteHost releases host in scheduler.
161160
DeleteHost(context.Context, *schedulerv2.DeleteHostRequest, ...grpc.CallOption) error
@@ -263,13 +262,13 @@ func (v *v2) AnnounceHost(ctx context.Context, req *schedulerv2.AnnounceHostRequ
263262
}
264263

265264
// ListHosts lists host in all schedulers.
266-
func (v *v2) ListHosts(ctx context.Context, taskID string, opts ...grpc.CallOption) (*schedulerv2.ListHostsResponse, error) {
265+
func (v *v2) ListHosts(ctx context.Context, taskID string, req *schedulerv2.ListHostsRequest, opts ...grpc.CallOption) (*schedulerv2.ListHostsResponse, error) {
267266
ctx, cancel := context.WithTimeout(ctx, contextTimeout)
268267
defer cancel()
269268

270269
return v.SchedulerClient.ListHosts(
271270
context.WithValue(ctx, pkgbalancer.ContextKey, taskID),
272-
new(emptypb.Empty),
271+
req,
273272
opts...,
274273
)
275274
}

scheduler/rpcserver/scheduler_server_v2.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ func (s *schedulerServerV2) AnnounceHost(ctx context.Context, req *schedulerv2.A
139139
}
140140

141141
// ListHosts lists hosts in scheduler.
142-
func (s *schedulerServerV2) ListHosts(ctx context.Context, _ *emptypb.Empty) (*schedulerv2.ListHostsResponse, error) {
142+
func (s *schedulerServerV2) ListHosts(ctx context.Context, req *schedulerv2.ListHostsRequest) (*schedulerv2.ListHostsResponse, error) {
143143
// Collect ListHostsCount metrics.
144144
metrics.ListHostsCount.Inc()
145-
resp, err := s.service.ListHosts(ctx)
145+
resp, err := s.service.ListHosts(ctx, req)
146146
if err != nil {
147147
// Collect ListHostsFailureCount metrics.
148148
metrics.ListHostsCountFailureCount.Inc()

scheduler/service/service_v2.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,9 +949,9 @@ func (v *V2) AnnounceHost(ctx context.Context, req *schedulerv2.AnnounceHostRequ
949949
}
950950

951951
// ListHosts lists hosts in scheduler.
952-
func (v *V2) ListHosts(ctx context.Context) (*schedulerv2.ListHostsResponse, error) {
952+
func (v *V2) ListHosts(ctx context.Context, req *schedulerv2.ListHostsRequest) (*schedulerv2.ListHostsResponse, error) {
953953
hosts := []*commonv2.Host{}
954-
v.resource.HostManager().Range(func(_ any, value any) bool {
954+
constructHosts := func(value any) bool {
955955
host, ok := value.(*standard.Host)
956956
if !ok {
957957
// Continue to next host.
@@ -1031,7 +1031,30 @@ func (v *V2) ListHosts(ctx context.Context) (*schedulerv2.ListHostsResponse, err
10311031
})
10321032

10331033
return true
1034-
})
1034+
}
1035+
1036+
// Return all hosts if no type specified.
1037+
if req.Type == nil {
1038+
v.resource.HostManager().Range(func(_ any, value any) bool {
1039+
return constructHosts(value)
1040+
})
1041+
1042+
return &schedulerv2.ListHostsResponse{
1043+
Hosts: hosts,
1044+
}, nil
1045+
}
1046+
1047+
// Filter hosts by type.
1048+
switch types.HostType(*req.Type) {
1049+
case types.HostTypeNormal:
1050+
v.resource.HostManager().RangeNormals(func(_ any, value any) bool {
1051+
return constructHosts(value)
1052+
})
1053+
case types.HostTypeSuperSeed:
1054+
v.resource.HostManager().RangeSeeds(func(_ any, value any) bool {
1055+
return constructHosts(value)
1056+
})
1057+
}
10351058

10361059
return &schedulerv2.ListHostsResponse{
10371060
Hosts: hosts,

scheduler/service/service_v2_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ func TestServiceV2_ListHosts(t *testing.T) {
15581558
svc := NewV2(&config.Config{Scheduler: mockSchedulerConfig, Metrics: config.MetricsConfig{EnableHost: true}}, resource, persistentCacheResource, scheduling, job, internalJobImage, dynconfig)
15591559

15601560
tc.mock(host, hostManager, resource.EXPECT(), hostManager.EXPECT())
1561-
resp, err := svc.ListHosts(context.Background())
1561+
resp, err := svc.ListHosts(context.Background(), &schedulerv2.ListHostsRequest{})
15621562
tc.expect(t, host, resp.Hosts, err)
15631563
})
15641564
}

test/e2e/host_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"google.golang.org/grpc"
2727
"google.golang.org/grpc/credentials/insecure"
2828

29+
schedulerv2 "d7y.io/api/v2/pkg/apis/scheduler/v2"
30+
2931
schedulerclient "d7y.io/dragonfly/v2/pkg/rpc/scheduler/client"
3032
"d7y.io/dragonfly/v2/pkg/types"
3133
"d7y.io/dragonfly/v2/test/e2e/util"
@@ -104,7 +106,7 @@ var _ = Describe("Clients Leaving", func() {
104106
})
105107

106108
func calculateNormalHostCountFromScheduler(schedulerClient schedulerclient.V2) (hostCount int) {
107-
resp, err := schedulerClient.ListHosts(context.Background(), "")
109+
resp, err := schedulerClient.ListHosts(context.Background(), "", &schedulerv2.ListHostsRequest{})
108110
fmt.Println(resp, err)
109111
Expect(err).NotTo(HaveOccurred())
110112

0 commit comments

Comments
 (0)