-
Notifications
You must be signed in to change notification settings - Fork 807
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
Conversation
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: AndyXiangLi The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
@@ -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 comment
The 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 comment
The reason will be displayed to describe this comment to others. Learn more.
i'm good with removing this code
8257372
to
48644e9
Compare
48644e9
to
74e8704
Compare
diskOptions: &DiskOptions{ | ||
CapacityBytes: util.GiBToBytes(1), | ||
Tags: map[string]string{VolumeNameTagKey: "vol-test", AwsEbsDriverTagKey: "true"}, | ||
AvailabilityZone: expZone, | ||
}, |
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.
/lgtm |
let's remove the vendor directory soon haha. these PRs are unnecessarily big |
Yeah, agree |
Is this a bug fix or adding new feature?
Fixes #165
What is this PR about? / Why do we need it?
EBS team has updated the createVolume api to accept ClientToken in the createVolume request. doc here
With ClientToken, EBS will be able to ensure the createVolume Idempotency at Api level.
I think it is ok to keep inflight cache as it is, it ensure the driver level idempotency, and this change is more on the api level.
What testing is done?
unit test
sanity test
Manually tested described in the original re-produce step and observed only one volume is created