From a8fdd3f2dbdd7e96a1633075f97ce88dbfb27f93 Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Fri, 18 May 2018 14:42:20 +0200 Subject: [PATCH] Fix crash during sync. Do not use statefulset number of pods to figure out running ones for volume resizing, since the statefulset pointer could be nil. Instead, look at the actual running pods. --- pkg/cluster/volumes.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkg/cluster/volumes.go b/pkg/cluster/volumes.go index bc730dde3..42b5858fc 100644 --- a/pkg/cluster/volumes.go +++ b/pkg/cluster/volumes.go @@ -57,7 +57,14 @@ func (c *Cluster) listPersistentVolumes() ([]*v1.PersistentVolume, error) { if err != nil { return nil, fmt.Errorf("could not list cluster's PersistentVolumeClaims: %v", err) } - lastPodIndex := *c.Statefulset.Spec.Replicas - 1 + + pods, err := c.listPods() + if err != nil { + return nil, fmt.Errorf("could not get list of running pods for resizing persistent volumes: %v", err) + } + + lastPodIndex := len(pods) - 1 + for _, pvc := range pvcs { lastDash := strings.LastIndex(pvc.Name, "-") if lastDash > 0 && lastDash < len(pvc.Name)-1 { @@ -65,7 +72,7 @@ func (c *Cluster) listPersistentVolumes() ([]*v1.PersistentVolume, error) { if err != nil { return nil, fmt.Errorf("could not convert last part of the persistent volume claim name %q to a number", pvc.Name) } - if int32(pvcNumber) > lastPodIndex { + if pvcNumber > lastPodIndex { c.logger.Debugf("skipping persistent volume %q corresponding to a non-running pods", pvc.Name) continue } @@ -93,6 +100,7 @@ func (c *Cluster) resizeVolumes(newVolume spec.Volume, resizers []volumes.Volume if err != nil { return fmt.Errorf("could not list persistent volumes: %v", err) } + for _, pv := range pvs { volumeSize := quantityToGigabyte(pv.Spec.Capacity[v1.ResourceStorage]) if volumeSize > newSize {