Skip to content

Commit ffde271

Browse files
committed
feat: add lock in controller
remove one lock
1 parent 868733a commit ffde271

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

pkg/blob/controllerserver.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
5151
return nil, status.Error(codes.InvalidArgument, "CreateVolume Volume capabilities must be provided")
5252
}
5353

54+
if acquired := d.volumeLocks.TryAcquire(name); !acquired {
55+
return nil, status.Errorf(codes.Aborted, volumeOperationAlreadyExistsFmt, name)
56+
}
57+
defer d.volumeLocks.Release(name)
58+
5459
volSizeBytes := int64(req.GetCapacityRange().GetRequiredBytes())
5560
requestGiB := int(util.RoundUpGiB(volSizeBytes))
5661

@@ -202,15 +207,20 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
202207

203208
// DeleteVolume delete a volume
204209
func (d *Driver) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest) (*csi.DeleteVolumeResponse, error) {
205-
if len(req.GetVolumeId()) == 0 {
210+
volumeID := req.GetVolumeId()
211+
if len(volumeID) == 0 {
206212
return nil, status.Error(codes.InvalidArgument, "Volume ID missing in request")
207213
}
208214

209215
if err := d.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
210216
return nil, fmt.Errorf("invalid delete volume req: %v", req)
211217
}
212218

213-
volumeID := req.VolumeId
219+
if acquired := d.volumeLocks.TryAcquire(volumeID); !acquired {
220+
return nil, status.Errorf(codes.Aborted, volumeOperationAlreadyExistsFmt, volumeID)
221+
}
222+
defer d.volumeLocks.Release(volumeID)
223+
214224
resourceGroupName, accountName, containerName, err := GetContainerInfo(volumeID)
215225
if err != nil {
216226
klog.Errorf("GetContainerInfo(%s) in DeleteVolume failed with error: %v", volumeID, err)
@@ -254,20 +264,19 @@ func (d *Driver) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest)
254264
}
255265

256266
klog.V(2).Infof("container(%s) under rg(%s) account(%s) volumeID(%s) is deleted successfully", containerName, resourceGroupName, accountName, volumeID)
257-
258267
return &csi.DeleteVolumeResponse{}, nil
259268
}
260269

261270
// ValidateVolumeCapabilities return the capabilities of the volume
262271
func (d *Driver) ValidateVolumeCapabilities(ctx context.Context, req *csi.ValidateVolumeCapabilitiesRequest) (*csi.ValidateVolumeCapabilitiesResponse, error) {
263-
if len(req.GetVolumeId()) == 0 {
272+
volumeID := req.GetVolumeId()
273+
if len(volumeID) == 0 {
264274
return nil, status.Error(codes.InvalidArgument, "Volume ID missing in request")
265275
}
266276
if req.GetVolumeCapabilities() == nil {
267277
return nil, status.Error(codes.InvalidArgument, "Volume capabilities missing in request")
268278
}
269279

270-
volumeID := req.VolumeId
271280
resourceGroupName, accountName, containerName, err := GetContainerInfo(volumeID)
272281
if err != nil {
273282
klog.Errorf("GetContainerInfo(%s) in ValidateVolumeCapabilities failed with error: %v", volumeID, err)

0 commit comments

Comments
 (0)