Are we looking to get something specific out of this or just trying to upgrade "because it's there?" On Wed, Apr 17, 2019 at 11:51 PM Casey Bodley <cbodley@xxxxxxxxxx> wrote: > > > On 4/16/19 8:24 PM, Patrick McLean wrote: > > In the #ceph-devel IRC channel, it was suggested that this list might be interested in this. I tried to build ceph-14.2.0 against boost-1.70. > > > > It builds fine without radosgw, but with it, it fails with this: > >> In file included from /var/tmp/portage/sys-cluster/ceph-14.2.0-r5/work/ceph-14.2.0/src/rgw/rgw_dmclock_async_scheduler.cc:3: > >> /var/tmp/portage/sys-cluster/ceph-14.2.0-r5/work/ceph-14.2.0/src/rgw/rgw_dmclock_async_scheduler.h: In member function 'rgw::dmclock::AsyncScheduler::executor_type rgw::dmclock::AsyncScheduler::get_executor()': > >> /var/tmp/portage/sys-cluster/ceph-14.2.0-r5/work/ceph-14.2.0/src/rgw/rgw_dmclock_async_scheduler.h:45:30: error: could not convert 'boost::asio::basic_waitable_timer<Clock, WaitTraits, Executor>::get_executor() [with Clock = ceph::time_detail::coarse_real_clock; WaitTraits = boost::asio::wait_traits<ceph::time_detail::coarse_real_clock>; Executor = boost::asio::executor; boost::asio::basic_waitable_timer<Clock, WaitTraits, Executor>::executor_type = boost::asio::executor]()' from 'boost::asio::basic_waitable_timer<ceph::time_detail::coarse_real_clock>::executor_type' {aka 'boost::asio::executor'} to 'rgw::dmclock::AsyncScheduler::executor_type' {aka 'boost::asio::io_context::executor_type'} > >> return timer.get_executor(); > >> ~~~~~~~~~~~~~~~~~~^~ > >> make[2]: *** [src/rgw/CMakeFiles/rgw_common.dir/build.make:418: src/rgw/CMakeFiles/rgw_common.dir/rgw_dmclock_async_scheduler.cc.o] Error 1 > >> make[1]: *** [CMakeFiles/Makefile2:7686: src/rgw/CMakeFiles/rgw_common.dir/all] Error 2 > >> make: *** [Makefile:141: all] Error 2 > > I am happy to try patches etc to get it building. > > That's good to know, thanks for testing! This one is documented as a > breaking change in > https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/history.html: > > > Note: One potential source of breakage in existing user code is when > reusing an I/O object's |io_context| for constructing another I/O > object, as in... > > When we fix this, we'll also want to update cmake to require boost 1.70 > so that we don't need a bunch of #ifdefs to support previous versions. > > > If you're keen to get it building, you can try this patch: > > diff --git a/src/rgw/rgw_dmclock_async_scheduler.h > b/src/rgw/rgw_dmclock_async_scheduler.h > index 70487a52537..47de6523915 100644 > --- a/src/rgw/rgw_dmclock_async_scheduler.h > +++ b/src/rgw/rgw_dmclock_async_scheduler.h > @@ -82,7 +82,7 @@ class AsyncScheduler : public md_config_obs_t, public > Scheduler { > using Completion = async::Completion<Signature, async::AsBase<Request>>; > > using Clock = ceph::coarse_real_clock; > - using Timer = boost::asio::basic_waitable_timer<Clock>; > + using Timer = boost::asio::basic_waitable_timer<Clock, > boost::asio::wait_traits<Clock>, executor_type>; > Timer timer; //< timer for the next scheduled request > > CephContext *const cct; > diff --git a/src/rgw/rgw_reshard.h b/src/rgw/rgw_reshard.h > index d99a6ff68d5..d9b98d3f851 100644 > --- a/src/rgw/rgw_reshard.h > +++ b/src/rgw/rgw_reshard.h > @@ -183,7 +183,9 @@ class RGWReshardWait { > ceph::condition_variable cond; > > struct Waiter : boost::intrusive::list_base_hook<> { > - boost::asio::basic_waitable_timer<Clock> timer; > + using Executor = boost::asio::io_context::executor_type; > + using Timer = boost::asio::basic_waitable_timer<Clock, > boost::asio::wait_traits<Clock>, Executor>; > + Timer timer; > explicit Waiter(boost::asio::io_context& ioc) : timer(ioc) {} > }; > boost::intrusive::list<Waiter> waiters; > -- Cheers, Brad