]> git.proxmox.com Git - ceph.git/blame - ceph/src/mds/MDSDaemon.h
update sources to 12.2.2
[ceph.git] / ceph / src / mds / MDSDaemon.h
CommitLineData
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
7c673cae
FG
15#ifndef CEPH_MDS_H
16#define CEPH_MDS_H
17
d2e6a577 18#include "common/LogClient.h"
7c673cae 19#include "common/Mutex.h"
7c673cae 20#include "common/Timer.h"
d2e6a577
FG
21#include "include/Context.h"
22#include "include/types.h"
7c673cae 23#include "mgr/MgrClient.h"
d2e6a577 24#include "msg/Dispatcher.h"
7c673cae
FG
25
26#include "Beacon.h"
d2e6a577
FG
27#include "MDSMap.h"
28#include "MDSRank.h"
7c673cae 29
31f18b77 30#define CEPH_MDS_PROTOCOL 30 /* cluster internal */
7c673cae 31
7c673cae 32class AuthAuthorizeHandlerRegistry;
d2e6a577
FG
33class Message;
34class Messenger;
35class MonClient;
7c673cae
FG
36
37class MDSDaemon : public Dispatcher, public md_config_obs_t {
38 public:
39 /* Global MDS lock: every time someone takes this, they must
40 * also check the `stopping` flag. If stopping is true, you
41 * must either do nothing and immediately drop the lock, or
42 * never drop the lock again (i.e. call respawn()) */
43 Mutex mds_lock;
44 bool stopping;
45
46 SafeTimer timer;
47
48 protected:
49 Beacon beacon;
50
51 AuthAuthorizeHandlerRegistry *authorize_handler_cluster_registry;
52 AuthAuthorizeHandlerRegistry *authorize_handler_service_registry;
53
54 std::string name;
55
56 Messenger *messenger;
57 MonClient *monc;
58 MgrClient mgrc;
59 MDSMap *mdsmap;
60 LogClient log_client;
61 LogChannelRef clog;
62
63 MDSRankDispatcher *mds_rank;
64
65 public:
66 MDSDaemon(const std::string &n, Messenger *m, MonClient *mc);
67 ~MDSDaemon() override;
68 int orig_argc;
69 const char **orig_argv;
70
71 // handle a signal (e.g., SIGTERM)
72 void handle_signal(int signum);
73
74 int init();
75
76 /**
77 * Hint at whether we were shutdown gracefully (i.e. we were only
78 * in standby, or our rank was stopped). Should be removed once
79 * we handle shutdown properly (e.g. clear out all message queues)
80 * such that deleting xlists doesn't assert.
81 */
82 bool is_clean_shutdown();
83
84 // config observer bits
85 const char** get_tracked_conf_keys() const override;
86 void handle_conf_change(const struct md_config_t *conf,
87 const std::set <std::string> &changed) override;
88 protected:
89 // tick and other timer fun
3efd9988 90 Context *tick_event = nullptr;
7c673cae
FG
91 void reset_tick();
92
93 void wait_for_omap_osds();
94
95 private:
96 bool ms_dispatch(Message *m) override;
97 bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer, bool force_new) override;
98 bool ms_verify_authorizer(Connection *con, int peer_type,
99 int protocol, bufferlist& authorizer_data, bufferlist& authorizer_reply,
100 bool& isvalid, CryptoKey& session_key) override;
101 void ms_handle_accept(Connection *con) override;
102 void ms_handle_connect(Connection *con) override;
103 bool ms_handle_reset(Connection *con) override;
104 void ms_handle_remote_reset(Connection *con) override;
105 bool ms_handle_refused(Connection *con) override;
106
107 protected:
108 // admin socket handling
109 friend class MDSSocketHook;
110 class MDSSocketHook *asok_hook;
111 void set_up_admin_socket();
112 void clean_up_admin_socket();
113 void check_ops_in_flight(); // send off any slow ops to monitor
114 bool asok_command(string command, cmdmap_t& cmdmap, string format,
115 ostream& ss);
116
117 void dump_status(Formatter *f);
118
119 /**
120 * Terminate this daemon process.
121 *
122 * This function will return, but once it does so the calling thread
123 * must do no more work as all subsystems will have been shut down.
124 */
125 void suicide();
126
127 /**
128 * Start a new daemon process with the same command line parameters that
129 * this process was run with, then terminate this process
130 */
131 void respawn();
132
133 void tick();
134
135 // messages
136 bool _dispatch(Message *m, bool new_msg);
137
138protected:
139 bool handle_core_message(Message *m);
140
141 // special message types
142 friend class C_MDS_Send_Command_Reply;
143 static void send_command_reply(MCommand *m, MDSRank* mds_rank, int r,
144 bufferlist outbl, const std::string& outs);
145 int _handle_command(
146 const cmdmap_t &cmdmap,
147 MCommand *m,
148 bufferlist *outbl,
149 std::string *outs,
150 Context **run_later,
151 bool *need_reply);
152 void handle_command(class MCommand *m);
153 void handle_mds_map(class MMDSMap *m);
154 void _handle_mds_map(MDSMap *oldmap);
155};
156
157
158#endif