}
}
- auto handles = std::vector<librados::Rados>{static_cast<size_t>(1)};
-
- for (auto& r : handles) {
- ret = r.init_with_context(cct);
- if (ret < 0) {
- return ret;
- }
- ret = r.connect();
- if (ret < 0) {
- return ret;
- }
+ ret = rados.init_with_context(cct);
+ if (ret < 0) {
+ return ret;
+ }
+ ret = rados.connect();
+ if (ret < 0) {
+ return ret;
}
auto crs = std::unique_ptr<RGWCoroutinesManagerRegistry>{
meta_mgr = new RGWMetadataManager(cct, this);
data_log = new RGWDataChangesLog(cct, this);
cr_registry = crs.release();
-
- std::swap(handles, rados);
return ret;
}
int RGWRados::register_to_service_map(const string& daemon_type, const map<string, string>& meta)
{
map<string,string> metadata = meta;
- metadata["num_handles"] = stringify(rados.size());
+ metadata["num_handles"] = "1"s;
metadata["zonegroup_id"] = svc.zone->get_zonegroup().get_id();
metadata["zonegroup_name"] = svc.zone->get_zonegroup().get_name();
metadata["zone_name"] = svc.zone->zone_name();
if (name.compare(0, 4, "rgw.") == 0) {
name = name.substr(4);
}
- int ret = rados[0].service_daemon_register(daemon_type, name, metadata);
+ int ret = rados.service_daemon_register(daemon_type, name, metadata);
if (ret < 0) {
ldout(cct, 0) << "ERROR: service_daemon_register() returned ret=" << ret << ": " << cpp_strerror(-ret) << dendl;
return ret;
int RGWRados::update_service_map(std::map<std::string, std::string>&& status)
{
- int ret = rados[0].service_daemon_update_status(move(status));
+ int ret = rados.service_daemon_update_status(move(status));
if (ret < 0) {
ldout(cct, 0) << "ERROR: service_daemon_update_status() returned ret=" << ret << ": " << cpp_strerror(-ret) << dendl;
return ret;
librados::Rados* RGWRados::get_rados_handle()
{
- if (rados.size() == 1) {
- return &rados[0];
- } else {
- handle_lock.get_read();
- pthread_t id = pthread_self();
- std::map<pthread_t, int>:: iterator it = rados_map.find(id);
-
- if (it != rados_map.end()) {
- handle_lock.put_read();
- return &rados[it->second];
- } else {
- handle_lock.put_read();
- handle_lock.get_write();
- const uint32_t handle = next_rados_handle;
- rados_map[id] = handle;
- if (++next_rados_handle == rados.size()) {
- next_rados_handle = 0;
- }
- handle_lock.put_write();
- return &rados[handle];
- }
- }
+ return &rados;
}
int RGWRados::delete_raw_obj_aio(const rgw_raw_obj& obj, list<librados::AioCompletion *>& handles)
protected:
CephContext *cct;
- std::vector<librados::Rados> rados;
- uint32_t next_rados_handle;
- RWLock handle_lock;
- std::map<pthread_t, int> rados_map;
+ librados::Rados rados;
using RGWChainedCacheImpl_bucket_info_entry = RGWChainedCacheImpl<bucket_info_entry>;
RGWChainedCacheImpl_bucket_info_entry *binfo_cache;
bucket_id_lock("rados_bucket_id"),
bucket_index_max_shards(0),
max_bucket_id(0), cct(NULL),
- next_rados_handle(0),
- handle_lock("rados_handle_lock"),
binfo_cache(NULL), obj_tombstone_cache(nullptr),
pools_initialized(false),
quota_handler(NULL),