From c130b77a4848b87b29a1b7dcc1cc8d83247e50e8 Mon Sep 17 00:00:00 2001 From: Masaki Kimura Date: Thu, 1 Aug 2019 20:36:21 +0000 Subject: [PATCH] Move nil check for mapperPlugin earlier in reconstructVolume --- .../volumemanager/reconciler/reconciler.go | 33 ++++++++++--------- .../operationexecutor/operation_executor.go | 8 +---- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler.go b/pkg/kubelet/volumemanager/reconciler/reconciler.go index 5ff538f4268..c5f0affbf5c 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler.go @@ -470,6 +470,11 @@ func (rc *reconciler) reconstructVolume(volume podVolume) (*reconstructedVolume, if err != nil { return nil, err } + // TODO: remove feature gate check after no longer needed + if utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) && volume.volumeMode == v1.PersistentVolumeBlock && mapperPlugin == nil { + return nil, fmt.Errorf("Could not find block volume plugin %q (spec.Name: %q) pod %q (UID: %q)", volume.pluginName, volume.volumeSpecName, volume.podName, pod.UID) + } + volumeSpec, err := rc.operationExecutor.ReconstructVolumeOperation( volume.volumeMode, plugin, @@ -501,22 +506,20 @@ func (rc *reconciler) reconstructVolume(volume podVolume) (*reconstructedVolume, // TODO: remove feature gate check after no longer needed if utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) && volume.volumeMode == v1.PersistentVolumeBlock { var newMapperErr error - if mapperPlugin != nil { - volumeMapper, newMapperErr = mapperPlugin.NewBlockVolumeMapper( - volumeSpec, - pod, - volumepkg.VolumeOptions{}) - if newMapperErr != nil { - return nil, fmt.Errorf( - "reconstructVolume.NewBlockVolumeMapper failed for volume %q (spec.Name: %q) pod %q (UID: %q) with: %v", - uniqueVolumeName, - volumeSpec.Name(), - volume.podName, - pod.UID, - newMapperErr) - } - checkPath, _ = volumeMapper.GetPodDeviceMapPath() + volumeMapper, newMapperErr = mapperPlugin.NewBlockVolumeMapper( + volumeSpec, + pod, + volumepkg.VolumeOptions{}) + if newMapperErr != nil { + return nil, fmt.Errorf( + "reconstructVolume.NewBlockVolumeMapper failed for volume %q (spec.Name: %q) pod %q (UID: %q) with: %v", + uniqueVolumeName, + volumeSpec.Name(), + volume.podName, + pod.UID, + newMapperErr) } + checkPath, _ = volumeMapper.GetPodDeviceMapPath() } else { var err error volumeMounter, err = plugin.NewMounter( diff --git a/pkg/volume/util/operationexecutor/operation_executor.go b/pkg/volume/util/operationexecutor/operation_executor.go index 0d6cb623b70..a7480f718d0 100644 --- a/pkg/volume/util/operationexecutor/operation_executor.go +++ b/pkg/volume/util/operationexecutor/operation_executor.go @@ -899,13 +899,7 @@ func (oe *operationExecutor) ReconstructVolumeOperation( // Block Volume case // Create volumeSpec from mount path klog.V(5).Infof("Starting operationExecutor.ReconstructVolume") - if mapperPlugin == nil { - return nil, fmt.Errorf("Could not find block volume plugin %q (spec.Name: %q) pod %q (UID: %q)", - pluginName, - volumeSpecName, - podName, - uid) - } + // volumePath contains volumeName on the path. In the case of block volume, {volumeName} is symbolic link // corresponding to raw block device. // ex. volumePath: pods/{podUid}}/{DefaultKubeletVolumeDevicesDirName}/{escapeQualifiedPluginName}/{volumeName}