From 2a429aac655e6dbda684e931ed08bcd2d629ec2f Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Mon, 4 Apr 2022 15:52:47 -0700 Subject: [PATCH] Fix crash on early snapshot Don't attempt to retrieve snapshot metadata configmap if the apiserver isn't available. This could be triggered if the cron expression caused a snapshot to be triggered before the apiserver is up. Signed-off-by: Brad Davidson --- pkg/etcd/etcd.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index cb9d40d5cdd..b967011b098 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -1251,19 +1251,22 @@ func (e *ETCD) Snapshot(ctx context.Context, config *config.Control) error { return err } - logrus.Debugf("Attempting to retrieve extra metadata from %s ConfigMap", snapshotExtraMetadataConfigMapName) + // make sure the core.Factory is initialized before attempting to add snapshot metadata var extraMetadata string - if snapshotExtraMetadataConfigMap, err := e.config.Runtime.Core.Core().V1().ConfigMap().Get(metav1.NamespaceSystem, snapshotExtraMetadataConfigMapName, metav1.GetOptions{}); err != nil { - logrus.Debugf("Error encountered attempting to retrieve extra metadata from %s ConfigMap, error: %v", snapshotExtraMetadataConfigMapName, err) - extraMetadata = "" + if e.config.Runtime.Core == nil { + logrus.Debugf("Cannot retrieve extra metadata from %s ConfigMap: runtime core not ready", snapshotExtraMetadataConfigMapName) } else { - if m, err := json.Marshal(snapshotExtraMetadataConfigMap.Data); err != nil { - logrus.Debugf("Error attempting to marshal extra metadata contained in %s ConfigMap, error: %v", snapshotExtraMetadataConfigMapName, err) - extraMetadata = "" + logrus.Debugf("Attempting to retrieve extra metadata from %s ConfigMap", snapshotExtraMetadataConfigMapName) + if snapshotExtraMetadataConfigMap, err := e.config.Runtime.Core.Core().V1().ConfigMap().Get(metav1.NamespaceSystem, snapshotExtraMetadataConfigMapName, metav1.GetOptions{}); err != nil { + logrus.Debugf("Error encountered attempting to retrieve extra metadata from %s ConfigMap, error: %v", snapshotExtraMetadataConfigMapName, err) } else { - logrus.Debugf("Setting extra metadata from %s ConfigMap", snapshotExtraMetadataConfigMapName) - logrus.Tracef("Marshalled extra metadata in %s ConfigMap was: %s", snapshotExtraMetadataConfigMapName, string(m)) - extraMetadata = base64.StdEncoding.EncodeToString(m) + if m, err := json.Marshal(snapshotExtraMetadataConfigMap.Data); err != nil { + logrus.Debugf("Error attempting to marshal extra metadata contained in %s ConfigMap, error: %v", snapshotExtraMetadataConfigMapName, err) + } else { + logrus.Debugf("Setting extra metadata from %s ConfigMap", snapshotExtraMetadataConfigMapName) + logrus.Tracef("Marshalled extra metadata in %s ConfigMap was: %s", snapshotExtraMetadataConfigMapName, string(m)) + extraMetadata = base64.StdEncoding.EncodeToString(m) + } } }