From 417744991b035e7f31f0d54e21047412ec940647 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:52:21 -0700 Subject: [PATCH 1/9] cluster: support serde for ntp_leader Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 +++++- src/v/cluster/tests/serialization_rt_test.cc | 26 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index 6f1a358a584a..f867111c7f47 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -15,6 +15,7 @@ #include "model/fundamental.h" #include "model/metadata.h" #include "reflection/adl.h" +#include "serde/serde.h" #include @@ -22,11 +23,13 @@ namespace cluster { -struct ntp_leader { +struct ntp_leader : serde::envelope> { model::ntp ntp; model::term_id term; std::optional leader_id; + ntp_leader() noexcept = default; + ntp_leader( model::ntp ntp, model::term_id term, @@ -44,6 +47,8 @@ struct ntp_leader { l.leader_id ? l.leader_id.value()() : -1); return o; } + + auto serde_fields() { return std::tie(ntp, term, leader_id); } }; struct ntp_leader_revision { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index 2b02a92d109d..cf18332707c2 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -8,6 +8,7 @@ // by the Apache License, Version 2.0 #include "cluster/health_monitor_types.h" +#include "cluster/metadata_dissemination_types.h" #include "cluster/tests/utils.h" #include "cluster/types.h" #include "model/compression.h" @@ -452,3 +453,28 @@ SEASTAR_THREAD_TEST_CASE(partition_status_serialization_old_version) { BOOST_CHECK(result[i].leader_id == original[i].leader_id); } } + +template +void roundtrip_test(const T original) { + auto serde_in = original; + auto adl_in = original; + + auto serde_out = serde::to_iobuf(std::move(serde_in)); + auto adl_out = reflection::to_iobuf(std::move(adl_in)); + + auto from_serde = serde::from_iobuf(std::move(serde_out)); + auto from_adl = reflection::from_iobuf(std::move(adl_out)); + + BOOST_REQUIRE(original == from_serde); + BOOST_REQUIRE(original == from_adl); +} + +SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { + roundtrip_test(cluster::ntp_leader( + model::ntp( + model::ns("a namespace"), + model::topic("a topic"), + model::partition_id(287)), + model::term_id(1234), + model::node_id(2))); +} From f9bf7d0feac0a6fac65ba1251453d80364998020 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:52:55 -0700 Subject: [PATCH 2/9] cluster: support serde for ntp_leader_revision Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 ++++++- src/v/cluster/tests/serialization_rt_test.cc | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index f867111c7f47..d17ae1084bbf 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -51,12 +51,15 @@ struct ntp_leader : serde::envelope> { auto serde_fields() { return std::tie(ntp, term, leader_id); } }; -struct ntp_leader_revision { +struct ntp_leader_revision + : serde::envelope> { model::ntp ntp; model::term_id term; std::optional leader_id; model::revision_id revision; + ntp_leader_revision() noexcept = default; + ntp_leader_revision( model::ntp ntp, model::term_id term, @@ -78,6 +81,8 @@ struct ntp_leader_revision { r.revision); return o; } + + auto serde_fields() { return std::tie(ntp, term, leader_id, revision); } }; struct update_leadership_request { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index cf18332707c2..de179da34419 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -477,4 +477,13 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { model::partition_id(287)), model::term_id(1234), model::node_id(2))); + + roundtrip_test(cluster::ntp_leader_revision( + model::ntp( + model::ns("a namespace"), + model::topic("a topic"), + model::partition_id(287)), + model::term_id(1234), + model::node_id(2), + model::revision_id(888))); } From ee41d4024d109e0bc2bb9daf071e05611a5399dd Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:53:47 -0700 Subject: [PATCH 3/9] cluster: support serde for update_leadership_request Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 ++++++- src/v/cluster/tests/serialization_rt_test.cc | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index d17ae1084bbf..738882162ded 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -85,11 +85,16 @@ struct ntp_leader_revision auto serde_fields() { return std::tie(ntp, term, leader_id, revision); } }; -struct update_leadership_request { +struct update_leadership_request + : serde::envelope> { std::vector leaders; + update_leadership_request() noexcept = default; + explicit update_leadership_request(std::vector leaders) : leaders(std::move(leaders)) {} + + auto serde_fields() { return std::tie(leaders); } }; struct update_leadership_request_v2 { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index de179da34419..ffe9aa4d34c2 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -486,4 +486,14 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { model::term_id(1234), model::node_id(2), model::revision_id(888))); + + roundtrip_test(cluster::update_leadership_request({ + cluster::ntp_leader( + model::ntp( + model::ns("a namespace"), + model::topic("a topic"), + model::partition_id(287)), + model::term_id(1234), + model::node_id(2)), + })); } From 04a77b2e2ae15a99704742b2a1a32b55da2ec14f Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:53:57 -0700 Subject: [PATCH 4/9] cluster: support serde for update_leadership_request_v2 Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 ++++++- src/v/cluster/tests/serialization_rt_test.cc | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index 738882162ded..68746f94f17f 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -97,13 +97,18 @@ struct update_leadership_request auto serde_fields() { return std::tie(leaders); } }; -struct update_leadership_request_v2 { +struct update_leadership_request_v2 + : serde::envelope> { static constexpr int8_t version = 0; std::vector leaders; + update_leadership_request_v2() noexcept = default; + explicit update_leadership_request_v2( std::vector leaders) : leaders(std::move(leaders)) {} + + auto serde_fields() { return std::tie(leaders); } }; struct update_leadership_reply { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index ffe9aa4d34c2..df9d96dde870 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -496,4 +496,15 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { model::term_id(1234), model::node_id(2)), })); + + roundtrip_test(cluster::update_leadership_request_v2({ + cluster::ntp_leader_revision( + model::ntp( + model::ns("a namespace"), + model::topic("a topic"), + model::partition_id(287)), + model::term_id(1234), + model::node_id(2), + model::revision_id(8888)), + })); } From 93e9929a293dd03ae2277e3322b2c9ca495f6078 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:54:12 -0700 Subject: [PATCH 5/9] cluster: support serde for update_leadership_reply Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 +++++-- src/v/cluster/tests/serialization_rt_test.cc | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index 68746f94f17f..a42c20156bd4 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -111,8 +111,11 @@ struct update_leadership_request_v2 auto serde_fields() { return std::tie(leaders); } }; -struct update_leadership_reply { - update_leadership_reply() = default; +struct update_leadership_reply + : serde::envelope> { + update_leadership_reply() noexcept = default; + + auto serde_fields() { return std::tie(); } }; struct get_leadership_request { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index df9d96dde870..4b92d091e5fa 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -507,4 +507,6 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { model::node_id(2), model::revision_id(8888)), })); + + roundtrip_test(cluster::update_leadership_reply()); } From e90883d9a7e907528ceccfece9dece96c568f16e Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:54:33 -0700 Subject: [PATCH 6/9] cluster: support serde for get_leadership_request Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 +++++-- src/v/cluster/tests/serialization_rt_test.cc | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index a42c20156bd4..e90f74e6d66f 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -118,8 +118,11 @@ struct update_leadership_reply auto serde_fields() { return std::tie(); } }; -struct get_leadership_request { - get_leadership_request() = default; +struct get_leadership_request + : serde::envelope> { + get_leadership_request() noexcept = default; + + auto serde_fields() { return std::tie(); } }; struct get_leadership_reply { diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index 4b92d091e5fa..bc7a3fba5d01 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -509,4 +509,6 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { })); roundtrip_test(cluster::update_leadership_reply()); + + roundtrip_test(cluster::get_leadership_request()); } From 9ec27f754cbdaf1b9c3920f746a589d67c7db91e Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:54:41 -0700 Subject: [PATCH 7/9] cluster: support serde for get_leadership_reply Signed-off-by: Noah Watkins --- src/v/cluster/metadata_dissemination_types.h | 7 ++++++- src/v/cluster/tests/serialization_rt_test.cc | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/metadata_dissemination_types.h b/src/v/cluster/metadata_dissemination_types.h index e90f74e6d66f..bb881956e2dc 100644 --- a/src/v/cluster/metadata_dissemination_types.h +++ b/src/v/cluster/metadata_dissemination_types.h @@ -125,11 +125,16 @@ struct get_leadership_request auto serde_fields() { return std::tie(); } }; -struct get_leadership_reply { +struct get_leadership_reply + : serde::envelope> { std::vector leaders; + get_leadership_reply() noexcept = default; + explicit get_leadership_reply(std::vector leaders) : leaders(std::move(leaders)) {} + + auto serde_fields() { return std::tie(leaders); } }; } // namespace cluster diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index bc7a3fba5d01..72384ba86849 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -511,4 +511,14 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { roundtrip_test(cluster::update_leadership_reply()); roundtrip_test(cluster::get_leadership_request()); + + roundtrip_test(cluster::get_leadership_reply({ + cluster::ntp_leader( + model::ntp( + model::ns("a namespace"), + model::topic("a topic"), + model::partition_id(287)), + model::term_id(1234), + model::node_id(2)), + })); } From 5445156941b763b1f7b076691cc632498cec99f8 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 09:59:48 -0700 Subject: [PATCH 8/9] cluster: support serde for allocate_id_request Signed-off-by: Noah Watkins --- src/v/cluster/tests/serialization_rt_test.cc | 3 +++ src/v/cluster/types.h | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index 72384ba86849..fc910deb7d7f 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -521,4 +521,7 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { model::term_id(1234), model::node_id(2)), })); + + roundtrip_test( + cluster::allocate_id_request(model::timeout_clock::duration(234234))); } diff --git a/src/v/cluster/types.h b/src/v/cluster/types.h index e08317e7aa46..5979ceb4cb2f 100644 --- a/src/v/cluster/types.h +++ b/src/v/cluster/types.h @@ -22,6 +22,7 @@ #include "model/timeout_clock.h" #include "raft/types.h" #include "security/acl.h" +#include "serde/serde.h" #include "storage/ntp_config.h" #include "tristate.h" #include "utils/to_string.h" @@ -41,11 +42,16 @@ using broker_ptr = ss::lw_shared_ptr; using cluster_version = named_type; constexpr cluster_version invalid_version = cluster_version{-1}; -struct allocate_id_request { +struct allocate_id_request + : serde::envelope> { model::timeout_clock::duration timeout; + allocate_id_request() noexcept = default; + explicit allocate_id_request(model::timeout_clock::duration timeout) : timeout(timeout) {} + + auto serde_fields() { return std::tie(timeout); } }; struct allocate_id_reply { From a411ebee0aab058159dd8edd59b1cdd989db3a43 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Tue, 7 Jun 2022 10:00:54 -0700 Subject: [PATCH 9/9] cluster: support serde for allocate_id_reply Signed-off-by: Noah Watkins --- src/v/cluster/tests/serialization_rt_test.cc | 3 +++ src/v/cluster/types.h | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/v/cluster/tests/serialization_rt_test.cc b/src/v/cluster/tests/serialization_rt_test.cc index fc910deb7d7f..05f741ae72cf 100644 --- a/src/v/cluster/tests/serialization_rt_test.cc +++ b/src/v/cluster/tests/serialization_rt_test.cc @@ -524,4 +524,7 @@ SEASTAR_THREAD_TEST_CASE(serde_reflection_roundtrip) { roundtrip_test( cluster::allocate_id_request(model::timeout_clock::duration(234234))); + + roundtrip_test( + cluster::allocate_id_reply(23433, cluster::errc::invalid_node_operation)); } diff --git a/src/v/cluster/types.h b/src/v/cluster/types.h index 5979ceb4cb2f..5fec8bbfa7a8 100644 --- a/src/v/cluster/types.h +++ b/src/v/cluster/types.h @@ -54,13 +54,18 @@ struct allocate_id_request auto serde_fields() { return std::tie(timeout); } }; -struct allocate_id_reply { +struct allocate_id_reply + : serde::envelope> { int64_t id; errc ec; + allocate_id_reply() noexcept = default; + allocate_id_reply(int64_t id, errc ec) : id(id) , ec(ec) {} + + auto serde_fields() { return std::tie(id, ec); } }; enum class tx_errc {