mirror of
https://github.com/ceph/ceph
synced 2025-02-24 19:47:44 +00:00
That autocommit is properly turned off and that commits via context managers work as expected. Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
107 lines
3.6 KiB
Python
107 lines
3.6 KiB
Python
from io import StringIO
|
|
import logging
|
|
|
|
from teuthology.exceptions import CommandFailedError
|
|
|
|
from .mgr_test_case import MgrTestCase
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class TestDeviceHealth(MgrTestCase):
|
|
MGRS_REQUIRED = 1
|
|
|
|
def setUp(self):
|
|
super(TestDeviceHealth, self).setUp()
|
|
self.setup_mgrs()
|
|
|
|
def tearDown(self):
|
|
self.mgr_cluster.set_down()
|
|
self.remove_mgr_pool()
|
|
self.mgr_cluster.set_down(yes='false')
|
|
return super(TestDeviceHealth, self).tearDown()
|
|
|
|
def remove_mgr_pool(self):
|
|
self.config_set('mon', 'mon_allow_pool_delete', 'true')
|
|
self.mgr_cluster.mon_manager.raw_cluster_cmd('osd', 'pool', 'rm', '.mgr', '.mgr', '--yes-i-really-really-mean-it-not-faking')
|
|
|
|
def test_legacy_upgrade_snap(self):
|
|
"""
|
|
"""
|
|
|
|
o = "ABC_DEADB33F_FA"
|
|
self.mon_manager.do_rados(["put", o, "-"], pool=".mgr", stdin=StringIO("junk"))
|
|
self.mon_manager.do_rados(["mksnap", "foo"], pool=".mgr")
|
|
self.mon_manager.do_rados(["rm", o], pool=".mgr")
|
|
self.mgr_cluster.mgr_fail()
|
|
|
|
with self.assert_cluster_log("Unhandled exception from module 'devicehealth' while running", present=False):
|
|
self.wait_until_true(lambda: self.mgr_cluster.get_active_id() is not None, timeout=60)
|
|
|
|
def _wait_for_killpoint_death(self):
|
|
# wait for killpoint trigger to kill a mgr
|
|
def killpoint_dead():
|
|
for mgr_id, mgr_daemon in self.mgr_cluster.mgr_daemons.items():
|
|
log.info(f"{mgr_id}")
|
|
try:
|
|
s = mgr_daemon.check_status()
|
|
if s is None:
|
|
continue
|
|
log.info(f"{s}")
|
|
except CommandFailedError as e:
|
|
log.info(f"{e}")
|
|
if e.exitstatus == 120:
|
|
return True
|
|
pass
|
|
return False
|
|
|
|
self.wait_until_true(killpoint_dead, timeout=30)
|
|
self.mgr_cluster.set_down()
|
|
|
|
def test_sql_commit(self):
|
|
"""
|
|
That commits work.
|
|
"""
|
|
|
|
self.mgr_cluster.set_down()
|
|
self.config_set('mgr', 'mgr/devicehealth/sqlite3_killpoint', 3)
|
|
self.remove_mgr_pool()
|
|
self.mgr_cluster.set_down(yes='false')
|
|
|
|
self._wait_for_killpoint_death()
|
|
|
|
script = """
|
|
export CEPH_ARGS='--id admin --no-log-to-stderr'
|
|
sqlite3 -cmd '.load libcephsqlite.so' -cmd '.open file:///.mgr:devicehealth/main.db?vfs=ceph' <<<'.schema'
|
|
"""
|
|
p = self.mon_manager.controller.run(args=['bash'], stdin=StringIO(script), stdout=StringIO())
|
|
schema = p.stdout.getvalue().strip()
|
|
self.assertIn("TABLE MgrModuleKV", schema)
|
|
self.assertIn("TABLE Device", schema)
|
|
|
|
def _test_sql_autocommit(self, kv):
|
|
"""
|
|
That autocommit transactions is off.
|
|
"""
|
|
|
|
self.mgr_cluster.set_down()
|
|
self.config_set('mgr', 'mgr/devicehealth/sqlite3_killpoint', kv)
|
|
self.remove_mgr_pool()
|
|
self.mgr_cluster.set_down(yes='false')
|
|
|
|
self._wait_for_killpoint_death()
|
|
|
|
script = """
|
|
export CEPH_ARGS='--id admin --no-log-to-stderr'
|
|
sqlite3 -cmd '.load libcephsqlite.so' -cmd '.open file:///.mgr:devicehealth/main.db?vfs=ceph' <<<'.schema'
|
|
"""
|
|
p = self.mon_manager.controller.run(args=['bash'], stdin=StringIO(script), stdout=StringIO())
|
|
schema = p.stdout.getvalue().strip()
|
|
self.assertEqual("", schema)
|
|
|
|
def test_sql_autocommit1(self):
|
|
return self._test_sql_autocommit(1)
|
|
|
|
def test_sql_autocommit2(self):
|
|
return self._test_sql_autocommit(2)
|