mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 21:53:52 +00:00
Return attach error to A/D controller.
WaitForAttach runs on nodes, not in A/D controller.
This commit is contained in:
@@ -102,17 +102,11 @@ func (c *csiAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string
|
|||||||
glog.V(4).Info(log("attachment [%v] for volume [%v] created successfully", attachID, csiSource.VolumeHandle))
|
glog.V(4).Info(log("attachment [%v] for volume [%v] created successfully", attachID, csiSource.VolumeHandle))
|
||||||
}
|
}
|
||||||
|
|
||||||
// probe for attachment update here
|
|
||||||
// NOTE: any error from waiting for attachment is logged only. This is because
|
|
||||||
// the primary intent of the enclosing method is to create VolumeAttachment.
|
|
||||||
// DONOT return that error here as it is mitigated in attacher.WaitForAttach.
|
|
||||||
volAttachmentOK := true
|
|
||||||
if _, err := c.waitForVolumeAttachment(csiSource.VolumeHandle, attachID, csiTimeout); err != nil {
|
if _, err := c.waitForVolumeAttachment(csiSource.VolumeHandle, attachID, csiTimeout); err != nil {
|
||||||
volAttachmentOK = false
|
return "", err
|
||||||
glog.Error(log("attacher.Attach attempted to wait for attachment to be ready, but failed with: %v", err))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(4).Info(log("attacher.Attach finished OK with VolumeAttachment verified=%t: attachment object [%s]", volAttachmentOK, attachID))
|
glog.V(4).Info(log("attacher.Attach finished OK with VolumeAttachment object [%s]", attachID))
|
||||||
|
|
||||||
return attachID, nil
|
return attachID, nil
|
||||||
}
|
}
|
||||||
|
@@ -64,6 +64,7 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
driverName string
|
driverName string
|
||||||
volumeName string
|
volumeName string
|
||||||
attachID string
|
attachID string
|
||||||
|
injectAttacherError bool
|
||||||
shouldFail bool
|
shouldFail bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@@ -104,6 +105,15 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
attachID: getAttachmentName("vol02", "driver02", "node02"),
|
attachID: getAttachmentName("vol02", "driver02", "node02"),
|
||||||
shouldFail: true,
|
shouldFail: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "attacher error",
|
||||||
|
nodeName: "node02",
|
||||||
|
driverName: "driver02",
|
||||||
|
volumeName: "vol02",
|
||||||
|
attachID: getAttachmentName("vol02", "driver02", "node02"),
|
||||||
|
injectAttacherError: true,
|
||||||
|
shouldFail: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// attacher loop
|
// attacher loop
|
||||||
@@ -127,6 +137,9 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
if !fail && err != nil {
|
if !fail && err != nil {
|
||||||
t.Errorf("expecting no failure, but got err: %v", err)
|
t.Errorf("expecting no failure, but got err: %v", err)
|
||||||
}
|
}
|
||||||
|
if fail && err == nil {
|
||||||
|
t.Errorf("expecting failure, but got no err")
|
||||||
|
}
|
||||||
if attachID != id && !fail {
|
if attachID != id && !fail {
|
||||||
t.Errorf("expecting attachID %v, got %v", id, attachID)
|
t.Errorf("expecting attachID %v, got %v", id, attachID)
|
||||||
}
|
}
|
||||||
@@ -153,8 +166,15 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
|
|
||||||
if attach == nil {
|
if attach == nil {
|
||||||
t.Logf("attachment not found for id:%v", tc.attachID)
|
t.Logf("attachment not found for id:%v", tc.attachID)
|
||||||
|
} else {
|
||||||
|
if tc.injectAttacherError {
|
||||||
|
attach.Status.Attached = false
|
||||||
|
attach.Status.AttachError = &storage.VolumeError{
|
||||||
|
Message: "attacher error",
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
attach.Status.Attached = true
|
attach.Status.Attached = true
|
||||||
|
}
|
||||||
_, err = csiAttacher.k8s.StorageV1beta1().VolumeAttachments().Update(attach)
|
_, err = csiAttacher.k8s.StorageV1beta1().VolumeAttachments().Update(attach)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
Reference in New Issue
Block a user