From 78ae2a11c70ee03a564b82f5ca9f23e805cd65cb Mon Sep 17 00:00:00 2001 From: Fran Bull Date: Fri, 12 Apr 2024 13:34:14 -0700 Subject: [PATCH] appc: write discovered domains to StateStore If the controlknob is on. This will allow us to remove discovered routes associated with a particular domain. Updates #11008 Signed-off-by: Fran Bull --- appc/appconnector.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/appc/appconnector.go b/appc/appconnector.go index 6d06656f9..4d0c5d00b 100644 --- a/appc/appconnector.go +++ b/appc/appconnector.go @@ -103,6 +103,18 @@ func (e *AppConnector) ShouldStoreRoutes() bool { return e.storeRoutesFunc != nil } +// storeRoutesLocked takes the current state of the AppConnector and persists it +func (e *AppConnector) storeRoutesLocked() error { + if !e.ShouldStoreRoutes() { + return nil + } + return e.storeRoutesFunc(&RouteInfo{ + Control: e.controlRoutes, + Domains: e.domains, + Wildcards: e.wildcards, + }) +} + // UpdateDomainsAndRoutes starts an asynchronous update of the configuration // given the new domains and routes. func (e *AppConnector) UpdateDomainsAndRoutes(domains []string, routes []netip.Prefix) { @@ -199,6 +211,9 @@ nextRoute: } e.controlRoutes = routes + if err := e.storeRoutesLocked(); err != nil { + e.logf("failed to store route info: %v", err) + } } // Domains returns the currently configured domain list. @@ -409,6 +424,9 @@ func (e *AppConnector) scheduleAdvertisement(domain string, routes ...netip.Pref e.logf("[v2] advertised route for %v: %v", domain, addr) } } + if err := e.storeRoutesLocked(); err != nil { + e.logf("failed to store route info: %v", err) + } }) }