]> git.proxmox.com Git - ceph.git/blame - ceph/src/messages/MOSDMarkMeDown.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / messages / MOSDMarkMeDown.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3/*
4 * Ceph - scalable distributed file system
5 *
6 * Copyright (C) 2013 Inktank Storage, Inc.
7 *
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.
12 *
13 */
14
15#ifndef CEPH_MOSDMARKMEDOWN_H
16#define CEPH_MOSDMARKMEDOWN_H
17
18#include "messages/PaxosServiceMessage.h"
19
f67539c2 20class MOSDMarkMeDown final : public PaxosServiceMessage {
11fdf7f2
TL
21private:
22 static constexpr int HEAD_VERSION = 3;
23 static constexpr int COMPAT_VERSION = 3;
7c673cae
FG
24
25 public:
26 uuid_d fsid;
11fdf7f2
TL
27 int32_t target_osd;
28 entity_addrvec_t target_addrs;
d2e6a577
FG
29 epoch_t epoch = 0;
30 bool request_ack = false; // ack requested
7c673cae
FG
31
32 MOSDMarkMeDown()
9f95a23c
TL
33 : PaxosServiceMessage{MSG_OSD_MARK_ME_DOWN, 0,
34 HEAD_VERSION, COMPAT_VERSION} { }
11fdf7f2 35 MOSDMarkMeDown(const uuid_d &fs, int osd, const entity_addrvec_t& av,
7c673cae 36 epoch_t e, bool request_ack)
9f95a23c
TL
37 : PaxosServiceMessage{MSG_OSD_MARK_ME_DOWN, e,
38 HEAD_VERSION, COMPAT_VERSION},
11fdf7f2
TL
39 fsid(fs), target_osd(osd), target_addrs(av),
40 epoch(e), request_ack(request_ack) {}
7c673cae 41 private:
f67539c2 42 ~MOSDMarkMeDown() final {}
7c673cae
FG
43
44public:
7c673cae
FG
45 epoch_t get_epoch() const { return epoch; }
46
47 void decode_payload() override {
f67539c2 48 using ceph::decode;
11fdf7f2 49 auto p = payload.cbegin();
7c673cae 50 paxos_decode(p);
11fdf7f2
TL
51 if (header.version <= 2) {
52 decode(fsid, p);
53 entity_inst_t i;
54 decode(i, p);
55 target_osd = i.name.num();
56 target_addrs = entity_addrvec_t(i.addr);
57 decode(epoch, p);
58 decode(request_ack, p);
59 return;
60 }
61 decode(fsid, p);
62 decode(target_osd, p);
63 decode(target_addrs, p);
64 decode(epoch, p);
65 decode(request_ack, p);
7c673cae
FG
66 }
67
68 void encode_payload(uint64_t features) override {
11fdf7f2 69 using ceph::encode;
7c673cae 70 paxos_encode();
11fdf7f2
TL
71 if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
72 header.version = 2;
73 header.compat_version = 2;
74 encode(fsid, payload);
75 encode(entity_inst_t(entity_name_t::OSD(target_osd),
76 target_addrs.legacy_addr()),
77 payload, features);
78 encode(epoch, payload);
79 encode(request_ack, payload);
80 return;
81 }
82 header.version = HEAD_VERSION;
83 header.compat_version = COMPAT_VERSION;
84 encode(fsid, payload);
85 encode(target_osd, payload, features);
86 encode(target_addrs, payload, features);
87 encode(epoch, payload);
88 encode(request_ack, payload);
7c673cae
FG
89 }
90
11fdf7f2 91 std::string_view get_type_name() const override { return "MOSDMarkMeDown"; }
f67539c2 92 void print(std::ostream& out) const override {
7c673cae
FG
93 out << "MOSDMarkMeDown("
94 << "request_ack=" << request_ack
11fdf7f2
TL
95 << ", osd." << target_osd
96 << ", " << target_addrs
7c673cae
FG
97 << ", fsid=" << fsid
98 << ")";
99 }
9f95a23c
TL
100private:
101 template<class T, typename... Args>
102 friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
7c673cae
FG
103};
104
105#endif