Skip to content
This repository was archived by the owner on Dec 2, 2025. It is now read-only.

Commit 373f603

Browse files
zongzwgitee-org
authored andcommitted
!40 eliminate endless periodical false-positive node events
Merge pull request !40 from zongzw/zong-less-node-events
2 parents 301c665 + 37653c7 commit 373f603

File tree

3 files changed

+59
-65
lines changed

3 files changed

+59
-65
lines changed

controllers/v1_controller.go

Lines changed: 11 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package controllers
1919
import (
2020
"context"
2121
"fmt"
22+
"reflect"
2223
"time"
2324

2425
"gitee.com/zongzw/bigip-kubernetes-gateway/k8s"
@@ -93,48 +94,17 @@ func (r *NodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
9394
return ctrl.Result{Requeue: true}, nil
9495
}
9596

96-
oIpAddresses := []string{}
97-
nIpAddresses := []string{}
9897
ocfgs := map[string]interface{}{}
9998
ncfgs := map[string]interface{}{}
10099

101-
oIpToMacV4 := map[string]string{}
102-
// oIpToMacV6 := map[string]string{}
103-
nIpToMacV4 := map[string]string{}
104-
// nIpToMacV6 := map[string]string{}
105-
106100
var obj v1.Node
107-
zlog := log.FromContext(ctx)
108-
zlog.V(1).Info("resource event: " + req.NamespacedName.String())
101+
// zlog := log.FromContext(ctx)
102+
// zlog.V(1).Info("resource event: " + req.NamespacedName.String())
109103
if err := r.Get(ctx, req.NamespacedName, &obj); err != nil {
110104
if client.IgnoreNotFound(err) == nil {
111-
if pkg.ActiveSIGs.Mode == "calico" {
112-
oIpAddresses = k8s.NodeCache.AllIpAddresses()
113-
if ocfgs, err = pkg.ParseNeighsFrom("gwcBGP", "64512", "64512", oIpAddresses); err != nil {
114-
return ctrl.Result{}, err
115-
}
116-
}
117-
if pkg.ActiveSIGs.Mode == "flannel" {
118-
oIpToMacV4, _ = k8s.NodeCache.AllIpToMac()
119-
if ocfgs, err = pkg.ParseFdbsFrom(pkg.ActiveSIGs.VxlanTunnelName, oIpToMacV4); err != nil {
120-
return ctrl.Result{}, err
121-
}
122-
}
123-
124105
k8s.NodeCache.Unset(req.Name)
125-
126-
if pkg.ActiveSIGs.Mode == "calico" {
127-
nIpAddresses = k8s.NodeCache.AllIpAddresses()
128-
129-
if ncfgs, err = pkg.ParseNeighsFrom("gwcBGP", "64512", "64512", nIpAddresses); err != nil {
130-
return ctrl.Result{}, err
131-
}
132-
}
133-
if pkg.ActiveSIGs.Mode == "flannel" {
134-
nIpToMacV4, _ = k8s.NodeCache.AllIpToMac()
135-
if ncfgs, err = pkg.ParseFdbsFrom(pkg.ActiveSIGs.VxlanTunnelName, nIpToMacV4); err != nil {
136-
return ctrl.Result{}, err
137-
}
106+
if ncfgs, err = pkg.ParseNodeConfigs(); err != nil {
107+
return ctrl.Result{}, err
138108
}
139109
pkg.PendingDeploys <- pkg.DeployRequest{
140110
Meta: fmt.Sprintf("refreshing for request '%s'", req.Name),
@@ -148,36 +118,14 @@ func (r *NodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
148118
return ctrl.Result{}, err
149119
}
150120
} else {
151-
if pkg.ActiveSIGs.Mode == "calico" {
152-
oIpAddresses = k8s.NodeCache.AllIpAddresses()
153-
154-
if ocfgs, err = pkg.ParseNeighsFrom("gwcBGP", "64512", "64512", oIpAddresses); err != nil {
155-
return ctrl.Result{}, err
156-
}
157-
}
158-
159-
if pkg.ActiveSIGs.Mode == "flannel" {
160-
oIpToMacV4, _ = k8s.NodeCache.AllIpToMac()
161-
if ocfgs, err = pkg.ParseFdbsFrom(pkg.ActiveSIGs.VxlanTunnelName, oIpToMacV4); err != nil {
162-
return ctrl.Result{}, err
163-
}
164-
}
165-
121+
orig := k8s.NodeCache.Get(obj.Name)
166122
k8s.NodeCache.Set(obj.DeepCopy())
167-
168-
if pkg.ActiveSIGs.Mode == "calico" {
169-
nIpAddresses = k8s.NodeCache.AllIpAddresses()
170-
if ncfgs, err = pkg.ParseNeighsFrom("gwcBGP", "64512", "64512", nIpAddresses); err != nil {
171-
return ctrl.Result{}, err
172-
}
173-
123+
// use reflect.DeepEqual to eliminate endless false-positive node events
124+
if newa := k8s.NodeCache.Get(obj.Name); reflect.DeepEqual(orig, newa) {
125+
return ctrl.Result{}, nil
174126
}
175-
176-
if pkg.ActiveSIGs.Mode == "flannel" {
177-
nIpToMacV4, _ = k8s.NodeCache.AllIpToMac()
178-
if ncfgs, err = pkg.ParseFdbsFrom(pkg.ActiveSIGs.VxlanTunnelName, nIpToMacV4); err != nil {
179-
return ctrl.Result{}, err
180-
}
127+
if ncfgs, err = pkg.ParseNodeConfigs(); err != nil {
128+
return ctrl.Result{}, err
181129
}
182130
pkg.PendingDeploys <- pkg.DeployRequest{
183131
Meta: fmt.Sprintf("refreshing for request '%s'", req.Name),

main.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"io/ioutil"
2424
"os"
2525
"strings"
26+
"time"
2627

2728
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
2829
// to ensure that exec-entrypoint and run can make use of them.
@@ -237,6 +238,29 @@ func main() {
237238

238239
go pkg.ActiveSIGs.SyncAllResources(mgr)
239240

241+
go func() {
242+
for {
243+
<-time.After(100 * time.Millisecond)
244+
if pkg.ActiveSIGs.SyncedAtStart {
245+
break
246+
}
247+
}
248+
249+
if ncfgs, err := pkg.ParseNodeConfigs(); err != nil {
250+
setupLog.Error(err, "unable to parse nodes config for net setup")
251+
os.Exit(1)
252+
} else {
253+
pkg.PendingDeploys <- pkg.DeployRequest{
254+
Meta: "net setup at startup",
255+
From: nil,
256+
To: &ncfgs,
257+
StatusFunc: func() {},
258+
Partition: "Common",
259+
Context: context.TODO(),
260+
}
261+
}
262+
}()
263+
240264
setupLog.Info("starting manager")
241265
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
242266
setupLog.Error(err, "problem running manager")

pkg/parser.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ func parseiRulesFrom(className string, hr *gatewayv1beta1.HTTPRoute, rlt map[str
636636
return nil
637637
}
638638

639-
func ParseNeighsFrom(routerName, localAs, remoteAs string, addresses []string) (map[string]interface{}, error) {
639+
func parseNeighsFrom(routerName, localAs, remoteAs string, addresses []string) (map[string]interface{}, error) {
640640
rlt := map[string]interface{}{}
641641

642642
name := strings.Join([]string{"Common", routerName}, ".")
@@ -662,7 +662,7 @@ func ParseNeighsFrom(routerName, localAs, remoteAs string, addresses []string) (
662662
}, nil
663663
}
664664

665-
func ParseFdbsFrom(tunnelName string, iPToMac map[string]string) (map[string]interface{}, error) {
665+
func parseFdbsFrom(tunnelName string, iPToMac map[string]string) (map[string]interface{}, error) {
666666
rlt := map[string]interface{}{}
667667

668668
rlt["net/fdb/tunnel/"+tunnelName] = map[string]interface{}{
@@ -684,3 +684,25 @@ func ParseFdbsFrom(tunnelName string, iPToMac map[string]string) (map[string]int
684684
"": rlt,
685685
}, nil
686686
}
687+
688+
func ParseNodeConfigs() (map[string]interface{}, error) {
689+
cfgs := map[string]interface{}{}
690+
var err error
691+
692+
if ActiveSIGs.Mode == "calico" {
693+
nIpAddresses := k8s.NodeCache.AllIpAddresses()
694+
if cfgs, err = parseNeighsFrom("gwcBGP", "64512", "64512", nIpAddresses); err != nil {
695+
return map[string]interface{}{}, err
696+
}
697+
698+
}
699+
700+
if ActiveSIGs.Mode == "flannel" {
701+
nIpToMacV4, _ := k8s.NodeCache.AllIpToMac()
702+
if cfgs, err = parseFdbsFrom(ActiveSIGs.VxlanTunnelName, nIpToMacV4); err != nil {
703+
return map[string]interface{}{}, err
704+
}
705+
}
706+
707+
return cfgs, nil
708+
}

0 commit comments

Comments
 (0)