Skip to content

Commit c2d2a13

Browse files
authored
removed dependency on datastaore, updated TypedName on plugins (#215)
Signed-off-by: Nir Rozenbaum <[email protected]>
1 parent 31aff9d commit c2d2a13

File tree

11 files changed

+119
-187
lines changed

11 files changed

+119
-187
lines changed

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
k8s.io/client-go v0.33.2
1515
sigs.k8s.io/controller-runtime v0.21.0
1616
sigs.k8s.io/gateway-api v1.3.0
17-
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250629153429-5c851eb1ff8f
17+
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250704222130-0e1e964b9bec
1818
)
1919

2020
require (
@@ -84,10 +84,11 @@ require (
8484
go.uber.org/automaxprocs v1.6.0 // indirect
8585
go.uber.org/multierr v1.11.0 // indirect
8686
go.uber.org/zap v1.27.0 // indirect
87+
go.yaml.in/yaml/v2 v2.4.2 // indirect
8788
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
8889
golang.org/x/net v0.40.0 // indirect
8990
golang.org/x/oauth2 v0.30.0 // indirect
90-
golang.org/x/sync v0.14.0 // indirect
91+
golang.org/x/sync v0.15.0 // indirect
9192
golang.org/x/sys v0.33.0 // indirect
9293
golang.org/x/term v0.32.0 // indirect
9394
golang.org/x/text v0.25.0 // indirect
@@ -112,5 +113,5 @@ require (
112113
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
113114
sigs.k8s.io/randfill v1.0.0 // indirect
114115
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
115-
sigs.k8s.io/yaml v1.4.0 // indirect
116+
sigs.k8s.io/yaml v1.5.0 // indirect
116117
)

go.sum

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,10 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
190190
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
191191
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
192192
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
193+
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
194+
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
195+
go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE=
196+
go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI=
193197
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
194198
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
195199
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -208,8 +212,8 @@ golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKl
208212
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
209213
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
210214
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
211-
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
212-
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
215+
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
216+
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
213217
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
214218
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
215219
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -277,14 +281,15 @@ sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytI
277281
sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM=
278282
sigs.k8s.io/gateway-api v1.3.0 h1:q6okN+/UKDATola4JY7zXzx40WO4VISk7i9DIfOvr9M=
279283
sigs.k8s.io/gateway-api v1.3.0/go.mod h1:d8NV8nJbaRbEKem+5IuxkL8gJGOZ+FJ+NvOIltV8gDk=
280-
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250629153429-5c851eb1ff8f h1:ByLjkC8b3tq1DFMN/pqoM2oVMcOHxavL+KQd80137CQ=
281-
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250629153429-5c851eb1ff8f/go.mod h1:xgeYdEPZf/+87+Dp5zcz2vhbezBHjTg8lAfpPU2Xgp8=
284+
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250704222130-0e1e964b9bec h1:46xYN9Y8YZ/QHHrh+bEG0kXh9KFBxl6GMRjp2tgKcqk=
285+
sigs.k8s.io/gateway-api-inference-extension v0.0.0-20250704222130-0e1e964b9bec/go.mod h1:lki0jx1qysZSZT4Ai2BxuAcpx6G8g5oBgOGuuJzjy/k=
282286
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
283287
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
284288
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
285289
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
286290
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
287291
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
288292
sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
289-
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
290293
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
294+
sigs.k8s.io/yaml v1.5.0 h1:M10b2U7aEUY6hRtU870n2VTPgR5RZiL/I6Lcc2F4NUQ=
295+
sigs.k8s.io/yaml v1.5.0/go.mod h1:wZs27Rbxoai4C0f8/9urLZtZtF3avA3gKvGyPdDqTO4=

pkg/plugins/filter/by_label.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,6 @@ type byLabelFilterParameters struct {
2121
AllowsNoLabel bool `json:"allowsNoLabel"`
2222
}
2323

24-
// ByLabel - filters out pods based on the values defined by the given label
25-
type ByLabel struct {
26-
// name defines the filter name
27-
name string
28-
// labelName defines the name of the label to be checked
29-
labelName string
30-
// validValues defines list of valid label values
31-
validValues map[string]struct{}
32-
// allowsNoLabel - if true pods without given label will be considered as valid (not filtered out)
33-
allowsNoLabel bool
34-
}
35-
3624
var _ framework.Filter = &ByLabel{} // validate interface conformance
3725

3826
// ByLabelFilterFactory defines the factory function for the ByLabelFilter
@@ -58,22 +46,34 @@ func NewByLabel(name string, labelName string, allowsNoLabel bool, validValues .
5846
validValuesMap[v] = struct{}{}
5947
}
6048

61-
return &ByLabel{name: name, labelName: labelName, allowsNoLabel: allowsNoLabel, validValues: validValuesMap}
49+
return &ByLabel{
50+
typedName: plugins.TypedName{Type: ByLabelFilterType, Name: name},
51+
labelName: labelName,
52+
allowsNoLabel: allowsNoLabel,
53+
validValues: validValuesMap,
54+
}
6255
}
6356

64-
// Type returns the type of the filter
65-
func (f *ByLabel) Type() string {
66-
return ByLabelFilterType
57+
// ByLabel - filters out pods based on the values defined by the given label
58+
type ByLabel struct {
59+
// name defines the filter typed name
60+
typedName plugins.TypedName
61+
// labelName defines the name of the label to be checked
62+
labelName string
63+
// validValues defines list of valid label values
64+
validValues map[string]struct{}
65+
// allowsNoLabel - if true pods without given label will be considered as valid (not filtered out)
66+
allowsNoLabel bool
6767
}
6868

69-
// Name returns the name of the filter
70-
func (f *ByLabel) Name() string {
71-
return f.name
69+
// TypedName returns the typed name of the plugin
70+
func (f *ByLabel) TypedName() plugins.TypedName {
71+
return f.typedName
7272
}
7373

74-
// WithName sets the name of the filter.
74+
// WithName sets the name of the plugin.
7575
func (f *ByLabel) WithName(name string) *ByLabel {
76-
f.name = name
76+
f.typedName.Name = name
7777
return f
7878
}
7979

pkg/plugins/filter/by_labels.go

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,20 @@ func NewByLabelSelector(name string, selector *metav1.LabelSelector) (*ByLabelSe
4444
}
4545

4646
return &ByLabelSelector{
47-
name: name,
48-
selector: labelSelector,
47+
typedName: plugins.TypedName{Type: ByLabelSelectorFilterType, Name: name},
48+
selector: labelSelector,
4949
}, nil
5050
}
5151

5252
// ByLabelSelector filters out pods that do not match its label selector criteria
5353
type ByLabelSelector struct {
54-
name string
55-
selector labels.Selector
54+
typedName plugins.TypedName
55+
selector labels.Selector
5656
}
5757

58-
// Type returns the type of the filter
59-
func (blf *ByLabelSelector) Type() string {
60-
return ByLabelSelectorFilterType
61-
}
62-
63-
// Name returns the name of the instance of the filter.
64-
func (blf *ByLabelSelector) Name() string {
65-
return blf.name
66-
}
67-
68-
// WithName sets the name of the filter.
69-
func (blf *ByLabelSelector) WithName(name string) *ByLabelSelector {
70-
blf.name = name
71-
return blf
58+
// TypedName returns the typed name of the plugin
59+
func (blf *ByLabelSelector) TypedName() plugins.TypedName {
60+
return blf.typedName
7261
}
7362

7463
// Filter filters out all pods that do not satisfy the label selector

pkg/plugins/pre-request/pd_prerequest.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import (
1616
const (
1717
// PrefillHeaderHandlerType is the type of the PrefillHeaderHandler
1818
PrefillHeaderHandlerType = "prefill-header"
19-
20-
prefillPodHeader = "x-prefiller-url" // prefillPodHeader is the HTTP header name used to indicate Prefill worker
19+
// prefillPodHeader is the HTTP header name used to indicate Prefill worker
20+
prefillPodHeader = "x-prefiller-url"
2121

2222
defaultPrefillProfile = "prefill"
2323
)
@@ -36,7 +36,7 @@ func PrefillHeaderHandlerFactory(name string, rawParameters json.RawMessage, _ p
3636
}
3737
if rawParameters != nil {
3838
if err := json.Unmarshal(rawParameters, &parameters); err != nil {
39-
return nil, fmt.Errorf("failed to parse the parameters of the '%s' pre-request handler - %w", PrefillHeaderHandlerType, err)
39+
return nil, fmt.Errorf("failed to parse the parameters of the '%s' pre-request plugin - %w", PrefillHeaderHandlerType, err)
4040
}
4141
}
4242
return NewPrefillHeaderHandler(parameters.PrefillProfile).WithName(name), nil
@@ -45,30 +45,25 @@ func PrefillHeaderHandlerFactory(name string, rawParameters json.RawMessage, _ p
4545
// NewPrefillHeaderHandler initializes a new PrefillHeaderHandler and returns its pointer.
4646
func NewPrefillHeaderHandler(prefillProfile string) *PrefillHeaderHandler {
4747
return &PrefillHeaderHandler{
48-
name: PrefillHeaderHandlerType,
48+
typedName: plugins.TypedName{Type: PrefillHeaderHandlerType},
4949
prefillProfile: prefillProfile,
5050
}
5151
}
5252

5353
// PrefillHeaderHandler PreRequest plugin
5454
type PrefillHeaderHandler struct {
55-
name string
55+
typedName plugins.TypedName
5656
prefillProfile string
5757
}
5858

59-
// Type returns the type of the PreRequest plugin.
60-
func (p *PrefillHeaderHandler) Type() string {
61-
return PrefillHeaderHandlerType
62-
}
63-
64-
// Name returns the name of the instance of the filter.
65-
func (p *PrefillHeaderHandler) Name() string {
66-
return p.name
59+
// TypedName returns the typed name of the plugin.
60+
func (p *PrefillHeaderHandler) TypedName() plugins.TypedName {
61+
return p.typedName
6762
}
6863

69-
// WithName sets the name of the filter.
64+
// WithName sets the name of the plugin.
7065
func (p *PrefillHeaderHandler) WithName(name string) *PrefillHeaderHandler {
71-
p.name = name
66+
p.typedName.Name = name
7267
return p
7368
}
7469

pkg/plugins/profile/pd_profile_handler.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func PdProfileHandlerFactory(name string, rawParameters json.RawMessage, _ plugi
5353
// NewPdProfileHandler initializes a new PdProfileHandler and returns its pointer.
5454
func NewPdProfileHandler(prefillProfile string, decodeProfile string, pdThreshold int, hashBlockSize int) *PdProfileHandler {
5555
return &PdProfileHandler{
56-
name: PdProfileHandlerType,
56+
typedName: plugins.TypedName{Type: PdProfileHandlerType},
5757
decodeProfile: decodeProfile,
5858
prefillProfile: prefillProfile,
5959
pdThreshold: pdThreshold,
@@ -63,33 +63,27 @@ func NewPdProfileHandler(prefillProfile string, decodeProfile string, pdThreshol
6363

6464
// PdProfileHandler handles scheduler profiles for PD.
6565
type PdProfileHandler struct {
66-
name string
66+
typedName plugins.TypedName
6767
decodeProfile string
6868
prefillProfile string
6969
pdThreshold int
7070
hashBlockSize int
7171
}
7272

73-
// Type returns the type of the Profile Handler.
74-
func (h *PdProfileHandler) Type() string {
75-
return PdProfileHandlerType
73+
// TypedName returns the typed name of the plugin.
74+
func (h *PdProfileHandler) TypedName() plugins.TypedName {
75+
return h.typedName
7676
}
7777

78-
// Name returns the name of the instance of the filter.
79-
func (h *PdProfileHandler) Name() string {
80-
return h.name
81-
}
82-
83-
// WithName sets the name of the filter.
78+
// WithName sets the name of the plugin.
8479
func (h *PdProfileHandler) WithName(name string) *PdProfileHandler {
85-
h.name = name
80+
h.typedName.Name = name
8681
return h
8782
}
8883

8984
// Pick selects the SchedulingProfiles to run from the list of candidate profiles, while taking into consideration the request properties and the
9085
// previously executed cycles along with their results.
9186
func (h *PdProfileHandler) Pick(ctx context.Context, cycleState *types.CycleState, request *types.LLMRequest, profiles map[string]*framework.SchedulerProfile,
92-
9387
profileResults map[string]*types.ProfileRunResult) map[string]*framework.SchedulerProfile {
9488
if _, executed := profileResults[h.decodeProfile]; !executed {
9589
// if decode profile was not executed yet, first let the scheduler run the decode profile

pkg/plugins/scorer/kvcache_aware.go

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ func NewKVCacheAwareScorer(ctx context.Context) (*KVCacheAwareScorer, error) {
4646
config := kvcache.NewDefaultConfig()
4747

4848
redisAddr := os.Getenv(kvCacheRedisEnvVar)
49-
if redisAddr != "" {
50-
// to keep compatibility with deployments only specifying hostname:port: need to add protocol to front to enable parsing
51-
if !strings.HasPrefix(redisAddr, "redis://") && !strings.HasPrefix(redisAddr, "rediss://") && !strings.HasPrefix(redisAddr, "unix://") {
52-
redisAddr = "redis://" + redisAddr
53-
}
54-
} else {
55-
return nil, fmt.Errorf("environment variable %s is not set", kvCacheRedisEnvVar)
49+
if redisAddr == "" {
50+
return nil, fmt.Errorf("environment variable '%s' is not set", kvCacheRedisEnvVar)
51+
}
52+
53+
// to keep compatibility with deployments only specifying hostname:port: need to add protocol to front to enable parsing
54+
if !strings.HasPrefix(redisAddr, "redis://") && !strings.HasPrefix(redisAddr, "rediss://") && !strings.HasPrefix(redisAddr, "unix://") {
55+
redisAddr = "redis://" + redisAddr
5656
}
5757

5858
redisOpt, err := redis.ParseURL(redisAddr)
@@ -63,7 +63,7 @@ func NewKVCacheAwareScorer(ctx context.Context) (*KVCacheAwareScorer, error) {
6363

6464
hfToken := os.Getenv(huggingFaceTokenEnvVar)
6565
if hfToken == "" {
66-
return nil, fmt.Errorf("environment variable %s is not set", huggingFaceTokenEnvVar)
66+
return nil, fmt.Errorf("environment variable '%s' is not set", huggingFaceTokenEnvVar)
6767
}
6868

6969
config.TokenizersPoolConfig.HuggingFaceToken = hfToken
@@ -76,37 +76,32 @@ func NewKVCacheAwareScorer(ctx context.Context) (*KVCacheAwareScorer, error) {
7676
go kvCacheIndexer.Run(ctx)
7777

7878
return &KVCacheAwareScorer{
79-
name: KvCacheAwareScorerType,
79+
typedName: plugins.TypedName{Type: KvCacheAwareScorerType},
8080
kvCacheIndexer: kvCacheIndexer,
8181
}, nil
8282
}
8383

8484
// KVCacheAwareScorer uses the KVCacheIndexer to score pods based on KVCache awareness.
8585
type KVCacheAwareScorer struct {
86-
name string
86+
typedName plugins.TypedName
8787
kvCacheIndexer *kvcache.Indexer
8888
}
8989

90-
// Type returns the type of the scorer.
91-
func (s *KVCacheAwareScorer) Type() string {
92-
return KvCacheAwareScorerType
93-
}
94-
95-
// Name returns the name of the instance of the filter.
96-
func (s *KVCacheAwareScorer) Name() string {
97-
return s.name
90+
// TypedName returns the typed name of the plugin.
91+
func (s *KVCacheAwareScorer) TypedName() plugins.TypedName {
92+
return s.typedName
9893
}
9994

100-
// WithName sets the name of the filter.
95+
// WithName sets the name of the plugin.
10196
func (s *KVCacheAwareScorer) WithName(name string) *KVCacheAwareScorer {
102-
s.name = name
97+
s.typedName.Name = name
10398
return s
10499
}
105100

106101
// Score scores the provided pod based on the KVCache index state.
107102
// The returned scores are normalized to a range of 0-1.
108103
func (s *KVCacheAwareScorer) Score(ctx context.Context, _ *types.CycleState, request *types.LLMRequest, pods []types.Pod) map[types.Pod]float64 {
109-
loggerDebug := log.FromContext(ctx).WithName(s.name).V(logutil.DEBUG)
104+
loggerDebug := log.FromContext(ctx).WithName(s.typedName.String()).V(logutil.DEBUG)
110105
if request == nil {
111106
loggerDebug.Info("Request is nil, skipping scoring")
112107
return nil

pkg/plugins/scorer/load_aware_scorer.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,30 +40,25 @@ func LoadAwareScorerFactory(name string, rawParameters json.RawMessage, _ plugin
4040
// NewLoadAwareScorer creates a new load based scorer
4141
func NewLoadAwareScorer(queueThreshold int) *LoadAwareScorer {
4242
return &LoadAwareScorer{
43-
name: LoadAwareScorerType,
43+
typedName: plugins.TypedName{Type: LoadAwareScorerType},
4444
queueThreshold: float64(queueThreshold),
4545
}
4646
}
4747

4848
// LoadAwareScorer scorer that is based on load
4949
type LoadAwareScorer struct {
50-
name string
50+
typedName plugins.TypedName
5151
queueThreshold float64
5252
}
5353

54-
// Type returns the type of the scorer.
55-
func (s *LoadAwareScorer) Type() string {
56-
return LoadAwareScorerType
54+
// TypedName returns the typed name of the plugin.
55+
func (s *LoadAwareScorer) TypedName() plugins.TypedName {
56+
return s.typedName
5757
}
5858

59-
// Name returns the name of the instance of the filter.
60-
func (s *LoadAwareScorer) Name() string {
61-
return s.name
62-
}
63-
64-
// WithName sets the name of the filter.
59+
// WithName sets the name of the plugin.
6560
func (s *LoadAwareScorer) WithName(name string) *LoadAwareScorer {
66-
s.name = name
61+
s.typedName.Name = name
6762
return s
6863
}
6964

0 commit comments

Comments
 (0)