]>
git.proxmox.com Git - ceph.git/blob - ceph/src/messages/MRecoveryReserve.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #ifndef CEPH_MRECOVERY_H
16 #define CEPH_MRECOVERY_H
18 #include "msg/Message.h"
19 #include "messages/MOSDPeeringOp.h"
21 class MRecoveryReserve
: public MessageInstance
<MRecoveryReserve
, MOSDPeeringOp
> {
25 static constexpr int HEAD_VERSION
= 3;
26 static constexpr int COMPAT_VERSION
= 2;
31 REQUEST
= 0, // primary->replica: please reserve slot
32 GRANT
= 1, // replica->primary: ok, i reserved it
33 RELEASE
= 2, // primary->replica: release the slot i reserved before
34 REVOKE
= 3, // replica->primary: i'm taking back the slot i gave you
37 uint32_t priority
= 0;
39 spg_t
get_spg() const {
42 epoch_t
get_map_epoch() const {
45 epoch_t
get_min_epoch() const {
49 PGPeeringEvent
*get_event() override
{
52 return new PGPeeringEvent(
55 RequestRecoveryPrio(priority
));
57 return new PGPeeringEvent(
60 RemoteRecoveryReserved());
62 return new PGPeeringEvent(
67 return new PGPeeringEvent(
77 : MessageInstance(MSG_OSD_RECOVERY_RESERVE
, HEAD_VERSION
, COMPAT_VERSION
),
78 query_epoch(0), type(-1) {}
79 MRecoveryReserve(int type
,
83 : MessageInstance(MSG_OSD_RECOVERY_RESERVE
, HEAD_VERSION
, COMPAT_VERSION
),
84 pgid(pgid
), query_epoch(query_epoch
),
85 type(type
), priority(prio
) {}
87 std::string_view
get_type_name() const override
{
88 return "MRecoveryReserve";
91 void inner_print(ostream
& out
) const override
{
106 if (type
== REQUEST
) out
<< " prio: " << priority
;
109 void decode_payload() override
{
110 auto p
= payload
.cbegin();
111 decode(pgid
.pgid
, p
);
112 decode(query_epoch
, p
);
114 decode(pgid
.shard
, p
);
115 if (header
.version
>= 3) {
120 void encode_payload(uint64_t features
) override
{
122 encode(pgid
.pgid
, payload
);
123 encode(query_epoch
, payload
);
124 encode(type
, payload
);
125 encode(pgid
.shard
, payload
);
126 encode(priority
, payload
);