ceph/qa/tasks/immutable_object_cache.py

73 lines
2.3 KiB
Python
Raw Normal View History

"""
immutable object cache task
"""
import contextlib
import logging
from teuthology import misc as teuthology
from teuthology import contextutil
from teuthology.orchestra import run
log = logging.getLogger(__name__)
@contextlib.contextmanager
def immutable_object_cache(ctx, config):
"""
setup and cleanup immutable object cache
"""
log.info("start immutable object cache daemon")
for client, client_config in config.items():
(remote,) = ctx.cluster.only(client).remotes.keys()
# make sure that there is one immutable object cache daemon on the same node.
remote.run(
args=[
'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
]
)
remote.run(
args=[
'ceph-immutable-object-cache', '-b',
]
)
try:
yield
finally:
log.info("check and cleanup immutable object cache")
for client, client_config in config.items():
client_config = client_config if client_config is not None else dict()
(remote,) = ctx.cluster.only(client).remotes.keys()
cache_path = client_config.get('immutable object cache path', '/tmp/ceph-immutable-object-cache')
ls_command = '"$(ls {} )"'.format(cache_path)
remote.run(
args=[
'test', '-n', run.Raw(ls_command),
]
)
remote.run(
args=[
'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
]
)
remote.run(
args=[
'sudo', 'rm', '-rf', cache_path, run.Raw('||'), 'true',
]
)
@contextlib.contextmanager
def task(ctx, config):
"""
This is task for start immutable_object_cache.
"""
assert isinstance(config, dict), \
"task immutable_object_cache only supports a dictionary for configuration"
managers = []
config = teuthology.replace_all_with_clients(ctx.cluster, config)
managers.append(
lambda: immutable_object_cache(ctx=ctx, config=config)
)
with contextutil.nested(*managers):
yield