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

Reply via email to