From 275777743d01d0e347e571ae03b4e02eeda1a0da Mon Sep 17 00:00:00 2001 From: Ioannis Kavvadias Date: Tue, 21 Jan 2025 14:59:30 +0000 Subject: [PATCH] pandaproxy/sr: Add support for extention custom options (cherry picked from commit f8c11ae7b79ff7e9b2b63394fe6180430c4fef10) --- src/v/pandaproxy/schema_registry/protobuf.cc | 11 +++++++++++ .../schema_registry/test/compatibility_protobuf.cc | 12 +++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/v/pandaproxy/schema_registry/protobuf.cc b/src/v/pandaproxy/schema_registry/protobuf.cc index 205d5557256a4..0dc5dc8309a6b 100644 --- a/src/v/pandaproxy/schema_registry/protobuf.cc +++ b/src/v/pandaproxy/schema_registry/protobuf.cc @@ -637,6 +637,12 @@ struct protobuf_schema_definition::impl { boost::combine(from.enum_type(), *to.mutable_enum_type())) { copy_uninterpreted_options(enum_from, enum_to); } + + // nested extentions + for (auto&& [extension_from, extension_to] : + boost::combine(from.extension(), *to.mutable_extension())) { + copy_uninterpreted_options(extension_from, extension_to); + } } void copy_uninterpreted_options( @@ -680,6 +686,11 @@ struct protobuf_schema_definition::impl { copy_uninterpreted_options(enum_from, enum_to); } + for (auto&& [extension_from, extension_to] : + boost::combine(from.extension(), *to.mutable_extension())) { + copy_uninterpreted_options(extension_from, extension_to); + } + for (auto&& [service_from, service_to] : boost::combine(from.service(), *to.mutable_service())) { copy_uninterpreted_options(service_from, service_to); diff --git a/src/v/pandaproxy/schema_registry/test/compatibility_protobuf.cc b/src/v/pandaproxy/schema_registry/test/compatibility_protobuf.cc index 7947ac2720164..3cec317eb431a 100644 --- a/src/v/pandaproxy/schema_registry/test/compatibility_protobuf.cc +++ b/src/v/pandaproxy/schema_registry/test/compatibility_protobuf.cc @@ -603,7 +603,7 @@ SEASTAR_THREAD_TEST_CASE(test_protobuf_normalize_custom_options) { auto schema = R"(import "google/protobuf/descriptor.proto"; extend google.protobuf.FileOptions { - optional string my_file_option_b = 50008; + optional string my_file_option_b = 50008 [(my_field_option_b) = 5.5, (my_field_option_a) = 4.5]; optional string my_file_option_a = 50000; repeated uint32 my_repeated_file_option = 60000; } @@ -721,7 +721,10 @@ enum MyEnum { BAR = 2; } extend google.protobuf.FileOptions { - optional string my_file_option_b = 50008; + optional string my_file_option_b = 50008 [ + (my_field_option_b) = 5.5, + (my_field_option_a) = 4.5 + ]; optional string my_file_option_a = 50000; repeated uint32 my_repeated_file_option = 60000; } @@ -819,7 +822,10 @@ extend .google.protobuf.FieldOptions { } extend .google.protobuf.FileOptions { optional string my_file_option_a = 50000; - optional string my_file_option_b = 50008; + optional string my_file_option_b = 50008 [ + (my_field_option_a) = 4.5, + (my_field_option_b) = 5.5 + ]; optional string my_file_option_c = 50015; repeated uint32 my_repeated_file_option = 60000; }