ceph/qa/tasks/cephfs_mirror.py
Venky Shankar 087d7aa8ca tasks/cephfs_mirror: optionally run in foreground
cephfs mirror damon thrasher needs to send SIGTERM to mirror
daemons. The mirror daemon needs to run in foreground for
it to receive signal via `daemon.signal`.

Signed-off-by: Venky Shankar <vshankar@redhat.com>
2021-11-09 00:08:05 -05:00

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