1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2004-2012 Sage Weil <sage@newdream.net>
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.
14 #ifndef CEPH_LIBRADOS_RADOSCLIENT_H
15 #define CEPH_LIBRADOS_RADOSCLIENT_H
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"
27 #include "IoCtxImpl.h"
29 struct AuthAuthorizer
;
36 class AioCompletionImpl
;
38 class librados::RadosClient
: public Dispatcher
40 std::unique_ptr
<CephContext
,
41 std::function
<void(CephContext
*)> > cct_deleter
;
44 using Dispatcher::cct
;
59 bool _dispatch(Message
*m
);
60 bool ms_dispatch(Message
*m
) override
;
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
;
75 version_t log_last_version
;
76 rados_log_callback_t log_cb
;
77 rados_log_callback2_t log_cb2
;
81 bool service_daemon
= false;
82 string daemon_name
, service_name
;
83 map
<string
,string
> daemon_metadata
;
85 int wait_for_osdmap();
90 explicit RadosClient(CephContext
*cct_
);
91 ~RadosClient() override
;
92 int ping_monitor(string mon_id
, string
*result
);
97 int async_watch_flush(AioCompletionImpl
*c
);
99 uint64_t get_instance_id();
101 int wait_for_latest_osdmap();
103 int create_ioctx(const char *name
, IoCtxImpl
**io
);
104 int create_ioctx(int64_t, IoCtxImpl
**io
);
106 int get_fsid(std::string
*s
);
107 int64_t lookup_pool(const char *name
);
108 bool pool_requires_alignment(int64_t pool_id
);
109 int pool_requires_alignment2(int64_t pool_id
, bool *requires
);
110 uint64_t pool_required_alignment(int64_t pool_id
);
111 int pool_required_alignment2(int64_t pool_id
, uint64_t *alignment
);
112 int pool_get_auid(uint64_t pool_id
, unsigned long long *auid
);
113 int pool_get_name(uint64_t pool_id
, std::string
*auid
);
115 int pool_list(std::list
<std::pair
<int64_t, string
> >& ls
);
116 int get_pool_stats(std::list
<string
>& ls
, map
<string
,::pool_stat_t
>& result
);
117 int get_fs_stats(ceph_statfs
& result
);
118 bool get_pool_is_selfmanaged_snaps_mode(const std::string
& pool
);
121 -1 was set as the default value and monitor will pickup the right crush rule with below order:
122 a) osd pool default crush replicated ruleset
123 b) the first ruleset in crush ruleset
124 c) error out if no value find
126 int pool_create(string
& name
, unsigned long long auid
=0, int16_t crush_rule
=-1);
127 int pool_create_async(string
& name
, PoolAsyncCompletionImpl
*c
, unsigned long long auid
=0,
128 int16_t crush_rule
=-1);
129 int pool_get_base_tier(int64_t pool_id
, int64_t* base_tier
);
130 int pool_delete(const char *name
);
132 int pool_delete_async(const char *name
, PoolAsyncCompletionImpl
*c
);
134 int blacklist_add(const string
& client_address
, uint32_t expire_seconds
);
136 int mon_command(const vector
<string
>& cmd
, const bufferlist
&inbl
,
137 bufferlist
*outbl
, string
*outs
);
138 int mon_command(int rank
,
139 const vector
<string
>& cmd
, const bufferlist
&inbl
,
140 bufferlist
*outbl
, string
*outs
);
141 int mon_command(string name
,
142 const vector
<string
>& cmd
, const bufferlist
&inbl
,
143 bufferlist
*outbl
, string
*outs
);
144 int mgr_command(const vector
<string
>& cmd
, const bufferlist
&inbl
,
145 bufferlist
*outbl
, string
*outs
);
146 int osd_command(int osd
, vector
<string
>& cmd
, const bufferlist
& inbl
,
147 bufferlist
*poutbl
, string
*prs
);
148 int pg_command(pg_t pgid
, vector
<string
>& cmd
, const bufferlist
& inbl
,
149 bufferlist
*poutbl
, string
*prs
);
151 void handle_log(MLog
*m
);
152 int monitor_log(const string
& level
, rados_log_callback_t cb
,
153 rados_log_callback2_t cb2
, void *arg
);
157 void blacklist_self(bool set
);
159 int service_daemon_register(
160 const std::string
& service
, ///< service name (e.g., 'rgw')
161 const std::string
& name
, ///< daemon name (e.g., 'gwfoo')
162 const std::map
<std::string
,std::string
>& metadata
); ///< static metadata about daemon
163 int service_daemon_update_status(
164 const std::map
<std::string
,std::string
>& status
);