• Kubernetes Submit Queue's avatar
    Merge pull request #41785 from jamiehannaford/cinder-performance · 70dd10cc
    Kubernetes Submit Queue authored
    Automatic merge from submit-queue (batch tested with PRs 38505, 41785, 46315)
    
    Only retrieve relevant volumes
    
    **What this PR does / why we need it**:
    
    Improves performance for Cinder volume attach/detach calls. 
    
    Currently when Cinder volumes are attached or detached, functions try to retrieve details about the volume from the Nova API. Because some only have the volume name not its UUID, they use the list function in gophercloud to iterate over all volumes to find a match. This incurs severe performance problems on OpenStack projects with lots of volumes (sometimes thousands) since it needs to send a new request when the current page does not contain a match. A better way of doing this is use the `?name=XXX` query parameter to refine the results.
    
    **Which issue this PR fixes**:
    
    https://github.com/kubernetes/kubernetes/issues/26404
    
    **Special notes for your reviewer**:
    
    There were 2 ways of addressing this problem:
    
    1. Use the `name` query parameter
    2. Instead of using the list function, switch to using volume UUIDs and use the GET function instead. You'd need to change the signature of a few functions though, such as [`DeleteVolume`](https://github.com/kubernetes/kubernetes/blob/master/pkg/volume/cinder/cinder.go#L49), so I'm not sure how backwards compatible that is.
    
    Since #1 does effectively the same as #2, I went with it because it ensures BC.
    
    One assumption that is made is that the `volumeName` being retrieved matches exactly the name of the volume in Cinder. I'm not sure how accurate that is, but I see no reason why cloud providers would want to append/prefix things arbitrarily. 
    
    **Release note**:
    ```release-note
    Improves performance of Cinder volume attach/detach operations
    ```
    70dd10cc
Name
Last commit
Last update
..
aws_ebs Loading commit data...
azure_dd Loading commit data...
azure_file Loading commit data...
cephfs Loading commit data...
cinder Loading commit data...
configmap Loading commit data...
downwardapi Loading commit data...
empty_dir Loading commit data...
fc Loading commit data...
flexvolume Loading commit data...
flocker Loading commit data...
gce_pd Loading commit data...
git_repo Loading commit data...
glusterfs Loading commit data...
host_path Loading commit data...
iscsi Loading commit data...
nfs Loading commit data...
photon_pd Loading commit data...
portworx Loading commit data...
projected Loading commit data...
quobyte Loading commit data...
rbd Loading commit data...
scaleio Loading commit data...
secret Loading commit data...
testing Loading commit data...
util Loading commit data...
validation Loading commit data...
vsphere_volume Loading commit data...
BUILD Loading commit data...
OWNERS Loading commit data...
doc.go Loading commit data...
metrics_cached.go Loading commit data...
metrics_du.go Loading commit data...
metrics_du_test.go Loading commit data...
metrics_errors.go Loading commit data...
metrics_nil.go Loading commit data...
metrics_nil_test.go Loading commit data...
metrics_statfs.go Loading commit data...
metrics_statfs_test.go Loading commit data...
plugins.go Loading commit data...
plugins_test.go Loading commit data...
util.go Loading commit data...
util_test.go Loading commit data...
volume.go Loading commit data...
volume_linux.go Loading commit data...
volume_unsupported.go Loading commit data...