Make sure X (and, ideally, X+1) is defined:
-- [ ] src/common/ceph_releases.h (`ceph_release_t`)
-- [ ] src/common/ceph_strings.cc (`ceph_release_name()`)
-- [ ] src/include/rados.h (`CEPH_RELEASE_*` and `MAX`)
-- [ ] src/include/rbd/librbd.h (`LIBRBD_VER_MINOR` to X)
-- [ ] src/mon/mon_types.h (`ceph::features::mon::FEATURE_*` and related structs and helpers)
-- [ ] src/mds/cephfs_features.h (`CEPHFS_CURRENT_RELEASE`)
+- [x] src/common/ceph_releases.h (`ceph_release_t`)
+- [x] src/common/ceph_strings.cc (`ceph_release_name()`)
+- [x] src/include/rados.h (`CEPH_RELEASE_*` and `MAX`)
+- [x] src/include/rbd/librbd.h (`LIBRBD_VER_MINOR` to X)
+- [x] src/mon/mon_types.h (`ceph::features::mon::FEATURE_*` and related structs and helpers)
+- [x] src/mds/cephfs_features.h (`CEPHFS_CURRENT_RELEASE`)
Github Actions
~~~~~~~~~~~~~~
reef,
squid,
tentacle,
+ umbrella,
max,
};
return "squid";
case CEPH_RELEASE_TENTACLE:
return "tentacle";
+ case CEPH_RELEASE_UMBRELLA:
+ return "umbrella";
default:
if (r < 0)
return "unspecified";
#define CEPH_RELEASE_REEF 18
#define CEPH_RELEASE_SQUID 19
#define CEPH_RELEASE_TENTACLE 20
-#define CEPH_RELEASE_MAX 21 /* highest + 1 */
+#define CEPH_RELEASE_UMBRELLA 21
+#define CEPH_RELEASE_MAX 22 /* highest + 1 */
/*
* The error code to return when an OSD can't handle a write
#include "features.h"
#define LIBRBD_VER_MAJOR 1
-#define LIBRBD_VER_MINOR 20
+#define LIBRBD_VER_MINOR 21
#define LIBRBD_VER_EXTRA 0
#define LIBRBD_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
// and update Server::update_required_client_features(). This feature bit
// is used to indicate that operator only wants clients from that release or
// later to mount CephFS.
-#define CEPHFS_CURRENT_RELEASE CEPH_RELEASE_TENTACLE
+#define CEPHFS_CURRENT_RELEASE CEPH_RELEASE_UMBRELLA
// The first 5 bits are reserved for old ceph releases.
#define CEPHFS_FEATURE_JEWEL 5
constexpr mon_feature_t FEATURE_REEF( (1ULL << 9));
constexpr mon_feature_t FEATURE_SQUID( (1ULL << 10));
constexpr mon_feature_t FEATURE_TENTACLE( (1ULL << 11));
+ constexpr mon_feature_t FEATURE_UMBRELLA( (1ULL << 12));
// Release-independent features
FEATURE_REEF |
FEATURE_SQUID |
FEATURE_TENTACLE |
+ FEATURE_UMBRELLA |
// Release-independent features
FEATURE_NVMEOF_BEACON_DIFF |
FEATURE_REEF |
FEATURE_SQUID |
FEATURE_TENTACLE |
+ FEATURE_UMBRELLA |
// Release-independent features
FEATURE_NVMEOF_BEACON_DIFF |
static inline ceph_release_t infer_ceph_release_from_mon_features(mon_feature_t f)
{
+ if (f.contains_all(ceph::features::mon::FEATURE_UMBRELLA)) {
+ return ceph_release_t::umbrella;
+ }
if (f.contains_all(ceph::features::mon::FEATURE_TENTACLE)) {
return ceph_release_t::tentacle;
}
return "squid";
} else if (f == FEATURE_TENTACLE) {
return "tentacle";
+ } else if (f == FEATURE_UMBRELLA) {
+ return "umbrella";
// Release-independent features
} else if (f == FEATURE_NVMEOF_BEACON_DIFF) {
return "nvmeof_beacon_diff";
return FEATURE_SQUID;
} else if (n == "tentacle") {
return FEATURE_TENTACLE;
+ } else if (n == "umbrella") {
+ return FEATURE_UMBRELLA;
// Release-independent features
} else if (n == "nvmeof_beacon_diff") {
return FEATURE_NVMEOF_BEACON_DIFF;