From: Sage Weil Date: Wed, 30 Jul 2014 20:57:34 +0000 (-0700) Subject: osd: prevent old clients from using tiered pools X-Git-Tag: v0.80.6~95 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e3bc15343720d0455e32e429e7cf865037bd90d7;p=ceph.git osd: prevent old clients from using tiered pools If the client is old and doesn't understand tiering, don't let them use a tiered pool. Reply with EOPNOTSUPP. Fixes: #8714 Backport: firefly Signed-off-by: Sage Weil (cherry picked from commit 0190df53056834f219e33ada2af3a79e8c4dfb77) --- diff --git a/src/osd/OpRequest.h b/src/osd/OpRequest.h index 569b6fc581ea..b074bee0295d 100644 --- a/src/osd/OpRequest.h +++ b/src/osd/OpRequest.h @@ -74,6 +74,10 @@ struct OpRequest : public TrackedOp { void _dump(utime_t now, Formatter *f) const; + bool has_feature(uint64_t f) const { + return request->get_connection()->has_feature(f); + } + private: osd_reqid_t reqid; uint8_t hit_flag_points; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index df3514754e85..0e9fc6209111 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1120,6 +1120,12 @@ void ReplicatedPG::do_request( waiting_for_active.push_back(op); return; } + // verify client features + if ((pool.info.has_tiers() || pool.info.is_tier()) && + !op->has_feature(CEPH_FEATURE_OSD_CACHEPOOL)) { + osd->reply_op_error(op, -EOPNOTSUPP); + return; + } do_op(op); // do it now break;