#include "msg/Message.h"
class MRecoveryReserve : public Message {
- static const int HEAD_VERSION = 2;
+ static const int HEAD_VERSION = 3;
static const int COMPAT_VERSION = 2;
public:
spg_t pgid;
GRANT = 1,
RELEASE = 2,
};
- int type;
+ uint32_t type;
+ uint32_t priority = 0;
MRecoveryReserve()
: Message(MSG_OSD_RECOVERY_RESERVE, HEAD_VERSION, COMPAT_VERSION),
query_epoch(0), type(-1) {}
MRecoveryReserve(int type,
spg_t pgid,
- epoch_t query_epoch)
+ epoch_t query_epoch,
+ unsigned prio = 0)
: Message(MSG_OSD_RECOVERY_RESERVE, HEAD_VERSION, COMPAT_VERSION),
pgid(pgid), query_epoch(query_epoch),
- type(type) {}
+ type(type), priority(prio) {}
const char *get_type_name() const override {
return "MRecoveryReserve";
break;
}
out << " e" << query_epoch << ")";
+ if (type == REQUEST) out << ", prio: " << priority;
return;
}
::decode(query_epoch, p);
::decode(type, p);
::decode(pgid.shard, p);
+ if (header.version >= 3) {
+ ::decode(priority, p);
+ }
}
void encode_payload(uint64_t features) override {
::encode(query_epoch, payload);
::encode(type, payload);
::encode(pgid.shard, payload);
+ ::encode(priority, payload);
}
};
new MRecoveryReserve(
MRecoveryReserve::REQUEST,
spg_t(pg->info.pgid.pgid, remote_recovery_reservation_it->shard),
- pg->get_osdmap()->get_epoch()),
+ pg->get_osdmap()->get_epoch(),
+ pg->get_recovery_priority()),
con.get());
}
++remote_recovery_reservation_it;