#include "osd/ECMsgTypes.h"
class MOSDECSubOpRead : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 2;
+ static const int HEAD_VERSION = 3;
static const int COMPAT_VERSION = 1;
public:
spg_t pgid;
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
ECSubRead op;
int get_cost() const override {
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;
}
::decode(pgid, p);
::decode(map_epoch, p);
::decode(op, p);
+ if (header.version >= 3) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
void encode_payload(uint64_t features) override {
::encode(pgid, payload);
::encode(map_epoch, payload);
::encode(op, payload, features);
+ ::encode(min_epoch, payload);
}
const char *get_type_name() const override { return "MOSDECSubOpRead"; }
void print(ostream& out) const override {
out << "MOSDECSubOpRead(" << pgid
- << " " << map_epoch
+ << " " << map_epoch << "/" << min_epoch
<< " " << op;
out << ")";
}
#include "osd/ECMsgTypes.h"
class MOSDECSubOpReadReply : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 1;
+ static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 1;
public:
spg_t pgid;
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
ECSubReadReply op;
int get_cost() const override {
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;
}
::decode(pgid, p);
::decode(map_epoch, p);
::decode(op, p);
+ if (header.version >= 2) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
void encode_payload(uint64_t features) override {
::encode(pgid, payload);
::encode(map_epoch, payload);
::encode(op, payload);
+ ::encode(min_epoch, payload);
}
const char *get_type_name() const override { return "MOSDECSubOpReadReply"; }
void print(ostream& out) const override {
out << "MOSDECSubOpReadReply(" << pgid
- << " " << map_epoch
+ << " " << map_epoch << "/" << min_epoch
<< " " << op;
out << ")";
}
#include "osd/ECMsgTypes.h"
class MOSDECSubOpWrite : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 1;
+ static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 1;
public:
spg_t pgid;
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
ECSubWrite op;
int get_cost() const override {
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;
}
::decode(pgid, p);
::decode(map_epoch, p);
::decode(op, p);
+ if (header.version >= 2) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
void encode_payload(uint64_t features) override {
::encode(pgid, payload);
::encode(map_epoch, payload);
::encode(op, payload);
+ ::encode(min_epoch, payload);
}
const char *get_type_name() const override { return "MOSDECSubOpWrite"; }
void print(ostream& out) const override {
out << "MOSDECSubOpWrite(" << pgid
- << " " << map_epoch
+ << " " << map_epoch << "/" << min_epoch
<< " " << op;
out << ")";
}
#include "osd/ECMsgTypes.h"
class MOSDECSubOpWriteReply : public MOSDFastDispatchOp {
- static const int HEAD_VERSION = 1;
+ static const int HEAD_VERSION = 2;
static const int COMPAT_VERSION = 1;
public:
spg_t pgid;
- epoch_t map_epoch;
+ epoch_t map_epoch, min_epoch;
ECSubWriteReply op;
int get_cost() const override {
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;
}
::decode(pgid, p);
::decode(map_epoch, p);
::decode(op, p);
+ if (header.version >= 2) {
+ ::decode(min_epoch, p);
+ } else {
+ min_epoch = map_epoch;
+ }
}
void encode_payload(uint64_t features) override {
::encode(pgid, payload);
::encode(map_epoch, payload);
::encode(op, payload);
+ ::encode(min_epoch, payload);
}
const char *get_type_name() const override { return "MOSDECSubOpWriteReply"; }
void print(ostream& out) const override {
out << "MOSDECSubOpWriteReply(" << pgid
- << " " << map_epoch
+ << " " << map_epoch << "/" << min_epoch
<< " " << op;
out << ")";
}
MOSDECSubOpReadReply *reply = new MOSDECSubOpReadReply;
reply->pgid = get_parent()->primary_spg_t();
reply->map_epoch = get_parent()->get_epoch();
+ reply->min_epoch = get_parent()->get_interval_start_epoch();
handle_sub_read(op->op.from, op->op, &(reply->op));
get_parent()->send_message_osd_cluster(
op->op.from.osd, reply, get_parent()->get_epoch());
MOSDECSubOpWriteReply *r = new MOSDECSubOpWriteReply;
r->pgid = get_parent()->primary_spg_t();
r->map_epoch = get_parent()->get_epoch();
+ r->min_epoch = get_parent()->get_interval_start_epoch();
r->op.tid = tid;
r->op.last_complete = last_complete;
r->op.committed = true;
MOSDECSubOpWriteReply *r = new MOSDECSubOpWriteReply;
r->pgid = get_parent()->primary_spg_t();
r->map_epoch = get_parent()->get_epoch();
+ r->min_epoch = get_parent()->get_interval_start_epoch();
r->op.from = get_parent()->whoami_shard();
r->op.tid = tid;
r->op.applied = true;
get_parent()->whoami_spg_t().pgid,
i->first.shard);
msg->map_epoch = get_parent()->get_epoch();
+ msg->min_epoch = get_parent()->get_interval_start_epoch();
msg->op = i->second;
msg->op.from = get_parent()->whoami_shard();
msg->op.tid = tid;
MOSDECSubOpWrite *r = new MOSDECSubOpWrite(sop);
r->pgid = spg_t(get_parent()->primary_spg_t().pgid, i->shard);
r->map_epoch = get_parent()->get_epoch();
+ r->min_epoch = get_parent()->get_interval_start_epoch();
get_parent()->send_message_osd_cluster(
i->osd, r, get_parent()->get_epoch());
}