-
Notifications
You must be signed in to change notification settings - Fork 814
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
utilize latest go sdk to ensure createVolume idempotency #982
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -115,19 +115,6 @@ func (d *controllerService) CreateVolume(ctx context.Context, req *csi.CreateVol | |
} | ||
defer d.inFlight.Delete(volName) | ||
|
||
disk, err := d.cloud.GetDiskByName(ctx, volName, volSizeBytes) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With the volumeName in the ClientToken, we no longer need describeVolume to check if the volume has already been created or not. But we will also lose some visibility to customer, if the two createVolume requests have same clientToken(volumeName) but different parameters (size or snapshotId), ebs api will return general idempotency violation exception. (instead of saying diff size or diff snapshotId) Open to any idea, if you want me to add it back There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i'm good with removing this code |
||
if err != nil { | ||
switch err { | ||
case cloud.ErrNotFound: | ||
case cloud.ErrMultiDisks: | ||
return nil, status.Error(codes.Internal, err.Error()) | ||
case cloud.ErrDiskExistsDiffSize: | ||
return nil, status.Error(codes.AlreadyExists, err.Error()) | ||
default: | ||
return nil, status.Error(codes.Internal, err.Error()) | ||
} | ||
} | ||
|
||
var ( | ||
volumeType string | ||
iopsPerGB int | ||
|
@@ -203,14 +190,6 @@ func (d *controllerService) CreateVolume(ctx context.Context, req *csi.CreateVol | |
snapshotID = sourceSnapshot.GetSnapshotId() | ||
} | ||
|
||
// volume exists already | ||
if disk != nil { | ||
if disk.SnapshotID != snapshotID { | ||
return nil, status.Errorf(codes.AlreadyExists, "Volume already exists, but was restored from a different snapshot than %s", snapshotID) | ||
} | ||
return newCreateVolumeResponse(disk), nil | ||
} | ||
|
||
// create a new volume | ||
zone := pickAvailabilityZone(req.GetAccessibilityRequirements()) | ||
outpostArn := getOutpostArn(req.GetAccessibilityRequirements()) | ||
|
@@ -241,12 +220,15 @@ func (d *controllerService) CreateVolume(ctx context.Context, req *csi.CreateVol | |
SnapshotID: snapshotID, | ||
} | ||
|
||
disk, err = d.cloud.CreateDisk(ctx, volName, opts) | ||
disk, err := d.cloud.CreateDisk(ctx, volName, opts) | ||
if err != nil { | ||
errCode := codes.Internal | ||
if err == cloud.ErrNotFound { | ||
errCode = codes.NotFound | ||
} | ||
if err == cloud.ErrIdempotentParameterMismatch { | ||
errCode = codes.AlreadyExists | ||
} | ||
return nil, status.Errorf(errCode, "Could not create volume %q: %v", volName, err) | ||
} | ||
return newCreateVolumeResponse(disk), nil | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i'm confused by this test case. don't you need a snapshot ID in the diskOptions to get a Snapshot not found error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's testing cloud.go so we don't need to actually provide a valid snapshotId, this test case just expect go sdk to return snapshot not found fault code to the client and see if client can handle the error properly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i see. we're just checking that the error gets handled. makes sense.