]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
qa: add tests for client features
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 12 Jul 2018 13:25:53 +0000 (06:25 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 12 Jul 2018 17:12:12 +0000 (10:12 -0700)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
53 files changed:
qa/cephfs/clusters/1-mds-1-client.yaml
qa/cephfs/clusters/1-mds-2-client-micro.yaml [new file with mode: 0644]
qa/cephfs/clusters/1-mds-2-client.yaml
qa/cephfs/clusters/1-mds-4-client.yaml
qa/suites/fs/upgrade/featureful_client/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/bluestore.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/clusters/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/clusters/1-mds-2-client-micro.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/conf [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/frag_enable.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/no.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/yes.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_health.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_wrongly_marked_down.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-luminous.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/mimic.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/no.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/bluestore.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/1-mds-2-client-micro.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/conf [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/frag_enable.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/no.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/yes.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_health.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_wrongly_marked_down.yaml [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/% [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/.qa [new symlink]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-luminous.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/4-compat_client.yaml [new file with mode: 0644]
qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/5-client-sanity.yaml [new file with mode: 0644]
qa/tasks/ceph_fuse.py
qa/tasks/cephfs/filesystem.py
qa/tasks/cephfs/fuse_mount.py
qa/tasks/cephfs/kernel_mount.py
qa/tasks/cephfs/mount.py
qa/tasks/fs.py [new file with mode: 0644]
qa/tasks/kclient.py

index 966f0dcc8145910dc5e01e0624063a35f6f286af..e0fde44636245f730cf88746be1f1579ec8d7f24 100644 (file)
@@ -1,6 +1,6 @@
 roles:
-- [mon.a, mgr.y, mds.a, osd.0, osd.1, osd.2, osd.3]
-- [mon.b, mon.c, mgr.x, mds.a-s, osd.4, osd.5, osd.6, osd.7]
+- [mon.a, mgr.y, mds.a, mds.x-s, osd.0, osd.1, osd.2, osd.3]
+- [mon.b, mon.c, mgr.x, mds.y-s, osd.4, osd.5, osd.6, osd.7]
 - [client.0]
 openstack:
 - volumes: # attached to each instance
diff --git a/qa/cephfs/clusters/1-mds-2-client-micro.yaml b/qa/cephfs/clusters/1-mds-2-client-micro.yaml
new file mode 100644 (file)
index 0000000..42ad4ef
--- /dev/null
@@ -0,0 +1,8 @@
+roles:
+- [mon.a, mon.b, mon.c, mgr.x, mgr.y, mds.a, mds.b, mds.c, osd.0, osd.1, osd.2, osd.3]
+- [client.0]
+- [client.1]
+openstack:
+- volumes: # attached to each instance
+    count: 4
+    size: 10 # GB
index 656178c0f842cbd733f03b3000bd3a9dce9410ea..83b9372de3b28d542ab66e856f1dd674c97d31a6 100644 (file)
@@ -1,6 +1,6 @@
 roles:
-- [mon.a, mgr.y, mds.a, osd.0, osd.1, osd.2, osd.3]
-- [mon.b, mon.c, mgr.x, mds.a-s, osd.4, osd.5, osd.6, osd.7]
+- [mon.a, mgr.y, mds.a, mds.x-s, osd.0, osd.1, osd.2, osd.3]
+- [mon.b, mon.c, mgr.x, mds.y-s, osd.4, osd.5, osd.6, osd.7]
 - [client.0]
 - [client.1]
 openstack:
index f17c83b823a243dcbfe9abbff92a3789830056d3..a451c81c23a7f5fbb93a2872f7c113566549005f 100644 (file)
@@ -1,6 +1,6 @@
 roles:
-- [mon.a, mgr.y, mds.a, osd.0, osd.1, osd.2, osd.3]
-- [mon.b, mon.c, mgr.x, mds.a-s, osd.4, osd.5, osd.6, osd.7]
+- [mon.a, mgr.y, mds.a, mds.x-s, osd.0, osd.1, osd.2, osd.3]
+- [mon.b, mon.c, mgr.x, mds.y-s, osd.4, osd.5, osd.6, osd.7]
 - [client.0]
 - [client.1]
 - [client.2]
diff --git a/qa/suites/fs/upgrade/featureful_client/.qa b/qa/suites/fs/upgrade/featureful_client/.qa
new file mode 120000 (symlink)
index 0000000..11a54ed
--- /dev/null
@@ -0,0 +1 @@
+../../../../
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/% b/qa/suites/fs/upgrade/featureful_client/old_client/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/.qa b/qa/suites/fs/upgrade/featureful_client/old_client/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/bluestore.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/bluestore.yaml
new file mode 120000 (symlink)
index 0000000..1728acc
--- /dev/null
@@ -0,0 +1 @@
+../../../../../cephfs/objectstore-ec/bluestore.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/clusters/.qa b/qa/suites/fs/upgrade/featureful_client/old_client/clusters/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/clusters/1-mds-2-client-micro.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/clusters/1-mds-2-client-micro.yaml
new file mode 120000 (symlink)
index 0000000..feb68f3
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/clusters/1-mds-2-client-micro.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/conf b/qa/suites/fs/upgrade/featureful_client/old_client/conf
new file mode 120000 (symlink)
index 0000000..6d47129
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/conf/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/% b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/.qa b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/frag_enable.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/frag_enable.yaml
new file mode 120000 (symlink)
index 0000000..34a39a3
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/frag_enable.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/no.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/no.yaml
new file mode 100644 (file)
index 0000000..c740a45
--- /dev/null
@@ -0,0 +1,3 @@
+overrides:
+  ceph:
+    max_mds: 1
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/yes.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/yes.yaml
new file mode 100644 (file)
index 0000000..ecf118d
--- /dev/null
@@ -0,0 +1,3 @@
+overrides:
+  ceph:
+    max_mds: 2
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_health.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_health.yaml
new file mode 120000 (symlink)
index 0000000..74f39a4
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/whitelist_health.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_wrongly_marked_down.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/overrides/whitelist_wrongly_marked_down.yaml
new file mode 120000 (symlink)
index 0000000..b4528c0
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/whitelist_wrongly_marked_down.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/% b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/.qa b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-luminous.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/0-luminous.yaml
new file mode 100644 (file)
index 0000000..bf627dc
--- /dev/null
@@ -0,0 +1,30 @@
+meta:
+- desc: |
+   install ceph/luminous latest
+tasks:
+- install:
+    branch: luminous
+- print: "**** done installing luminous"
+- ceph:
+    log-whitelist:
+      - 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
+- exec:
+    osd.0:
+      - ceph osd require-osd-release luminous
+      - ceph osd set-require-min-compat-client luminous
+- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/1-client.yaml
new file mode 100644 (file)
index 0000000..88d686f
--- /dev/null
@@ -0,0 +1,8 @@
+tasks:
+- ceph-fuse:
+- print: "**** done luminous client"
+- workunit:
+    clients:
+      all:
+      - suites/fsstress.sh
+- print: "**** done fsstress"
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/2-upgrade.yaml
new file mode 100644 (file)
index 0000000..5c50d60
--- /dev/null
@@ -0,0 +1,12 @@
+tasks:
+- mds_pre_upgrade:
+- print: "**** done mds pre-upgrade sequence"
+- install.upgrade:
+    mon.a:
+    mon.b:
+- print: "**** done install.upgrade both hosts"
+- ceph.stop: [mds.*]
+- ceph.restart:
+    daemons: [mon.*, mgr.*, osd.*, mds.*]
+    mon-health-to-clog: false
+- print: "**** done ceph.restart"
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/mimic.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/mimic.yaml
new file mode 100644 (file)
index 0000000..3672067
--- /dev/null
@@ -0,0 +1,10 @@
+overrides:
+  ceph:
+    log-whitelist:
+      - missing required features
+tasks:
+- exec:
+    mon.a:
+      - ceph fs dump --format=json-pretty
+      - ceph fs set cephfs min_compat_client mimic
+- fs.clients_evicted:
diff --git a/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/no.yaml b/qa/suites/fs/upgrade/featureful_client/old_client/tasks/3-compat_client/no.yaml
new file mode 100644 (file)
index 0000000..b495eb4
--- /dev/null
@@ -0,0 +1,6 @@
+tasks:
+- workunit:
+    clients:
+      all:
+      - suites/fsstress.sh
+- print: "**** done fsstress"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/% b/qa/suites/fs/upgrade/featureful_client/upgraded_client/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/.qa b/qa/suites/fs/upgrade/featureful_client/upgraded_client/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/bluestore.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/bluestore.yaml
new file mode 120000 (symlink)
index 0000000..1728acc
--- /dev/null
@@ -0,0 +1 @@
+../../../../../cephfs/objectstore-ec/bluestore.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/.qa b/qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/1-mds-2-client-micro.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/clusters/1-mds-2-client-micro.yaml
new file mode 120000 (symlink)
index 0000000..feb68f3
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/clusters/1-mds-2-client-micro.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/conf b/qa/suites/fs/upgrade/featureful_client/upgraded_client/conf
new file mode 120000 (symlink)
index 0000000..6d47129
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/conf/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/% b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/.qa b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/frag_enable.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/frag_enable.yaml
new file mode 120000 (symlink)
index 0000000..34a39a3
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/frag_enable.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/no.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/no.yaml
new file mode 100644 (file)
index 0000000..c740a45
--- /dev/null
@@ -0,0 +1,3 @@
+overrides:
+  ceph:
+    max_mds: 1
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/yes.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/yes.yaml
new file mode 100644 (file)
index 0000000..ecf118d
--- /dev/null
@@ -0,0 +1,3 @@
+overrides:
+  ceph:
+    max_mds: 2
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_health.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_health.yaml
new file mode 120000 (symlink)
index 0000000..74f39a4
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/whitelist_health.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_wrongly_marked_down.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/whitelist_wrongly_marked_down.yaml
new file mode 120000 (symlink)
index 0000000..b4528c0
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/whitelist_wrongly_marked_down.yaml
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/% b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/.qa b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-luminous.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/0-luminous.yaml
new file mode 100644 (file)
index 0000000..bf627dc
--- /dev/null
@@ -0,0 +1,30 @@
+meta:
+- desc: |
+   install ceph/luminous latest
+tasks:
+- install:
+    branch: luminous
+- print: "**** done installing luminous"
+- ceph:
+    log-whitelist:
+      - 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
+- exec:
+    osd.0:
+      - ceph osd require-osd-release luminous
+      - ceph osd set-require-min-compat-client luminous
+- print: "**** done ceph"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/1-client.yaml
new file mode 100644 (file)
index 0000000..dc1c0d8
--- /dev/null
@@ -0,0 +1,11 @@
+nuke-on-error: false
+overrides:
+  nuke-on-error: false
+tasks:
+- ceph-fuse:
+- print: "**** done luminous client"
+#- workunit:
+#    clients:
+#      all:
+#      - suites/fsstress.sh
+- print: "**** done fsstress"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/2-upgrade.yaml
new file mode 100644 (file)
index 0000000..5c50d60
--- /dev/null
@@ -0,0 +1,12 @@
+tasks:
+- mds_pre_upgrade:
+- print: "**** done mds pre-upgrade sequence"
+- install.upgrade:
+    mon.a:
+    mon.b:
+- print: "**** done install.upgrade both hosts"
+- ceph.stop: [mds.*]
+- ceph.restart:
+    daemons: [mon.*, mgr.*, osd.*, mds.*]
+    mon-health-to-clog: false
+- print: "**** done ceph.restart"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/3-client-upgrade.yaml
new file mode 100644 (file)
index 0000000..58fdfdb
--- /dev/null
@@ -0,0 +1,14 @@
+tasks:
+- install.upgrade:
+    client.0:
+- print: "**** done install.upgrade on client.0"
+- ceph-fuse:
+    client.0:
+      mounted: false
+    client.1:
+      skip: true
+- ceph-fuse:
+    client.0:
+    client.1:
+      skip: true
+- print: "**** done remount client"
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/4-compat_client.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/4-compat_client.yaml
new file mode 100644 (file)
index 0000000..bdf484d
--- /dev/null
@@ -0,0 +1,13 @@
+overrides:
+  ceph:
+    log-whitelist:
+      - missing required features
+tasks:
+- exec:
+    mon.a:
+      - ceph fs dump --format=json-pretty
+      - ceph fs set cephfs min_compat_client mimic
+- fs.clients_evicted:
+    clients:
+      client.0: False
+      client.1: True
diff --git a/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/5-client-sanity.yaml b/qa/suites/fs/upgrade/featureful_client/upgraded_client/tasks/5-client-sanity.yaml
new file mode 100644 (file)
index 0000000..e206457
--- /dev/null
@@ -0,0 +1,6 @@
+tasks:
+- workunit:
+    clients:
+      client.0:
+      - suites/fsstress.sh
+- print: "**** done fsstress"
index 14c6989720b584772d5159c6b82abf130f1c6ed7..08254fed3c3d0001bc669688a8ea911c72589091 100644 (file)
@@ -7,7 +7,6 @@ import logging
 
 from teuthology import misc as teuthology
 from cephfs.fuse_mount import FuseMount
-from tasks.cephfs.filesystem import MDSCluster
 from tasks.cephfs.filesystem import Filesystem
 
 log = logging.getLogger(__name__)
@@ -94,24 +93,19 @@ def task(ctx, config):
     :param ctx: Context
     :param config: Configuration
     """
-    log.info('Mounting ceph-fuse clients...')
+    log.info('Running ceph_fuse task...')
 
     testdir = teuthology.get_testdir(ctx)
+    log.info("config is {}".format(str(config)))
     config = get_client_configs(ctx, config)
+    log.info("new config is {}".format(str(config)))
 
     # List clients we will configure mounts for, default is all clients
     clients = list(teuthology.get_clients(ctx=ctx, roles=filter(lambda x: 'client.' in x, config.keys())))
 
     all_mounts = getattr(ctx, 'mounts', {})
     mounted_by_me = {}
-
-    log.info('Wait for MDS to reach steady state...')
-    mds_cluster = MDSCluster(ctx)
-    status = mds_cluster.status()
-    for filesystem in status.get_filesystems():
-        fs = Filesystem(ctx, fscid=filesystem['id']) 
-        fs.wait_for_daemons()
-    log.info('Ready to start ceph-fuse...')
+    skipped = {}
 
     # Construct any new FuseMount instances
     for id_, remote in clients:
@@ -119,8 +113,13 @@ def task(ctx, config):
         if client_config is None:
             client_config = {}
 
+        skip = client_config.get("skip", False)
+        if skip:
+            skipped[id_] = skip
+            continue
+
         if id_ not in all_mounts:
-            fuse_mount = FuseMount(client_config, testdir, id_, remote)
+            fuse_mount = FuseMount(ctx, client_config, testdir, id_, remote)
             all_mounts[id_] = fuse_mount
         else:
             # Catch bad configs where someone has e.g. tried to use ceph-fuse and kcephfs for the same client
@@ -132,6 +131,7 @@ def task(ctx, config):
     ctx.mounts = all_mounts
 
     # Mount any clients we have been asked to (default to mount all)
+    log.info('Mounting ceph-fuse clients...')
     for mount in mounted_by_me.values():
         mount.mount()
 
@@ -139,7 +139,7 @@ def task(ctx, config):
         mount.wait_until_mounted()
 
     # Umount any pre-existing clients that we have not been asked to mount
-    for client_id in set(all_mounts.keys()) - set(mounted_by_me.keys()):
+    for client_id in set(all_mounts.keys()) - set(mounted_by_me.keys()) - set(skipped.keys()):
         mount = all_mounts[client_id]
         if mount.is_mounted():
             mount.umount_wait()
index 4ff3cc01413f12aa35842b9175114d687ef9c245..4b3cffa9ad075622f22f80373acd7567a69f8f32 100644 (file)
@@ -909,8 +909,8 @@ class Filesystem(MDSCluster):
 
         return self.json_asok(command, 'mds', mds_id)
 
-    def rank_asok(self, command, rank=0):
-        info = self.get_rank(rank=rank)
+    def rank_asok(self, command, rank=0, status=None):
+        info = self.get_rank(rank=rank, status=status)
         return self.json_asok(command, 'mds', info['name'])
 
     def read_cache(self, path, depth=None):
index 30de6051c0b2542a0330a5d7fe61b9357bba24a8..4b83355343ebdb09de3712963d815c3f5b8a4831 100644 (file)
@@ -10,19 +10,25 @@ from teuthology.contextutil import MaxWhileTries
 from teuthology.orchestra import run
 from teuthology.orchestra.run import CommandFailedError
 from .mount import CephFSMount
+from tasks.cephfs.filesystem import Filesystem
 
 log = logging.getLogger(__name__)
 
 
 class FuseMount(CephFSMount):
-    def __init__(self, client_config, test_dir, client_id, client_remote):
-        super(FuseMount, self).__init__(test_dir, client_id, client_remote)
+    def __init__(self, ctx, client_config, test_dir, client_id, client_remote):
+        super(FuseMount, self).__init__(ctx, test_dir, client_id, client_remote)
 
         self.client_config = client_config if client_config else {}
         self.fuse_daemon = None
         self._fuse_conn = None
+        self.id = None
+        self.inst = None
+        self.addr = None
 
     def mount(self, mount_path=None, mount_fs_name=None):
+        self.setupfs(name=mount_fs_name)
+
         try:
             return self._mount(mount_path, mount_fs_name)
         except RuntimeError:
@@ -152,6 +158,20 @@ class FuseMount(CephFSMount):
         else:
             self._fuse_conn = new_conns[0]
 
+        status = self.admin_socket(['status'])
+        self.id = status['id']
+        try:
+            self.inst = status['inst_str']
+            self.addr = status['addr_str']
+        except KeyError as e:
+            sessions = self.fs.rank_asok(['session', 'ls'])
+            for s in sessions:
+                if s['id'] == self.id:
+                    self.inst = s['inst']
+                    self.addr = self.inst.split()[1]
+            if self.inst is None:
+                raise RuntimeError("cannot find client session")
+
     def is_mounted(self):
         proc = self.client_remote.run(
             args=[
@@ -260,6 +280,9 @@ class FuseMount(CephFSMount):
 
         assert not self.is_mounted()
         self._fuse_conn = None
+        self.id = None
+        self.inst = None
+        self.addr = None
 
     def umount_wait(self, force=False, require_clean=False, timeout=900):
         """
@@ -411,6 +434,18 @@ print find_socket("{client_name}")
         """
         return self.admin_socket(['mds_sessions'])['id']
 
+    def get_global_inst(self):
+        """
+        Look up the CephFS client instance for this mount
+        """
+        return self.inst
+
+    def get_global_addr(self):
+        """
+        Look up the CephFS client addr for this mount
+        """
+        return self.addr
+
     def get_client_pid(self):
         """
         return pid of ceph-fuse process
index d237f65fb33541091968fe6b8c6079229e7c33d9..3f10657b8558c76ac74a6dd97d7ad1ae01caadf6 100644 (file)
@@ -17,9 +17,9 @@ UMOUNT_TIMEOUT = 300
 
 
 class KernelMount(CephFSMount):
-    def __init__(self, mons, test_dir, client_id, client_remote,
+    def __init__(self, ctx, mons, test_dir, client_id, client_remote,
                  ipmi_user, ipmi_password, ipmi_domain):
-        super(KernelMount, self).__init__(test_dir, client_id, client_remote)
+        super(KernelMount, self).__init__(ctx, test_dir, client_id, client_remote)
         self.mons = mons
 
         self.mounted = False
@@ -46,6 +46,8 @@ class KernelMount(CephFSMount):
         )
 
     def mount(self, mount_path=None, mount_fs_name=None):
+        self.setupfs(name=mount_fs_name)
+
         log.info('Mounting kclient client.{id} at {remote} {mnt}...'.format(
             id=self.client_id, remote=self.client_remote, mnt=self.mountpoint))
 
index 4f96e6cdc21742c70ebb1450c37e8148354f5fb6..fbff376041ef25f197577435a9bfd7a30a4fa69b 100644 (file)
@@ -8,22 +8,25 @@ import os
 from StringIO import StringIO
 from teuthology.orchestra import run
 from teuthology.orchestra.run import CommandFailedError, ConnectionLostError
+from tasks.cephfs.filesystem import Filesystem
 
 log = logging.getLogger(__name__)
 
 
 class CephFSMount(object):
-    def __init__(self, test_dir, client_id, client_remote):
+    def __init__(self, ctx, test_dir, client_id, client_remote):
         """
         :param test_dir: Global teuthology test dir
         :param client_id: Client ID, the 'foo' in client.foo
         :param client_remote: Remote instance for the host where client will run
         """
 
+        self.ctx = ctx
         self.test_dir = test_dir
         self.client_id = client_id
         self.client_remote = client_remote
         self.mountpoint_dir_name = 'mnt.{id}'.format(id=self.client_id)
+        self.fs = None
 
         self.test_files = ['a', 'b', 'c']
 
@@ -37,6 +40,12 @@ class CephFSMount(object):
     def is_mounted(self):
         raise NotImplementedError()
 
+    def setupfs(self, name=None):
+        self.fs = Filesystem(self.ctx, name=name)
+        log.info('Wait for MDS to reach steady state...')
+        self.fs.wait_for_daemons()
+        log.info('Ready to start {}...'.format(type(self).__name__))
+
     def mount(self, mount_path=None, mount_fs_name=None):
         raise NotImplementedError()
 
@@ -91,6 +100,14 @@ class CephFSMount(object):
         finally:
             self.umount_wait()
 
+    def is_blacklisted(self):
+        addr = self.get_global_addr()
+        blacklist = json.loads(self.fs.mon_manager.raw_cluster_cmd("osd", "blacklist", "ls", "--format=json"))
+        for b in blacklist:
+            if addr == b["addr"]:
+                return True
+        return False
+
     def create_files(self):
         assert(self.is_mounted())
 
@@ -459,6 +476,12 @@ class CephFSMount(object):
     def get_global_id(self):
         raise NotImplementedError()
 
+    def get_global_inst(self):
+        raise NotImplementedError()
+
+    def get_global_addr(self):
+        raise NotImplementedError()
+
     def get_osd_epoch(self):
         raise NotImplementedError()
 
diff --git a/qa/tasks/fs.py b/qa/tasks/fs.py
new file mode 100644 (file)
index 0000000..4286318
--- /dev/null
@@ -0,0 +1,67 @@
+"""
+CephFS sub-tasks.
+"""
+
+import contextlib
+import logging
+import re
+import time
+
+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 clients.viewitems():
+                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 clients.viewitems():
+        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?")
index 7cc7ada35f4ad3702d7644c109f0a5aacedf6a3d..5e217b323585e7df1a68a3d8586600fec7f8602f 100644 (file)
@@ -89,6 +89,7 @@ def task(ctx, config):
             continue
 
         kernel_mount = KernelMount(
+            ctx,
             mons,
             test_dir,
             id_,