]>
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"
20 #include "osd/PGPeeringEvent.h"
22 class MRecoveryReserve
: public MOSDPeeringOp
{
24 static constexpr int HEAD_VERSION
= 3;
25 static constexpr int COMPAT_VERSION
= 2;
30 REQUEST
= 0, // primary->replica: please reserve slot
31 GRANT
= 1, // replica->primary: ok, i reserved it
32 RELEASE
= 2, // primary->replica: release the slot i reserved before
33 REVOKE
= 3, // replica->primary: i'm taking back the slot i gave you
36 uint32_t priority
= 0;
38 spg_t
get_spg() const {
41 epoch_t
get_map_epoch() const {
44 epoch_t
get_min_epoch() const {
48 PGPeeringEvent
*get_event() override
{
51 return new PGPeeringEvent(
54 RequestRecoveryPrio(priority
));
56 return new PGPeeringEvent(
59 RemoteRecoveryReserved());
61 return new PGPeeringEvent(
66 return new PGPeeringEvent(
76 : MOSDPeeringOp
{MSG_OSD_RECOVERY_RESERVE
, HEAD_VERSION
, COMPAT_VERSION
},
77 query_epoch(0), type(-1) {}
78 MRecoveryReserve(int type
,
82 : MOSDPeeringOp
{MSG_OSD_RECOVERY_RESERVE
, HEAD_VERSION
, COMPAT_VERSION
},
83 pgid(pgid
), query_epoch(query_epoch
),
84 type(type
), priority(prio
) {}
86 std::string_view
get_type_name() const override
{
87 return "MRecoveryReserve";
90 void inner_print(ostream
& out
) const override
{
105 if (type
== REQUEST
) out
<< " prio: " << priority
;
108 void decode_payload() override
{
109 auto p
= payload
.cbegin();
110 decode(pgid
.pgid
, p
);
111 decode(query_epoch
, p
);
113 decode(pgid
.shard
, p
);
114 if (header
.version
>= 3) {
119 void encode_payload(uint64_t features
) override
{
121 encode(pgid
.pgid
, payload
);
122 encode(query_epoch
, payload
);
123 encode(type
, payload
);
124 encode(pgid
.shard
, payload
);
125 encode(priority
, payload
);
128 template<class T
, typename
... Args
>
129 friend boost::intrusive_ptr
<T
> ceph::make_message(Args
&&... args
);