Skip to content

Commit 68113f6

Browse files
committed
fix: GRPCBackendGroup triggers service reconciliation
Closes:. commit_hash:1b8d81d3438b72340e72a99d8c15bd5c0c084f6a
1 parent fb2f7d2 commit 68113f6

File tree

6 files changed

+107
-4
lines changed

6 files changed

+107
-4
lines changed

.changes/v0.2.25.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## v0.2.25 - August 29, 2025
2+
### Fixed
3+
* GRPCBackendGroup creation triggers services reconciliation now

.mapping.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
".changes/v0.2.22.md":"opensource/yc-alb-ingress-controller/.changes/v0.2.22.md",
1313
".changes/v0.2.23.md":"opensource/yc-alb-ingress-controller/.changes/v0.2.23.md",
1414
".changes/v0.2.24.md":"opensource/yc-alb-ingress-controller/.changes/v0.2.24.md",
15+
".changes/v0.2.25.md":"opensource/yc-alb-ingress-controller/.changes/v0.2.25.md",
1516
".changie.yaml":"opensource/yc-alb-ingress-controller/.changie.yaml",
1617
".env.example":"opensource/yc-alb-ingress-controller/.env.example",
1718
".gitignore":"opensource/yc-alb-ingress-controller/.gitignore",
@@ -71,6 +72,7 @@
7172
"controllers/service/controller.go":"opensource/yc-alb-ingress-controller/controllers/service/controller.go",
7273
"controllers/service/eventhandlers/endpoints.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/endpoints.go",
7374
"controllers/service/eventhandlers/endpointslice.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/endpointslice.go",
75+
"controllers/service/eventhandlers/grpcbackendgroup.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/grpcbackendgroup.go",
7476
"controllers/service/eventhandlers/httpbackendgroup.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/httpbackendgroup.go",
7577
"controllers/service/eventhandlers/ingress.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/ingress.go",
7678
"controllers/service/eventhandlers/service.go":"opensource/yc-alb-ingress-controller/controllers/service/eventhandlers/service.go",

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Changelog
22

33

4+
## v0.2.25 - August 29, 2025
5+
### Fixed
6+
* GRPCBackendGroup creation triggers services reconciliation now
7+
48
## v0.2.24 - July 1, 2025
59
### Fixed
610
* Fix modify-request-header support

controllers/service/controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,11 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, useEndpointSlices bool)
393393
return fmt.Errorf("failed to watch http backend groups: %w", err)
394394
}
395395

396+
err = c.Watch(&source.Kind{Type: &v1alpha1.GrpcBackendGroup{}}, eventhandlers.NewGRPCBackendGroupEventHandler(mgr.GetLogger(), mgr.GetClient()))
397+
if err != nil {
398+
return fmt.Errorf("failed to watch grpc backend groups: %w", err)
399+
}
400+
396401
r.recorder = mgr.GetEventRecorderFor(k8s.ControllerName)
397402

