initial code repo
[stor4nfv.git] / src / ceph / src / librados / RadosClient.h
diff --git a/src/ceph/src/librados/RadosClient.h b/src/ceph/src/librados/RadosClient.h
new file mode 100644 (file)
index 0000000..bff6ca3
--- /dev/null
@@ -0,0 +1,172 @@
+// -*- 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-2012 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_LIBRADOS_RADOSCLIENT_H
+#define CEPH_LIBRADOS_RADOSCLIENT_H
+
+#include "common/Cond.h"
+#include "common/Mutex.h"
+#include "common/RWLock.h"
+#include "common/Timer.h"
+#include "include/rados/librados.h"
+#include "include/rados/librados.hpp"
+#include "mon/MonClient.h"
+#include "mgr/MgrClient.h"
+#include "msg/Dispatcher.h"
+
+#include "IoCtxImpl.h"
+
+struct AuthAuthorizer;
+struct Context;
+class CephContext;
+struct Connection;
+struct md_config_t;
+class Message;
+class MLog;
+class Messenger;
+class AioCompletionImpl;
+
+class librados::RadosClient : public Dispatcher
+{
+  std::unique_ptr<CephContext,
+                 std::function<void(CephContext*)> > cct_deleter;
+
+public:
+  using Dispatcher::cct;
+  md_config_t *conf;
+private:
+  enum {
+    DISCONNECTED,
+    CONNECTING,
+    CONNECTED,
+  } state;
+
+  MonClient monclient;
+  MgrClient mgrclient;
+  Messenger *messenger;
+
+  uint64_t instance_id;
+
+  bool _dispatch(Message *m);
+  bool ms_dispatch(Message *m) override;
+
+  bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer, bool force_new) 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;
+
+  Objecter *objecter;
+
+  Mutex lock;
+  Cond cond;
+  SafeTimer timer;
+  int refcnt;
+
+  version_t log_last_version;
+  rados_log_callback_t log_cb;
+  rados_log_callback2_t log_cb2;
+  void *log_cb_arg;
+  string log_watch;
+
+  bool service_daemon = false;
+  string daemon_name, service_name;
+  map<string,string> daemon_metadata;
+
+  int wait_for_osdmap();
+
+public:
+  Finisher finisher;
+
+  explicit RadosClient(CephContext *cct_);
+  ~RadosClient() override;
+  int ping_monitor(string mon_id, string *result);
+  int connect();
+  void shutdown();
+
+  int watch_flush();
+  int async_watch_flush(AioCompletionImpl *c);
+
+  uint64_t get_instance_id();
+
+  int wait_for_latest_osdmap();
+
+  int create_ioctx(const char *name, IoCtxImpl **io);
+  int create_ioctx(int64_t, IoCtxImpl **io);
+
+  int get_fsid(std::string *s);
+  int64_t lookup_pool(const char *name);
+  bool pool_requires_alignment(int64_t pool_id);
+  int pool_requires_alignment2(int64_t pool_id, bool *requires);
+  uint64_t pool_required_alignment(int64_t pool_id);
+  int pool_required_alignment2(int64_t pool_id, uint64_t *alignment);
+  int pool_get_auid(uint64_t pool_id, unsigned long long *auid);
+  int pool_get_name(uint64_t pool_id, std::string *auid);
+
+  int pool_list(std::list<std::pair<int64_t, string> >& ls);
+  int get_pool_stats(std::list<string>& ls, map<string,::pool_stat_t>& result);
+  int get_fs_stats(ceph_statfs& result);
+  bool get_pool_is_selfmanaged_snaps_mode(const std::string& pool);
+
+  /*
+  -1 was set as the default value and monitor will pickup the right crush rule with below order:
+    a) osd pool default crush replicated ruleset
+    b) the first ruleset in crush ruleset
+    c) error out if no value find
+  */
+  int pool_create(string& name, unsigned long long auid=0, int16_t crush_rule=-1);
+  int pool_create_async(string& name, PoolAsyncCompletionImpl *c, unsigned long long auid=0,
+                       int16_t crush_rule=-1);
+  int pool_get_base_tier(int64_t pool_id, int64_t* base_tier);
+  int pool_delete(const char *name);
+
+  int pool_delete_async(const char *name, PoolAsyncCompletionImpl *c);
+
+  int blacklist_add(const string& client_address, uint32_t expire_seconds);
+
+  int mon_command(const vector<string>& cmd, const bufferlist &inbl,
+                 bufferlist *outbl, string *outs);
+  void mon_command_async(const vector<string>& cmd, const bufferlist &inbl,
+                         bufferlist *outbl, string *outs, Context *on_finish);
+  int mon_command(int rank,
+                 const vector<string>& cmd, const bufferlist &inbl,
+                 bufferlist *outbl, string *outs);
+  int mon_command(string name,
+                 const vector<string>& cmd, const bufferlist &inbl,
+                 bufferlist *outbl, string *outs);
+  int mgr_command(const vector<string>& cmd, const bufferlist &inbl,
+                 bufferlist *outbl, string *outs);
+  int osd_command(int osd, vector<string>& cmd, const bufferlist& inbl,
+                  bufferlist *poutbl, string *prs);
+  int pg_command(pg_t pgid, vector<string>& cmd, const bufferlist& inbl,
+                bufferlist *poutbl, string *prs);
+
+  void handle_log(MLog *m);
+  int monitor_log(const string& level, rados_log_callback_t cb,
+                 rados_log_callback2_t cb2, void *arg);
+
+  void get();
+  bool put();
+  void blacklist_self(bool set);
+
+  int service_daemon_register(
+    const std::string& service,  ///< service name (e.g., 'rgw')
+    const std::string& name,     ///< daemon name (e.g., 'gwfoo')
+    const std::map<std::string,std::string>& metadata); ///< static metadata about daemon
+  int service_daemon_update_status(
+    const std::map<std::string,std::string>& status);
+
+  mon_feature_t get_required_monitor_features() const;
+};
+
+#endif