+++ /dev/null
-.qa/distros/supported/centos_8.stream.yaml
\ No newline at end of file
--- /dev/null
+.qa/distros/all/centos_9.stream.yaml
\ No newline at end of file
--- /dev/null
+meta:
+- desc: |
+ install ceph/quincy latest
+tasks:
+- install:
+ branch: quincy
+ exclude_packages:
+ - librados3
+ - ceph-mgr-dashboard
+ - ceph-mgr-diskprediction-local
+ - ceph-mgr-rook
+ - ceph-mgr-cephadm
+ - cephadm
+ - ceph-volume
+ extra_packages: ['librados2']
+- print: "**** done installing quincy"
+- ceph:
+ log-ignorelist:
+ - overall HEALTH_
+ - \(FS_
+ - \(MDS_
+ - \(OSD_
+ - \(MON_DOWN\)
+ - \(CACHE_POOL_
+ - \(POOL_
+ - \(MGR_DOWN\)
+ - \(PG_
+ - \(SMALLER_PGP_NUM\)
+ - Monitor daemon marked osd
+ - Behind on trimming
+ - Manager daemon
+ conf:
+ global:
+ mon warn on pool no app: false
+ ms bind msgr2: false
+- exec:
+ osd.0:
+ - ceph osd set-require-min-compat-client quincy
+- print: "**** done ceph"
+++ /dev/null
-meta:
-- desc: |
- install ceph/octopus latest
-tasks:
-- install:
- branch: octopus
- exclude_packages:
- - librados3
- - ceph-mgr-dashboard
- - ceph-mgr-diskprediction-local
- - ceph-mgr-rook
- - ceph-mgr-cephadm
- - cephadm
- - ceph-volume
- extra_packages: ['librados2']
-- print: "**** done installing octopus"
-- ceph:
- log-ignorelist:
- - overall HEALTH_
- - \(FS_
- - \(MDS_
- - \(OSD_
- - \(MON_DOWN\)
- - \(CACHE_POOL_
- - \(POOL_
- - \(MGR_DOWN\)
- - \(PG_
- - \(SMALLER_PGP_NUM\)
- - Monitor daemon marked osd
- - Behind on trimming
- - Manager daemon
- conf:
- global:
- mon warn on pool no app: false
- ms bind msgr2: false
-- exec:
- osd.0:
- - ceph osd set-require-min-compat-client octopus
-- print: "**** done ceph"
tasks:
- ceph-fuse:
-- print: "**** done octopus client"
+ client.0:
+ client_feature_range: "[0-13],[15-21]"
+ client.1:
+ client_feature_range: "[0-13],[15-21]"
+- print: "**** done client"
- workunit:
clients:
all:
- install.upgrade:
# upgrade the single cluster node, which is running all the mon/mds/osd/mgr daemons
mon.a:
- branch: quincy
- print: "**** done install.upgrade the host"
- ceph.restart:
daemons: [mon.*, mgr.*]
mon.a:
- ceph osd dump -f json-pretty
- ceph versions
- - ceph osd require-osd-release quincy
+ - ceph osd require-osd-release reef
- for f in `ceph osd pool ls` ; do ceph osd pool set $f pg_autoscale_mode off ; done
- ceph.healthy:
- print: "**** done ceph.restart"
+++ /dev/null
-overrides:
- ceph:
- log-ignorelist:
- - missing required features
-tasks:
-- exec:
- mon.a:
- - ceph fs dump --format=json-pretty
- - ceph fs required_client_features cephfs add metric_collect
-- sleep:
- duration: 5
-- fs.clients_evicted:
--- /dev/null
+overrides:
+ ceph:
+ log-ignorelist:
+ - missing required features
+tasks:
+- exec:
+ mon.a:
+ - ceph fs dump --format=json-pretty
+ - ceph fs required_client_features cephfs add metric_collect
+- sleep:
+ duration: 5
+- fs.clients_evicted:
+++ /dev/null
-.qa/distros/supported/centos_8.stream.yaml
\ No newline at end of file
--- /dev/null
+.qa/distros/all/centos_9.stream.yaml
\ No newline at end of file
--- /dev/null
+meta:
+- desc: |
+ install ceph/quincy latest
+tasks:
+- install:
+ branch: quincy
+ exclude_packages:
+ - librados3
+ - ceph-mgr-dashboard
+ - ceph-mgr-diskprediction-local
+ - ceph-mgr-rook
+ - ceph-mgr-cephadm
+ - cephadm
+ - ceph-volume
+ extra_packages: ['librados2']
+- print: "**** done installing quincy"
+- ceph:
+ log-ignorelist:
+ - overall HEALTH_
+ - \(FS_
+ - \(MDS_
+ - \(OSD_
+ - \(MON_DOWN\)
+ - \(CACHE_POOL_
+ - \(POOL_
+ - \(MGR_DOWN\)
+ - \(PG_
+ - \(SMALLER_PGP_NUM\)
+ - Monitor daemon marked osd
+ - Behind on trimming
+ - Manager daemon
+ conf:
+ global:
+ mon warn on pool no app: false
+ ms bind msgr2: false
+- exec:
+ osd.0:
+ - ceph osd set-require-min-compat-client quincy
+- print: "**** done ceph"
+++ /dev/null
-meta:
-- desc: |
- install ceph/octopus latest
-tasks:
-- install:
- branch: octopus
- exclude_packages:
- - librados3
- - ceph-mgr-dashboard
- - ceph-mgr-diskprediction-local
- - ceph-mgr-rook
- - ceph-mgr-cephadm
- - cephadm
- - ceph-volume
- extra_packages: ['librados2']
-- print: "**** done installing octopus"
-- ceph:
- log-ignorelist:
- - overall HEALTH_
- - \(FS_
- - \(MDS_
- - \(OSD_
- - \(MON_DOWN\)
- - \(CACHE_POOL_
- - \(POOL_
- - \(MGR_DOWN\)
- - \(PG_
- - \(SMALLER_PGP_NUM\)
- - Monitor daemon marked osd
- - Behind on trimming
- - Manager daemon
- conf:
- global:
- mon warn on pool no app: false
- ms bind msgr2: false
-- exec:
- osd.0:
- - ceph osd set-require-min-compat-client octopus
-- print: "**** done ceph"
nuke-on-error: false
tasks:
- ceph-fuse:
-- print: "**** done octopus client"
-#- workunit:
-# clients:
-# all:
-# - suites/fsstress.sh
+ client.1:
+ client_feature_range: "[0-13],[15-21]"
+- print: "**** done client"
+- workunit:
+ clients:
+ all:
+ - suites/fsstress.sh
- print: "**** done fsstress"
- install.upgrade:
# upgrade the single cluster node, which is running all the mon/mds/osd/mgr daemons
mon.a:
- branch: quincy
- print: "**** done install.upgrade the host"
- ceph.restart:
daemons: [mon.*, mgr.*]
mon.a:
- ceph versions
- ceph osd dump -f json-pretty
- - ceph osd require-osd-release quincy
+ - ceph osd require-osd-release reef
- for f in `ceph osd pool ls` ; do ceph osd pool set $f pg_autoscale_mode off ; done
- ceph.healthy:
- print: "**** done ceph.restart"
tasks:
- install.upgrade:
client.0:
- branch: quincy
- print: "**** done install.upgrade on client.0"
- ceph-fuse:
client.0:
import contextlib
import logging
+import re
from teuthology import misc
from tasks.cephfs.fuse_mount import FuseMount
client.1:
mount_subvol_num: 1
+ Example for client mount with custom client feature set
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: 21 # everything including CEPHFS_FEATURE_MDS_AUTH_CAPS_CHECK
+
+ OR
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: "[0-13],[15-21]" # all features except metric_collect (bit 14)
+
+ OR
+
+ tasks:
+ - ceph:
+ - ceph-fuse:
+ client.0:
+ client_feature_range: "[0-13],16,19,[20-21]" # all features except metric_collect,alternate_name, op_getvxattr, 32bit_retry_fwd
+
+ client_feature_range can have repetitive and overlapping ranges/values - the parsed feature bits would not have duplicates and is sorted. Decreasing ranges are silently ignored.
+
:param ctx: Context
:param config: Configuration
"""
for remote in remotes:
FuseMount.cleanup_stale_netnses_and_bridge(remote)
+ def parse_client_feature_range(client_feature_range):
+ def intify(val):
+ try:
+ return int(val)
+ except ValueError:
+ log.warn(f'failed to decode feature bit {val}')
+ raise
+ feature_bits = []
+ pvalue = re.compile(r'(\d+)')
+ prange = re.compile(r'\[(\d+)\-(\d+)\]')
+ if (isinstance(client_feature_range, int)):
+ # everything upto (and including) this feature bit
+ feature_bits.extend(range(0, client_feature_range+1))
+ elif isinstance(client_feature_range, str):
+ for feat in client_feature_range.split(','):
+ m = pvalue.match(feat)
+ if m:
+ feature_bits.append(intify(m.group(1)))
+ continue
+ m = prange.match(feat)
+ if m:
+ feature_bits.extend(range(intify(m.group(1)), intify(m.group(2))+1))
+ continue
+ raise ValueError(f'Invalid feature range or value "{feat}"')
+ else:
+ raise TypeError("client_feature_range must be of type int or str")
+ return sorted(set(feature_bits))
+
# Mount any clients we have been asked to (default to mount all)
log.info('Mounting ceph-fuse clients...')
for info in mounted_by_me.values():
config = info["config"]
mount_x = info['mount']
- mount_x.mount(mntopts=config.get('mntopts', []), mntargs=config.get('mntargs', []))
+
+ # apply custom client feature set
+ client_features = []
+ client_feature_range = config.get("client_feature_range", None)
+ if client_feature_range is not None:
+ client_features = ",".join(str(i) for i in parse_client_feature_range(client_feature_range))
+ mntargs = config.get('mntargs', [])
+ if client_features:
+ mntargs.append(f"--client_debug_inject_features={client_features}")
+ log.debug(f"passing mntargs={mntargs}")
+ mount_x.mount(mntopts=config.get('mntopts', []), mntargs=mntargs)
for info in mounted_by_me.values():
info["mount"].wait_until_mounted()