Control: tags 1136969 + patch Control: tags 1136969 + pending Dear maintainer,
I've prepared an NMU for ceph (versioned as 18.2.8+ds-2.1) and uploaded it to DELAYED/0. Diff is attached. This bug prevents the removal of deprecated boost1.83. Best regards, Anton
commit bf87a0722f1b53ee622b7b493b820adb0570a35b Author: Anton Gladky <[email protected]> Date: Sun Jun 7 12:49:06 2026 +0200 Support Boost 1.90 build changes diff --git a/debian/changelog b/debian/changelog index 1eb2e477c5..37b5406a7a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +ceph (18.2.8+ds-2.1) unstable; urgency=medium + + * Non-maintainer upload. + * Migrate from versioned boost1.83 build-dependencies to unversioned + default Boost packages (Closes: #1136969). + * Drop libboost-system-dev from Build-Depends; boost::system is + header-only since Boost 1.74 and has no compiled library in Boost 1.90. + * Fix FTBFS with Boost 1.90 API changes (0032-fix-ftbfs-with-boost-1.90.patch). + + -- Anton Gladky <[email protected]> Fri, 06 Jun 2026 06:00:00 +0000 + ceph (18.2.8+ds-2) sid; urgency=medium [ Bernd Zeimetz ] diff --git a/debian/control b/debian/control index 8f1b0a35d0..23135bc06f 100644 --- a/debian/control +++ b/debian/control @@ -22,21 +22,20 @@ Build-Depends: libbabeltrace-ctf-dev, libbabeltrace-dev, libblkid-dev, - libboost-atomic1.83-dev, - libboost-chrono1.83-dev, - libboost-context1.83-dev, - libboost-coroutine1.83-dev, - libboost-date-time1.83-dev, - libboost-filesystem1.83-dev, - libboost-iostreams1.83-dev, - libboost-program-options1.83-dev, - libboost-python1.83-dev, - libboost-random1.83-dev, - libboost-regex1.83-dev, - libboost-system1.83-dev, - libboost-test1.83-dev, - libboost-thread1.83-dev, - libboost-timer1.83-dev, + libboost-atomic-dev, + libboost-chrono-dev, + libboost-context-dev, + libboost-coroutine-dev, + libboost-date-time-dev, + libboost-filesystem-dev, + libboost-iostreams-dev, + libboost-program-options-dev, + libboost-python-dev, + libboost-random-dev, + libboost-regex-dev, + libboost-test-dev, + libboost-thread-dev, + libboost-timer-dev, libbz2-dev, libc-ares-dev, libcap-dev, diff --git a/debian/patches/0032-fix-ftbfs-with-boost-1.90.patch b/debian/patches/0032-fix-ftbfs-with-boost-1.90.patch new file mode 100644 index 0000000000..d3679ec86b --- /dev/null +++ b/debian/patches/0032-fix-ftbfs-with-boost-1.90.patch @@ -0,0 +1,604 @@ +From: Anton Gladky <[email protected]> +Date: Thu, 05 Jun 2026 06:00:00 +0000 +Subject: Fix FTBFS with Boost 1.90 API changes +Bug-Debian: https://bugs.debian.org/1136969 + +Index: ceph-18.2.8+ds/CMakeLists.txt +=================================================================== +--- ceph-18.2.8+ds.orig/CMakeLists.txt ++++ ceph-18.2.8+ds/CMakeLists.txt +@@ -639,8 +639,10 @@ set(HAVE_SEASTAR ${WITH_SEASTAR}) + option(WITH_SYSTEM_BOOST "require and build with system Boost" OFF) + + # Boost::thread depends on Boost::atomic, so list it explicitly. ++# Note: boost::system is header-only since Boost 1.74 and has no cmake ++# package in Boost 1.90+, so it is intentionally omitted from BOOST_COMPONENTS. + set(BOOST_COMPONENTS +- atomic chrono thread system regex random program_options date_time ++ atomic chrono thread regex random program_options date_time + iostreams context coroutine) + set(BOOST_HEADER_COMPONENTS container) + +@@ -671,6 +673,11 @@ if(WITH_SYSTEM_BOOST) + set(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib/${CMAKE_LIBRARY_ARCHITECTURE}") + endif() + find_package(Boost 1.79 COMPONENTS ${BOOST_COMPONENTS} REQUIRED) ++ # boost::system is header-only since Boost 1.74; provide a compatibility ++ # alias so existing target_link_libraries(... Boost::system ...) still work. ++ if(NOT TARGET Boost::system) ++ add_library(Boost::system ALIAS Boost::headers) ++ endif() + if(NOT ENABLE_SHARED) + set_property(TARGET Boost::iostreams APPEND PROPERTY + INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) +Index: ceph-18.2.8+ds/src/spawn/CMakeLists.txt +=================================================================== +--- ceph-18.2.8+ds.orig/src/spawn/CMakeLists.txt ++++ ceph-18.2.8+ds/src/spawn/CMakeLists.txt +@@ -6,13 +6,15 @@ set(CMAKE_CXX_EXTENSIONS OFF) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + + # requires boost 1.66, but may be provided by a parent project +-if(NOT Boost_FOUND OR NOT Boost_system_FOUND OR NOT Boost_context_FOUND OR Boost_VERSION VERSION_LESS 1.66.0) +- find_package(Boost 1.66 REQUIRED COMPONENTS system context) ++# Note: boost::system is header-only since Boost 1.74 and has no separate ++# cmake component in Boost 1.90+. ++if(NOT Boost_FOUND OR NOT Boost_context_FOUND OR Boost_VERSION VERSION_LESS 1.66.0) ++ find_package(Boost 1.66 REQUIRED COMPONENTS context) + endif() + + add_library(spawn INTERFACE) + target_include_directories(spawn INTERFACE include) +-target_link_libraries(spawn INTERFACE Boost::system Boost::context) ++target_link_libraries(spawn INTERFACE Boost::context) + + option(SPAWN_INSTALL "install spawn headers" ON) + if(SPAWN_INSTALL) +Index: ceph-18.2.8+ds/src/include/uuid.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/include/uuid.h ++++ ceph-18.2.8+ds/src/include/uuid.h +@@ -60,7 +60,7 @@ struct uuid_d { + } + + const char *bytes() const { +- return (const char*)uuid.data; ++ return reinterpret_cast<const char*>(uuid.data()); + } + + void encode(::ceph::buffer::list::contiguous_appender& p) const { +Index: ceph-18.2.8+ds/src/common/Graylog.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/common/Graylog.h ++++ ceph-18.2.8+ds/src/common/Graylog.h +@@ -66,7 +66,7 @@ class Graylog + std::string m_logger; + + boost::asio::ip::udp::endpoint m_endpoint; +- boost::asio::io_service m_io_service; ++ boost::asio::io_context m_io_service; + + std::unique_ptr<Formatter> m_formatter; + std::unique_ptr<Formatter> m_formatter_section; +Index: ceph-18.2.8+ds/src/common/Graylog.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/common/Graylog.cc ++++ ceph-18.2.8+ds/src/common/Graylog.cc +@@ -34,8 +34,7 @@ void Graylog::set_destination(const std: + { + try { + boost::asio::ip::udp::resolver resolver(m_io_service); +- boost::asio::ip::udp::resolver::query query(host, std::to_string(port)); +- m_endpoint = *resolver.resolve(query); ++ m_endpoint = resolver.resolve(host, std::to_string(port)).begin()->endpoint(); + m_log_dst_valid = true; + } catch (boost::system::system_error const& e) { + cerr << "Error resolving graylog destination: " << e.what() << std::endl; +Index: ceph-18.2.8+ds/src/common/TrackedOp.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/common/TrackedOp.h ++++ ceph-18.2.8+ds/src/common/TrackedOp.h +@@ -28,6 +28,13 @@ + class TrackedOp; + class OpHistory; + ++// Forward-declare these in the enclosing namespace so that ++// boost::intrusive_ptr<TrackedOp> can find them via regular lookup even when ++// TrackedOp is an incomplete type (needed with Boost >= 1.90 / C++20 where ++// the intrusive_ptr copy-constructor is constexpr and instantiated earlier). ++void intrusive_ptr_add_ref(TrackedOp *o); ++void intrusive_ptr_release(TrackedOp *o); ++ + typedef boost::intrusive_ptr<TrackedOp> TrackedOpRef; + + class OpHistoryServiceThread : public Thread +Index: ceph-18.2.8+ds/src/osdc/Objecter.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/osdc/Objecter.h ++++ ceph-18.2.8+ds/src/osdc/Objecter.h +@@ -2672,7 +2672,8 @@ private: + std::unique_lock l(rwlock); + if (osdmap->get_epoch()) { + l.unlock(); +- boost::asio::post(std::move(init.completion_handler)); ++ boost::asio::post(service.get_executor(), ++ std::move(init.completion_handler)); + } else { + waiting_for_map[0].emplace_back( + OpCompletion::create( +Index: ceph-18.2.8+ds/src/exporter/DaemonMetricCollector.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/exporter/DaemonMetricCollector.cc ++++ ceph-18.2.8+ds/src/exporter/DaemonMetricCollector.cc +@@ -37,7 +37,7 @@ void DaemonMetricCollector::request_loop + dump_asok_metrics(false, -1, true, dump_response, schema_response, true); + auto stats_period = g_conf().get_val<int64_t>("exporter_stats_period"); + // time to wait before sending requests again +- timer.expires_from_now(std::chrono::seconds(stats_period)); ++ timer.expires_after(std::chrono::seconds(stats_period)); + request_loop(timer); + }); + } +@@ -45,7 +45,7 @@ void DaemonMetricCollector::request_loop + void DaemonMetricCollector::main() { + // time to wait before sending requests again + +- boost::asio::io_service io; ++ boost::asio::io_context io; + boost::asio::steady_timer timer{io, std::chrono::seconds(0)}; + request_loop(timer); + io.run(); +Index: ceph-18.2.8+ds/src/rgw/driver/rados/rgw_notify.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/rgw/driver/rados/rgw_notify.cc ++++ ceph-18.2.8+ds/src/rgw/driver/rados/rgw_notify.cc +@@ -125,7 +125,7 @@ private: + if (pending_tokens == 0) { + return; + } +- timer.expires_from_now(infinite_duration); ++ timer.expires_after(infinite_duration); + boost::system::error_code ec; + timer.async_wait(yield[ec]); + ceph_assert(ec == boost::system::errc::operation_canceled); +@@ -202,7 +202,7 @@ private: + << ". error: " << ret << dendl; + } + Timer timer(io_context); +- timer.expires_from_now(std::chrono::seconds(reservations_cleanup_period_s)); ++ timer.expires_after(std::chrono::seconds(reservations_cleanup_period_s)); + boost::system::error_code ec; + timer.async_wait(yield[ec]); + } +@@ -223,7 +223,7 @@ private: + // if queue was empty the last time, sleep for idle timeout + if (is_idle) { + Timer timer(io_context); +- timer.expires_from_now(std::chrono::microseconds(queue_idle_sleep_us)); ++ timer.expires_after(std::chrono::microseconds(queue_idle_sleep_us)); + boost::system::error_code ec; + timer.async_wait(yield[ec]); + } +@@ -367,7 +367,7 @@ private: + const auto duration = (has_error ? + std::chrono::milliseconds(queues_update_retry_ms) : std::chrono::milliseconds(queues_update_period_ms)) + + std::chrono::milliseconds(duration_jitter(rnd_gen)); +- timer.expires_from_now(duration); ++ timer.expires_after(duration); + const auto tp = ceph::coarse_real_time::clock::to_time_t(ceph::coarse_real_time::clock::now() + duration); + ldpp_dout(this, 20) << "INFO: next queues processing will happen at: " << std::ctime(&tp) << dendl; + boost::system::error_code ec; +Index: ceph-18.2.8+ds/src/rgw/rgw_lua.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/rgw/rgw_lua.cc ++++ ceph-18.2.8+ds/src/rgw/rgw_lua.cc +@@ -8,7 +8,7 @@ + #include "rgw_lua.h" + #ifdef WITH_RADOSGW_LUA_PACKAGES + #include <filesystem> +-#include <boost/process.hpp> ++#include <boost/process/v1.hpp> + #endif + + #define dout_subsys ceph_subsys_rgw +@@ -95,7 +95,7 @@ int delete_script(const DoutPrefixProvid + + #ifdef WITH_RADOSGW_LUA_PACKAGES + +-namespace bp = boost::process; ++namespace bp = boost::process::v1; + + int add_package(const DoutPrefixProvider *dpp, rgw::sal::Driver* driver, optional_yield y, const std::string& package_name, bool allow_compilation) + { +@@ -145,7 +145,7 @@ int remove_package(const DoutPrefixProvi + return lua_mgr->remove_package(dpp, y, package_name); + } + +-namespace bp = boost::process; ++namespace bp = boost::process::v1; + + int list_packages(const DoutPrefixProvider *dpp, rgw::sal::Driver* driver, optional_yield y, packages_t& packages) + { +Index: ceph-18.2.8+ds/src/rgw/driver/rados/rgw_sal_rados.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/rgw/driver/rados/rgw_sal_rados.cc ++++ ceph-18.2.8+ds/src/rgw/driver/rados/rgw_sal_rados.cc +@@ -20,7 +20,7 @@ + #include <unistd.h> + #include <sstream> + #include <boost/algorithm/string.hpp> +-#include <boost/process.hpp> ++#include <boost/process/v1.hpp> + + #include "common/Clock.h" + #include "common/errno.h" +Index: ceph-18.2.8+ds/src/test/librados/asio.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/librados/asio.cc ++++ ceph-18.2.8+ds/src/test/librados/asio.cc +@@ -75,7 +75,7 @@ using read_result = std::tuple<version_t + + TEST_F(AsioRados, AsyncReadCallback) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + auto success_cb = [&] (error_code ec, version_t ver, bufferlist bl) { + EXPECT_FALSE(ec); +@@ -96,7 +96,7 @@ TEST_F(AsioRados, AsyncReadCallback) + + TEST_F(AsioRados, AsyncReadFuture) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + auto f1 = librados::async_read(service, io, "exist", 256, + 0, boost::asio::use_future); +@@ -114,7 +114,7 @@ TEST_F(AsioRados, AsyncReadFuture) + + TEST_F(AsioRados, AsyncReadYield) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + auto success_cr = [&] (spawn::yield_context yield) { + error_code ec; +@@ -141,7 +141,7 @@ TEST_F(AsioRados, AsyncReadYield) + + TEST_F(AsioRados, AsyncWriteCallback) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +@@ -165,7 +165,7 @@ TEST_F(AsioRados, AsyncWriteCallback) + + TEST_F(AsioRados, AsyncWriteFuture) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +@@ -183,7 +183,7 @@ TEST_F(AsioRados, AsyncWriteFuture) + + TEST_F(AsioRados, AsyncWriteYield) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +@@ -212,7 +212,7 @@ TEST_F(AsioRados, AsyncWriteYield) + + TEST_F(AsioRados, AsyncReadOperationCallback) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + { + librados::ObjectReadOperation op; + op.read(0, 0, nullptr, nullptr); +@@ -238,7 +238,7 @@ TEST_F(AsioRados, AsyncReadOperationCall + + TEST_F(AsioRados, AsyncReadOperationFuture) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + std::future<read_result> f1; + { + librados::ObjectReadOperation op; +@@ -264,7 +264,7 @@ TEST_F(AsioRados, AsyncReadOperationFutu + + TEST_F(AsioRados, AsyncReadOperationYield) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + auto success_cr = [&] (spawn::yield_context yield) { + librados::ObjectReadOperation op; +@@ -295,7 +295,7 @@ TEST_F(AsioRados, AsyncReadOperationYiel + + TEST_F(AsioRados, AsyncWriteOperationCallback) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +@@ -323,7 +323,7 @@ TEST_F(AsioRados, AsyncWriteOperationCal + + TEST_F(AsioRados, AsyncWriteOperationFuture) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +@@ -350,7 +350,7 @@ TEST_F(AsioRados, AsyncWriteOperationFut + + TEST_F(AsioRados, AsyncWriteOperationYield) + { +- boost::asio::io_service service; ++ boost::asio::io_context service; + + bufferlist bl; + bl.append("hello"); +Index: ceph-18.2.8+ds/src/test/neorados/completions.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/neorados/completions.cc ++++ ceph-18.2.8+ds/src/test/neorados/completions.cc +@@ -9,11 +9,11 @@ boost::asio::io_context c; + + void nested_cb() { + if (++completed < max_completions) +- c.post(&nested_cb); ++ boost::asio::post(c, &nested_cb); + } + + int main(void) { +- c.post(&nested_cb); ++ boost::asio::post(c, &nested_cb); + c.run(); + assert(completed == max_completions); + return 0; +Index: ceph-18.2.8+ds/src/librbd/migration/HttpClient.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/librbd/migration/HttpClient.cc ++++ ceph-18.2.8+ds/src/librbd/migration/HttpClient.cc +@@ -679,10 +679,11 @@ protected: + auto cct = http_client->m_cct; + ldout(cct, 15) << dendl; + +- // ssl_stream object can't be reused after shut down -- move-in +- // a freshly constructed instance +- m_stream = boost::beast::ssl_stream<boost::beast::tcp_stream>( +- http_client->m_strand, http_client->m_ssl_context); ++ // ssl_stream object can't be reused after shut down -- destroy and ++ // reconstruct in-place (move assignment is deleted in Boost >= 1.90) ++ using stream_type = boost::beast::ssl_stream<boost::beast::tcp_stream>; ++ m_stream.~stream_type(); ++ new (&m_stream) stream_type(http_client->m_strand, http_client->m_ssl_context); + } + + private: +Index: ceph-18.2.8+ds/src/test/mon/test_mon_memory_target.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/mon/test_mon_memory_target.cc ++++ ceph-18.2.8+ds/src/test/mon/test_mon_memory_target.cc +@@ -6,10 +6,10 @@ + #include <regex> + #include <system_error> + +-#include <boost/process.hpp> ++#include <boost/process/v1.hpp> + #include <boost/tokenizer.hpp> + +-namespace bp = boost::process; ++namespace bp = boost::process::v1; + using namespace std; + + int main(int argc, char** argv) +Index: ceph-18.2.8+ds/src/mgr/PyModule.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/mgr/PyModule.cc ++++ ceph-18.2.8+ds/src/mgr/PyModule.cc +@@ -11,8 +11,24 @@ + * Foundation. See file COPYING. + */ + ++// Python.h (via BaseMgrModule.h) must come before boost/python and ceph headers ++// that include ceph_assert. boost/python must come before ceph headers that pull ++// in boost/variant (via ceph_json.h), because boost/mpl PP iteration state from ++// boost/variant conflicts with boost/python's MPL usage (GCC>=15, Boost>=1.90). + #include "BaseMgrModule.h" + #include "BaseMgrStandbyModule.h" ++ ++// Courtesy of http://stackoverflow.com/questions/1418015/how-to-get-python-exception-text ++#define BOOST_BIND_GLOBAL_PLACEHOLDERS ++// Boost apparently can't be bothered to fix its own usage of its own ++// deprecated features. ++#include <boost/python/extract.hpp> ++#include <boost/python/import.hpp> ++#include <boost/python/object.hpp> ++#undef BOOST_BIND_GLOBAL_PLACEHOLDERS ++#include <boost/algorithm/string/predicate.hpp> ++#include "include/ceph_assert.h" // boost clobbers this ++ + #include "PyOSDMap.h" + #include "MgrContext.h" + #include "PyUtil.h" +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheClient.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheClient.cc ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheClient.cc +@@ -16,7 +16,7 @@ namespace ceph { + namespace immutable_obj_cache { + + CacheClient::CacheClient(const std::string& file, CephContext* ceph_ctx) +- : m_cct(ceph_ctx), m_io_service_work(m_io_service), ++ : m_cct(ceph_ctx), m_io_service_work(m_io_service.get_executor()), + m_dm_socket(m_io_service), m_ep(stream_protocol::endpoint(file)), + m_io_thread(nullptr), m_session_work(false), m_writing(false), + m_reading(false), m_sequence_id(0) { +@@ -25,8 +25,8 @@ namespace immutable_obj_cache { + "immutable_object_cache_client_dedicated_thread_num"); + + if (m_worker_thread_num != 0) { +- m_worker = new boost::asio::io_service(); +- m_worker_io_service_work = new boost::asio::io_service::work(*m_worker); ++ m_worker = new boost::asio::io_context(); ++ m_worker_io_service_work = new boost::asio::executor_work_guard<boost::asio::io_context::executor_type>(m_worker->get_executor()); + for (uint64_t i = 0; i < m_worker_thread_num; i++) { + std::thread* thd = new std::thread([this](){m_worker->run();}); + m_worker_threads.push_back(thd); +@@ -295,7 +295,7 @@ namespace immutable_obj_cache { + }); + + if (m_worker_thread_num != 0) { +- m_worker->post([process_reply]() { ++ boost::asio::post(*m_worker, [process_reply]() { + process_reply->complete(true); + }); + } else { +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheClient.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheClient.h ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheClient.h +@@ -57,17 +57,17 @@ class CacheClient { + + private: + CephContext* m_cct; +- boost::asio::io_service m_io_service; +- boost::asio::io_service::work m_io_service_work; ++ boost::asio::io_context m_io_service; ++ boost::asio::executor_work_guard<boost::asio::io_context::executor_type> m_io_service_work; + stream_protocol::socket m_dm_socket; + stream_protocol::endpoint m_ep; + std::shared_ptr<std::thread> m_io_thread; + std::atomic<bool> m_session_work; + + uint64_t m_worker_thread_num; +- boost::asio::io_service* m_worker; ++ boost::asio::io_context* m_worker; + std::vector<std::thread*> m_worker_threads; +- boost::asio::io_service::work* m_worker_io_service_work; ++ boost::asio::executor_work_guard<boost::asio::io_context::executor_type>* m_worker_io_service_work; + + std::atomic<bool> m_writing; + std::atomic<bool> m_reading; +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheServer.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheServer.cc ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheServer.cc +@@ -33,10 +33,10 @@ int CacheServer::run() { + return ret; + } + +- boost::system::error_code ec; +- ret = m_io_service.run(ec); +- if (ec) { +- ldout(cct, 1) << "m_io_service run fails: " << ec.message() << dendl; ++ try { ++ ret = m_io_service.run(); ++ } catch (const boost::system::system_error& e) { ++ ldout(cct, 1) << "m_io_service run fails: " << e.code().message() << dendl; + return -1; + } + return 0; +@@ -64,7 +64,7 @@ int CacheServer::start_accept() { + return -ec.value(); + } + +- m_acceptor.listen(boost::asio::socket_base::max_connections, ec); ++ m_acceptor.listen(boost::asio::socket_base::max_listen_connections, ec); + if (ec) { + lderr(cct) << "failed to listen on domain socket: " << ec.message() + << dendl; +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheServer.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheServer.h ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheServer.h +@@ -33,7 +33,7 @@ class CacheServer { + + private: + CephContext* cct; +- boost::asio::io_service m_io_service; ++ boost::asio::io_context m_io_service; + ProcessMsg m_server_process_msg; + stream_protocol::endpoint m_local_path; + stream_protocol::acceptor m_acceptor; +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheSession.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheSession.cc ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheSession.cc +@@ -16,10 +16,10 @@ + namespace ceph { + namespace immutable_obj_cache { + +-CacheSession::CacheSession(io_service& io_service, ++CacheSession::CacheSession(io_context& io_context, + ProcessMsg processmsg, + CephContext* cct) +- : m_dm_socket(io_service), ++ : m_dm_socket(io_context), + m_server_process_msg(processmsg), m_cct(cct) { + m_bp_header = buffer::create(get_header_size()); + } +Index: ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheSession.h +=================================================================== +--- ceph-18.2.8+ds.orig/src/tools/immutable_object_cache/CacheSession.h ++++ ceph-18.2.8+ds/src/tools/immutable_object_cache/CacheSession.h +@@ -11,14 +11,14 @@ + #include "SocketCommon.h" + + using boost::asio::local::stream_protocol; +-using boost::asio::io_service; ++using boost::asio::io_context; + + namespace ceph { + namespace immutable_obj_cache { + + class CacheSession : public std::enable_shared_from_this<CacheSession> { + public: +- CacheSession(io_service& io_service, ProcessMsg process_msg, ++ CacheSession(io_context& io_context, ProcessMsg process_msg, + CephContext* ctx); + ~CacheSession(); + stream_protocol::socket& socket(); +Index: ceph-18.2.8+ds/src/test/objectstore/Allocator_bench.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/objectstore/Allocator_bench.cc ++++ ceph-18.2.8+ds/src/test/objectstore/Allocator_bench.cc +@@ -14,6 +14,7 @@ + #include "include/Context.h" + #include "os/bluestore/Allocator.h" + ++#include <boost/random/mersenne_twister.hpp> + #include <boost/random/uniform_int.hpp> + typedef boost::mt11213b gen_type; + +Index: ceph-18.2.8+ds/src/test/objectstore/Allocator_aging_fragmentation.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/objectstore/Allocator_aging_fragmentation.cc ++++ ceph-18.2.8+ds/src/test/objectstore/Allocator_aging_fragmentation.cc +@@ -18,6 +18,7 @@ + #include "include/Context.h" + #include "os/bluestore/Allocator.h" + ++#include <boost/random/mersenne_twister.hpp> + #include <boost/random/uniform_int.hpp> + + typedef boost::mt11213b gen_type; +Index: ceph-18.2.8+ds/src/test/objectstore/Allocator_test.cc +=================================================================== +--- ceph-18.2.8+ds.orig/src/test/objectstore/Allocator_test.cc ++++ ceph-18.2.8+ds/src/test/objectstore/Allocator_test.cc +@@ -13,6 +13,7 @@ + #include "include/stringify.h" + #include "include/Context.h" + #include "os/bluestore/Allocator.h" ++#include <boost/random/mersenne_twister.hpp> + + using namespace std; + diff --git a/debian/patches/series b/debian/patches/series index dc53042d74..0dc6f885e9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -41,3 +41,4 @@ py313-compat/0009-mgr-add-site-package-paths-in-PyModuleRegistry.patch py313-compat/0010-ceph-volume-fix-importlib.metadata-compat.patch 0001-build-Include-cstdint-more-places.patch 0001-Check-if-HTTP_X_AMZ_COPY_SOURCE-header-is-empty.patch +0032-fix-ftbfs-with-boost-1.90.patch

