initial code repo
[stor4nfv.git] / src / ceph / src / mds / MDSDaemon.h
diff --git a/src/ceph/src/mds/MDSDaemon.h b/src/ceph/src/mds/MDSDaemon.h
new file mode 100644 (file)
index 0000000..0e3bbaf
--- /dev/null
@@ -0,0 +1,158 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software 
+ * Foundation.  See file COPYING.
+ * 
+ */
+
+#ifndef CEPH_MDS_H
+#define CEPH_MDS_H
+
+#include "common/LogClient.h"
+#include "common/Mutex.h"
+#include "common/Timer.h"
+#include "include/Context.h"
+#include "include/types.h"
+#include "mgr/MgrClient.h"
+#include "msg/Dispatcher.h"
+
+#include "Beacon.h"
+#include "MDSMap.h"
+#include "MDSRank.h"
+
+#define CEPH_MDS_PROTOCOL    30 /* cluster internal */
+
+class AuthAuthorizeHandlerRegistry;
+class Message;
+class Messenger;
+class MonClient;
+
+class MDSDaemon : public Dispatcher, public md_config_obs_t {
+ public:
+  /* Global MDS lock: every time someone takes this, they must
+   * also check the `stopping` flag.  If stopping is true, you
+   * must either do nothing and immediately drop the lock, or
+   * never drop the lock again (i.e. call respawn()) */
+  Mutex        mds_lock;
+  bool         stopping;
+
+  SafeTimer    timer;
+
+ protected:
+  Beacon  beacon;
+
+  AuthAuthorizeHandlerRegistry *authorize_handler_cluster_registry;
+  AuthAuthorizeHandlerRegistry *authorize_handler_service_registry;
+
+  std::string name;
+
+  Messenger    *messenger;
+  MonClient    *monc;
+  MgrClient     mgrc;
+  MDSMap       *mdsmap;
+  LogClient    log_client;
+  LogChannelRef clog;
+
+  MDSRankDispatcher *mds_rank;
+
+ public:
+  MDSDaemon(const std::string &n, Messenger *m, MonClient *mc);
+  ~MDSDaemon() override;
+  int orig_argc;
+  const char **orig_argv;
+
+  // handle a signal (e.g., SIGTERM)
+  void handle_signal(int signum);
+
+  int init();
+
+  /**
+   * Hint at whether we were shutdown gracefully (i.e. we were only
+   * in standby, or our rank was stopped).  Should be removed once
+   * we handle shutdown properly (e.g. clear out all message queues)
+   * such that deleting xlists doesn't assert.
+   */
+  bool is_clean_shutdown();
+
+  // config observer bits
+  const char** get_tracked_conf_keys() const override;
+  void handle_conf_change(const struct md_config_t *conf,
+                                 const std::set <std::string> &changed) override;
+ protected:
+  // tick and other timer fun
+  Context *tick_event = nullptr;
+  void     reset_tick();
+
+  void wait_for_omap_osds();
+
+ private:
+  bool ms_dispatch(Message *m) override;
+  bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer, bool force_new) override;
+  bool ms_verify_authorizer(Connection *con, int peer_type,
+                              int protocol, bufferlist& authorizer_data, bufferlist& authorizer_reply,
+                              bool& isvalid, CryptoKey& session_key) override;
+  void ms_handle_accept(Connection *con) override;
+  void ms_handle_connect(Connection *con) override;
+  bool ms_handle_reset(Connection *con) override;
+  void ms_handle_remote_reset(Connection *con) override;
+  bool ms_handle_refused(Connection *con) override;
+
+ protected:
+  // admin socket handling
+  friend class MDSSocketHook;
+  class MDSSocketHook *asok_hook;
+  void set_up_admin_socket();
+  void clean_up_admin_socket();
+  void check_ops_in_flight(); // send off any slow ops to monitor
+  bool asok_command(string command, cmdmap_t& cmdmap, string format,
+                   ostream& ss);
+
+  void dump_status(Formatter *f);
+
+  /**
+   * Terminate this daemon process.
+   *
+   * This function will return, but once it does so the calling thread
+   * must do no more work as all subsystems will have been shut down.
+   */
+  void suicide();
+
+  /**
+   * Start a new daemon process with the same command line parameters that
+   * this process was run with, then terminate this process
+   */
+  void respawn();
+
+  void tick();
+  
+  // messages
+  bool _dispatch(Message *m, bool new_msg);
+
+protected:
+  bool handle_core_message(Message *m);
+  
+  // special message types
+  friend class C_MDS_Send_Command_Reply;
+  static void send_command_reply(MCommand *m, MDSRank* mds_rank, int r,
+                                bufferlist outbl, const std::string& outs);
+  int _handle_command(
+      const cmdmap_t &cmdmap,
+      MCommand *m,
+      bufferlist *outbl,
+      std::string *outs,
+      Context **run_later,
+      bool *need_reply);
+  void handle_command(class MCommand *m);
+  void handle_mds_map(class MMDSMap *m);
+  void _handle_mds_map(MDSMap *oldmap);
+};
+
+
+#endif