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
This commit is contained in:
parent
1c9111eaa2
commit
fd6120c877
nova
@ -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()
|
||||
|
@ -15,6 +15,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import errno
|
||||
import os
|
||||
import shutil
|
||||
|
||||
@ -44,8 +45,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 rmtree_without_raise(path):
|
||||
@ -64,9 +68,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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user