Change:
<!-- Please only use this template for submitting reports about failing tests in Kubernetes CI jobs --Which jobs are failing: Which test(s) are failing: [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. Since when has it been failing: 10/8/19 Testgrid link: https://k8s- Reason for failure: Introduced by but root cause is probably Anything else we need to know:
/assign
/milestone 1.17 /priority important-soon this is consistently failing in release-master-informing job could you please take a look?
The provided milestone is not valid for this repository. Milestones in this repository: [, , , , , , , , ] Use to clear the milestone. <detailsIn response to : /milestone 1.17 /priority important-soon Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/milestone v1.17

Discussion:
} func getDeviceMountPath(volume *reconstructedVolume) (string, error) { <del> volumeAttacher, err := volume.attachablePlugin.NewAttacher() if volumeAttacher == nil || err != nil { return "", err } deviceMountPath, err := volumeAttacher.GetDeviceMountPath(volume.volumeSpec) if err != nil { return "", err } </del> if volume.blockVolumeMapper != nil { <del> deviceMountPath, err = volume.blockVolumeMapper.GetGlobalMapPath(volume.volumeSpec) if err != nil { </del> <ins> // for block volume, we return its global map path return volume.blockVolumeMapper.GetGlobalMapPath(volume.volumeSpec) } else if volume.attachablePlugin != nil { // for filesystem volume, we return its device mount path if the plugin implements AttachableVolumePlugin volumeAttacher, err := volume.attachablePlugin.NewAttacher() if volumeAttacher == nil || err != nil { </ins> return "", err } <ins> return volumeAttacher.GetDeviceMountPath(volume.volumeSpec) } else { return "", fmt.Errorf("blockVolumeMapper or attachablePlugin required") </ins> } <del> return deviceMountPath, nil </del> } func (rc *reconciler) updateStates(volumesNeedUpdate map[v1.UniqueVolumeName]*reconstructedVolume) error {

continue } klog.V(4).Infof("Volume: %s (pod UID %s) is marked as mounted and added into the actual state", volume.volumeName, volume.podName) <del> if volume.attachablePlugin != nil { </del> <ins> // If the volume has device to mount, we mark its device as mounted. if volume.attachablePlugin != nil || volume.blockVolumeMapper != nil { </ins> deviceMountPath, err := getDeviceMountPath(volume) if err != nil { klog.Errorf("Could not find device mount path for volume %s", volume.volumeName)

Spec: v1.PersistentVolumeSpec{ PersistentVolumeSource: v1.PersistentVolumeSource{ Local: &v1.LocalVolumeSource{ <ins> // Not needed because we don't need to detach local device from the host. </ins> Path: "", }, },

}, } } func (s *disruptiveTestSuite) getTestSuiteInfo() TestSuiteInfo { return s.tsInfo }

if (pattern.VolMode == v1.PersistentVolumeBlock && t.runTestBlock != nil) || (pattern.VolMode == v1.PersistentVolumeFilesystem && t.runTestFile != nil) { ginkgo.It(t.testItStmt, func() { <del> if pattern.VolMode == v1.PersistentVolumeBlock && driver.GetDriverInfo().InTreePluginName == "kubernetes.io/local-volume" { // TODO: https://github.com/kubernetes/kubernetes/issues/74552 framework.Skipf("Local volume volume plugin does not support block volume reconstruction (#74552)") } </del> init() defer cleanup()