ceph/qa/tasks/immutable_object_cache_thra...

80 lines
2.4 KiB
Python
Raw Normal View History

"""
immutable object cache thrash task
"""
import contextlib
import logging
from teuthology import misc as teuthology
from teuthology import contextutil
from teuthology.orchestra import run
DEFAULT_KILL_DAEMON_TIME = 2
DEFAULT_DEAD_TIME = 30
DEFAULT_LIVE_TIME = 120
log = logging.getLogger(__name__)
@contextlib.contextmanager
def thrashes_immutable_object_cache_daemon(ctx, config):
"""
thrashes immutable object cache daemon.
It can test reconnection feature of RO cache when RO daemon crash
TODO : replace sleep with better method.
"""
log.info("thrashes immutable object cache daemon")
# just thrash one rbd client.
client, client_config = list(config.items())[0]
(remote,) = ctx.cluster.only(client).remotes.keys()
client_config = client_config if client_config is not None else dict()
kill_daemon_time = client_config.get('kill_daemon_time', DEFAULT_KILL_DAEMON_TIME)
dead_time = client_config.get('dead_time', DEFAULT_DEAD_TIME)
live_time = client_config.get('live_time', DEFAULT_LIVE_TIME)
for i in range(kill_daemon_time):
log.info("ceph-immutable-object-cache crash....")
remote.run(
args=[
'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
]
)
# librbd shoud normally run when ceph-immutable-object-cache
remote.run(
args=[
'sleep', '{dead_time}'.format(dead_time=dead_time),
]
)
# librbd should reconnect daemon
log.info("startup ceph-immutable-object-cache")
remote.run(
args=[
'ceph-immutable-object-cache', '-b',
]
)
remote.run(
args=[
'sleep', '{live_time}'.format(live_time=live_time),
]
)
try:
yield
finally:
log.info("cleanup")
@contextlib.contextmanager
def task(ctx, config):
"""
This is task for testing immutable_object_cache thrash.
"""
assert isinstance(config, dict), \
"task immutable_object_cache_thrash only supports a dictionary for configuration"
managers = []
config = teuthology.replace_all_with_clients(ctx.cluster, config)
managers.append(
lambda: thrashes_immutable_object_cache_daemon(ctx=ctx, config=config)
)
with contextutil.nested(*managers):
yield