From 1766a5acc5c948288b4cd81c62d0c1507c55f727 Mon Sep 17 00:00:00 2001 From: John Griffith Date: Wed, 23 Oct 2013 18:04:51 -0600 Subject: [PATCH] Check if dir exists before calling listdir Changes along the way to how we clean up and detach after copying an image to a volume exposed a problem in the cleanup of the brick/initiator routines. The clean up in the initiator detach was doing a blind listdir of /dev/disk/by-path, however due to detach and cleanup being called upon completion of the image download to the volume if there are no other devices mapped in this directory the directory is removed. The result was that even though the create and copy of the image was succesful, the HostDriver code called os.lisdir on a directory that doesn't exist any longer and raises an unhandled exception that cause the taskflow mechanism to mark the volume as failed. Change-Id: I488755c1a49a77f42efbb58a7a4eb6f4f084df07 Closes-bug: #1243980 --- cinder/brick/initiator/host_driver.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cinder/brick/initiator/host_driver.py b/cinder/brick/initiator/host_driver.py index eb5f8ffe5..dc9154e2a 100644 --- a/cinder/brick/initiator/host_driver.py +++ b/cinder/brick/initiator/host_driver.py @@ -22,8 +22,10 @@ class HostDriver(object): def get_all_block_devices(self): """Get the list of all block devices seen in /dev/disk/by-path/.""" + files = [] dir = "/dev/disk/by-path/" - files = os.listdir(dir) + if os.path.isdir(dir): + files = os.listdir(dir) devices = [] for file in files: devices.append(dir + file) -- 2.45.2