#define CEPH_FEATURE_ERASURE_CODE_PLUGINS_V2 (1ULL<<44)
#define DEPRECATED_CEPH_FEATURE_OSD_SET_ALLOC_HINT (1ULL<<45) // DEPRECATED: JEWEL
#define CEPH_FEATURE_OSD_FADVISE_FLAGS (1ULL<<46)
-#define CEPH_FEATURE_OSD_REPOP (1ULL<<46) /* overlap with fadvise */
+#define DEPRECATED_CEPH_FEATURE_OSD_REPOP (1ULL<<46) // DEPRECATED: JEWEL (can't remove until all 1<<46 are ready)
#define CEPH_FEATURE_OSD_OBJECT_DIGEST (1ULL<<46) /* overlap with fadvise */
#define CEPH_FEATURE_OSD_TRANSACTION_MAY_LAYOUT (1ULL<<46) /* overlap w/ fadvise */
#define CEPH_FEATURE_MDS_QUOTA (1ULL<<47)
CEPH_FEATURE_ERASURE_CODE_PLUGINS_V2 | \
DEPRECATED_CEPH_FEATURE_OSD_SET_ALLOC_HINT | \
CEPH_FEATURE_OSD_FADVISE_FLAGS | \
- CEPH_FEATURE_OSD_REPOP | \
+ DEPRECATED_CEPH_FEATURE_OSD_REPOP | \
CEPH_FEATURE_OSD_OBJECT_DIGEST | \
CEPH_FEATURE_OSD_TRANSACTION_MAY_LAYOUT | \
CEPH_FEATURE_MDS_QUOTA | \
return true;
}
}
- else {
- sub_op_modify_reply<MOSDSubOpReply, MSG_OSD_SUBOPREPLY>(op);
- return true;
- }
break;
}
case MSG_OSD_REPOPREPLY: {
- sub_op_modify_reply<MOSDRepOpReply, MSG_OSD_REPOPREPLY>(op);
+ sub_op_modify_reply(op);
return true;
}
}
}
-template<typename T, int MSGTYPE>
void ReplicatedBackend::sub_op_modify_reply(OpRequestRef op)
{
- T *r = static_cast<T *>(op->get_req());
+ MOSDRepOpReply *r = static_cast<MOSDRepOpReply *>(op->get_req());
r->finish_decode();
- assert(r->get_header().type == MSGTYPE);
- assert(MSGTYPE == MSG_OSD_SUBOPREPLY || MSGTYPE == MSG_OSD_REPOPREPLY);
+ assert(r->get_header().type == MSG_OSD_REPOPREPLY);
op->mark_started();
send_pushes(m->get_priority(), _replies);
}
-template<typename T, int MSGTYPE>
Message * ReplicatedBackend::generate_subop(
const hobject_t &soid,
const eversion_t &at_version,
const pg_info_t &pinfo)
{
int acks_wanted = CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK;
- assert(MSGTYPE == MSG_OSD_SUBOP || MSGTYPE == MSG_OSD_REPOP);
// forward the write/update/whatever
- T *wr = new T(
+ MOSDRepOp *wr = new MOSDRepOp(
reqid, parent->whoami_shard(),
spg_t(get_info().pgid.pgid, peer.shard),
soid, acks_wanted,
const pg_info_t &pinfo = parent->get_shard_info().find(peer)->second;
Message *wr;
- uint64_t min_features = parent->min_peer_features();
- if (!(min_features & CEPH_FEATURE_OSD_REPOP)) {
- dout(20) << "Talking to old version of OSD, doesn't support RepOp, fall back to SubOp" << dendl;
- wr = generate_subop<MOSDSubOp, MSG_OSD_SUBOP>(
- soid,
- at_version,
- tid,
- reqid,
- pg_trim_to,
- pg_trim_rollback_to,
- new_temp_oid,
- discard_temp_oid,
- log_entries,
- hset_hist,
- op,
- op_t,
- peer,
- pinfo);
- } else {
- wr = generate_subop<MOSDRepOp, MSG_OSD_REPOP>(
- soid,
- at_version,
- tid,
- reqid,
- pg_trim_to,
- pg_trim_rollback_to,
- new_temp_oid,
- discard_temp_oid,
- log_entries,
- hset_hist,
- op,
- op_t,
- peer,
- pinfo);
- }
+ wr = generate_subop(
+ soid,
+ at_version,
+ tid,
+ reqid,
+ pg_trim_to,
+ pg_trim_rollback_to,
+ new_temp_oid,
+ discard_temp_oid,
+ log_entries,
+ hset_hist,
+ op,
+ op_t,
+ peer,
+ pinfo);
get_parent()->send_message_osd_cluster(
peer.osd, wr, get_osdmap()->get_epoch());
}
// sub op modify
-void ReplicatedBackend::sub_op_modify(OpRequestRef op) {
- Message *m = op->get_req();
- int msg_type = m->get_type();
- if (msg_type == MSG_OSD_SUBOP) {
- sub_op_modify_impl<MOSDSubOp, MSG_OSD_SUBOP>(op);
- } else if (msg_type == MSG_OSD_REPOP) {
- sub_op_modify_impl<MOSDRepOp, MSG_OSD_REPOP>(op);
- } else {
- assert(0);
- }
-}
-
-template<typename T, int MSGTYPE>
-void ReplicatedBackend::sub_op_modify_impl(OpRequestRef op)
+void ReplicatedBackend::sub_op_modify(OpRequestRef op)
{
- T *m = static_cast<T *>(op->get_req());
+ MOSDRepOp *m = static_cast<MOSDRepOp *>(op->get_req());
m->finish_decode();
int msg_type = m->get_type();
- assert(MSGTYPE == msg_type);
- assert(msg_type == MSG_OSD_SUBOP || msg_type == MSG_OSD_REPOP);
+ assert(MSG_OSD_REPOP == msg_type);
const hobject_t& soid = m->poid;
);
private:
- template<typename T, int MSGTYPE>
Message * generate_subop(
const hobject_t &soid,
const eversion_t &at_version,
ObjectStore::Transaction &op_t);
void op_applied(InProgressOp *op);
void op_commit(InProgressOp *op);
- template<typename T, int MSGTYPE>
void sub_op_modify_reply(OpRequestRef op);
void sub_op_modify(OpRequestRef op);
- template<typename T, int MSGTYPE>
- void sub_op_modify_impl(OpRequestRef op);
struct RepModify {
OpRequestRef op;