]>
git.proxmox.com Git - ceph.git/blob - ceph/src/messages/MMDSResolve.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_MMDSRESOLVE_H
16 #define CEPH_MMDSRESOLVE_H
18 #include "msg/Message.h"
20 #include "include/types.h"
22 class MMDSResolve
: public MessageInstance
<MMDSResolve
> {
26 map
<dirfrag_t
, vector
<dirfrag_t
> > subtrees
;
27 map
<dirfrag_t
, vector
<dirfrag_t
> > ambiguous_imports
;
29 struct slave_request
{
30 bufferlist inode_caps
;
32 slave_request() : committing(false) {}
33 void encode(bufferlist
&bl
) const {
35 encode(inode_caps
, bl
);
36 encode(committing
, bl
);
38 void decode(bufferlist::const_iterator
&bl
) {
40 decode(inode_caps
, bl
);
41 decode(committing
, bl
);
45 map
<metareqid_t
, slave_request
> slave_requests
;
47 // table client information
50 set
<version_t
> pending_commits
;
52 table_client() : type(0) {}
53 table_client(int _type
, const set
<version_t
>& commits
)
54 : type(_type
), pending_commits(commits
) {}
56 void encode(bufferlist
& bl
) const {
59 encode(pending_commits
, bl
);
61 void decode(bufferlist::const_iterator
& bl
) {
64 decode(pending_commits
, bl
);
68 list
<table_client
> table_clients
;
71 MMDSResolve() : MessageInstance(MSG_MDS_RESOLVE
) {}
72 ~MMDSResolve() override
{}
75 std::string_view
get_type_name() const override
{ return "mds_resolve"; }
77 void print(ostream
& out
) const override
{
78 out
<< "mds_resolve(" << subtrees
.size()
79 << "+" << ambiguous_imports
.size()
80 << " subtrees +" << slave_requests
.size() << " slave requests)";
83 void add_subtree(dirfrag_t im
) {
86 void add_subtree_bound(dirfrag_t im
, dirfrag_t ex
) {
87 subtrees
[im
].push_back(ex
);
90 void add_ambiguous_import(dirfrag_t im
, const vector
<dirfrag_t
>& m
) {
91 ambiguous_imports
[im
] = m
;
94 void add_slave_request(metareqid_t reqid
, bool committing
) {
95 slave_requests
[reqid
].committing
= committing
;
98 void add_slave_request(metareqid_t reqid
, bufferlist
& bl
) {
99 slave_requests
[reqid
].inode_caps
.claim(bl
);
102 void add_table_commits(int table
, const set
<version_t
>& pending_commits
) {
103 table_clients
.push_back(table_client(table
, pending_commits
));
106 void encode_payload(uint64_t features
) override
{
108 encode(subtrees
, payload
);
109 encode(ambiguous_imports
, payload
);
110 encode(slave_requests
, payload
);
111 encode(table_clients
, payload
);
113 void decode_payload() override
{
115 auto p
= payload
.cbegin();
117 decode(ambiguous_imports
, p
);
118 decode(slave_requests
, p
);
119 decode(table_clients
, p
);
123 inline ostream
& operator<<(ostream
& out
, const MMDSResolve::slave_request
&) {
127 WRITE_CLASS_ENCODER(MMDSResolve::slave_request
)
128 WRITE_CLASS_ENCODER(MMDSResolve::table_client
)