398403
return nil
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package eventhandlers
2+
3+
import (
4+
"github.com/go-logr/logr"
5+
"k8s.io/apimachinery/pkg/types"
6+
"k8s.io/client-go/util/workqueue"
7+
ctrl "sigs.k8s.io/controller-runtime"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
9+
"sigs.k8s.io/controller-runtime/pkg/event"
10+
11+
"github.com/yandex-cloud/yc-alb-ingress-controller/api/v1alpha1"
12+
"github.com/yandex-cloud/yc-alb-ingress-controller/pkg/algo"
13+
)
14+
15+
type GRPCBackendGroupEventHandler struct {
16+
Log logr.Logger
17+
cli client.Client
18+
}
19+
20+
func (s GRPCBackendGroupEventHandler) Create(event event.CreateEvent, q workqueue.RateLimitingInterface) {
21+
s.Log.WithValues(
22+
"namespace", event.Object.GetNamespace(),
23+
"name", event.Object.GetName()).
24+
Info("Service create event detected")
25+
26+
s.Common(event.Object.(*v1alpha1.GrpcBackendGroup), q)
27+
}
28+
29+
func (s GRPCBackendGroupEventHandler) Update(event event.UpdateEvent, q workqueue.RateLimitingInterface) {
30+
s.Log.WithValues(
31+
"namespace", event.ObjectNew.GetNamespace(),
32+
"name", event.ObjectNew.GetName()).
33+
Info("Service update event detected")
34+
35+
oldServices := parseServicesFromGRPCBG(event.ObjectOld.(*v1alpha1.GrpcBackendGroup))
36+
newServices := parseServicesFromGRPCBG(event.ObjectNew.(*v1alpha1.GrpcBackendGroup))
37+
38+
// trigger only inserted or removed services
39+
toUpdate := algo.SetsExceptUnion(oldServices, newServices)
40+
for svc := range toUpdate {
41+
q.Add(ctrl.Request{NamespacedName: svc})
42+
}
43+
}
44+
45+
func (s GRPCBackendGroupEventHandler) Delete(event event.DeleteEvent, q workqueue.RateLimitingInterface) {
46+
s.Log.WithValues(
47+
"namespace", event.Object.GetNamespace(),
48+
"name", event.Object.GetName()).
49+
Info("Service delete event detected")
50+
51+
s.Common(event.Object.(*v1alpha1.GrpcBackendGroup), q)
52+
}
53+
54+
func (s GRPCBackendGroupEventHandler) Generic(event event.GenericEvent, q workqueue.RateLimitingInterface) {
55+
s.Log.WithValues(
56+
"namespace", event.Object.GetNamespace(),
57+
"name", event.Object.GetName()).
58+
Info("Generic node event detected")
59+
60+
s.Common(event.Object.(*v1alpha1.GrpcBackendGroup), q)
61+
}
62+
63+
func (s GRPCBackendGroupEventHandler) Common(ing *v1alpha1.GrpcBackendGroup, q workqueue.RateLimitingInterface) {
64+
svcs := parseServicesFromGRPCBG(ing)
65+
for svc := range svcs {
66+
q.Add(ctrl.Request{NamespacedName: svc})
67+
}
68+
}
69+
70+
func NewGRPCBackendGroupEventHandler(logger logr.Logger, cli client.Client) *GRPCBackendGroupEventHandler {
71+
return &GRPCBackendGroupEventHandler{Log: logger, cli: cli}
72+
}
73+
74+
func parseServicesFromGRPCBG(ing *v1alpha1.GrpcBackendGroup) map[types.NamespacedName]struct{} {
75+
result := make(map[types.NamespacedName]struct{})
76+
77+
for _, be := range ing.Spec.Backends {
78+
if be.Service == nil {
79+
continue
80+
}
81+
82+
result[types.NamespacedName{
83+
Name: be.Service.Name,
84+
Namespace: ing.Namespace,
85+
}] = struct{}{}
86+
}
87+
88+
return result
89+
}

controllers/service/eventhandlers/httpbackendgroup.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ func (s HTTPBackendGroupEventHandler) Update(event event.UpdateEvent, q workqueu
3232
"name", event.ObjectNew.GetName()).
3333
Info("Service update event detected")
3434

35-
oldServices := parseServicesFromBG(event.ObjectOld.(*v1alpha1.HttpBackendGroup))
36-
newServices := parseServicesFromBG(event.ObjectNew.(*v1alpha1.HttpBackendGroup))
35+
oldServices := parseServicesFromHTTPBG(event.ObjectOld.(*v1alpha1.HttpBackendGroup))
36+
newServices := parseServicesFromHTTPBG(event.ObjectNew.(*v1alpha1.HttpBackendGroup))
3737

3838
// trigger only inserted or removed services
3939
toUpdate := algo.SetsExceptUnion(oldServices, newServices)
@@ -61,7 +61,7 @@ func (s HTTPBackendGroupEventHandler) Generic(event event.GenericEvent, q workqu
6161
}
6262

6363
func (s HTTPBackendGroupEventHandler) Common(ing *v1alpha1.HttpBackendGroup, q workqueue.RateLimitingInterface) {
64-
svcs := parseServicesFromBG(ing)
64+
svcs := parseServicesFromHTTPBG(ing)
6565
for svc := range svcs {
6666
q.Add(ctrl.Request{NamespacedName: svc})
6767
}
@@ -71,7 +71,7 @@ func NewHTTPBackendGroupEventHandler(logger logr.Logger, cli client.Client) *HTT
7171
return &HTTPBackendGroupEventHandler{Log: logger, cli: cli}
7272
}
7373

74-
func parseServicesFromBG(ing *v1alpha1.HttpBackendGroup) map[types.NamespacedName]struct{} {
74+
func parseServicesFromHTTPBG(ing *v1alpha1.HttpBackendGroup) map[types.NamespacedName]struct{} {
7575
result := make(map[types.NamespacedName]struct{})
7676

7777
for _, be := range ing.Spec.Backends {

0 commit comments

Comments
 (0)