UPSTREAM: 53831: Fix volume reconciler test flake
@@ -456,15 +456,9 @@ func Test_Run_OneVolumeAttachAndDetachMultipleNodesWithReadWriteOnce(t *testing.
nodesForVolume := asw.GetNodesForVolume(generatedVolumeName)
// check if multiattach is marked
- // at least one volume should be marked with multiattach error
+ // at least one volume+node should be marked with multiattach error
nodeAttachedTo := nodesForVolume[0]
- for _, volumeToAttach := range dsw.GetVolumesToAttach() {
- if volumeToAttach.NodeName != nodeAttachedTo {
- if !volumeToAttach.MultiAttachErrorReported {
- t.Fatalf("Expected volume %q on node %q to have multiattach error", volumeToAttach.VolumeName, volumeToAttach.NodeName)
- }
- }
- }
+ waitForMultiAttachErrorOnNode(t, nodeAttachedTo, dsw)
// Act
podToDelete := ""
@@ -495,6 +489,28 @@ func Test_Run_OneVolumeAttachAndDetachMultipleNodesWithReadWriteOnce(t *testing.
waitForTotalAttachCallCount(t, 2 /* expectedAttachCallCount */, fakePlugin)
}
+func waitForMultiAttachErrorOnNode(
+ t *testing.T,
+ attachedNode k8stypes.NodeName,
+ dsow cache.DesiredStateOfWorld) {
+ multAttachCheckFunc := func() (bool, error) {
+ for _, volumeToAttach := range dsow.GetVolumesToAttach() {
+ if volumeToAttach.NodeName != attachedNode {
+ if volumeToAttach.MultiAttachErrorReported {
+ return true, nil
+ }
+ }
+ }
+ t.Logf("Warning: MultiAttach error not yet set on Node. Will retry.")
+ return false, nil
+ }
+
+ err := retryWithExponentialBackOff(100*time.Millisecond, multAttachCheckFunc)
+ if err != nil {
+ t.Fatalf("Timed out waiting for MultiAttach Error to be set on non-attached node")
+ }
+}
+
func waitForNewAttacherCallCount(
t *testing.T,
expectedCallCount int,
