/* * Each time we reclaim bits for reuse we need to specify another bit * that, if present, indicates we have the new incarnation of that * feature. Base case is 1 (first use).
*/ #define CEPH_FEATURE_INCARNATION_1 (0ull) #define CEPH_FEATURE_INCARNATION_2 (1ull<<57) // SERVER_JEWEL #define CEPH_FEATURE_INCARNATION_3 ((1ull<<57)|(1ull<<28)) // SERVER_MIMIC
/* this bit is ignored but still advertised by release *when* */ #define DEFINE_CEPH_FEATURE_DEPRECATED(bit, incarnation, name, when) \ staticconst uint64_t __maybe_unused DEPRECATED_CEPH_FEATURE_##name = (1ULL<<bit); \ staticconst uint64_t __maybe_unused DEPRECATED_CEPH_FEATUREMASK_##name = \
(1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
/* * this bit is ignored by release *unused* and not advertised by * release *unadvertised*
*/ #define DEFINE_CEPH_FEATURE_RETIRED(bit, inc, name, unused, unadvertised)
/* * test for a feature. this test is safer than a typical mask against * the bit because it ensures that we have the bit AND the marker for the * bit's incarnation. this must be used in any case where the features * bits may include an old meaning of the bit.
*/ #define CEPH_HAVE_FEATURE(x, name) \
(((x) & (CEPH_FEATUREMASK_##name)) == (CEPH_FEATUREMASK_##name))
/* * Notes on deprecation: * * A *major* release is a release through which all upgrades must pass * (e.g., jewel). For example, no pre-jewel server will ever talk to * a post-jewel server (mon, osd, etc). * * For feature bits used *only* on the server-side: * * - In the first phase we indicate that a feature is DEPRECATED as of * a particular release. This is the first major release X (say, * jewel) that does not depend on its peers advertising the feature. * That is, it safely assumes its peers all have the feature. We * indicate this with the DEPRECATED macro. For example, * * DEFINE_CEPH_FEATURE_DEPRECATED( 2, 1, MONCLOCKCHECK, JEWEL) * * because 10.2.z (jewel) did not care if its peers advertised this * feature bit. * * - In the second phase we stop advertising the bit and call it * RETIRED. This can normally be done in the *next* major release * following the one in which we marked the feature DEPRECATED. In * the above example, for 12.0.z (luminous) we can say: * * DEFINE_CEPH_FEATURE_RETIRED( 2, 1, MONCLOCKCHECK, JEWEL, LUMINOUS) * * - The bit can be reused in the first post-luminous release, 13.0.z * (m). * * This ensures that no two versions who have different meanings for * the bit ever speak to each other.
*/
DEFINE_CEPH_FEATURE(62, 1, RESERVED) // do not use; used as a sentinal
DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facing
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.