]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: validate everybody understands MSR on set-require-min-compat-client
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 31 May 2024 12:41:27 +0000 (12:41 +0000)
committerLaura Flores <lflores@ibm.com>
Thu, 5 Sep 2024 17:28:44 +0000 (12:28 -0500)
Unit testing
------------
```
[rzarzynski@o06 build]$ bin/unittest_features
...
[ RUN      ] features.release_features
1 argonaut features 0x40000 looks like argonaut
2 bobtail features 0x40000 looks like argonaut
3 cuttlefish features 0x40000 looks like argonaut
4 dumpling features 0x42040000 looks like dumpling
5 emperor features 0x42040000 looks like dumpling
6 firefly features 0x20842040000 looks like firefly
7 giant features 0x20842040000 looks like firefly
8 hammer features 0x1020842040000 looks like hammer
9 infernalis features 0x1020842040000 looks like hammer
10 jewel features 0x401020842040000 looks like jewel
11 kraken features 0xc01020842040000 looks like kraken
12 luminous features 0xe01020842240000 looks like luminous
13 mimic features 0xe01020842240000 looks like luminous
14 nautilus features 0xe01020842240000 looks like luminous
15 octopus features 0xe01020842240000 looks like luminous
16 pacific features 0xe01020842240000 looks like luminous
17 quincy features 0xe01020842240000 looks like luminous
18 reef features 0xe010208d2240000 looks like reef
19 squid features 0xe010248d2240000 looks like squid
[       OK ] features.release_features (0 ms)
```

Manual testing
--------------
\### `reef` client present in `squid` cluster
```
[rzarzynski@o06 build]$ bin/ceph daemon mon.a sessions | jq  -jr '.[] | .name, "\t", .con_features, "\t", .con_features_hex, "\n"' | grep client
client.?        4540701547738038271     3f03cffffffdffff
client.?        4540138322906710015     3f01cfbffffdffff
[rzarzynski@o06 build]$ bin/ceph osd get-require-min-compat-client
luminous
[rzarzynski@o06 build]$ bin/ceph osd set-require-min-compat-client squid
Error EPERM: cannot set require_min_compat_client to squid: 1 connected client(s) look like reef (missing 0x4000000000); add --yes-i-really-mean-it to do it anyway
```

\### only `squid` clients and `squid` cluster
```
[rzarzynski@o06 build]$ bin/ceph daemon mon.a sessions | jq  -jr '.[] | .name, "\t", .con_features, "\t", .con_features_hex, "\n"' | grep client
client.?        4540701547738038271     3f03cffffffdffff
client.?        4540701547738038271     3f03cffffffdffff
[rzarzynski@o06 build]$ bin/ceph osd set-require-min-compat-client squid
set require_min_compat_client to squid
```

Fixes: https://tracker.ceph.com/issues/66297
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit 4b54b07640b56e387716f2e73d9004fa7757f4e3)
(cherry picked from commit f79b799b138b7658a501f97211d4b570c0e6fae0)

src/common/ceph_strings.cc

index 10cef785a86ccb9f44430854258b5de1de90491a..6f45999eafb72d9690e7e12fba286063f16de8cf 100644 (file)
@@ -160,6 +160,10 @@ uint64_t ceph_release_features(int r)
        if (r <= CEPH_RELEASE_REEF)
                return req;
 
+       req |= CEPH_FEATURE_CRUSH_MSR;
+       if (r <= CEPH_RELEASE_SQUID)
+               return req;
+
        return req;
 }