From 1ea8b3bbe6a43fa668b244e0aeb97f6be45f13a6 Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Thu, 24 May 2018 11:05:19 +0200 Subject: [PATCH] Fix a crash on node migration. After an unsuccessful initial cluster sync it may happen that the cluster statefulset is empty. This has been made more likely since 88d6a7be3, since it has introduced syncing volumes before statefulsets, and the volume sync mail fail for different reasons (i.e. the volume has been shrinked, or too many calls to Amazon). --- pkg/cluster/pod.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/cluster/pod.go b/pkg/cluster/pod.go index 432597f7f..ea3e02dcd 100644 --- a/pkg/cluster/pod.go +++ b/pkg/cluster/pod.go @@ -203,6 +203,15 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error { c.logger.Warningf("pod %q is not a master", podName) return nil } + // we must have a statefulset in the cluster for the migration to work + if c.Statefulset == nil { + sset, err := c.KubeClient.StatefulSets(c.Namespace).Get(c.statefulSetName(), metav1.GetOptions{}) + if err != nil { + return fmt.Errorf("could not retrieve cluster statefulset: %v", err) + } + c.Statefulset = sset + } + // We may not have a cached statefulset if the initial cluster sync has aborted, revert to the spec in that case. if *c.Statefulset.Spec.Replicas == 1 { c.logger.Warningf("single master pod for cluster %q, migration will cause longer downtime of the master instance", c.clusterName()) } else {