class MOSDPGUpdateLogMissing : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 1;
+ static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 1;
public:
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
spg_t pgid;
shard_id_t from;
ceph_tid_t rep_tid;
spg_t get_pgid() const { return pgid; }
epoch_t get_query_epoch() const { return map_epoch; }
ceph_tid_t get_tid() const { return rep_tid; }
+
epoch_t get_map_epoch() const override {
return map_epoch;
}
+ epoch_t get_min_epoch() const override {
+ return min_epoch;
+ }
spg_t get_spg() const override {
return pgid;
}
spg_t pgid,
shard_id_t from,
epoch_t epoch,
+ epoch_t min_epoch,
ceph_tid_t rep_tid)
: MOSDFastDispatchOp(MSG_OSD_PG_UPDATE_LOG_MISSING, HEAD_VERSION,
COMPAT_VERSION),
map_epoch(epoch),
+ min_epoch(min_epoch),
pgid(pgid),
from(from),
rep_tid(rep_tid),
const char *get_type_name() const override { return "PGUpdateLogMissing"; }
void print(ostream& out) const override {
out << "pg_update_log_missing(" << pgid << " epoch " << map_epoch
+ << "/" << min_epoch
<< " rep_tid " << rep_tid
<< " entries " << entries << ")";
}
::encode(from, payload);
::encode(rep_tid, payload);
::encode(entries, payload);
+ ::encode(min_epoch, payload);
}
void decode_payload() override {
bufferlist::iterator p = payload.begin();
::decode(from, p);
::decode(rep_tid, p);
::decode(entries, p);
+ if (header.version >= 2) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
};
class MOSDPGUpdateLogMissingReply : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 1;
+ static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 1;
public:
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
spg_t pgid;
shard_id_t from;
ceph_tid_t rep_tid;
epoch_t get_map_epoch() const override {
return map_epoch;
}
+ epoch_t get_min_epoch() const override {
+ return min_epoch;
+ }
spg_t get_spg() const override {
return pgid;
}
spg_t pgid,
shard_id_t from,
epoch_t epoch,
+ epoch_t min_epoch,
ceph_tid_t rep_tid)
: MOSDFastDispatchOp(
MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY,
HEAD_VERSION,
COMPAT_VERSION),
map_epoch(epoch),
+ min_epoch(min_epoch),
pgid(pgid),
from(from),
rep_tid(rep_tid)
const char *get_type_name() const override { return "PGUpdateLogMissingReply"; }
void print(ostream& out) const override {
out << "pg_update_log_missing_reply(" << pgid << " epoch " << map_epoch
+ << "/" << min_epoch
<< " rep_tid " << rep_tid << ")";
}
::encode(pgid, payload);
::encode(from, payload);
::encode(rep_tid, payload);
+ ::encode(min_epoch, payload);
}
void decode_payload() override {
bufferlist::iterator p = payload.begin();
::decode(pgid, p);
::decode(from, p);
::decode(rep_tid, p);
+ if (header.version >= 2) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
};
spg_t(info.pgid.pgid, i->shard),
pg_whoami.shard,
get_osdmap()->get_epoch(),
+ last_peering_reset,
repop->rep_tid);
osd->send_message_osd_cluster(
peer.osd, m, get_osdmap()->get_epoch());
spg_t(info.pgid.pgid, primary_shard().shard),
pg_whoami.shard,
msg->get_epoch(),
+ msg->min_epoch,
msg->get_tid());
reply->set_priority(CEPH_MSG_PRIO_HIGH);
msg->get_connection()->send_message(reply);