catch OSError to prevent breaking request /recon/diskusage
swift.common.utils.ismount maybe raise some OSError in some special cases; and the request against /recon/diskusage doesn't handle it before. This patch let output of mounted keyword is the error's message. Change-Id: I5d9018f580181e618a3fa072b7a760d41795d8eb Closes-Bug: #1249181
This commit is contained in:
parent
44e2e5ee43
commit
fd4843f8e7
@ -201,7 +201,14 @@ class ReconMiddleware(object):
|
|||||||
"""get disk utilization statistics"""
|
"""get disk utilization statistics"""
|
||||||
devices = []
|
devices = []
|
||||||
for entry in os.listdir(self.devices):
|
for entry in os.listdir(self.devices):
|
||||||
if check_mount(self.devices, entry):
|
try:
|
||||||
|
mounted = check_mount(self.devices, entry)
|
||||||
|
except OSError as err:
|
||||||
|
devices.append({'device': entry, 'mounted': str(err),
|
||||||
|
'size': '', 'used': '', 'avail': ''})
|
||||||
|
continue
|
||||||
|
|
||||||
|
if mounted:
|
||||||
path = os.path.join(self.devices, entry)
|
path = os.path.join(self.devices, entry)
|
||||||
disk = os.statvfs(path)
|
disk = os.statvfs(path)
|
||||||
capacity = disk.f_bsize * disk.f_blocks
|
capacity = disk.f_bsize * disk.f_blocks
|
||||||
|
@ -27,6 +27,10 @@ from swift.common.middleware import recon
|
|||||||
from swift.common.utils import json
|
from swift.common.utils import json
|
||||||
|
|
||||||
|
|
||||||
|
def fake_check_mount(a, b):
|
||||||
|
raise OSError('Input/Output Error')
|
||||||
|
|
||||||
|
|
||||||
class FakeApp(object):
|
class FakeApp(object):
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
return "FAKE APP"
|
return "FAKE APP"
|
||||||
@ -606,6 +610,14 @@ class TestReconSuccess(TestCase):
|
|||||||
[(('/srv/node/canhazdrive1',), {})])
|
[(('/srv/node/canhazdrive1',), {})])
|
||||||
self.assertEquals(rv, du_resp)
|
self.assertEquals(rv, du_resp)
|
||||||
|
|
||||||
|
@mock.patch("swift.common.middleware.recon.check_mount", fake_check_mount)
|
||||||
|
def test_get_diskusage_oserror(self):
|
||||||
|
du_resp = [{'device': 'canhazdrive1', 'avail': '',
|
||||||
|
'mounted': 'Input/Output Error', 'used': '', 'size': ''}]
|
||||||
|
self.mockos.ls_output = ['canhazdrive1']
|
||||||
|
rv = self.app.get_diskusage()
|
||||||
|
self.assertEquals(rv, du_resp)
|
||||||
|
|
||||||
def test_get_quarantine_count(self):
|
def test_get_quarantine_count(self):
|
||||||
self.mockos.ls_output = ['sda']
|
self.mockos.ls_output = ['sda']
|
||||||
self.mockos.ismount_output = True
|
self.mockos.ismount_output = True
|
||||||
|
Loading…
Reference in New Issue
Block a user