ceph/qa/tasks/cephfs_mirror.py

74 lines
2.1 KiB
Python

"""
Task for running cephfs mirror daemons
"""
import logging
from teuthology.orchestra import run
from teuthology import misc
from teuthology.exceptions import ConfigError
from teuthology.task import Task
from tasks.ceph_manager import get_valgrind_args
from tasks.util import get_remote_for_role
log = logging.getLogger(__name__)
class CephFSMirror(Task):
def __init__(self, ctx, config):
super(CephFSMirror, self).__init__(ctx, config)
self.log = log
def setup(self):
super(CephFSMirror, self).setup()
try:
self.client = self.config['client']
except KeyError:
raise ConfigError('cephfs-mirror requires a client to connect')
self.cluster_name, type_, self.client_id = misc.split_role(self.client)
if not type_ == 'client':
raise ConfigError(f'client role {self.client} must be a client')
self.remote = get_remote_for_role(self.ctx, self.client)
def begin(self):
super(CephFSMirror, self).begin()
testdir = misc.get_testdir(self.ctx)
args = [
'adjust-ulimits',
'ceph-coverage',
'{tdir}/archive/coverage'.format(tdir=testdir),
'daemon-helper',
'term',
]
if 'valgrind' in self.config:
args = get_valgrind_args(
testdir, 'cephfs-mirror-{id}'.format(id=self.client),
args, self.config.get('valgrind'))
args.extend([
'cephfs-mirror',
'--cluster',
self.cluster_name,
'--id',
self.client_id,
])
if 'run_in_foreground' in self.config:
args.extend(['--foreground'])
self.ctx.daemons.add_daemon(
self.remote, 'cephfs-mirror', self.client,
args=args,
logger=self.log.getChild(self.client),
stdin=run.PIPE,
wait=False,
)
def end(self):
mirror_daemon = self.ctx.daemons.get_daemon('cephfs-mirror', self.client)
mirror_daemon.stop()
super(CephFSMirror, self).end()
task = CephFSMirror