Fix crash in extracting local osd ids
The function `get_local_osd_ids` crashes when the /var/lib/ceph/osd/ directory contains a file whose name doesn't contain a `-`. unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed Traceback (most recent call last): unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed File "/var/lib/juju/agents/unit-ceph-osd-0/charm/hooks/mon-relation-changed", line 904, in <module> unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed hooks.execute(sys.argv) unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed File "/var/lib/juju/agents/unit-ceph-osd-0/charm/hooks/charmhelpers/core/hookenv.py", line 963, in execute unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed self._hooks[hook_name]() unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed File "/var/lib/juju/agents/unit-ceph-osd-0/charm/hooks/mon-relation-changed", line 668, in mon_relation unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed ceph.apply_osd_settings(settings) unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed File "/var/lib/juju/agents/unit-ceph-osd-0/charm/lib/charms_ceph/utils.py", line 3420, in apply_osd_settings unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed for osd_id in get_local_osd_ids(): unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed File "/var/lib/juju/agents/unit-ceph-osd-0/charm/lib/charms_ceph/utils.py", line 698, in get_local_osd_ids unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed osd_id = osd_dir.split('-')[1] unit-ceph-osd-0: 03:34:14 WARNING unit.ceph-osd/0.mon-relation-changed IndexError: list index out of range Fix the issue by setting a fallback in this case. Change-Id: I0fec65c9b88e6484905a76140d0921cf3dd843c0
This commit is contained in:
parent
c2cf2fcf18
commit
07671ae83d
|
@ -709,7 +709,7 @@ def get_local_osd_ids():
|
|||
try:
|
||||
dirs = os.listdir(osd_path)
|
||||
for osd_dir in dirs:
|
||||
osd_id = osd_dir.split('-')[1]
|
||||
osd_id = osd_dir.split('-')[1] if '-' in osd_dir else ''
|
||||
if (_is_int(osd_id) and
|
||||
filesystem_mounted(os.path.join(
|
||||
os.sep, osd_path, osd_dir)) and
|
||||
|
|
|
@ -478,6 +478,21 @@ class UpgradeRollingTestCase(unittest.TestCase):
|
|||
self.assertIn(listdir.return_value[0][-1], osds)
|
||||
self.assertNotIn(listdir.return_value[1][-1], osds)
|
||||
|
||||
@patch('os.path.exists')
|
||||
@patch('os.listdir')
|
||||
@patch.object(charms_ceph.utils, 'filesystem_mounted')
|
||||
def test_get_osd_ids_unexpected_files(self, fs_mounted, listdir, exists):
|
||||
exists.return_value = True
|
||||
listdir.return_value = [
|
||||
'/var/lib/ceph/osd/ceph-1',
|
||||
'/var/lib/ceph/osd/ceph-2',
|
||||
'/var/lib/ceph/osd/ohno!'
|
||||
]
|
||||
fs_mounted.side_effect = lambda x: x == listdir.return_value[0]
|
||||
osds = charms_ceph.utils.get_local_osd_ids()
|
||||
self.assertIn(listdir.return_value[0][-1], osds)
|
||||
self.assertNotIn(listdir.return_value[1][-1], osds)
|
||||
|
||||
|
||||
"""
|
||||
@patch.object(charms_ceph.utils, 'log')
|
||||
|
|
Loading…
Reference in New Issue