MonClient *monc;
Objecter *objecter;
FSMap fsmap;
- Mutex lock;
+ mutable Mutex lock;
PGMap pg_map;
void notify_osdmap(const OSDMap &osd_map);
- bool have_fsmap() {
+ bool have_fsmap() const {
Mutex::Locker l(lock);
return fsmap.get_epoch() > 0;
}
template<typename Callback, typename...Args>
- void with_fsmap(Callback&& cb, Args&&...args)
+ void with_fsmap(Callback&& cb, Args&&...args) const
{
Mutex::Locker l(lock);
- std::forward<Callback>(cb)(const_cast<const FSMap&>(fsmap),
- std::forward<Args>(args)...);
+ std::forward<Callback>(cb)(fsmap, std::forward<Args>(args)...);
}
template<typename Callback, typename...Args>
- auto with_pgmap(Callback&& cb, Args&&...args) ->
- decltype(cb(const_cast<const PGMap&>(pg_map),
- std::forward<Args>(args)...))
+ auto with_pgmap(Callback&& cb, Args&&...args) const ->
+ decltype(cb(pg_map, std::forward<Args>(args)...))
{
Mutex::Locker l(lock);
- return std::forward<Callback>(cb)(const_cast<const PGMap&>(pg_map),
- std::forward<Args>(args)...);
+ return std::forward<Callback>(cb)(pg_map, std::forward<Args>(args)...);
}
template<typename... Args>
- void with_monmap(Args &&... args)
+ void with_monmap(Args &&... args) const
{
Mutex::Locker l(lock);
assert(monc != nullptr);
}
template<typename... Args>
- auto with_osdmap(Args &&... args) ->
+ auto with_osdmap(Args &&... args) const ->
decltype(objecter->with_osdmap(std::forward<Args>(args)...))
{
assert(objecter != nullptr);
* to the MonMap
*/
template<typename Callback, typename...Args>
- auto with_monmap(Callback&& cb, Args&&...args) ->
- decltype(cb(const_cast<const MonMap&>(monmap),
- std::forward<Args>(args)...)) {
+ auto with_monmap(Callback&& cb, Args&&...args) const ->
+ decltype(cb(monmap, std::forward<Args>(args)...)) {
Mutex::Locker l(monc_lock);
- return std::forward<Callback>(cb)(const_cast<const MonMap&>(monmap),
- std::forward<Args>(args)...);
+ return std::forward<Callback>(cb)(monmap, std::forward<Args>(args)...);
}
private:
// here or you will have great woe and misery.
template<typename Callback, typename...Args>
- auto with_osdmap(Callback&& cb, Args&&... args) ->
- decltype(cb(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...)) {
+ auto with_osdmap(Callback&& cb, Args&&... args) const ->
+ decltype(cb(*osdmap, std::forward<Args>(args)...)) {
shared_lock l(rwlock);
- return std::forward<Callback>(cb)(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...);
+ return std::forward<Callback>(cb)(*osdmap, std::forward<Args>(args)...);
}