self.cephadm = cephadm
self.testdir = teuthology.get_testdir(self.ctx)
# prefix args for ceph cmds to be executed
- pre = ['adjust-ulimits', 'ceph-coverage',
- f'{self.testdir}/archive/coverage']
- self.CEPH_CMD = ['sudo'] + pre + ['timeout', '120', 'ceph',
- '--cluster', self.cluster]
- self.RADOS_CMD = pre + ['rados', '--cluster', self.cluster]
+ self.pre = ['adjust-ulimits', 'ceph-coverage',
+ f'{self.testdir}/archive/coverage']
+ self.RADOS_CMD = self.pre + ['rados', '--cluster', self.cluster]
pools = self.list_pools()
self.pools = {}
except CommandFailedError:
self.log('Failed to get pg_num from pool %s, ignoring' % pool)
+ def get_ceph_cmd(self, **kwargs):
+ timeout = kwargs.pop('timeout', 120)
+ return ['sudo'] + self.pre + ['timeout', f'{timeout}', 'ceph',
+ '--cluster', self.cluster]
+
def ceph(self, cmd, **kwargs):
"""
Simple Ceph admin command wrapper around run_cluster_cmd.
stdout=StringIO(),
check_status=kwargs.get('check_status', True))
else:
- kwargs['args'] = prefixcmd + self.CEPH_CMD + kwargs['args']
+ kwargs['args'] = prefixcmd + self.get_ceph_cmd(**kwargs) + kwargs['args']
return self.controller.run(**kwargs)
def raw_cluster_cmd(self, *args, **kwargs) -> str:
info = self.get_rank(rank=rank, status=status)
return self.json_asok(command, 'mds', info['name'], timeout=timeout)
- def rank_tell(self, command, rank=0, status=None):
+ def rank_tell(self, command, rank=0, status=None, timeout=120):
try:
- out = self.get_ceph_cmd_stdout("tell", f"mds.{self.id}:{rank}", *command)
+ out = self.get_ceph_cmd_stdout("tell", f"mds.{self.id}:{rank}", *command, timeout=timeout)
return json.loads(out)
except json.decoder.JSONDecodeError:
log.error("could not decode: {}".format(out))
self.set_max_mds(new_max_mds)
return self.wait_for_daemons()
- def run_scrub(self, cmd, rank=0):
- return self.rank_tell(["scrub"] + cmd, rank)
+ def run_scrub(self, cmd, rank=0, timeout=300):
+ return self.rank_tell(["scrub"] + cmd, rank=rank, timeout=timeout)
def get_scrub_status(self, rank=0):
- return self.run_scrub(["status"], rank)
+ return self.run_scrub(["status"], rank=rank, timeout=300)
def flush(self, rank=0):
return self.rank_tell(["flush", "journal"], rank=rank)
result = "no active scrubs running"
with contextutil.safe_while(sleep=sleep, tries=timeout//sleep) as proceed:
while proceed():
- out_json = self.rank_tell(["scrub", "status"], rank=rank)
+ out_json = self.rank_tell(["scrub", "status"], rank=rank, timeout=timeout)
assert out_json is not None
if not reverse:
if result in out_json['status']:
self.cephadm = False
self.rook = False
self.testdir = None
- self.CEPH_CMD = [CEPH_CMD]
self.RADOS_CMD = [RADOS_CMD]
+ def get_ceph_cmd(self, **kwargs):
+ return [CEPH_CMD]
+
def find_remote(self, daemon_type, daemon_id):
"""
daemon_type like 'mds', 'osd'