Skip to content

Commit c4944db

Browse files
committed
Adjust OVN TransitSwitchIP initialization
We've observed E2E failures on route agent restart that was caused by the addition of the TransitSwitchIP refactoring. On code inspection, there's a potential timing issue related to initialization of the TransitSwitchIP. The Init method is called by NonGatewayRouteHandler.Init however the NewNonGatewayRouteController is started before that in Handler.Init so, depending on timing, nonGatewayRouteCreatedOrUpdated could get invoked prior to initialization of the TransitSwitchIP, in which case it would observe an empty IP. To avoid this, move the TransitSwitchIP.Init call to Handler.Init prior to starting the NewNonGatewayRouteController. Signed-off-by: Tom Pantelis <[email protected]>
1 parent 7582781 commit c4944db

File tree

5 files changed

+12
-9
lines changed

5 files changed

+12
-9
lines changed

pkg/routeagent_driver/handlers/ovn/handler.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ type HandlerConfig struct {
5151
DynClient dynamic.Interface
5252
WatcherConfig *watcher.Config
5353
NewOVSDBClient NewOVSDBClientFn
54-
TransitSwitchIP TransitSwitchIPGetter
54+
TransitSwitchIP TransitSwitchIP
5555
}
5656

5757
type Handler struct {
@@ -114,6 +114,11 @@ func (ovn *Handler) Init() error {
114114
return errors.Wrapf(err, "error getting connection handler to connect to OvnDB")
115115
}
116116

117+
err = ovn.TransitSwitchIP.Init(ovn.K8sClient)
118+
if err != nil {
119+
return errors.Wrap(err, "error initializing TransitSwitchIP")
120+
}
121+
117122
gatewayRouteController, err := NewGatewayRouteController(*ovn.WatcherConfig, connectionHandler, ovn.Namespace)
118123
if err != nil {
119124
return err

pkg/routeagent_driver/handlers/ovn/handler_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ var _ = Describe("Handler", func() {
102102
}))
103103

104104
Expect(ovsdbClient.Connected()).To(BeTrue())
105-
Expect(transitSwitchIP.Init(t.k8sClient)).To(Succeed())
106105
})
107106

108107
When("a remote Endpoint is created, updated, and deleted", func() {

pkg/routeagent_driver/handlers/ovn/non_gateway_route_handler.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,26 @@ import (
3131
corev1 "k8s.io/api/core/v1"
3232
apierrors "k8s.io/apimachinery/pkg/api/errors"
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
34-
"k8s.io/client-go/kubernetes"
3534
)
3635

3736
type NonGatewayRouteHandler struct {
3837
event.HandlerBase
3938
event.NodeHandlerBase
4039
smClient submarinerClientset.Interface
41-
k8sClient kubernetes.Interface
4240
transitSwitchIP TransitSwitchIP
4341
}
4442

45-
func NewNonGatewayRouteHandler(smClient submarinerClientset.Interface, k8sClient kubernetes.Interface, transitSwitchIP TransitSwitchIP,
43+
func NewNonGatewayRouteHandler(smClient submarinerClientset.Interface, transitSwitchIP TransitSwitchIP,
4644
) *NonGatewayRouteHandler {
4745
return &NonGatewayRouteHandler{
4846
smClient: smClient,
49-
k8sClient: k8sClient,
5047
transitSwitchIP: transitSwitchIP,
5148
}
5249
}
5350

5451
func (h *NonGatewayRouteHandler) Init() error {
5552
logger.Info("Starting NonGatewayRouteHandler")
56-
return errors.Wrap(h.transitSwitchIP.Init(h.k8sClient), "error initializing TransitSwitchIP")
53+
return nil
5754
}
5855

5956
func (h *NonGatewayRouteHandler) GetName() string {

pkg/routeagent_driver/handlers/ovn/non_gateway_route_handler_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ var _ = Describe("NonGatewayRouteHandler", func() {
3838
t := newTestDriver()
3939

4040
JustBeforeEach(func() {
41-
t.Start(ovn.NewNonGatewayRouteHandler(t.submClient, t.k8sClient, ovn.NewTransitSwitchIP()))
41+
tsIP := ovn.NewTransitSwitchIP()
42+
t.Start(ovn.NewNonGatewayRouteHandler(t.submClient, tsIP))
43+
Expect(tsIP.Init(t.k8sClient)).To(Succeed())
4244
})
4345

4446
awaitNonGatewayRoute := func(ep *submarinerv1.Endpoint) {

pkg/routeagent_driver/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func main() {
156156
TransitSwitchIP: transitSwitchIP,
157157
}),
158158
ovn.NewGatewayRouteHandler(smClientset),
159-
ovn.NewNonGatewayRouteHandler(smClientset, k8sClientSet, transitSwitchIP),
159+
ovn.NewNonGatewayRouteHandler(smClientset, transitSwitchIP),
160160
cabledriver.NewXRFMCleanupHandler(),
161161
cabledriver.NewVXLANCleanup(),
162162
mtu.NewMTUHandler(env.ClusterCidr, len(env.GlobalCidr) != 0, getTCPMssValue(localNode)),

0 commit comments

Comments
 (0)