]> git.proxmox.com Git - ceph.git/blob - ceph/src/messages/MExportCaps.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / messages / MExportCaps.h
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) 2004-2006 Sage Weil <sage@newdream.net>
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
16 #ifndef CEPH_MEXPORTCAPS_H
17 #define CEPH_MEXPORTCAPS_H
18
19 #include "messages/MMDSOp.h"
20
21 class MExportCaps final : public MMDSOp {
22 private:
23 static constexpr int HEAD_VERSION = 2;
24 static constexpr int COMPAT_VERSION = 1;
25
26 public:
27 inodeno_t ino;
28 ceph::buffer::list cap_bl;
29 std::map<client_t,entity_inst_t> client_map;
30 std::map<client_t,client_metadata_t> client_metadata_map;
31
32 protected:
33 MExportCaps() :
34 MMDSOp{MSG_MDS_EXPORTCAPS, HEAD_VERSION, COMPAT_VERSION} {}
35 ~MExportCaps() final {}
36
37 public:
38 std::string_view get_type_name() const override { return "export_caps"; }
39 void print(std::ostream& o) const override {
40 o << "export_caps(" << ino << ")";
41 }
42
43 void encode_payload(uint64_t features) override {
44 using ceph::encode;
45 encode(ino, payload);
46 encode(cap_bl, payload);
47 encode(client_map, payload, features);
48 encode(client_metadata_map, payload);
49 }
50 void decode_payload() override {
51 using ceph::decode;
52 auto p = payload.cbegin();
53 decode(ino, p);
54 decode(cap_bl, p);
55 decode(client_map, p);
56 if (header.version >= 2)
57 decode(client_metadata_map, p);
58 }
59 private:
60 template<class T, typename... Args>
61 friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
62 template<class T, typename... Args>
63 friend MURef<T> crimson::make_message(Args&&... args);
64 };
65
66 #endif