diff options
author | Devananda van der Veen <devananda.vdv@gmail.com> | 2013-01-17 13:30:58 -0800 |
---|---|---|
committer | Devananda van der Veen <devananda.vdv@gmail.com> | 2013-01-21 19:28:44 -0800 |
commit | ac8a9d80d035f19c251935491d4bf5672f5e3b6b (patch) | |
tree | 2ea5eb6196083df21dbae5be76408e5ba2240a97 | |
parent | a4d608fa33b328d7ed77c7f9c40ffbb43c0ade6b (diff) | |
download | nova-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.py | 36 | ||||
-rw-r--r-- | nova/virt/baremetal/utils.py | 17 |
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): |