From 32ca692abd8d1036c3ff923b78de2cfce5983646 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 7 May 2025 08:42:52 +0800 Subject: [PATCH] librbd, tools: migrate from boost::variant to std::variant Complete migration started in commit 017f333, replacing boost::variant with std::variant throughout the librbd codebase. This change is part of our ongoing effort to reduce third-party dependencies by leveraging C++ standard library alternatives where possible. Benefits include: - Improved code readability and maintainability - Reduced external dependency surface - More consistent API usage with other components Implementation note: Unlike Boost.variant, std::variant lacks built-in operator<< support. This commit implements the necessary operator<< for AttributeValue, our specific std::variant instantiation, to preserve the existing behavior. Also, despite that `apply_visit()` calls can be replaced with `visit()` without being qualified with `std::` because of ADL, we are taking this opportunity to adding the `std::` prefix for better readability. Signed-off-by: Kefu Chai (cherry picked from commit 786ea203a28374d8d9bf0b8cc9c3c43dcf686328) --- src/librbd/MirroringWatcher.cc | 4 +-- src/librbd/TrashWatcher.cc | 2 +- src/librbd/WatchNotifyTypes.h | 1 - src/librbd/api/Snapshot.cc | 2 -- src/librbd/io/ImageDispatchSpec.cc | 1 - src/librbd/io/ObjectDispatchSpec.cc | 1 - src/librbd/io/ObjectDispatchSpec.h | 16 +++++------ src/librbd/io/ObjectDispatcher.cc | 5 ++-- src/librbd/io/ReadResult.cc | 15 ++++------ src/librbd/io/ReadResult.h | 17 +++++------ src/librbd/journal/Replay.h | 3 +- src/librbd/mirroring_watcher/Types.cc | 8 +++--- src/librbd/mirroring_watcher/Types.h | 8 +++--- src/librbd/trash_watcher/Types.cc | 8 +++--- src/librbd/trash_watcher/Types.h | 8 +++--- src/rbd_replay/ActionTypes.cc | 13 ++++----- src/rbd_replay/ActionTypes.h | 28 +++++++++---------- src/rbd_replay/BoundedBuffer.hpp | 1 + src/rbd_replay/actions.cc | 4 +-- .../crypto/test_mock_CryptoObjectDispatch.cc | 6 ++-- src/test/librbd/io/test_mock_ImageRequest.cc | 4 +-- .../librbd/operation/test_mock_TrimRequest.cc | 6 ++-- src/tools/rbd_mirror/InstanceWatcher.cc | 4 +-- src/tools/rbd_mirror/LeaderWatcher.cc | 2 +- src/tools/rbd_mirror/ServiceDaemon.cc | 13 +++++++-- src/tools/rbd_mirror/image_map/Types.cc | 16 +++++------ src/tools/rbd_mirror/image_map/Types.h | 6 ++-- .../journal/EventPreprocessor.h | 3 +- .../rbd_mirror/instance_watcher/Types.cc | 12 ++++---- src/tools/rbd_mirror/instance_watcher/Types.h | 14 +++++----- src/tools/rbd_mirror/leader_watcher/Types.cc | 12 ++++---- src/tools/rbd_mirror/leader_watcher/Types.h | 10 +++---- src/tools/rbd_mirror/service_daemon/Types.h | 4 +-- 33 files changed, 123 insertions(+), 134 deletions(-) diff --git a/src/librbd/MirroringWatcher.cc b/src/librbd/MirroringWatcher.cc index c0cda5fa16a9f..dc08fa66b2aed 100644 --- a/src/librbd/MirroringWatcher.cc +++ b/src/librbd/MirroringWatcher.cc @@ -108,8 +108,8 @@ void MirroringWatcher::handle_notify(uint64_t notify_id, uint64_t handle, return; } - apply_visitor(watcher::util::HandlePayloadVisitor>( - this, notify_id, handle), notify_message.payload); + std::visit(watcher::util::HandlePayloadVisitor>( + this, notify_id, handle), notify_message.payload); } template diff --git a/src/librbd/TrashWatcher.cc b/src/librbd/TrashWatcher.cc index 75d5882054858..021d5a9b2ae1a 100644 --- a/src/librbd/TrashWatcher.cc +++ b/src/librbd/TrashWatcher.cc @@ -83,7 +83,7 @@ void TrashWatcher::handle_notify(uint64_t notify_id, uint64_t handle, return; } - apply_visitor(watcher::util::HandlePayloadVisitor>( + std::visit(watcher::util::HandlePayloadVisitor>( this, notify_id, handle), notify_message.payload); } diff --git a/src/librbd/WatchNotifyTypes.h b/src/librbd/WatchNotifyTypes.h index 4fad31ffac93d..c2815b22cb921 100644 --- a/src/librbd/WatchNotifyTypes.h +++ b/src/librbd/WatchNotifyTypes.h @@ -12,7 +12,6 @@ #include #include #include -#include namespace ceph { class Formatter; diff --git a/src/librbd/api/Snapshot.cc b/src/librbd/api/Snapshot.cc index 044237484a926..2921a0857a842 100644 --- a/src/librbd/api/Snapshot.cc +++ b/src/librbd/api/Snapshot.cc @@ -13,8 +13,6 @@ #include "include/Context.h" #include "common/Cond.h" -#include - #include // for std::shared_lock #define dout_subsys ceph_subsys_rbd diff --git a/src/librbd/io/ImageDispatchSpec.cc b/src/librbd/io/ImageDispatchSpec.cc index 95d8224ae904a..81c4272a85547 100644 --- a/src/librbd/io/ImageDispatchSpec.cc +++ b/src/librbd/io/ImageDispatchSpec.cc @@ -6,7 +6,6 @@ #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageRequest.h" #include "librbd/io/ImageDispatcherInterface.h" -#include namespace librbd { namespace io { diff --git a/src/librbd/io/ObjectDispatchSpec.cc b/src/librbd/io/ObjectDispatchSpec.cc index 3efff9774f087..52066f127f882 100644 --- a/src/librbd/io/ObjectDispatchSpec.cc +++ b/src/librbd/io/ObjectDispatchSpec.cc @@ -4,7 +4,6 @@ #include "librbd/io/ObjectDispatchSpec.h" #include "include/Context.h" #include "librbd/io/ObjectDispatcherInterface.h" -#include namespace librbd { namespace io { diff --git a/src/librbd/io/ObjectDispatchSpec.h b/src/librbd/io/ObjectDispatchSpec.h index a0d4b49a46345..9a9c6aabdf644 100644 --- a/src/librbd/io/ObjectDispatchSpec.h +++ b/src/librbd/io/ObjectDispatchSpec.h @@ -11,7 +11,7 @@ #include "common/zipkin_trace.h" #include "librbd/Types.h" #include "librbd/io/Types.h" -#include +#include namespace librbd { namespace io { @@ -144,13 +144,13 @@ public: } }; - typedef boost::variant Request; + typedef std::variant Request; C_Dispatcher dispatcher_ctx; diff --git a/src/librbd/io/ObjectDispatcher.cc b/src/librbd/io/ObjectDispatcher.cc index 5852fd925926e..17780e16c22b1 100644 --- a/src/librbd/io/ObjectDispatcher.cc +++ b/src/librbd/io/ObjectDispatcher.cc @@ -10,7 +10,6 @@ #include "librbd/asio/ContextWQ.h" #include "librbd/io/ObjectDispatch.h" #include "librbd/io/ObjectDispatchSpec.h" -#include #include // for std::shared_lock @@ -35,7 +34,7 @@ struct ObjectDispatcher::C_ResetExistenceCache : public C_LayerIterator { }; template -struct ObjectDispatcher::SendVisitor : public boost::static_visitor { +struct ObjectDispatcher::SendVisitor { ObjectDispatchInterface* object_dispatch; ObjectDispatchSpec* object_dispatch_spec; @@ -199,7 +198,7 @@ template bool ObjectDispatcher::send_dispatch( ObjectDispatchInterface* object_dispatch, ObjectDispatchSpec* object_dispatch_spec) { - return boost::apply_visitor( + return std::visit( SendVisitor{object_dispatch, object_dispatch_spec}, object_dispatch_spec->request); } diff --git a/src/librbd/io/ReadResult.cc b/src/librbd/io/ReadResult.cc index 375c34277b00c..1da8f6af9c789 100644 --- a/src/librbd/io/ReadResult.cc +++ b/src/librbd/io/ReadResult.cc @@ -6,8 +6,6 @@ #include "common/dout.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/Utils.h" -#include -#include #define dout_subsys ceph_subsys_rbd #undef dout_prefix @@ -17,7 +15,7 @@ namespace librbd { namespace io { -struct ReadResult::SetImageExtentsVisitor : public boost::static_visitor { +struct ReadResult::SetImageExtentsVisitor { Extents image_extents; explicit SetImageExtentsVisitor(const Extents& image_extents) @@ -40,7 +38,7 @@ struct ReadResult::SetImageExtentsVisitor : public boost::static_visitor { } }; -struct ReadResult::AssembleResultVisitor : public boost::static_visitor { +struct ReadResult::AssembleResultVisitor { CephContext *cct; Striper::StripedReadResult &destriper; @@ -48,7 +46,7 @@ struct ReadResult::AssembleResultVisitor : public boost::static_visitor { : cct(cct), destriper(destriper) { } - void operator()(Empty &empty) const { + void operator()(std::monostate &empty) const { ldout(cct, 20) << "dropping read result" << dendl; } @@ -230,9 +228,6 @@ void ReadResult::C_ObjectReadMergedExtents::finish(int r) { on_finish->complete(r); } -ReadResult::ReadResult() : m_buffer(Empty()) { -} - ReadResult::ReadResult(char *buf, size_t buf_len) : m_buffer(Linear(buf, buf_len)) { } @@ -250,11 +245,11 @@ ReadResult::ReadResult(Extents* extent_map, ceph::bufferlist* bl) } void ReadResult::set_image_extents(const Extents& image_extents) { - boost::apply_visitor(SetImageExtentsVisitor(image_extents), m_buffer); + std::visit(SetImageExtentsVisitor(image_extents), m_buffer); } void ReadResult::assemble_result(CephContext *cct) { - boost::apply_visitor(AssembleResultVisitor(cct, m_destriper), m_buffer); + std::visit(AssembleResultVisitor(cct, m_destriper), m_buffer); } } // namespace io diff --git a/src/librbd/io/ReadResult.h b/src/librbd/io/ReadResult.h index 11b8c9b72cb01..8e644fb1f96c5 100644 --- a/src/librbd/io/ReadResult.h +++ b/src/librbd/io/ReadResult.h @@ -11,7 +11,7 @@ #include "librbd/io/Types.h" #include "osdc/Striper.h" #include -#include +#include namespace librbd { @@ -60,7 +60,7 @@ public: void finish(int r) override; }; - ReadResult(); + ReadResult() = default; ReadResult(char *buf, size_t buf_len); ReadResult(const struct iovec *iov, int iov_count); ReadResult(ceph::bufferlist *bl); @@ -71,9 +71,6 @@ public: void assemble_result(CephContext *cct); private: - struct Empty { - }; - struct Linear { char *buf; size_t buf_len; @@ -109,11 +106,11 @@ private: } }; - typedef boost::variant Buffer; + typedef std::variant Buffer; struct SetImageExtentsVisitor; struct AssembleResultVisitor; diff --git a/src/librbd/journal/Replay.h b/src/librbd/journal/Replay.h index 038601833cd97..f07880d310137 100644 --- a/src/librbd/journal/Replay.h +++ b/src/librbd/journal/Replay.h @@ -10,7 +10,6 @@ #include "common/ceph_mutex.h" #include "librbd/io/Types.h" #include "librbd/journal/Types.h" -#include #include #include #include @@ -102,7 +101,7 @@ private: } }; - struct EventVisitor : public boost::static_visitor { + struct EventVisitor { Replay *replay; Context *on_ready; Context *on_safe; diff --git a/src/librbd/mirroring_watcher/Types.cc b/src/librbd/mirroring_watcher/Types.cc index 3226b6352f79e..916c62b2c835b 100644 --- a/src/librbd/mirroring_watcher/Types.cc +++ b/src/librbd/mirroring_watcher/Types.cc @@ -12,7 +12,7 @@ namespace mirroring_watcher { namespace { -class DumpPayloadVisitor : public boost::static_visitor { +class DumpPayloadVisitor { public: explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {} @@ -80,7 +80,7 @@ void UnknownPayload::dump(Formatter *f) const { void NotifyMessage::encode(bufferlist& bl) const { ENCODE_START(1, 1, bl); - boost::apply_visitor(watcher::util::EncodePayloadVisitor(bl), payload); + std::visit(watcher::util::EncodePayloadVisitor(bl), payload); ENCODE_FINISH(bl); } @@ -103,12 +103,12 @@ void NotifyMessage::decode(bufferlist::const_iterator& iter) { break; } - apply_visitor(watcher::util::DecodePayloadVisitor(struct_v, iter), payload); + std::visit(watcher::util::DecodePayloadVisitor(struct_v, iter), payload); DECODE_FINISH(iter); } void NotifyMessage::dump(Formatter *f) const { - apply_visitor(DumpPayloadVisitor(f), payload); + std::visit(DumpPayloadVisitor(f), payload); } void NotifyMessage::generate_test_instances(std::list &o) { diff --git a/src/librbd/mirroring_watcher/Types.h b/src/librbd/mirroring_watcher/Types.h index 1e096a9d384c1..784151a6808d2 100644 --- a/src/librbd/mirroring_watcher/Types.h +++ b/src/librbd/mirroring_watcher/Types.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace ceph { class Formatter; } @@ -72,9 +72,9 @@ struct UnknownPayload { void dump(Formatter *f) const; }; -typedef boost::variant Payload; +typedef std::variant Payload; struct NotifyMessage { NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) { diff --git a/src/librbd/trash_watcher/Types.cc b/src/librbd/trash_watcher/Types.cc index c95ea223b936e..409d518972ea4 100644 --- a/src/librbd/trash_watcher/Types.cc +++ b/src/librbd/trash_watcher/Types.cc @@ -12,7 +12,7 @@ namespace trash_watcher { namespace { -class DumpPayloadVisitor : public boost::static_visitor { +class DumpPayloadVisitor { public: explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {} @@ -74,7 +74,7 @@ void UnknownPayload::dump(Formatter *f) const { void NotifyMessage::encode(bufferlist& bl) const { ENCODE_START(1, 1, bl); - boost::apply_visitor(watcher::util::EncodePayloadVisitor(bl), payload); + std::visit(watcher::util::EncodePayloadVisitor(bl), payload); ENCODE_FINISH(bl); } @@ -97,12 +97,12 @@ void NotifyMessage::decode(bufferlist::const_iterator& iter) { break; } - apply_visitor(watcher::util::DecodePayloadVisitor(struct_v, iter), payload); + std::visit(watcher::util::DecodePayloadVisitor(struct_v, iter), payload); DECODE_FINISH(iter); } void NotifyMessage::dump(Formatter *f) const { - apply_visitor(DumpPayloadVisitor(f), payload); + std::visit(DumpPayloadVisitor(f), payload); } void NotifyMessage::generate_test_instances(std::list &o) { diff --git a/src/librbd/trash_watcher/Types.h b/src/librbd/trash_watcher/Types.h index 22c2b4375dcaa..ea5dad9b3be52 100644 --- a/src/librbd/trash_watcher/Types.h +++ b/src/librbd/trash_watcher/Types.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace librbd { @@ -67,9 +67,9 @@ struct UnknownPayload { void dump(Formatter *f) const; }; -typedef boost::variant Payload; +typedef std::variant Payload; struct NotifyMessage { NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) { diff --git a/src/rbd_replay/ActionTypes.cc b/src/rbd_replay/ActionTypes.cc index e86aa6479c2d4..8a93672f3c7d8 100644 --- a/src/rbd_replay/ActionTypes.cc +++ b/src/rbd_replay/ActionTypes.cc @@ -7,7 +7,6 @@ #include "include/stringify.h" #include "common/Formatter.h" #include -#include namespace rbd_replay { namespace action { @@ -35,7 +34,7 @@ void decode_big_endian_string(std::string &str, bufferlist::const_iterator &it) #endif } -class EncodeVisitor : public boost::static_visitor { +class EncodeVisitor { public: explicit EncodeVisitor(bufferlist &bl) : m_bl(bl) { } @@ -50,7 +49,7 @@ private: bufferlist &m_bl; }; -class DecodeVisitor : public boost::static_visitor { +class DecodeVisitor { public: DecodeVisitor(__u8 version, bufferlist::const_iterator &iter) : m_version(version), m_iter(iter) { @@ -65,7 +64,7 @@ private: bufferlist::const_iterator &m_iter; }; -class DumpVisitor : public boost::static_visitor { +class DumpVisitor { public: explicit DumpVisitor(Formatter *formatter) : m_formatter(formatter) {} @@ -270,7 +269,7 @@ void UnknownAction::dump(Formatter *f) const { void ActionEntry::encode(bufferlist &bl) const { ENCODE_START(1, 1, bl); - boost::apply_visitor(EncodeVisitor(bl), action); + std::visit(EncodeVisitor(bl), action); ENCODE_FINISH(bl); } @@ -329,11 +328,11 @@ void ActionEntry::decode_versioned(__u8 version, bufferlist::const_iterator &it) break; } - boost::apply_visitor(DecodeVisitor(version, it), action); + std::visit(DecodeVisitor(version, it), action); } void ActionEntry::dump(Formatter *f) const { - boost::apply_visitor(DumpVisitor(f), action); + std::visit(DumpVisitor(f), action); } void ActionEntry::generate_test_instances(std::list &o) { diff --git a/src/rbd_replay/ActionTypes.h b/src/rbd_replay/ActionTypes.h index 19e1bb8fabfef..0d7511cc444a0 100644 --- a/src/rbd_replay/ActionTypes.h +++ b/src/rbd_replay/ActionTypes.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace ceph { class Formatter; } @@ -294,19 +294,19 @@ struct UnknownAction { void dump(Formatter *f) const; }; -typedef boost::variant Action; +typedef std::variant Action; class ActionEntry { public: diff --git a/src/rbd_replay/BoundedBuffer.hpp b/src/rbd_replay/BoundedBuffer.hpp index 00fb1cb32344d..6185d26663e17 100644 --- a/src/rbd_replay/BoundedBuffer.hpp +++ b/src/rbd_replay/BoundedBuffer.hpp @@ -5,6 +5,7 @@ #define _INCLUDED_BOUNDED_BUFFER_HPP #include +#include #include #include #include diff --git a/src/rbd_replay/actions.cc b/src/rbd_replay/actions.cc index 8aae77c09651b..e67911bc6dc9d 100644 --- a/src/rbd_replay/actions.cc +++ b/src/rbd_replay/actions.cc @@ -33,7 +33,7 @@ std::string create_fake_data() { return std::string(data, sizeof(data)); } -struct ConstructVisitor : public boost::static_visitor { +struct ConstructVisitor { inline Action::ptr operator()(const action::StartThreadAction &action) const { return Action::ptr(new StartThreadAction(action)); } @@ -94,7 +94,7 @@ std::ostream& rbd_replay::operator<<(std::ostream& o, const Action& a) { } Action::ptr Action::construct(const action::ActionEntry &action_entry) { - return boost::apply_visitor(ConstructVisitor(), action_entry.action); + return std::visit(ConstructVisitor(), action_entry.action); } void StartThreadAction::perform(ActionCtx &ctx) { diff --git a/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc b/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc index 0c69f3f1d5d2c..3c4ce8f8f940c 100644 --- a/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc +++ b/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc @@ -157,7 +157,7 @@ struct TestMockCryptoCryptoObjectDispatch : public TestMockFixture { EXPECT_CALL(*mock_image_ctx->io_object_dispatcher, send(_)) .WillOnce(Invoke([this, extents, version](io::ObjectDispatchSpec* spec) { - auto* read = boost::get( + auto* read = std::get_if( &spec->request); ASSERT_TRUE(read != nullptr); @@ -193,7 +193,7 @@ struct TestMockCryptoCryptoObjectDispatch : public TestMockFixture { EXPECT_CALL(*mock_image_ctx->io_object_dispatcher, send(_)) .WillOnce(Invoke([this, object_off, data, write_flags, assert_version](io::ObjectDispatchSpec* spec) { - auto* write = boost::get( + auto* write = std::get_if( &spec->request); ASSERT_TRUE(write != nullptr); @@ -210,7 +210,7 @@ struct TestMockCryptoCryptoObjectDispatch : public TestMockFixture { void expect_object_write_same() { EXPECT_CALL(*mock_image_ctx->io_object_dispatcher, send(_)) .WillOnce(Invoke([this](io::ObjectDispatchSpec* spec) { - auto* write_same = boost::get< + auto* write_same = std::get_if< io::ObjectDispatchSpec::WriteSameRequest>( &spec->request); ASSERT_TRUE(write_same != nullptr); diff --git a/src/test/librbd/io/test_mock_ImageRequest.cc b/src/test/librbd/io/test_mock_ImageRequest.cc index b68009304d55d..9c31f49666217 100644 --- a/src/test/librbd/io/test_mock_ImageRequest.cc +++ b/src/test/librbd/io/test_mock_ImageRequest.cc @@ -137,7 +137,7 @@ struct TestMockIoImageRequest : public TestMockFixture { EXPECT_CALL(*mock_image_ctx.io_object_dispatcher, send(_)) .WillOnce(Invoke([&mock_image_ctx, object_no, offset, length, r] (ObjectDispatchSpec* spec) { - auto* discard_spec = boost::get(&spec->request); + auto* discard_spec = std::get_if(&spec->request); ASSERT_TRUE(discard_spec != nullptr); ASSERT_EQ(object_no, discard_spec->object_no); ASSERT_EQ(offset, discard_spec->object_off); @@ -165,7 +165,7 @@ struct TestMockIoImageRequest : public TestMockFixture { .WillOnce( Invoke([&mock_image_ctx, object_no, snap_delta, r] (ObjectDispatchSpec* spec) { - auto request = boost::get< + auto request = std::get_if< librbd::io::ObjectDispatchSpec::ListSnapsRequest>( &spec->request); ASSERT_TRUE(request != nullptr); diff --git a/src/test/librbd/operation/test_mock_TrimRequest.cc b/src/test/librbd/operation/test_mock_TrimRequest.cc index aebd2117daeea..72e5f2397da18 100644 --- a/src/test/librbd/operation/test_mock_TrimRequest.cc +++ b/src/test/librbd/operation/test_mock_TrimRequest.cc @@ -14,7 +14,6 @@ #include "librbd/operation/TrimRequest.h" #include "gmock/gmock.h" #include "gtest/gtest.h" -#include #include // for std::shared_lock @@ -69,8 +68,7 @@ struct AsyncRequest { namespace io { -struct DiscardVisitor - : public boost::static_visitor { +struct DiscardVisitor { ObjectDispatchSpec::DiscardRequest* operator()(ObjectDispatchSpec::DiscardRequest& discard) const { return &discard; @@ -196,7 +194,7 @@ public: EXPECT_CALL(*mock_image_ctx.io_object_dispatcher, send(_)) .WillOnce(Invoke([&mock_image_ctx, offset, length, update_object_map, r] (io::ObjectDispatchSpec* spec) { - auto discard = boost::apply_visitor(io::DiscardVisitor(), spec->request); + auto discard = std::visit(io::DiscardVisitor(), spec->request); ASSERT_TRUE(discard != nullptr); ASSERT_EQ(offset, discard->object_off); ASSERT_EQ(length, discard->object_len); diff --git a/src/tools/rbd_mirror/InstanceWatcher.cc b/src/tools/rbd_mirror/InstanceWatcher.cc index 7b531064ded52..2246442d5b378 100644 --- a/src/tools/rbd_mirror/InstanceWatcher.cc +++ b/src/tools/rbd_mirror/InstanceWatcher.cc @@ -1093,8 +1093,8 @@ void InstanceWatcher::handle_notify(uint64_t notify_id, uint64_t handle, return; } - apply_visitor(HandlePayloadVisitor(this, stringify(notifier_id), ctx), - notify_message.payload); + std::visit(HandlePayloadVisitor(this, stringify(notifier_id), ctx), + notify_message.payload); } template diff --git a/src/tools/rbd_mirror/LeaderWatcher.cc b/src/tools/rbd_mirror/LeaderWatcher.cc index 8f12af14c8cef..f1aecc67e0a3a 100644 --- a/src/tools/rbd_mirror/LeaderWatcher.cc +++ b/src/tools/rbd_mirror/LeaderWatcher.cc @@ -1015,7 +1015,7 @@ void LeaderWatcher::handle_notify(uint64_t notify_id, uint64_t handle, return; } - apply_visitor(HandlePayloadVisitor(this, ctx), notify_message.payload); + std::visit(HandlePayloadVisitor(this, ctx), notify_message.payload); } template diff --git a/src/tools/rbd_mirror/ServiceDaemon.cc b/src/tools/rbd_mirror/ServiceDaemon.cc index 2276c2ec57199..203be5f613412 100644 --- a/src/tools/rbd_mirror/ServiceDaemon.cc +++ b/src/tools/rbd_mirror/ServiceDaemon.cc @@ -26,7 +26,7 @@ namespace { const std::string RBD_MIRROR_AUTH_ID_PREFIX("rbd-mirror."); -struct AttributeDumpVisitor : public boost::static_visitor { +struct AttributeDumpVisitor { ceph::Formatter *f; const std::string& name; @@ -184,6 +184,13 @@ void ServiceDaemon::remove_callout(int64_t pool_id, uint64_t callout_id) { schedule_update_status(); } +std::ostream& operator<<(std::ostream& out, const AttributeValue& value) { + std::visit([&out](const auto& v) { + out << v; + }, value); + return out; +} + template void ServiceDaemon::add_or_update_attribute(int64_t pool_id, const std::string& key, @@ -287,7 +294,7 @@ void ServiceDaemon::update_status() { for (auto& attribute : pool_pair.second.attributes) { AttributeDumpVisitor attribute_dump_visitor(&f, attribute.first); - boost::apply_visitor(attribute_dump_visitor, attribute.second); + std::visit(attribute_dump_visitor, attribute.second); } f.open_object_section("namespaces"); @@ -295,7 +302,7 @@ void ServiceDaemon::update_status() { f.open_object_section(ns.c_str()); for (auto& [key, value] : attributes) { AttributeDumpVisitor attribute_dump_visitor(&f, key); - boost::apply_visitor(attribute_dump_visitor, value); + std::visit(attribute_dump_visitor, value); } f.close_section(); // namespace } diff --git a/src/tools/rbd_mirror/image_map/Types.cc b/src/tools/rbd_mirror/image_map/Types.cc index 47de9c3cf590b..4f5ae6c496615 100644 --- a/src/tools/rbd_mirror/image_map/Types.cc +++ b/src/tools/rbd_mirror/image_map/Types.cc @@ -16,7 +16,7 @@ const std::string UNMAPPED_INSTANCE_ID(""); namespace { template -class GetTypeVisitor : public boost::static_visitor { +class GetTypeVisitor { public: template inline E operator()(const T&) const { @@ -24,7 +24,7 @@ public: } }; -class EncodeVisitor : public boost::static_visitor { +class EncodeVisitor { public: explicit EncodeVisitor(bufferlist &bl) : m_bl(bl) { } @@ -39,7 +39,7 @@ private: bufferlist &m_bl; }; -class DecodeVisitor : public boost::static_visitor { +class DecodeVisitor { public: DecodeVisitor(__u8 version, bufferlist::const_iterator &iter) : m_version(version), m_iter(iter) { @@ -54,7 +54,7 @@ private: bufferlist::const_iterator &m_iter; }; -class DumpVisitor : public boost::static_visitor { +class DumpVisitor { public: explicit DumpVisitor(Formatter *formatter, const std::string &key) : m_formatter(formatter), m_key(key) {} @@ -73,12 +73,12 @@ private: } // anonymous namespace PolicyMetaType PolicyData::get_policy_meta_type() const { - return boost::apply_visitor(GetTypeVisitor(), policy_meta); + return std::visit(GetTypeVisitor(), policy_meta); } void PolicyData::encode(bufferlist& bl) const { ENCODE_START(1, 1, bl); - boost::apply_visitor(EncodeVisitor(bl), policy_meta); + std::visit(EncodeVisitor(bl), policy_meta); ENCODE_FINISH(bl); } @@ -97,12 +97,12 @@ void PolicyData::decode(bufferlist::const_iterator& it) { break; } - boost::apply_visitor(DecodeVisitor(struct_v, it), policy_meta); + std::visit(DecodeVisitor(struct_v, it), policy_meta); DECODE_FINISH(it); } void PolicyData::dump(Formatter *f) const { - boost::apply_visitor(DumpVisitor(f, "policy_meta_type"), policy_meta); + std::visit(DumpVisitor(f, "policy_meta_type"), policy_meta); } void PolicyData::generate_test_instances(std::list &o) { diff --git a/src/tools/rbd_mirror/image_map/Types.h b/src/tools/rbd_mirror/image_map/Types.h index 5a97430f3b630..07908dfc7dcab 100644 --- a/src/tools/rbd_mirror/image_map/Types.h +++ b/src/tools/rbd_mirror/image_map/Types.h @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include "include/buffer.h" #include "include/encoding.h" @@ -97,8 +97,8 @@ struct PolicyMetaUnknown { } }; -typedef boost::variant PolicyMeta; +typedef std::variant PolicyMeta; struct PolicyData { PolicyData() diff --git a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h index 12f70eb9350a3..82c78808553f0 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h +++ b/src/tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h @@ -9,7 +9,6 @@ #include "librbd/journal/TypeTraits.h" #include #include -#include struct Context; namespace journal { class Journaler; } @@ -72,7 +71,7 @@ private: typedef std::map SnapSeqs; - class PreprocessEventVisitor : public boost::static_visitor { + class PreprocessEventVisitor { public: EventPreprocessor *event_preprocessor; diff --git a/src/tools/rbd_mirror/instance_watcher/Types.cc b/src/tools/rbd_mirror/instance_watcher/Types.cc index 225cd74073363..4c9f5235f1927 100644 --- a/src/tools/rbd_mirror/instance_watcher/Types.cc +++ b/src/tools/rbd_mirror/instance_watcher/Types.cc @@ -12,7 +12,7 @@ namespace instance_watcher { namespace { -class EncodePayloadVisitor : public boost::static_visitor { +class EncodePayloadVisitor { public: explicit EncodePayloadVisitor(bufferlist &bl) : m_bl(bl) {} @@ -27,7 +27,7 @@ private: bufferlist &m_bl; }; -class DecodePayloadVisitor : public boost::static_visitor { +class DecodePayloadVisitor { public: DecodePayloadVisitor(__u8 version, bufferlist::const_iterator &iter) : m_version(version), m_iter(iter) {} @@ -42,7 +42,7 @@ private: bufferlist::const_iterator &m_iter; }; -class DumpPayloadVisitor : public boost::static_visitor { +class DumpPayloadVisitor { public: explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {} @@ -139,7 +139,7 @@ void UnknownPayload::dump(Formatter *f) const { void NotifyMessage::encode(bufferlist& bl) const { ENCODE_START(2, 2, bl); - boost::apply_visitor(EncodePayloadVisitor(bl), payload); + std::visit(EncodePayloadVisitor(bl), payload); ENCODE_FINISH(bl); } @@ -171,12 +171,12 @@ void NotifyMessage::decode(bufferlist::const_iterator& iter) { break; } - apply_visitor(DecodePayloadVisitor(struct_v, iter), payload); + std::visit(DecodePayloadVisitor(struct_v, iter), payload); DECODE_FINISH(iter); } void NotifyMessage::dump(Formatter *f) const { - apply_visitor(DumpPayloadVisitor(f), payload); + std::visit(DumpPayloadVisitor(f), payload); } void NotifyMessage::generate_test_instances(std::list &o) { diff --git a/src/tools/rbd_mirror/instance_watcher/Types.h b/src/tools/rbd_mirror/instance_watcher/Types.h index b0b7b77910eb5..b9e0d19bca78c 100644 --- a/src/tools/rbd_mirror/instance_watcher/Types.h +++ b/src/tools/rbd_mirror/instance_watcher/Types.h @@ -6,7 +6,7 @@ #include #include -#include +#include #include "include/buffer_fwd.h" #include "include/encoding.h" @@ -143,12 +143,12 @@ struct UnknownPayload { void dump(Formatter *f) const; }; -typedef boost::variant Payload; +typedef std::variant Payload; struct NotifyMessage { NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) { diff --git a/src/tools/rbd_mirror/leader_watcher/Types.cc b/src/tools/rbd_mirror/leader_watcher/Types.cc index d2fb7908fa4b5..ae77c6b3501b8 100644 --- a/src/tools/rbd_mirror/leader_watcher/Types.cc +++ b/src/tools/rbd_mirror/leader_watcher/Types.cc @@ -12,7 +12,7 @@ namespace leader_watcher { namespace { -class EncodePayloadVisitor : public boost::static_visitor { +class EncodePayloadVisitor { public: explicit EncodePayloadVisitor(bufferlist &bl) : m_bl(bl) {} @@ -27,7 +27,7 @@ private: bufferlist &m_bl; }; -class DecodePayloadVisitor : public boost::static_visitor { +class DecodePayloadVisitor { public: DecodePayloadVisitor(__u8 version, bufferlist::const_iterator &iter) : m_version(version), m_iter(iter) {} @@ -42,7 +42,7 @@ private: bufferlist::const_iterator &m_iter; }; -class DumpPayloadVisitor : public boost::static_visitor { +class DumpPayloadVisitor { public: explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {} @@ -98,7 +98,7 @@ void UnknownPayload::dump(Formatter *f) const { void NotifyMessage::encode(bufferlist& bl) const { ENCODE_START(1, 1, bl); - boost::apply_visitor(EncodePayloadVisitor(bl), payload); + std::visit(EncodePayloadVisitor(bl), payload); ENCODE_FINISH(bl); } @@ -124,12 +124,12 @@ void NotifyMessage::decode(bufferlist::const_iterator& iter) { break; } - apply_visitor(DecodePayloadVisitor(struct_v, iter), payload); + std::visit(DecodePayloadVisitor(struct_v, iter), payload); DECODE_FINISH(iter); } void NotifyMessage::dump(Formatter *f) const { - apply_visitor(DumpPayloadVisitor(f), payload); + std::visit(DumpPayloadVisitor(f), payload); } void NotifyMessage::generate_test_instances(std::list &o) { diff --git a/src/tools/rbd_mirror/leader_watcher/Types.h b/src/tools/rbd_mirror/leader_watcher/Types.h index 1278e54b77cde..2a4c27bffb413 100644 --- a/src/tools/rbd_mirror/leader_watcher/Types.h +++ b/src/tools/rbd_mirror/leader_watcher/Types.h @@ -8,8 +8,8 @@ #include "include/buffer_fwd.h" #include "include/encoding.h" #include +#include #include -#include struct Context; @@ -85,10 +85,10 @@ struct UnknownPayload { void dump(Formatter *f) const; }; -typedef boost::variant Payload; +typedef std::variant Payload; struct NotifyMessage { NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) { diff --git a/src/tools/rbd_mirror/service_daemon/Types.h b/src/tools/rbd_mirror/service_daemon/Types.h index 3aab7201614fa..44715c3978930 100644 --- a/src/tools/rbd_mirror/service_daemon/Types.h +++ b/src/tools/rbd_mirror/service_daemon/Types.h @@ -7,7 +7,7 @@ #include "include/int_types.h" #include #include -#include +#include namespace rbd { namespace mirror { @@ -24,7 +24,7 @@ enum CalloutLevel { std::ostream& operator<<(std::ostream& os, const CalloutLevel& callout_level); -typedef boost::variant AttributeValue; +typedef std::variant AttributeValue; } // namespace service_daemon } // namespace mirror -- 2.39.5