return;
}
- apply_visitor(watcher::util::HandlePayloadVisitor<MirroringWatcher<I>>(
- this, notify_id, handle), notify_message.payload);
+ std::visit(watcher::util::HandlePayloadVisitor<MirroringWatcher<I>>(
+ this, notify_id, handle), notify_message.payload);
}
template <typename I>
return;
}
- apply_visitor(watcher::util::HandlePayloadVisitor<TrashWatcher<I>>(
+ std::visit(watcher::util::HandlePayloadVisitor<TrashWatcher<I>>(
this, notify_id, handle), notify_message.payload);
}
#include <list>
#include <memory>
#include <string>
-#include <boost/variant.hpp>
namespace ceph {
class Formatter;
#include "include/Context.h"
#include "common/Cond.h"
-#include <boost/variant.hpp>
-
#include <shared_mutex> // for std::shared_lock
#define dout_subsys ceph_subsys_rbd
#include "librbd/io/AioCompletion.h"
#include "librbd/io/ImageRequest.h"
#include "librbd/io/ImageDispatcherInterface.h"
-#include <boost/variant.hpp>
namespace librbd {
namespace io {
#include "librbd/io/ObjectDispatchSpec.h"
#include "include/Context.h"
#include "librbd/io/ObjectDispatcherInterface.h"
-#include <boost/variant.hpp>
namespace librbd {
namespace io {
#include "common/zipkin_trace.h"
#include "librbd/Types.h"
#include "librbd/io/Types.h"
-#include <boost/variant/variant.hpp>
+#include <variant>
namespace librbd {
namespace io {
}
};
- typedef boost::variant<ReadRequest,
- DiscardRequest,
- WriteRequest,
- WriteSameRequest,
- CompareAndWriteRequest,
- FlushRequest,
- ListSnapsRequest> Request;
+ typedef std::variant<ReadRequest,
+ DiscardRequest,
+ WriteRequest,
+ WriteSameRequest,
+ CompareAndWriteRequest,
+ FlushRequest,
+ ListSnapsRequest> Request;
C_Dispatcher dispatcher_ctx;
#include "librbd/asio/ContextWQ.h"
#include "librbd/io/ObjectDispatch.h"
#include "librbd/io/ObjectDispatchSpec.h"
-#include <boost/variant.hpp>
#include <shared_mutex> // for std::shared_lock
};
template <typename I>
-struct ObjectDispatcher<I>::SendVisitor : public boost::static_visitor<bool> {
+struct ObjectDispatcher<I>::SendVisitor {
ObjectDispatchInterface* object_dispatch;
ObjectDispatchSpec* object_dispatch_spec;
bool ObjectDispatcher<I>::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);
}
#include "common/dout.h"
#include "librbd/io/AioCompletion.h"
#include "librbd/io/Utils.h"
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
#define dout_subsys ceph_subsys_rbd
#undef dout_prefix
namespace librbd {
namespace io {
-struct ReadResult::SetImageExtentsVisitor : public boost::static_visitor<void> {
+struct ReadResult::SetImageExtentsVisitor {
Extents image_extents;
explicit SetImageExtentsVisitor(const Extents& image_extents)
}
};
-struct ReadResult::AssembleResultVisitor : public boost::static_visitor<void> {
+struct ReadResult::AssembleResultVisitor {
CephContext *cct;
Striper::StripedReadResult &destriper;
: cct(cct), destriper(destriper) {
}
- void operator()(Empty &empty) const {
+ void operator()(std::monostate &empty) const {
ldout(cct, 20) << "dropping read result" << dendl;
}
on_finish->complete(r);
}
-ReadResult::ReadResult() : m_buffer(Empty()) {
-}
-
ReadResult::ReadResult(char *buf, size_t buf_len)
: m_buffer(Linear(buf, buf_len)) {
}
}
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
#include "librbd/io/Types.h"
#include "osdc/Striper.h"
#include <sys/uio.h>
-#include <boost/variant/variant.hpp>
+#include <variant>
namespace librbd {
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);
void assemble_result(CephContext *cct);
private:
- struct Empty {
- };
-
struct Linear {
char *buf;
size_t buf_len;
}
};
- typedef boost::variant<Empty,
- Linear,
- Vector,
- Bufferlist,
- SparseBufferlist> Buffer;
+ typedef std::variant<std::monostate,
+ Linear,
+ Vector,
+ Bufferlist,
+ SparseBufferlist> Buffer;
struct SetImageExtentsVisitor;
struct AssembleResultVisitor;
#include "common/ceph_mutex.h"
#include "librbd/io/Types.h"
#include "librbd/journal/Types.h"
-#include <boost/variant.hpp>
#include <list>
#include <unordered_set>
#include <unordered_map>
}
};
- struct EventVisitor : public boost::static_visitor<void> {
+ struct EventVisitor {
Replay *replay;
Context *on_ready;
Context *on_safe;
namespace {
-class DumpPayloadVisitor : public boost::static_visitor<void> {
+class DumpPayloadVisitor {
public:
explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {}
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);
}
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<NotifyMessage *> &o) {
#include <iosfwd>
#include <list>
#include <string>
-#include <boost/variant.hpp>
+#include <variant>
namespace ceph { class Formatter; }
void dump(Formatter *f) const;
};
-typedef boost::variant<ModeUpdatedPayload,
- ImageUpdatedPayload,
- UnknownPayload> Payload;
+typedef std::variant<ModeUpdatedPayload,
+ ImageUpdatedPayload,
+ UnknownPayload> Payload;
struct NotifyMessage {
NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) {
namespace {
-class DumpPayloadVisitor : public boost::static_visitor<void> {
+class DumpPayloadVisitor {
public:
explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {}
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);
}
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<NotifyMessage *> &o) {
#include <iosfwd>
#include <list>
#include <string>
-#include <boost/variant.hpp>
+#include <variant>
namespace librbd {
void dump(Formatter *f) const;
};
-typedef boost::variant<ImageAddedPayload,
- ImageRemovedPayload,
- UnknownPayload> Payload;
+typedef std::variant<ImageAddedPayload,
+ ImageRemovedPayload,
+ UnknownPayload> Payload;
struct NotifyMessage {
NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) {
#include "include/stringify.h"
#include "common/Formatter.h"
#include <iostream>
-#include <boost/variant.hpp>
namespace rbd_replay {
namespace action {
#endif
}
-class EncodeVisitor : public boost::static_visitor<void> {
+class EncodeVisitor {
public:
explicit EncodeVisitor(bufferlist &bl) : m_bl(bl) {
}
bufferlist &m_bl;
};
-class DecodeVisitor : public boost::static_visitor<void> {
+class DecodeVisitor {
public:
DecodeVisitor(__u8 version, bufferlist::const_iterator &iter)
: m_version(version), m_iter(iter) {
bufferlist::const_iterator &m_iter;
};
-class DumpVisitor : public boost::static_visitor<void> {
+class DumpVisitor {
public:
explicit DumpVisitor(Formatter *formatter) : m_formatter(formatter) {}
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);
}
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<ActionEntry *> &o) {
#include <list>
#include <string>
#include <vector>
-#include <boost/variant/variant.hpp>
+#include <variant>
namespace ceph { class Formatter; }
void dump(Formatter *f) const;
};
-typedef boost::variant<StartThreadAction,
- StopThreadAction,
- ReadAction,
- WriteAction,
- DiscardAction,
- AioReadAction,
- AioWriteAction,
- AioDiscardAction,
- OpenImageAction,
- CloseImageAction,
- AioOpenImageAction,
- AioCloseImageAction,
- UnknownAction> Action;
+typedef std::variant<StartThreadAction,
+ StopThreadAction,
+ ReadAction,
+ WriteAction,
+ DiscardAction,
+ AioReadAction,
+ AioWriteAction,
+ AioDiscardAction,
+ OpenImageAction,
+ CloseImageAction,
+ AioOpenImageAction,
+ AioCloseImageAction,
+ UnknownAction> Action;
class ActionEntry {
public:
#define _INCLUDED_BOUNDED_BUFFER_HPP
#include <boost/bind/bind.hpp>
+#include <boost/call_traits.hpp>
#include <boost/circular_buffer.hpp>
#include <boost/thread/condition.hpp>
#include <boost/thread/mutex.hpp>
return std::string(data, sizeof(data));
}
-struct ConstructVisitor : public boost::static_visitor<Action::ptr> {
+struct ConstructVisitor {
inline Action::ptr operator()(const action::StartThreadAction &action) const {
return Action::ptr(new StartThreadAction(action));
}
}
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) {
EXPECT_CALL(*mock_image_ctx->io_object_dispatcher, send(_))
.WillOnce(Invoke([this, extents,
version](io::ObjectDispatchSpec* spec) {
- auto* read = boost::get<io::ObjectDispatchSpec::ReadRequest>(
+ auto* read = std::get_if<io::ObjectDispatchSpec::ReadRequest>(
&spec->request);
ASSERT_TRUE(read != nullptr);
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<io::ObjectDispatchSpec::WriteRequest>(
+ auto* write = std::get_if<io::ObjectDispatchSpec::WriteRequest>(
&spec->request);
ASSERT_TRUE(write != nullptr);
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);
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<ObjectDispatchSpec::DiscardRequest>(&spec->request);
+ auto* discard_spec = std::get_if<ObjectDispatchSpec::DiscardRequest>(&spec->request);
ASSERT_TRUE(discard_spec != nullptr);
ASSERT_EQ(object_no, discard_spec->object_no);
ASSERT_EQ(offset, discard_spec->object_off);
.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);
#include "librbd/operation/TrimRequest.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
-#include <boost/variant.hpp>
#include <shared_mutex> // for std::shared_lock
namespace io {
-struct DiscardVisitor
- : public boost::static_visitor<ObjectDispatchSpec::DiscardRequest*> {
+struct DiscardVisitor {
ObjectDispatchSpec::DiscardRequest*
operator()(ObjectDispatchSpec::DiscardRequest& discard) const {
return &discard;
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);
return;
}
- apply_visitor(HandlePayloadVisitor(this, stringify(notifier_id), ctx),
- notify_message.payload);
+ std::visit(HandlePayloadVisitor(this, stringify(notifier_id), ctx),
+ notify_message.payload);
}
template <typename I>
return;
}
- apply_visitor(HandlePayloadVisitor(this, ctx), notify_message.payload);
+ std::visit(HandlePayloadVisitor(this, ctx), notify_message.payload);
}
template <typename I>
const std::string RBD_MIRROR_AUTH_ID_PREFIX("rbd-mirror.");
-struct AttributeDumpVisitor : public boost::static_visitor<void> {
+struct AttributeDumpVisitor {
ceph::Formatter *f;
const std::string& name;
schedule_update_status();
}
+std::ostream& operator<<(std::ostream& out, const AttributeValue& value) {
+ std::visit([&out](const auto& v) {
+ out << v;
+ }, value);
+ return out;
+}
+
template <typename I>
void ServiceDaemon<I>::add_or_update_attribute(int64_t pool_id,
const std::string& key,
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");
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
}
namespace {
template <typename E>
-class GetTypeVisitor : public boost::static_visitor<E> {
+class GetTypeVisitor {
public:
template <typename T>
inline E operator()(const T&) const {
}
};
-class EncodeVisitor : public boost::static_visitor<void> {
+class EncodeVisitor {
public:
explicit EncodeVisitor(bufferlist &bl) : m_bl(bl) {
}
bufferlist &m_bl;
};
-class DecodeVisitor : public boost::static_visitor<void> {
+class DecodeVisitor {
public:
DecodeVisitor(__u8 version, bufferlist::const_iterator &iter)
: m_version(version), m_iter(iter) {
bufferlist::const_iterator &m_iter;
};
-class DumpVisitor : public boost::static_visitor<void> {
+class DumpVisitor {
public:
explicit DumpVisitor(Formatter *formatter, const std::string &key)
: m_formatter(formatter), m_key(key) {}
} // anonymous namespace
PolicyMetaType PolicyData::get_policy_meta_type() const {
- return boost::apply_visitor(GetTypeVisitor<PolicyMetaType>(), policy_meta);
+ return std::visit(GetTypeVisitor<PolicyMetaType>(), 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);
}
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<PolicyData *> &o) {
#include <map>
#include <set>
#include <string>
-#include <boost/variant.hpp>
+#include <variant>
#include "include/buffer.h"
#include "include/encoding.h"
}
};
-typedef boost::variant<PolicyMetaNone,
- PolicyMetaUnknown> PolicyMeta;
+typedef std::variant<PolicyMetaNone,
+ PolicyMetaUnknown> PolicyMeta;
struct PolicyData {
PolicyData()
#include "librbd/journal/TypeTraits.h"
#include <map>
#include <string>
-#include <boost/variant/static_visitor.hpp>
struct Context;
namespace journal { class Journaler; }
typedef std::map<uint64_t, uint64_t> SnapSeqs;
- class PreprocessEventVisitor : public boost::static_visitor<int> {
+ class PreprocessEventVisitor {
public:
EventPreprocessor *event_preprocessor;
namespace {
-class EncodePayloadVisitor : public boost::static_visitor<void> {
+class EncodePayloadVisitor {
public:
explicit EncodePayloadVisitor(bufferlist &bl) : m_bl(bl) {}
bufferlist &m_bl;
};
-class DecodePayloadVisitor : public boost::static_visitor<void> {
+class DecodePayloadVisitor {
public:
DecodePayloadVisitor(__u8 version, bufferlist::const_iterator &iter)
: m_version(version), m_iter(iter) {}
bufferlist::const_iterator &m_iter;
};
-class DumpPayloadVisitor : public boost::static_visitor<void> {
+class DumpPayloadVisitor {
public:
explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {}
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);
}
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<NotifyMessage *> &o) {
#include <string>
#include <set>
-#include <boost/variant.hpp>
+#include <variant>
#include "include/buffer_fwd.h"
#include "include/encoding.h"
void dump(Formatter *f) const;
};
-typedef boost::variant<ImageAcquirePayload,
- ImageReleasePayload,
- PeerImageRemovedPayload,
- SyncRequestPayload,
- SyncStartPayload,
- UnknownPayload> Payload;
+typedef std::variant<ImageAcquirePayload,
+ ImageReleasePayload,
+ PeerImageRemovedPayload,
+ SyncRequestPayload,
+ SyncStartPayload,
+ UnknownPayload> Payload;
struct NotifyMessage {
NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) {
namespace {
-class EncodePayloadVisitor : public boost::static_visitor<void> {
+class EncodePayloadVisitor {
public:
explicit EncodePayloadVisitor(bufferlist &bl) : m_bl(bl) {}
bufferlist &m_bl;
};
-class DecodePayloadVisitor : public boost::static_visitor<void> {
+class DecodePayloadVisitor {
public:
DecodePayloadVisitor(__u8 version, bufferlist::const_iterator &iter)
: m_version(version), m_iter(iter) {}
bufferlist::const_iterator &m_iter;
};
-class DumpPayloadVisitor : public boost::static_visitor<void> {
+class DumpPayloadVisitor {
public:
explicit DumpPayloadVisitor(Formatter *formatter) : m_formatter(formatter) {}
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);
}
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<NotifyMessage *> &o) {
#include "include/buffer_fwd.h"
#include "include/encoding.h"
#include <string>
+#include <variant>
#include <vector>
-#include <boost/variant.hpp>
struct Context;
void dump(Formatter *f) const;
};
-typedef boost::variant<HeartbeatPayload,
- LockAcquiredPayload,
- LockReleasedPayload,
- UnknownPayload> Payload;
+typedef std::variant<HeartbeatPayload,
+ LockAcquiredPayload,
+ LockReleasedPayload,
+ UnknownPayload> Payload;
struct NotifyMessage {
NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) {
#include "include/int_types.h"
#include <iosfwd>
#include <string>
-#include <boost/variant.hpp>
+#include <variant>
namespace rbd {
namespace mirror {
std::ostream& operator<<(std::ostream& os, const CalloutLevel& callout_level);
-typedef boost::variant<bool, uint64_t, std::string> AttributeValue;
+typedef std::variant<bool, uint64_t, std::string> AttributeValue;
} // namespace service_daemon
} // namespace mirror