]> git.proxmox.com Git - ceph.git/blame - ceph/src/librados/RadosClient.h
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / librados / RadosClient.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-2012 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#ifndef CEPH_LIBRADOS_RADOSCLIENT_H
15#define CEPH_LIBRADOS_RADOSCLIENT_H
16
17#include "common/Cond.h"
18#include "common/Mutex.h"
19#include "common/RWLock.h"
20#include "common/Timer.h"
21#include "include/rados/librados.h"
22#include "include/rados/librados.hpp"
23#include "mon/MonClient.h"
24#include "mgr/MgrClient.h"
25#include "msg/Dispatcher.h"
26
27#include "IoCtxImpl.h"
28
29struct AuthAuthorizer;
30class CephContext;
31struct Connection;
32struct md_config_t;
33class Message;
34class MLog;
35class Messenger;
36class AioCompletionImpl;
37
38class librados::RadosClient : public Dispatcher
39{
40 std::unique_ptr<CephContext,
41 std::function<void(CephContext*)> > cct_deleter;
42
43public:
44 using Dispatcher::cct;
45 md_config_t *conf;
46private:
47 enum {
48 DISCONNECTED,
49 CONNECTING,
50 CONNECTED,
51 } state;
52
53 MonClient monclient;
54 MgrClient mgrclient;
55 Messenger *messenger;
56
57 uint64_t instance_id;
58
59 bool _dispatch(Message *m);
60 bool ms_dispatch(Message *m) override;
61
62 bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer, bool force_new) override;
63 void ms_handle_connect(Connection *con) override;
64 bool ms_handle_reset(Connection *con) override;
65 void ms_handle_remote_reset(Connection *con) override;
66 bool ms_handle_refused(Connection *con) override;
67
68 Objecter *objecter;
69
70 Mutex lock;
71 Cond cond;
72 SafeTimer timer;
73 int refcnt;
74
75 version_t log_last_version;
76 rados_log_callback_t log_cb;
77 void *log_cb_arg;
78 string log_watch;
79
80 int wait_for_osdmap();
81
82public:
83 Finisher finisher;
84
85 explicit RadosClient(CephContext *cct_);
86 ~RadosClient() override;
87 int ping_monitor(string mon_id, string *result);
88 int connect();
89 void shutdown();
90
91 int watch_flush();
92 int async_watch_flush(AioCompletionImpl *c);
93
94 uint64_t get_instance_id();
95
96 int wait_for_latest_osdmap();
97
98 int create_ioctx(const char *name, IoCtxImpl **io);
99 int create_ioctx(int64_t, IoCtxImpl **io);
100
101 int get_fsid(std::string *s);
102 int64_t lookup_pool(const char *name);
103 bool pool_requires_alignment(int64_t pool_id);
104 int pool_requires_alignment2(int64_t pool_id, bool *requires);
105 uint64_t pool_required_alignment(int64_t pool_id);
106 int pool_required_alignment2(int64_t pool_id, uint64_t *alignment);
107 int pool_get_auid(uint64_t pool_id, unsigned long long *auid);
108 int pool_get_name(uint64_t pool_id, std::string *auid);
109
110 int pool_list(std::list<std::pair<int64_t, string> >& ls);
111 int get_pool_stats(std::list<string>& ls, map<string,::pool_stat_t>& result);
112 int get_fs_stats(ceph_statfs& result);
113 bool get_pool_is_selfmanaged_snaps_mode(const std::string& pool);
114
115 /*
116 -1 was set as the default value and monitor will pickup the right crush rule with below order:
117 a) osd pool default crush replicated ruleset
118 b) the first ruleset in crush ruleset
119 c) error out if no value find
120 */
121 int pool_create(string& name, unsigned long long auid=0, int16_t crush_rule=-1);
122 int pool_create_async(string& name, PoolAsyncCompletionImpl *c, unsigned long long auid=0,
123 int16_t crush_rule=-1);
124 int pool_get_base_tier(int64_t pool_id, int64_t* base_tier);
125 int pool_delete(const char *name);
126
127 int pool_delete_async(const char *name, PoolAsyncCompletionImpl *c);
128
129 int blacklist_add(const string& client_address, uint32_t expire_seconds);
130
131 int mon_command(const vector<string>& cmd, const bufferlist &inbl,
132 bufferlist *outbl, string *outs);
133 int mon_command(int rank,
134 const vector<string>& cmd, const bufferlist &inbl,
135 bufferlist *outbl, string *outs);
136 int mon_command(string name,
137 const vector<string>& cmd, const bufferlist &inbl,
138 bufferlist *outbl, string *outs);
139 int mgr_command(const vector<string>& cmd, const bufferlist &inbl,
140 bufferlist *outbl, string *outs);
141 int osd_command(int osd, vector<string>& cmd, const bufferlist& inbl,
142 bufferlist *poutbl, string *prs);
143 int pg_command(pg_t pgid, vector<string>& cmd, const bufferlist& inbl,
144 bufferlist *poutbl, string *prs);
145
146 void handle_log(MLog *m);
147 int monitor_log(const string& level, rados_log_callback_t cb, void *arg);
148
149 void get();
150 bool put();
151 void blacklist_self(bool set);
152};
153
154#endif