]>
git.proxmox.com Git - ceph.git/blob - ceph/src/messages/MDirUpdate.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.
16 #ifndef CEPH_MDIRUPDATE_H
17 #define CEPH_MDIRUPDATE_H
19 #include "messages/MMDSOp.h"
21 class MDirUpdate final
: public MMDSOp
{
23 mds_rank_t
get_source_mds() const { return from_mds
; }
24 dirfrag_t
get_dirfrag() const { return dirfrag
; }
25 int get_dir_rep() const { return dir_rep
; }
26 const std::set
<int32_t>& get_dir_rep_by() const { return dir_rep_by
; }
27 bool should_discover() const { return discover
> tried_discover
; }
28 const filepath
& get_path() const { return path
; }
30 bool has_tried_discover() const { return tried_discover
> 0; }
31 void inc_tried_discover() const { ++tried_discover
; }
33 std::string_view
get_type_name() const override
{ return "dir_update"; }
34 void print(std::ostream
& out
) const override
{
35 out
<< "dir_update(" << get_dirfrag() << ")";
38 void decode_payload() override
{
40 auto p
= payload
.cbegin();
45 decode(dir_rep_by
, p
);
49 void encode_payload(uint64_t features
) override
{
51 encode(from_mds
, payload
);
52 encode(dirfrag
, payload
);
53 encode(dir_rep
, payload
);
54 encode(discover
, payload
);
55 encode(dir_rep_by
, payload
);
56 encode(path
, payload
);
60 ~MDirUpdate() final
{}
61 MDirUpdate() : MMDSOp(MSG_MDS_DIRUPDATE
, HEAD_VERSION
, COMPAT_VERSION
) {}
62 MDirUpdate(mds_rank_t f
,
65 const std::set
<int32_t>& dir_rep_by
,
67 bool discover
= false) :
68 MMDSOp(MSG_MDS_DIRUPDATE
, HEAD_VERSION
, COMPAT_VERSION
), from_mds(f
), dirfrag(dirfrag
),
69 dir_rep(dir_rep
), dir_rep_by(dir_rep_by
), path(path
) {
70 this->discover
= discover
? 5 : 0;
72 MDirUpdate(const MDirUpdate
& m
)
73 : MMDSOp
{MSG_MDS_DIRUPDATE
},
78 dir_rep_by(m
.dir_rep_by
),
80 tried_discover(m
.tried_discover
)
83 mds_rank_t from_mds
= -1;
87 std::set
<int32_t> dir_rep_by
;
89 mutable int tried_discover
= 0; // XXX HACK
92 static constexpr int HEAD_VERSION
= 1;
93 static constexpr int COMPAT_VERSION
= 1;
94 template<class T
, typename
... Args
>
95 friend boost::intrusive_ptr
<T
> ceph::make_message(Args
&&... args
);
96 template<class T
, typename
... Args
>
97 friend MURef
<T
> crimson::make_message(Args
&&... args
);