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) 2013 Inktank Storage, Inc.
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_MOSDMARKMEDOWN_H
16 #define CEPH_MOSDMARKMEDOWN_H
18 #include "messages/PaxosServiceMessage.h"
20 class MOSDMarkMeDown final
: public PaxosServiceMessage
{
22 static constexpr int HEAD_VERSION
= 3;
23 static constexpr int COMPAT_VERSION
= 3;
28 entity_addrvec_t target_addrs
;
30 bool request_ack
= false; // ack requested
33 : PaxosServiceMessage
{MSG_OSD_MARK_ME_DOWN
, 0,
34 HEAD_VERSION
, COMPAT_VERSION
} { }
35 MOSDMarkMeDown(const uuid_d
&fs
, int osd
, const entity_addrvec_t
& av
,
36 epoch_t e
, bool request_ack
)
37 : PaxosServiceMessage
{MSG_OSD_MARK_ME_DOWN
, e
,
38 HEAD_VERSION
, COMPAT_VERSION
},
39 fsid(fs
), target_osd(osd
), target_addrs(av
),
40 epoch(e
), request_ack(request_ack
) {}
42 ~MOSDMarkMeDown() final
{}
45 epoch_t
get_epoch() const { return epoch
; }
47 void decode_payload() override
{
49 auto p
= payload
.cbegin();
51 assert(header
.version
>= 3);
53 decode(target_osd
, p
);
54 decode(target_addrs
, p
);
56 decode(request_ack
, p
);
59 void encode_payload(uint64_t features
) override
{
62 assert(HAVE_FEATURE(features
, SERVER_NAUTILUS
));
63 header
.version
= HEAD_VERSION
;
64 header
.compat_version
= COMPAT_VERSION
;
65 encode(fsid
, payload
);
66 encode(target_osd
, payload
, features
);
67 encode(target_addrs
, payload
, features
);
68 encode(epoch
, payload
);
69 encode(request_ack
, payload
);
72 std::string_view
get_type_name() const override
{ return "MOSDMarkMeDown"; }
73 void print(std::ostream
& out
) const override
{
74 out
<< "MOSDMarkMeDown("
75 << "request_ack=" << request_ack
76 << ", osd." << target_osd
77 << ", " << target_addrs
82 template<class T
, typename
... Args
>
83 friend boost::intrusive_ptr
<T
> ceph::make_message(Args
&&... args
);