@@ -929,7 +929,7 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
929
929
volumeAttacher , _ = attachableVolumePlugin .NewAttacher ()
930
930
}
931
931
932
- mapVolumeFunc := func () (error , error ) {
932
+ mapVolumeFunc := func () (simpleErr error , detailedErr error ) {
933
933
var devicePath string
934
934
// Set up global map path under the given plugin directory using symbolic link
935
935
globalMapPath , err :=
@@ -956,6 +956,7 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
956
956
if customBlockVolumeMapper , ok := blockVolumeMapper .(volume.CustomBlockVolumeMapper ); ok {
957
957
mapErr := customBlockVolumeMapper .SetUpDevice ()
958
958
if mapErr != nil {
959
+ og .markDeviceErrorState (volumeToMount , devicePath , globalMapPath , mapErr , actualStateOfWorld )
959
960
// On failure, return error. Caller will log and retry.
960
961
return volumeToMount .GenerateError ("MapVolume.SetUpDevice failed" , mapErr )
961
962
}
@@ -970,15 +971,36 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
970
971
return volumeToMount .GenerateError ("MapVolume.MarkDeviceAsMounted failed" , markDeviceMappedErr )
971
972
}
972
973
974
+ markVolumeOpts := MarkVolumeOpts {
975
+ PodName : volumeToMount .PodName ,
976
+ PodUID : volumeToMount .Pod .UID ,
977
+ VolumeName : volumeToMount .VolumeName ,
978
+ BlockVolumeMapper : blockVolumeMapper ,
979
+ OuterVolumeSpecName : volumeToMount .OuterVolumeSpecName ,
980
+ VolumeGidVolume : volumeToMount .VolumeGidValue ,
981
+ VolumeSpec : volumeToMount .VolumeSpec ,
982
+ VolumeMountState : VolumeMounted ,
983
+ }
984
+
973
985
// Call MapPodDevice if blockVolumeMapper implements CustomBlockVolumeMapper
974
986
if customBlockVolumeMapper , ok := blockVolumeMapper .(volume.CustomBlockVolumeMapper ); ok {
975
987
// Execute driver specific map
976
988
pluginDevicePath , mapErr := customBlockVolumeMapper .MapPodDevice ()
977
989
if mapErr != nil {
978
990
// On failure, return error. Caller will log and retry.
991
+ og .markVolumeErrorState (volumeToMount , markVolumeOpts , mapErr , actualStateOfWorld )
979
992
return volumeToMount .GenerateError ("MapVolume.MapPodDevice failed" , mapErr )
980
993
}
981
994
995
+ // From now on, the volume is mapped. Mark it as uncertain on error,
996
+ // so it is is unmapped when corresponding pod is deleted.
997
+ defer func () {
998
+ if simpleErr != nil {
999
+ errText := simpleErr .Error ()
1000
+ og .markVolumeErrorState (volumeToMount , markVolumeOpts , volumetypes .NewUncertainProgressError (errText ), actualStateOfWorld )
1001
+ }
1002
+ }()
1003
+
982
1004
// if pluginDevicePath is provided, assume attacher may not provide device
983
1005
// or attachment flow uses SetupDevice to get device path
984
1006
if len (pluginDevicePath ) != 0 {
@@ -1044,17 +1066,6 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
1044
1066
return volumeToMount .GenerateError ("MapVolume.MarkVolumeAsMounted failed while expanding volume" , resizeError )
1045
1067
}
1046
1068
1047
- markVolumeOpts := MarkVolumeOpts {
1048
- PodName : volumeToMount .PodName ,
1049
- PodUID : volumeToMount .Pod .UID ,
1050
- VolumeName : volumeToMount .VolumeName ,
1051
- BlockVolumeMapper : blockVolumeMapper ,
1052
- OuterVolumeSpecName : volumeToMount .OuterVolumeSpecName ,
1053
- VolumeGidVolume : volumeToMount .VolumeGidValue ,
1054
- VolumeSpec : volumeToMount .VolumeSpec ,
1055
- VolumeMountState : VolumeMounted ,
1056
- }
1057
-
1058
1069
markVolMountedErr := actualStateOfWorld .MarkVolumeAsMounted (markVolumeOpts )
1059
1070
if markVolMountedErr != nil {
1060
1071
// On failure, return error. Caller will log and retry.
0 commit comments