summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevananda van der Veen <devananda.vdv@gmail.com>2013-01-17 13:30:58 -0800
committerDevananda van der Veen <devananda.vdv@gmail.com>2013-01-21 19:28:44 -0800
commitac8a9d80d035f19c251935491d4bf5672f5e3b6b (patch)
tree2ea5eb6196083df21dbae5be76408e5ba2240a97
parenta4d608fa33b328d7ed77c7f9c40ffbb43c0ade6b (diff)
downloadnova-ac8a9d80d035f19c251935491d4bf5672f5e3b6b.tar.gz
nova-ac8a9d80d035f19c251935491d4bf5672f5e3b6b.tar.xz
nova-ac8a9d80d035f19c251935491d4bf5672f5e3b6b.zip
Baremetal/utils should not log certain exceptions
unlink_without_raise was logging exceptions when it failed to unlink a file, which is confusing since it is often called on non-existing files. create_link_without_raise was also logging exceptions when it failed to create a symlink. This patch corrects this behaviour; both functions now explicitly check for the type of error they expect, and then suppress that. If another type of OSError is encountered, a warning is logged. This patch also adds unit tests for both functions. fixes bug 1097931. Change-Id: Ie36f59dce34a6c67765770c5f968c003003acc88
-rw-r--r--nova/tests/baremetal/test_utils.py36
-rw-r--r--nova/virt/baremetal/utils.py17
2 files changed, 48 insertions, 5 deletions
diff --git a/nova/tests/baremetal/test_utils.py b/nova/tests/baremetal/test_utils.py
index 827b1fcaf..2615a26cb 100644
--- a/nova/tests/baremetal/test_utils.py
+++ b/nova/tests/baremetal/test_utils.py
@@ -20,6 +20,9 @@
import mox
+import errno
+import os
+
from nova import exception
from nova import test
from nova.virt.baremetal import utils
@@ -32,3 +35,36 @@ class BareMetalUtilsTestCase(test.TestCase):
self.assertEqual(len(s), 10)
s = utils.random_alnum(100)
self.assertEqual(len(s), 100)
+
+ def test_unlink(self):
+ self.mox.StubOutWithMock(os, "unlink")
+ os.unlink("/fake/path")
+
+ self.mox.ReplayAll()
+ utils.unlink_without_raise("/fake/path")
+ self.mox.VerifyAll()
+
+ def test_unlink_ENOENT(self):
+ self.mox.StubOutWithMock(os, "unlink")
+ os.unlink("/fake/path").AndRaise(OSError(errno.ENOENT))
+
+ self.mox.ReplayAll()
+ utils.unlink_without_raise("/fake/path")
+ self.mox.VerifyAll()
+
+ def test_create_link(self):
+ self.mox.StubOutWithMock(os, "symlink")
+ os.symlink("/fake/source", "/fake/link")
+
+ self.mox.ReplayAll()
+ utils.create_link_without_raise("/fake/source", "/fake/link")
+ self.mox.VerifyAll()
+
+ def test_create_link_EEXIST(self):
+ self.mox.StubOutWithMock(os, "symlink")
+ os.symlink("/fake/source", "/fake/link").AndRaise(
+ OSError(errno.EEXIST))
+
+ self.mox.ReplayAll()
+ utils.create_link_without_raise("/fake/source", "/fake/link")
+ self.mox.VerifyAll()
diff --git a/nova/virt/baremetal/utils.py b/nova/virt/baremetal/utils.py
index 0842ae201..6ce42eb6e 100644
--- a/nova/virt/baremetal/utils.py
+++ b/nova/virt/baremetal/utils.py
@@ -15,6 +15,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import errno
import os
from nova.openstack.common import log as logging
@@ -43,8 +44,11 @@ def inject_into_image(image, key, net, metadata, admin_password,
def unlink_without_raise(path):
try:
os.unlink(path)
- except OSError:
- LOG.exception(_("Failed to unlink %s") % path)
+ except OSError, e:
+ if e.errno == errno.ENOENT:
+ return
+ else:
+ LOG.warn(_("Failed to unlink %(path)s, error: %(e)s") % locals())
def write_to_file(path, contents):
@@ -55,9 +59,12 @@ def write_to_file(path, contents):
def create_link_without_raise(source, link):
try:
os.symlink(source, link)
- except OSError:
- LOG.exception(_("Failed to create symlink from %(source)s to %(link)s")
- % locals())
+ except OSError, e:
+ if e.errno == errno.EEXIST:
+ return
+ else:
+ LOG.warn(_("Failed to create symlink from %(source)s to %(link)s"
+ ", error: %(e)s") % locals())
def random_alnum(count):