From: Zhiqiang Wang Date: Fri, 24 Apr 2015 08:44:12 +0000 (+0800) Subject: osd/ReplicatedPG: add the proxy write feature bit support X-Git-Tag: v9.1.0~345^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cb9390dc6f3fee7cb7ee1cc9c2e2e9a2c89fe112;p=ceph.git osd/ReplicatedPG: add the proxy write feature bit support For older versions which doesn't support proxy write, doing promote. Otherwise, we can proxy the write. Signed-off-by: Zhiqiang Wang --- diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index b00fd5600d42..3003cfd1b3cb 100644 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -64,6 +64,7 @@ // duplicated since it was introduced at the same time as MIN_SIZE_RECOVERY #define CEPH_FEATURE_OSD_PROXY_FEATURES (1ULL<<49) /* overlap w/ above */ #define CEPH_FEATURE_MON_METADATA (1ULL<<50) +#define CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES (1ULL<<51) #define CEPH_FEATURE_RESERVED2 (1ULL<<61) /* slow down, we are almost out... */ #define CEPH_FEATURE_RESERVED (1ULL<<62) /* DO NOT USE THIS ... last bit! */ @@ -150,6 +151,7 @@ static inline unsigned long long ceph_sanitize_features(unsigned long long f) { CEPH_FEATURE_CRUSH_V4 | \ CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY | \ CEPH_FEATURE_MON_METADATA | \ + CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES | \ 0ULL) #define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index a0cb8fa14eda..4627a100af30 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1827,6 +1827,8 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, // older versions do not proxy the feature bits. bool can_proxy_read = get_osdmap()->get_up_osd_features() & CEPH_FEATURE_OSD_PROXY_FEATURES; + bool can_proxy_write = get_osdmap()->get_up_osd_features() & + CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES; OpRequestRef promote_op; switch (pool.info.cache_mode) { @@ -1852,7 +1854,13 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, promote_object(obc, missing_oid, oloc, op); return true; } else if (op->may_write() || op->may_cache()) { - do_proxy_write(op, missing_oid); + if (can_proxy_write) { + do_proxy_write(op, missing_oid); + } else { + // promote if can't proxy the write + promote_object(obc, missing_oid, oloc, op); + return true; + } // Promote too? maybe_promote(obc, missing_oid, oloc, in_hit_set,