]>
Commit | Line | Data |
---|---|---|
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) 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 | /* Metadata Server Monitor | |
16 | */ | |
17 | ||
18 | #ifndef CEPH_MDSMONITOR_H | |
19 | #define CEPH_MDSMONITOR_H | |
20 | ||
21 | #include <map> | |
22 | #include <set> | |
23 | using namespace std; | |
24 | ||
25 | #include "include/types.h" | |
28e407b8 | 26 | #include "PaxosFSMap.h" |
7c673cae FG |
27 | #include "PaxosService.h" |
28 | #include "msg/Messenger.h" | |
29 | #include "messages/MMDSBeacon.h" | |
30 | ||
31 | class MMonCommand; | |
32 | class MMDSLoadTargets; | |
33 | class MMDSMap; | |
34 | class FileSystemCommandHandler; | |
35 | ||
28e407b8 | 36 | class MDSMonitor : public PaxosService, public PaxosFSMap { |
7c673cae FG |
37 | public: |
38 | MDSMonitor(Monitor *mn, Paxos *p, string service_name); | |
39 | ||
40 | // service methods | |
41 | void create_initial() override; | |
3efd9988 | 42 | void get_store_prefixes(std::set<string>& s) override; |
7c673cae FG |
43 | void update_from_paxos(bool *need_bootstrap) override; |
44 | void init() override; | |
45 | void create_pending() override; | |
46 | void encode_pending(MonitorDBStore::TransactionRef t) override; | |
47 | // we don't require full versions; don't encode any. | |
48 | void encode_full(MonitorDBStore::TransactionRef t) override { } | |
49 | version_t get_trim_to() override; | |
50 | ||
51 | bool preprocess_query(MonOpRequestRef op) override; // true if processed. | |
52 | bool prepare_update(MonOpRequestRef op) override; | |
53 | bool should_propose(double& delay) override; | |
54 | ||
55 | void on_active() override; | |
56 | void on_restart() override; | |
57 | ||
58 | void check_subs(); | |
59 | void check_sub(Subscription *sub); | |
60 | ||
7c673cae FG |
61 | void dump_info(Formatter *f); |
62 | int print_nodes(Formatter *f); | |
63 | ||
64 | /** | |
65 | * Return true if a blacklist was done (i.e. OSD propose needed) | |
66 | */ | |
67 | bool fail_mds_gid(mds_gid_t gid); | |
7c673cae | 68 | |
28e407b8 AA |
69 | bool is_leader() const override { return mon->is_leader(); } |
70 | ||
71 | protected: | |
7c673cae | 72 | // my helpers |
28e407b8 | 73 | void print_map(const FSMap &m, int dbl=7); |
7c673cae FG |
74 | void update_logger(); |
75 | ||
76 | void _updated(MonOpRequestRef op); | |
77 | ||
78 | void _note_beacon(class MMDSBeacon *m); | |
79 | bool preprocess_beacon(MonOpRequestRef op); | |
80 | bool prepare_beacon(MonOpRequestRef op); | |
81 | ||
82 | bool preprocess_offload_targets(MonOpRequestRef op); | |
83 | bool prepare_offload_targets(MonOpRequestRef op); | |
84 | ||
85 | void get_health(list<pair<health_status_t,string> >& summary, | |
86 | list<pair<health_status_t,string> > *detail, | |
87 | CephContext *cct) const override; | |
d2e6a577 FG |
88 | int fail_mds(std::ostream &ss, const std::string &arg, |
89 | MDSMap::mds_info_t *failed_info); | |
7c673cae FG |
90 | |
91 | bool preprocess_command(MonOpRequestRef op); | |
92 | bool prepare_command(MonOpRequestRef op); | |
93 | ||
94 | int parse_role( | |
95 | const std::string &role_str, | |
96 | mds_role_t *role, | |
97 | std::ostream &ss); | |
98 | ||
99 | void modify_legacy_filesystem( | |
100 | std::function<void(std::shared_ptr<Filesystem> )> fn); | |
101 | int legacy_filesystem_command( | |
102 | MonOpRequestRef op, | |
103 | std::string const &prefix, | |
104 | map<string, cmd_vartype> &cmdmap, | |
105 | std::stringstream &ss); | |
106 | int filesystem_command( | |
107 | MonOpRequestRef op, | |
108 | std::string const &prefix, | |
109 | map<string, cmd_vartype> &cmdmap, | |
110 | std::stringstream &ss); | |
111 | ||
112 | // beacons | |
113 | struct beacon_info_t { | |
114 | utime_t stamp; | |
115 | uint64_t seq; | |
116 | }; | |
117 | map<mds_gid_t, beacon_info_t> last_beacon; | |
118 | ||
119 | bool try_standby_replay( | |
120 | const MDSMap::mds_info_t& finfo, | |
121 | const Filesystem &leader_fs, | |
122 | const MDSMap::mds_info_t& ainfo); | |
123 | ||
124 | std::list<std::shared_ptr<FileSystemCommandHandler> > handlers; | |
125 | ||
28e407b8 AA |
126 | bool maybe_promote_standby(std::shared_ptr<Filesystem> &fs); |
127 | bool maybe_expand_cluster(std::shared_ptr<Filesystem> &fs); | |
c07f9fc5 | 128 | void maybe_replace_gid(mds_gid_t gid, const MDSMap::mds_info_t& info, |
7c673cae FG |
129 | bool *mds_propose, bool *osd_propose); |
130 | void tick() override; // check state, take actions | |
131 | ||
132 | int dump_metadata(const string& who, Formatter *f, ostream& err); | |
133 | ||
7c673cae FG |
134 | void update_metadata(mds_gid_t gid, const Metadata& metadata); |
135 | void remove_from_metadata(MonitorDBStore::TransactionRef t); | |
136 | int load_metadata(map<mds_gid_t, Metadata>& m); | |
31f18b77 | 137 | void count_metadata(const string& field, Formatter *f); |
c07f9fc5 FG |
138 | public: |
139 | void count_metadata(const string& field, map<string,int> *out); | |
140 | protected: | |
7c673cae FG |
141 | |
142 | // MDS daemon GID to latest health state from that GID | |
143 | std::map<uint64_t, MDSHealth> pending_daemon_health; | |
144 | std::set<uint64_t> pending_daemon_health_rm; | |
145 | ||
d2e6a577 | 146 | |
7c673cae FG |
147 | map<mds_gid_t, Metadata> pending_metadata; |
148 | ||
149 | mds_gid_t gid_from_arg(const std::string& arg, std::ostream& err); | |
150 | ||
151 | // When did the mon last call into our tick() method? Used for detecting | |
152 | // when the mon was not updating us for some period (e.g. during slow | |
153 | // election) to reset last_beacon timeouts | |
154 | utime_t last_tick; | |
155 | }; | |
156 | ||
157 | #endif |