#define CEPH_FEATURE_MDS_QUOTA (1ULL<<47)
#define CEPH_FEATURE_CRUSH_V4 (1ULL<<48) /* straw2 buckets */
#define CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY (1ULL<<49)
+// duplicated since it was introduced at the same time as MIN_SIZE_RECOVERY
+#define CEPH_FEATURE_OSD_DEGRADED_WRITES (1ULL<<49)
#define CEPH_FEATURE_RESERVED2 (1ULL<<61) /* slow down, we are almost out... */
#define CEPH_FEATURE_RESERVED (1ULL<<62) /* DO NOT USE THIS ... last bit! */
CEPH_FEATURE_MDS_QUOTA | \
CEPH_FEATURE_CRUSH_V4 | \
CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY | \
+ CEPH_FEATURE_OSD_DEGRADED_WRITES | \
0ULL)
#define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL
* We can enable degraded writes on ec pools by blocking such a write
* to a peer until all previous writes have completed. For now, we
* will simply block them.
+ *
+ * We also block if our peers do not support DEGRADED_WRITES.
*/
- if (pool.info.ec_pool() && write_ordered && is_degraded_object(head)) {
+ if ((pool.info.ec_pool() ||
+ !(get_min_peer_features() & CEPH_FEATURE_OSD_DEGRADED_WRITES)) &&
+ write_ordered &&
+ is_degraded_object(head)) {
wait_for_degraded_object(head, op);
return;
}