mirror of
https://github.com/ceph/ceph
synced 2024-12-14 15:35:45 +00:00
51fc7a9922
in python3, dict.viewitems() is replaced with dict.items(). Signed-off-by: Kefu Chai <kchai@redhat.com>
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
"""
|
|
CephFS sub-tasks.
|
|
"""
|
|
|
|
import logging
|
|
import re
|
|
import six
|
|
|
|
from tasks.cephfs.filesystem import Filesystem
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
def clients_evicted(ctx, config):
|
|
"""
|
|
Check clients are evicted, unmount (cleanup) if so.
|
|
"""
|
|
|
|
if config is None:
|
|
config = {}
|
|
assert isinstance(config, dict), \
|
|
'task only accepts a dict for configuration'
|
|
|
|
clients = config.get('clients')
|
|
|
|
if clients is None:
|
|
clients = {("client."+client_id): True for client_id in ctx.mounts}
|
|
|
|
log.info("clients is {}".format(str(clients)))
|
|
|
|
fs = Filesystem(ctx)
|
|
status = fs.status()
|
|
|
|
has_session = set()
|
|
mounts = {}
|
|
for client in clients:
|
|
client_id = re.match("^client.([0-9]+)$", client).groups(1)[0]
|
|
mounts[client] = ctx.mounts.get(client_id)
|
|
|
|
for rank in fs.get_ranks(status=status):
|
|
ls = fs.rank_asok(['session', 'ls'], rank=rank['rank'], status=status)
|
|
for session in ls:
|
|
for client, evicted in six.viewitems(clients):
|
|
mount = mounts.get(client)
|
|
if mount is not None:
|
|
global_id = mount.get_global_id()
|
|
if session['id'] == global_id:
|
|
if evicted:
|
|
raise RuntimeError("client still has session: {}".format(str(session)))
|
|
else:
|
|
log.info("client {} has a session with MDS {}.{}".format(client, fs.id, rank['rank']))
|
|
has_session.add(client)
|
|
|
|
no_session = set(clients) - has_session
|
|
should_assert = False
|
|
for client, evicted in six.viewitems(clients):
|
|
mount = mounts.get(client)
|
|
if mount is not None:
|
|
if evicted:
|
|
log.info("confirming client {} is blacklisted".format(client))
|
|
assert mount.is_blacklisted()
|
|
elif client in no_session:
|
|
log.info("client {} should not be evicted but has no session with an MDS".format(client))
|
|
mount.is_blacklisted() # for debugging
|
|
should_assert = True
|
|
if should_assert:
|
|
raise RuntimeError("some clients which should not be evicted have no session with an MDS?")
|