From 399617bead600bf50ceabccf268265c5d588ed0c Mon Sep 17 00:00:00 2001 From: Ramakrishnan Date: Wed, 9 Nov 2016 15:01:55 +0530 Subject: [PATCH] tasks/cephfs: add test_standby_for_invalid_fscid Signed-off-by: Ramakrishnan Periyasamy --- tasks/cephfs/test_failover.py | 59 +++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tasks/cephfs/test_failover.py b/tasks/cephfs/test_failover.py index ff9919dce95..f91822eb7ff 100644 --- a/tasks/cephfs/test_failover.py +++ b/tasks/cephfs/test_failover.py @@ -3,6 +3,8 @@ import logging from unittest import case from cephfs_test_case import CephFSTestCase from teuthology.exceptions import CommandFailedError +from tasks.ceph_manager import CephManager +from teuthology import misc as teuthology log = logging.getLogger(__name__) @@ -570,3 +572,60 @@ class TestMultiFilesystems(CephFSTestCase): fs_b.wait_for_daemons() self.assertEqual(set(fs_a.get_active_names()), {mds_a, mds_b}) self.assertEqual(set(fs_b.get_active_names()), {mds_c, mds_d}) + + def test_standby_for_invalid_fscid(self): + # Set invalid standby_fscid with other mds standby_rank + # stopping active mds service should not end up in mon crash + + # Get configured mons in the cluster + first_mon = teuthology.get_first_mon(self.ctx, self.configs_set) + (mon,) = self.ctx.cluster.only(first_mon).remotes.iterkeys() + manager = CephManager( + mon, + ctx=self.ctx, + logger=log.getChild('ceph_manager'), + ) + configured_mons = manager.get_mon_quorum() + + use_daemons = sorted(self.mds_cluster.mds_ids[0:3]) + mds_a, mds_b, mds_c = use_daemons + log.info("Using MDS daemons: {0}".format(use_daemons)) + + def set_standby_for_rank(leader_rank, follower_id): + self.set_conf("mds.{0}".format(follower_id), + "mds_standby_for_rank", leader_rank) + + # Create one fs + fs_a = self.mds_cluster.newfs("cephfs") + + # Set all the daemons to have a rank assignment but no other + # standby preferences. + set_standby_for_rank(0, mds_a) + set_standby_for_rank(0, mds_b) + + # Set third daemon to have invalid fscid assignment and no other + # standby preferences + invalid_fscid = 123 + self.set_conf("mds.{0}".format(mds_c), "mds_standby_for_fscid", invalid_fscid) + + #Restart all the daemons to make the standby preference applied + self.mds_cluster.mds_restart(mds_a) + self.mds_cluster.mds_restart(mds_b) + self.mds_cluster.mds_restart(mds_c) + self.wait_for_daemon_start([mds_a, mds_b, mds_c]) + + #Stop active mds daemon service of fs + if (fs_a.get_active_names(), [mds_a]): + self.mds_cluster.mds_stop(mds_a) + self.mds_cluster.mds_fail(mds_a) + fs_a.wait_for_daemons() + else: + self.mds_cluster.mds_stop(mds_b) + self.mds_cluster.mds_fail(mds_b) + fs_a.wait_for_daemons() + + #Get active mons from cluster + active_mons = manager.get_mon_quorum() + + #Check for active quorum mon status and configured mon status + self.assertEqual(active_mons, configured_mons, "Not all mons are in quorum Invalid standby invalid fscid test failed!") -- 2.39.5