peer.cluster_name,
peer.client_name));
m_pool_peers[pool_id].insert(peer);
- m_mirrored_pools.insert(pool_name);
}
if (name != nullptr) {
*name = pool_name;
ASSERT_GE(pool_id, 0);
if (m_pool_peers.find(pool_id) != m_pool_peers.end()) {
m_pool_peers[pool_id].erase(peer);
- m_mirrored_pools.erase(name);
if (m_pool_peers[pool_id].empty()) {
m_pool_peers.erase(pool_id);
}
m_cluster_watcher->refresh_pools();
Mutex::Locker l(m_lock);
ASSERT_EQ(m_pool_peers, m_cluster_watcher->get_pool_peers());
- ASSERT_EQ(m_mirrored_pools, m_cluster_watcher->get_pool_names());
}
Mutex m_lock;
unique_ptr<ClusterWatcher> m_cluster_watcher;
set<string> m_pools;
- set<string> m_mirrored_pools;
ClusterWatcher::PoolPeers m_pool_peers;
};
return m_pool_peers;
}
-const ClusterWatcher::PoolNames& ClusterWatcher::get_pool_names() const
-{
- assert(m_lock.is_locked());
- return m_pool_names;
-}
-
void ClusterWatcher::refresh_pools()
{
dout(20) << "enter" << dendl;
Mutex::Locker l(m_lock);
m_pool_peers = pool_peers;
- m_pool_names = pool_names;
// TODO: perhaps use a workqueue instead, once we get notifications
// about config changes for existing pools
}
// Caller controls frequency of calls
void refresh_pools();
const PoolPeers& get_pool_peers() const;
- const PoolNames& get_pool_names() const;
private:
Mutex &m_lock;
RadosRef m_cluster;
PoolPeers m_pool_peers;
- PoolNames m_pool_names;
void read_pool_peers(PoolPeers *pool_peers, PoolNames *pool_names);
};