Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __CEPH_FEATURES
0003 #define __CEPH_FEATURES
0004 
0005 /*
0006  * Each time we reclaim bits for reuse we need to specify another bit
0007  * that, if present, indicates we have the new incarnation of that
0008  * feature.  Base case is 1 (first use).
0009  */
0010 #define CEPH_FEATURE_INCARNATION_1 (0ull)
0011 #define CEPH_FEATURE_INCARNATION_2 (1ull<<57)              // SERVER_JEWEL
0012 #define CEPH_FEATURE_INCARNATION_3 ((1ull<<57)|(1ull<<28)) // SERVER_MIMIC
0013 
0014 #define DEFINE_CEPH_FEATURE(bit, incarnation, name)         \
0015     static const uint64_t __maybe_unused CEPH_FEATURE_##name = (1ULL<<bit);     \
0016     static const uint64_t __maybe_unused CEPH_FEATUREMASK_##name =          \
0017         (1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
0018 
0019 /* this bit is ignored but still advertised by release *when* */
0020 #define DEFINE_CEPH_FEATURE_DEPRECATED(bit, incarnation, name, when) \
0021     static const uint64_t __maybe_unused DEPRECATED_CEPH_FEATURE_##name = (1ULL<<bit);  \
0022     static const uint64_t __maybe_unused DEPRECATED_CEPH_FEATUREMASK_##name =       \
0023         (1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
0024 
0025 /*
0026  * this bit is ignored by release *unused* and not advertised by
0027  * release *unadvertised*
0028  */
0029 #define DEFINE_CEPH_FEATURE_RETIRED(bit, inc, name, unused, unadvertised)
0030 
0031 
0032 /*
0033  * test for a feature.  this test is safer than a typical mask against
0034  * the bit because it ensures that we have the bit AND the marker for the
0035  * bit's incarnation.  this must be used in any case where the features
0036  * bits may include an old meaning of the bit.
0037  */
0038 #define CEPH_HAVE_FEATURE(x, name)          \
0039     (((x) & (CEPH_FEATUREMASK_##name)) == (CEPH_FEATUREMASK_##name))
0040 
0041 
0042 /*
0043  * Notes on deprecation:
0044  *
0045  * A *major* release is a release through which all upgrades must pass
0046  * (e.g., jewel).  For example, no pre-jewel server will ever talk to
0047  * a post-jewel server (mon, osd, etc).
0048  *
0049  * For feature bits used *only* on the server-side:
0050  *
0051  *  - In the first phase we indicate that a feature is DEPRECATED as of
0052  *    a particular release.  This is the first major release X (say,
0053  *    jewel) that does not depend on its peers advertising the feature.
0054  *    That is, it safely assumes its peers all have the feature.  We
0055  *    indicate this with the DEPRECATED macro.  For example,
0056  *
0057  *      DEFINE_CEPH_FEATURE_DEPRECATED( 2, 1, MONCLOCKCHECK, JEWEL)
0058  *
0059  *    because 10.2.z (jewel) did not care if its peers advertised this
0060  *    feature bit.
0061  *
0062  *  - In the second phase we stop advertising the bit and call it
0063  *    RETIRED.  This can normally be done in the *next* major release
0064  *    following the one in which we marked the feature DEPRECATED.  In
0065  *    the above example, for 12.0.z (luminous) we can say:
0066  *
0067  *      DEFINE_CEPH_FEATURE_RETIRED( 2, 1, MONCLOCKCHECK, JEWEL, LUMINOUS)
0068  *
0069  *  - The bit can be reused in the first post-luminous release, 13.0.z
0070  *    (m).
0071  *
0072  * This ensures that no two versions who have different meanings for
0073  * the bit ever speak to each other.
0074  */
0075 
0076 DEFINE_CEPH_FEATURE( 0, 1, UID)
0077 DEFINE_CEPH_FEATURE( 1, 1, NOSRCADDR)
0078 DEFINE_CEPH_FEATURE_RETIRED( 2, 1, MONCLOCKCHECK, JEWEL, LUMINOUS)
0079 DEFINE_CEPH_FEATURE( 2, 3, SERVER_NAUTILUS)
0080 DEFINE_CEPH_FEATURE( 3, 1, FLOCK)
0081 DEFINE_CEPH_FEATURE( 4, 1, SUBSCRIBE2)
0082 DEFINE_CEPH_FEATURE( 5, 1, MONNAMES)
0083 DEFINE_CEPH_FEATURE( 6, 1, RECONNECT_SEQ)
0084 DEFINE_CEPH_FEATURE( 7, 1, DIRLAYOUTHASH)
0085 DEFINE_CEPH_FEATURE( 8, 1, OBJECTLOCATOR)
0086 DEFINE_CEPH_FEATURE( 9, 1, PGID64)
0087 DEFINE_CEPH_FEATURE(10, 1, INCSUBOSDMAP)
0088 DEFINE_CEPH_FEATURE(11, 1, PGPOOL3)
0089 DEFINE_CEPH_FEATURE(12, 1, OSDREPLYMUX)
0090 DEFINE_CEPH_FEATURE(13, 1, OSDENC)
0091 DEFINE_CEPH_FEATURE_RETIRED(14, 1, OMAP, HAMMER, JEWEL)
0092 DEFINE_CEPH_FEATURE(14, 2, SERVER_KRAKEN)
0093 DEFINE_CEPH_FEATURE(15, 1, MONENC)
0094 DEFINE_CEPH_FEATURE_RETIRED(16, 1, QUERY_T, JEWEL, LUMINOUS)
0095 
0096 DEFINE_CEPH_FEATURE_RETIRED(17, 1, INDEP_PG_MAP, JEWEL, LUMINOUS)
0097 
0098 DEFINE_CEPH_FEATURE(18, 1, CRUSH_TUNABLES)
0099 DEFINE_CEPH_FEATURE_RETIRED(19, 1, CHUNKY_SCRUB, JEWEL, LUMINOUS)
0100 
0101 DEFINE_CEPH_FEATURE_RETIRED(20, 1, MON_NULLROUTE, JEWEL, LUMINOUS)
0102 
0103 DEFINE_CEPH_FEATURE_RETIRED(21, 1, MON_GV, HAMMER, JEWEL)
0104 DEFINE_CEPH_FEATURE(21, 2, SERVER_LUMINOUS)
0105 DEFINE_CEPH_FEATURE(21, 2, RESEND_ON_SPLIT)  // overlap
0106 DEFINE_CEPH_FEATURE(21, 2, RADOS_BACKOFF)    // overlap
0107 DEFINE_CEPH_FEATURE(21, 2, OSDMAP_PG_UPMAP)  // overlap
0108 DEFINE_CEPH_FEATURE(21, 2, CRUSH_CHOOSE_ARGS) // overlap
0109 DEFINE_CEPH_FEATURE_RETIRED(22, 1, BACKFILL_RESERVATION, JEWEL, LUMINOUS)
0110 
0111 DEFINE_CEPH_FEATURE(23, 1, MSG_AUTH)
0112 DEFINE_CEPH_FEATURE_RETIRED(24, 1, RECOVERY_RESERVATION, JEWEL, LUNINOUS)
0113 
0114 DEFINE_CEPH_FEATURE(25, 1, CRUSH_TUNABLES2)
0115 DEFINE_CEPH_FEATURE(26, 1, CREATEPOOLID)
0116 DEFINE_CEPH_FEATURE(27, 1, REPLY_CREATE_INODE)
0117 DEFINE_CEPH_FEATURE_RETIRED(28, 1, OSD_HBMSGS, HAMMER, JEWEL)
0118 DEFINE_CEPH_FEATURE(28, 2, SERVER_MIMIC)
0119 DEFINE_CEPH_FEATURE(29, 1, MDSENC)
0120 DEFINE_CEPH_FEATURE(30, 1, OSDHASHPSPOOL)
0121 DEFINE_CEPH_FEATURE(31, 1, MON_SINGLE_PAXOS)  // deprecate me
0122 DEFINE_CEPH_FEATURE_RETIRED(32, 1, OSD_SNAPMAPPER, JEWEL, LUMINOUS)
0123 
0124 DEFINE_CEPH_FEATURE_RETIRED(33, 1, MON_SCRUB, JEWEL, LUMINOUS)
0125 
0126 DEFINE_CEPH_FEATURE_RETIRED(34, 1, OSD_PACKED_RECOVERY, JEWEL, LUMINOUS)
0127 
0128 DEFINE_CEPH_FEATURE(35, 1, OSD_CACHEPOOL)
0129 DEFINE_CEPH_FEATURE(36, 1, CRUSH_V2)
0130 DEFINE_CEPH_FEATURE(37, 1, EXPORT_PEER)
0131 DEFINE_CEPH_FEATURE(38, 1, OSD_ERASURE_CODES)
0132 DEFINE_CEPH_FEATURE(38, 1, OSD_OSD_TMAP2OMAP) // overlap
0133 DEFINE_CEPH_FEATURE(39, 1, OSDMAP_ENC)
0134 DEFINE_CEPH_FEATURE(40, 1, MDS_INLINE_DATA)
0135 DEFINE_CEPH_FEATURE(41, 1, CRUSH_TUNABLES3)
0136 DEFINE_CEPH_FEATURE(41, 1, OSD_PRIMARY_AFFINITY) // overlap
0137 DEFINE_CEPH_FEATURE(42, 1, MSGR_KEEPALIVE2)
0138 DEFINE_CEPH_FEATURE(43, 1, OSD_POOLRESEND)
0139 DEFINE_CEPH_FEATURE(44, 1, ERASURE_CODE_PLUGINS_V2)
0140 DEFINE_CEPH_FEATURE_RETIRED(45, 1, OSD_SET_ALLOC_HINT, JEWEL, LUMINOUS)
0141 
0142 DEFINE_CEPH_FEATURE(46, 1, OSD_FADVISE_FLAGS)
0143 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_REPOP, JEWEL, LUMINOUS) // overlap
0144 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_OBJECT_DIGEST, JEWEL, LUMINOUS) // overlap
0145 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_TRANSACTION_MAY_LAYOUT, JEWEL, LUMINOUS) // overlap
0146 
0147 DEFINE_CEPH_FEATURE(47, 1, MDS_QUOTA)
0148 DEFINE_CEPH_FEATURE(48, 1, CRUSH_V4)
0149 DEFINE_CEPH_FEATURE_RETIRED(49, 1, OSD_MIN_SIZE_RECOVERY, JEWEL, LUMINOUS)
0150 DEFINE_CEPH_FEATURE_RETIRED(49, 1, OSD_PROXY_FEATURES, JEWEL, LUMINOUS) // overlap
0151 
0152 DEFINE_CEPH_FEATURE(50, 1, MON_METADATA)
0153 DEFINE_CEPH_FEATURE(51, 1, OSD_BITWISE_HOBJ_SORT)
0154 DEFINE_CEPH_FEATURE(52, 1, OSD_PROXY_WRITE_FEATURES)
0155 DEFINE_CEPH_FEATURE(53, 1, ERASURE_CODE_PLUGINS_V3)
0156 DEFINE_CEPH_FEATURE(54, 1, OSD_HITSET_GMT)
0157 DEFINE_CEPH_FEATURE(55, 1, HAMMER_0_94_4)
0158 DEFINE_CEPH_FEATURE(56, 1, NEW_OSDOP_ENCODING)
0159 DEFINE_CEPH_FEATURE(57, 1, MON_STATEFUL_SUB)
0160 DEFINE_CEPH_FEATURE(57, 1, MON_ROUTE_OSDMAP) // overlap
0161 DEFINE_CEPH_FEATURE(57, 1, OSDSUBOP_NO_SNAPCONTEXT) // overlap
0162 DEFINE_CEPH_FEATURE(57, 1, SERVER_JEWEL) // overlap
0163 DEFINE_CEPH_FEATURE(58, 1, CRUSH_TUNABLES5)
0164 DEFINE_CEPH_FEATURE(58, 1, NEW_OSDOPREPLY_ENCODING) // overlap
0165 DEFINE_CEPH_FEATURE(58, 1, FS_FILE_LAYOUT_V2) // overlap
0166 DEFINE_CEPH_FEATURE(59, 1, FS_BTIME)
0167 DEFINE_CEPH_FEATURE(59, 1, FS_CHANGE_ATTR) // overlap
0168 DEFINE_CEPH_FEATURE(59, 1, MSG_ADDR2) // overlap
0169 DEFINE_CEPH_FEATURE(60, 1, OSD_RECOVERY_DELETES) // *do not share this bit*
0170 DEFINE_CEPH_FEATURE(61, 1, CEPHX_V2)             // *do not share this bit*
0171 
0172 DEFINE_CEPH_FEATURE(62, 1, RESERVED)           // do not use; used as a sentinal
0173 DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facing
0174 
0175 
0176 /*
0177  * Features supported.
0178  */
0179 #define CEPH_FEATURES_SUPPORTED_DEFAULT     \
0180     (CEPH_FEATURE_NOSRCADDR |       \
0181      CEPH_FEATURE_SERVER_NAUTILUS |     \
0182      CEPH_FEATURE_FLOCK |           \
0183      CEPH_FEATURE_SUBSCRIBE2 |      \
0184      CEPH_FEATURE_MONNAMES |        \
0185      CEPH_FEATURE_RECONNECT_SEQ |       \
0186      CEPH_FEATURE_DIRLAYOUTHASH |       \
0187      CEPH_FEATURE_PGID64 |          \
0188      CEPH_FEATURE_PGPOOL3 |         \
0189      CEPH_FEATURE_OSDENC |          \
0190      CEPH_FEATURE_MONENC |          \
0191      CEPH_FEATURE_CRUSH_TUNABLES |      \
0192      CEPH_FEATURE_SERVER_LUMINOUS |     \
0193      CEPH_FEATURE_RESEND_ON_SPLIT |     \
0194      CEPH_FEATURE_RADOS_BACKOFF |       \
0195      CEPH_FEATURE_OSDMAP_PG_UPMAP |     \
0196      CEPH_FEATURE_CRUSH_CHOOSE_ARGS |   \
0197      CEPH_FEATURE_MSG_AUTH |        \
0198      CEPH_FEATURE_CRUSH_TUNABLES2 |     \
0199      CEPH_FEATURE_REPLY_CREATE_INODE |  \
0200      CEPH_FEATURE_SERVER_MIMIC |        \
0201      CEPH_FEATURE_MDSENC |          \
0202      CEPH_FEATURE_OSDHASHPSPOOL |       \
0203      CEPH_FEATURE_OSD_CACHEPOOL |       \
0204      CEPH_FEATURE_CRUSH_V2 |        \
0205      CEPH_FEATURE_EXPORT_PEER |     \
0206      CEPH_FEATURE_OSDMAP_ENC |      \
0207      CEPH_FEATURE_MDS_INLINE_DATA |     \
0208      CEPH_FEATURE_CRUSH_TUNABLES3 |     \
0209      CEPH_FEATURE_OSD_PRIMARY_AFFINITY |    \
0210      CEPH_FEATURE_MSGR_KEEPALIVE2 |     \
0211      CEPH_FEATURE_OSD_POOLRESEND |      \
0212      CEPH_FEATURE_MDS_QUOTA |       \
0213      CEPH_FEATURE_CRUSH_V4 |        \
0214      CEPH_FEATURE_NEW_OSDOP_ENCODING |  \
0215      CEPH_FEATURE_SERVER_JEWEL |        \
0216      CEPH_FEATURE_MON_STATEFUL_SUB |    \
0217      CEPH_FEATURE_CRUSH_TUNABLES5 |     \
0218      CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING | \
0219      CEPH_FEATURE_MSG_ADDR2 |       \
0220      CEPH_FEATURE_CEPHX_V2)
0221 
0222 #define CEPH_FEATURES_REQUIRED_DEFAULT  0
0223 
0224 #endif