mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Watch for failing expansion using different function
This commit is contained in:
parent
de5e4963c1
commit
0e5dd6b7c9
@ -569,7 +569,7 @@ func validateRecoveryBehaviour(ctx context.Context, pvc *v1.PersistentVolumeClai
|
|||||||
func validateExpansionSuccess(ctx context.Context, pvc *v1.PersistentVolumeClaim, m *mockDriverSetup, test recoveryTest, expectedAllocatedSize string) {
|
func validateExpansionSuccess(ctx context.Context, pvc *v1.PersistentVolumeClaim, m *mockDriverSetup, test recoveryTest, expectedAllocatedSize string) {
|
||||||
var err error
|
var err error
|
||||||
ginkgo.By(fmt.Sprintf("Waiting for PV %s to be expanded to %s", pvc.Spec.VolumeName, test.recoverySize.String()))
|
ginkgo.By(fmt.Sprintf("Waiting for PV %s to be expanded to %s", pvc.Spec.VolumeName, test.recoverySize.String()))
|
||||||
err = testsuites.WaitForRecoveryPVSize(pvc, m.cs, csiResizeWaitPeriod)
|
err = testsuites.WaitForControllerVolumeResize(ctx, pvc, m.cs, csiResizeWaitPeriod)
|
||||||
framework.ExpectNoError(err, "While waiting for PV resize to finish")
|
framework.ExpectNoError(err, "While waiting for PV resize to finish")
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Waiting for PVC %s to be expanded to %s", pvc.Name, test.recoverySize.String()))
|
ginkgo.By(fmt.Sprintf("Waiting for PVC %s to be expanded to %s", pvc.Name, test.recoverySize.String()))
|
||||||
|
@ -184,7 +184,7 @@ func (v *volumeExpandTestSuite) DefineTests(driver storageframework.TestDriver,
|
|||||||
newSize := currentPvcSize.DeepCopy()
|
newSize := currentPvcSize.DeepCopy()
|
||||||
newSize.Add(resource.MustParse("1Gi"))
|
newSize.Add(resource.MustParse("1Gi"))
|
||||||
framework.Logf("currentPvcSize %v, newSize %v", currentPvcSize, newSize)
|
framework.Logf("currentPvcSize %v, newSize %v", currentPvcSize, newSize)
|
||||||
_, err = ExpandPVCSize(ctx, l.resource.Pvc, newSize, f.ClientSet)
|
_, err = ExpandPVCSizeToError(ctx, l.resource.Pvc, newSize, f.ClientSet)
|
||||||
gomega.Expect(err).To(gomega.MatchError(apierrors.IsForbidden, "While updating non-expandable PVC"))
|
gomega.Expect(err).To(gomega.MatchError(apierrors.IsForbidden, "While updating non-expandable PVC"))
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -343,6 +343,42 @@ func ExpandPVCSize(ctx context.Context, origPVC *v1.PersistentVolumeClaim, size
|
|||||||
return updatedPVC, nil
|
return updatedPVC, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExpandPVCSizeToError(ctx context.Context, origPVC *v1.PersistentVolumeClaim, size resource.Quantity, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
||||||
|
pvcName := origPVC.Name
|
||||||
|
updatedPVC := origPVC.DeepCopy()
|
||||||
|
|
||||||
|
var lastUpdateError error
|
||||||
|
|
||||||
|
waitErr := wait.PollUntilContextTimeout(ctx, resizePollInterval, 30*time.Second, true, func(pollContext context.Context) (bool, error) {
|
||||||
|
var err error
|
||||||
|
updatedPVC, err = c.CoreV1().PersistentVolumeClaims(origPVC.Namespace).Get(pollContext, pvcName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("error fetching pvc %q for resizing: %w", pvcName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
updatedPVC.Spec.Resources.Requests[v1.ResourceStorage] = size
|
||||||
|
updatedPVC, err = c.CoreV1().PersistentVolumeClaims(origPVC.Namespace).Update(pollContext, updatedPVC, metav1.UpdateOptions{})
|
||||||
|
if err == nil {
|
||||||
|
return false, fmt.Errorf("pvc %s should not be allowed to be updated", pvcName)
|
||||||
|
} else {
|
||||||
|
lastUpdateError = err
|
||||||
|
if apierrors.IsForbidden(err) {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
framework.Logf("Error updating pvc %s: %v", pvcName, err)
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if wait.Interrupted(waitErr) {
|
||||||
|
return nil, fmt.Errorf("timed out attempting to update PVC size. last update error: %w", lastUpdateError)
|
||||||
|
}
|
||||||
|
if waitErr != nil {
|
||||||
|
return nil, fmt.Errorf("failed to expand PVC size (check logs for error): %w", waitErr)
|
||||||
|
}
|
||||||
|
return updatedPVC, lastUpdateError
|
||||||
|
}
|
||||||
|
|
||||||
// WaitForResizingCondition waits for the pvc condition to be PersistentVolumeClaimResizing
|
// WaitForResizingCondition waits for the pvc condition to be PersistentVolumeClaimResizing
|
||||||
func WaitForResizingCondition(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error {
|
func WaitForResizingCondition(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error {
|
||||||
waitErr := wait.PollUntilContextTimeout(ctx, resizePollInterval, duration, true, func(ctx context.Context) (bool, error) {
|
waitErr := wait.PollUntilContextTimeout(ctx, resizePollInterval, duration, true, func(ctx context.Context) (bool, error) {
|
||||||
@ -392,34 +428,6 @@ func WaitForControllerVolumeResize(ctx context.Context, pvc *v1.PersistentVolume
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForRecoveryPVSize waits for the controller resize to be finished when we are reducing volume size
|
|
||||||
// This is different from WaitForControllerVolumeResize which just waits for PV to report bigger size than
|
|
||||||
// size requested.
|
|
||||||
func WaitForRecoveryPVSize(pvc *v1.PersistentVolumeClaim, c clientset.Interface, timeout time.Duration) error {
|
|
||||||
pvName := pvc.Spec.VolumeName
|
|
||||||
waitErr := wait.PollImmediate(resizePollInterval, timeout, func() (bool, error) {
|
|
||||||
pvcSpecSize := pvc.Spec.Resources.Requests.Storage()
|
|
||||||
|
|
||||||
pv, err := c.CoreV1().PersistentVolumes().Get(context.TODO(), pvName, metav1.GetOptions{})
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Errorf("error fetching pv %q for resizing %v", pvName, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
pvSize := pv.Spec.Capacity[v1.ResourceStorage]
|
|
||||||
|
|
||||||
// If pv size is greater than what is mentioned in pvc's status that means control-plane
|
|
||||||
// volume expansion is finished.
|
|
||||||
if pvSize.Cmp(*pvcSpecSize) == 0 {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
})
|
|
||||||
if waitErr != nil {
|
|
||||||
return fmt.Errorf("error while waiting for controller resize to finish: %v", waitErr)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForPendingFSResizeCondition waits for pvc to have resize condition
|
// WaitForPendingFSResizeCondition waits for pvc to have resize condition
|
||||||
func WaitForPendingFSResizeCondition(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
func WaitForPendingFSResizeCondition(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
||||||
var updatedPVC *v1.PersistentVolumeClaim
|
var updatedPVC *v1.PersistentVolumeClaim
|
||||||
@ -451,9 +459,9 @@ func WaitForPendingFSResizeCondition(ctx context.Context, pvc *v1.PersistentVolu
|
|||||||
// WaitForFSResize waits for the filesystem in the pv to be resized
|
// WaitForFSResize waits for the filesystem in the pv to be resized
|
||||||
func WaitForFSResize(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
func WaitForFSResize(ctx context.Context, pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
||||||
var updatedPVC *v1.PersistentVolumeClaim
|
var updatedPVC *v1.PersistentVolumeClaim
|
||||||
waitErr := wait.PollImmediate(resizePollInterval, totalResizeWaitPeriod, func() (bool, error) {
|
waitErr := wait.PollUntilContextTimeout(ctx, resizePollInterval, totalResizeWaitPeriod, true, func(pollContext context.Context) (bool, error) {
|
||||||
var err error
|
var err error
|
||||||
updatedPVC, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Get(context.TODO(), pvc.Name, metav1.GetOptions{})
|
updatedPVC, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Get(pollContext, pvc.Name, metav1.GetOptions{})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("error fetching pvc %q for checking for resize status : %w", pvc.Name, err)
|
return false, fmt.Errorf("error fetching pvc %q for checking for resize status : %w", pvc.Name, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user