From 2dca95c6dd2d9df30ef64b7e4095dab5dcded6e4 Mon Sep 17 00:00:00 2001 From: Rohan Mishra Date: Tue, 7 Jul 2026 08:46:20 +0000 Subject: [PATCH 1/2] Fix nil panic in UpdateCache when listapisresponse is empty (#211) --- config/cache.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/cache.go b/config/cache.go index 510075a..3e3e93b 100644 --- a/config/cache.go +++ b/config/cache.go @@ -112,6 +112,10 @@ func (c *Config) UpdateCache(response map[string]interface{}) interface{} { apiVerbMap = nil count := response["count"] + if response["api"] == nil { + fmt.Println("Error: empty API list received, sync failed") + return nil + } apiList := response["api"].([]interface{}) for _, node := range apiList { From 8df34dc6ac0675df9bee5e3e0598946cfa5f54ef Mon Sep 17 00:00:00 2001 From: Boris Stoyanov Date: Tue, 8 Sep 2026 14:19:06 +0300 Subject: [PATCH 2/2] Keep existing API cache when listApis returns an empty response Move the nil guard above the cache reset so a failed sync no longer clears the in-memory API cache, and return 0 so 'cmk sync' prints "Discovered 0 APIs" instead of "Discovered APIs". --- config/cache.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/cache.go b/config/cache.go index 3e3e93b..abdb28e 100644 --- a/config/cache.go +++ b/config/cache.go @@ -108,14 +108,15 @@ func (c *Config) SaveCache(response map[string]interface{}) { // UpdateCache uses auto-discovery data to update internal API cache func (c *Config) UpdateCache(response map[string]interface{}) interface{} { + if response["api"] == nil { + fmt.Fprintf(os.Stderr, "Error: empty API list received, sync failed. Existing API cache is kept.\n") + return 0 + } + apiCache = make(map[string]*API) apiVerbMap = nil count := response["count"] - if response["api"] == nil { - fmt.Println("Error: empty API list received, sync failed") - return nil - } apiList := response["api"].([]interface{}) for _, node := range apiList {