PaxosServiceMessage *msg;
entity_inst_t client;
MonCap client_caps;
- uint64_t conn_features;
+ uint64_t con_features;
static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 0;
MForward() : Message(MSG_FORWARD, HEAD_VERSION, COMPAT_VERSION),
- tid(0), msg(NULL), conn_features(0) {}
+ tid(0), msg(NULL), con_features(0) {}
//the message needs to have caps filled in!
- MForward(uint64_t t, PaxosServiceMessage *m) :
+ MForward(uint64_t t, PaxosServiceMessage *m, uint64_t feat) :
Message(MSG_FORWARD, HEAD_VERSION, COMPAT_VERSION),
tid(t), msg(m) {
client = m->get_source_inst();
client_caps = m->get_session()->caps;
- conn_features = m->get_connection()->get_features();
+ con_features = feat;
}
- MForward(uint64_t t, PaxosServiceMessage *m, const MonCap& caps) :
+ MForward(uint64_t t, PaxosServiceMessage *m, uint64_t feat,
+ const MonCap& caps) :
Message(MSG_FORWARD, HEAD_VERSION, COMPAT_VERSION),
tid(t), msg(m), client_caps(caps) {
client = m->get_source_inst();
- conn_features = m->get_connection()->get_features();
+ con_features = feat;
}
private:
~MForward() {
::encode(client, payload);
::encode(client_caps, payload, features);
encode_message(msg, features, payload);
- ::encode(conn_features, payload);
+ ::encode(con_features, payload);
}
void decode_payload() {
::decode(client_caps, p);
msg = (PaxosServiceMessage *)decode_message(NULL, p);
if (header.version >= 2) {
- ::decode(conn_features, p);
+ ::decode(con_features, p);
} else {
- conn_features = 0;
+ con_features = 0;
}
}
void print(ostream& o) const {
if (msg)
o << "forward(" << *msg << " caps " << client_caps
- << " conn_features " << conn_features << ") to leader";
+ << " con_features " << con_features << ") to leader";
else o << "forward(??? ) to leader";
}
};
rr->tid = ++routed_request_tid;
rr->client_inst = req->get_source_inst();
rr->con = req->get_connection();
+ rr->con_features = rr->con->get_features();
encode_message(req, CEPH_FEATURES_ALL, rr->request_bl); // for my use only; use all features
rr->session = static_cast<MonSession *>(session->get());
routed_requests[rr->tid] = rr;
dout(10) << "forward_request " << rr->tid << " request " << *req << dendl;
- MForward *forward = new MForward(rr->tid, req, rr->session->caps);
+ MForward *forward = new MForward(rr->tid, req,
+ rr->con_features,
+ rr->session->caps);
forward->set_priority(req->get_priority());
messenger->send_message(forward, monmap->get_inst(mon));
} else {
c->set_priv(s);
c->set_peer_addr(m->client.addr);
c->set_peer_type(m->client.name.type());
- c->set_features(m->conn_features);
+ c->set_features(m->con_features);
s->caps = m->client_caps;
dout(10) << " caps are " << s->caps << dendl;
delete rr;
} else {
dout(10) << " resend to mon." << mon << " tid " << rr->tid << " " << *req << dendl;
- MForward *forward = new MForward(rr->tid, req, rr->session->caps);
+ MForward *forward = new MForward(rr->tid, req, rr->con_features,
+ rr->session->caps);
forward->client = rr->client_inst;
forward->set_priority(req->get_priority());
messenger->send_message(forward, monmap->get_inst(mon));