Skip to content

Commit

Permalink
feat grpc: a new system to configure middlewares
Browse files Browse the repository at this point in the history
A new system to configure middlewares in `.cpp` code. Add a `MiddlewaresPipeline` that build a DAG graph and sort middlewares to ensure the same order for the same set of middlewares
commit_hash:2222e8b43378cdd5546dd48d9588f2edfd754c80
  • Loading branch information
ArkadyRudenko committed Jan 25, 2025
1 parent 6f713f4 commit 5da918f
Show file tree
Hide file tree
Showing 56 changed files with 1,707 additions and 198 deletions.
14 changes: 14 additions & 0 deletions .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -1954,6 +1954,7 @@
"grpc/include/userver/ugrpc/protobuf_visit.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/protobuf_visit.hpp",
"grpc/include/userver/ugrpc/server/call.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/call.hpp",
"grpc/include/userver/ugrpc/server/call_context.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/call_context.hpp",
"grpc/include/userver/ugrpc/server/component_list.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/component_list.hpp",
"grpc/include/userver/ugrpc/server/exceptions.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/exceptions.hpp",
"grpc/include/userver/ugrpc/server/generic_service_base.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/generic_service_base.hpp",
"grpc/include/userver/ugrpc/server/impl/async_method_invocation.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/async_method_invocation.hpp",
Expand All @@ -1967,6 +1968,7 @@
"grpc/include/userver/ugrpc/server/impl/completion_queue_pool.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/completion_queue_pool.hpp",
"grpc/include/userver/ugrpc/server/impl/error_code.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/error_code.hpp",
"grpc/include/userver/ugrpc/server/impl/exceptions.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/exceptions.hpp",
"grpc/include/userver/ugrpc/server/impl/middleware_pipeline_config.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/middleware_pipeline_config.hpp",
"grpc/include/userver/ugrpc/server/impl/service_worker.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/service_worker.hpp",
"grpc/include/userver/ugrpc/server/impl/service_worker_impl.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/impl/service_worker_impl.hpp",
"grpc/include/userver/ugrpc/server/metadata_utils.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/metadata_utils.hpp",
Expand All @@ -1976,8 +1978,10 @@
"grpc/include/userver/ugrpc/server/middlewares/deadline_propagation/component.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/deadline_propagation/component.hpp",
"grpc/include/userver/ugrpc/server/middlewares/field_mask/component.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/field_mask/component.hpp",
"grpc/include/userver/ugrpc/server/middlewares/fwd.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/fwd.hpp",
"grpc/include/userver/ugrpc/server/middlewares/groups.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/groups.hpp",
"grpc/include/userver/ugrpc/server/middlewares/headers_propagator/component.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/headers_propagator/component.hpp",
"grpc/include/userver/ugrpc/server/middlewares/log/component.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/log/component.hpp",
"grpc/include/userver/ugrpc/server/middlewares/pipeline.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/middlewares/pipeline.hpp",
"grpc/include/userver/ugrpc/server/result.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/result.hpp",
"grpc/include/userver/ugrpc/server/rpc.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/rpc.hpp",
"grpc/include/userver/ugrpc/server/server.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/server/server.hpp",
Expand Down Expand Up @@ -2059,6 +2063,7 @@
"grpc/src/ugrpc/protobuf_visit.cpp":"taxi/uservices/userver/grpc/src/ugrpc/protobuf_visit.cpp",
"grpc/src/ugrpc/server/call.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/call.cpp",
"grpc/src/ugrpc/server/call_context.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/call_context.cpp",
"grpc/src/ugrpc/server/component_list.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/component_list.cpp",
"grpc/src/ugrpc/server/exceptions.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/exceptions.cpp",
"grpc/src/ugrpc/server/generic_service_base.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/generic_service_base.cpp",
"grpc/src/ugrpc/server/impl/async_method_invocation.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/async_method_invocation.cpp",
Expand All @@ -2069,13 +2074,18 @@
"grpc/src/ugrpc/server/impl/format_log_message.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/format_log_message.hpp",
"grpc/src/ugrpc/server/impl/generic_service_worker.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/generic_service_worker.cpp",
"grpc/src/ugrpc/server/impl/generic_service_worker.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/generic_service_worker.hpp",
"grpc/src/ugrpc/server/impl/middleware_pipeline_config.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/middleware_pipeline_config.cpp",
"grpc/src/ugrpc/server/impl/middlewares_graph.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/middlewares_graph.cpp",
"grpc/src/ugrpc/server/impl/middlewares_graph.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/middlewares_graph.hpp",
"grpc/src/ugrpc/server/impl/parse_config.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/parse_config.cpp",
"grpc/src/ugrpc/server/impl/parse_config.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/parse_config.hpp",
"grpc/src/ugrpc/server/impl/server_configs.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/server_configs.cpp",
"grpc/src/ugrpc/server/impl/server_configs.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/server_configs.hpp",
"grpc/src/ugrpc/server/impl/service_defaults.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/service_defaults.hpp",
"grpc/src/ugrpc/server/impl/service_worker.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/service_worker.cpp",
"grpc/src/ugrpc/server/impl/service_worker_impl.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/service_worker_impl.cpp",
"grpc/src/ugrpc/server/impl/topology_sort.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/topology_sort.cpp",
"grpc/src/ugrpc/server/impl/topology_sort.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/impl/topology_sort.hpp",
"grpc/src/ugrpc/server/middlewares/baggage/component.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/baggage/component.cpp",
"grpc/src/ugrpc/server/middlewares/baggage/middleware.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/baggage/middleware.cpp",
"grpc/src/ugrpc/server/middlewares/baggage/middleware.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/baggage/middleware.hpp",
Expand All @@ -2095,6 +2105,7 @@
"grpc/src/ugrpc/server/middlewares/log/component.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/log/component.cpp",
"grpc/src/ugrpc/server/middlewares/log/middleware.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/log/middleware.cpp",
"grpc/src/ugrpc/server/middlewares/log/middleware.hpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/log/middleware.hpp",
"grpc/src/ugrpc/server/middlewares/pipeline.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/middlewares/pipeline.cpp",
"grpc/src/ugrpc/server/server.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/server.cpp",
"grpc/src/ugrpc/server/server_component.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/server_component.cpp",
"grpc/src/ugrpc/server/service_base.cpp":"taxi/uservices/userver/grpc/src/ugrpc/server/service_base.cpp",
Expand All @@ -2120,6 +2131,7 @@
"grpc/tests/generic_client_test.cpp":"taxi/uservices/userver/grpc/tests/generic_client_test.cpp",
"grpc/tests/generic_server_test.cpp":"taxi/uservices/userver/grpc/tests/generic_server_test.cpp",
"grpc/tests/logging_test.cpp":"taxi/uservices/userver/grpc/tests/logging_test.cpp",
"grpc/tests/middleware_pipeline_test.cpp":"taxi/uservices/userver/grpc/tests/middleware_pipeline_test.cpp",
"grpc/tests/middlewares_test.cpp":"taxi/uservices/userver/grpc/tests/middlewares_test.cpp",
"grpc/tests/protobuf_collector_test.cpp":"taxi/uservices/userver/grpc/tests/protobuf_collector_test.cpp",
"grpc/tests/protobuf_visit_test.cpp":"taxi/uservices/userver/grpc/tests/protobuf_visit_test.cpp",
Expand All @@ -2133,6 +2145,7 @@
"grpc/tests/tests/service_multichannel.hpp":"taxi/uservices/userver/grpc/tests/tests/service_multichannel.hpp",
"grpc/tests/tests/timed_out_service.hpp":"taxi/uservices/userver/grpc/tests/tests/timed_out_service.hpp",
"grpc/tests/tests/unit_test_client_qos.hpp":"taxi/uservices/userver/grpc/tests/tests/unit_test_client_qos.hpp",
"grpc/tests/topology_test.cpp":"taxi/uservices/userver/grpc/tests/topology_test.cpp",
"grpc/tests/tracing_test.cpp":"taxi/uservices/userver/grpc/tests/tracing_test.cpp",
"grpc/tests/unimplemented_test.cpp":"taxi/uservices/userver/grpc/tests/unimplemented_test.cpp",
"grpc/tests/wait_any_test.cpp":"taxi/uservices/userver/grpc/tests/wait_any_test.cpp",
Expand Down Expand Up @@ -3502,6 +3515,7 @@
"scripts/docs/en/userver/framework_comparison.md":"taxi/uservices/userver/scripts/docs/en/userver/framework_comparison.md",
"scripts/docs/en/userver/functional_testing.md":"taxi/uservices/userver/scripts/docs/en/userver/functional_testing.md",
"scripts/docs/en/userver/grpc.md":"taxi/uservices/userver/scripts/docs/en/userver/grpc.md",
"scripts/docs/en/userver/grpc_server_middlewares.md":"taxi/uservices/userver/scripts/docs/en/userver/grpc_server_middlewares.md",
"scripts/docs/en/userver/http_server.md":"taxi/uservices/userver/scripts/docs/en/userver/http_server.md",
"scripts/docs/en/userver/http_server_middlewares.md":"taxi/uservices/userver/scripts/docs/en/userver/http_server_middlewares.md",
"scripts/docs/en/userver/intro.md":"taxi/uservices/userver/scripts/docs/en/userver/intro.md",
Expand Down
16 changes: 2 additions & 14 deletions grpc/functional_tests/basic_chaos/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,13 @@
#include <userver/clients/dns/component.hpp>
#include <userver/clients/http/component.hpp>
#include <userver/components/minimal_server_component_list.hpp>
#include <userver/congestion_control/component.hpp>
#include <userver/server/handlers/tests_control.hpp>
#include <userver/testsuite/testsuite_support.hpp>
#include <userver/ugrpc/client/common_component.hpp>
#include <userver/ugrpc/client/middlewares/baggage/component.hpp>
#include <userver/ugrpc/client/middlewares/deadline_propagation/component.hpp>
#include <userver/ugrpc/client/middlewares/log/component.hpp>
#include <userver/ugrpc/server/middlewares/baggage/component.hpp>
#include <userver/ugrpc/server/middlewares/congestion_control/component.hpp>
#include <userver/ugrpc/server/middlewares/deadline_propagation/component.hpp>
#include <userver/ugrpc/server/middlewares/field_mask/component.hpp>
#include <userver/ugrpc/server/middlewares/log/component.hpp>
#include <userver/ugrpc/server/server_component.hpp>
#include <userver/ugrpc/server/component_list.hpp>
#include <userver/utils/daemon_run.hpp>

#include "handler.hpp"
Expand All @@ -24,12 +18,7 @@
int main(int argc, char* argv[]) {
const auto component_list = components::MinimalServerComponentList()
.Append<components::TestsuiteSupport>()
.Append<ugrpc::server::ServerComponent>()
.Append<ugrpc::server::middlewares::baggage::Component>()
.Append<ugrpc::server::middlewares::log::Component>()
.Append<ugrpc::server::middlewares::deadline_propagation::Component>()
.Append<ugrpc::server::middlewares::congestion_control::Component>()
.Append<ugrpc::server::middlewares::field_mask::Component>()
.AppendComponentList(ugrpc::server::DefaultComponentList())
.Append<ugrpc::client::middlewares::baggage::Component>()
.Append<ugrpc::client::middlewares::log::Component>()
.Append<ugrpc::client::middlewares::deadline_propagation::Component>()
Expand All @@ -38,7 +27,6 @@ int main(int argc, char* argv[]) {
.Append<server::handlers::TestsControl>()
.Append<components::HttpClient>()
.Append<clients::dns::Component>()
.Append<congestion_control::Component>()
.Append<samples::GreeterServiceComponent>()
.Append<samples::GreeterClient>()
.Append<samples::GreeterClientComponent>("greeter-client-component")
Expand Down
14 changes: 10 additions & 4 deletions grpc/functional_tests/basic_chaos/static_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@ components_manager:
port: 8091
service-defaults:
task-processor: main-task-processor
middlewares:
- grpc-server-logging
- grpc-server-baggage
- grpc-server-congestion-control
# /// [Sample grpc server logging middleware component config]
grpc-server-logging:
log-level: info
Expand All @@ -45,6 +41,16 @@ components_manager:
grpc-server-field-mask:
metadata-field-name: field-mask
# /// [Sample grpc server field-mask middleware component config]

grpc-server-middlewares-pipeline:
middlewares:
grpc-server-headers-propagator:
enabled: false
grpc-server-field-mask:
enabled: false
grpc-server-deadline-propagation:
enabled: false

greeter-service:
greeting-prefix: Hello

Expand Down
6 changes: 2 additions & 4 deletions grpc/functional_tests/basic_server/grpc_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@

#include <userver/ugrpc/client/client_factory_component.hpp>
#include <userver/ugrpc/client/common_component.hpp>
#include <userver/ugrpc/server/middlewares/headers_propagator/component.hpp>
#include <userver/ugrpc/server/server_component.hpp>
#include <userver/ugrpc/server/component_list.hpp>
#include <userver/ugrpc/server/service_component_base.hpp>

#include <samples/greeter_client.usrv.pb.hpp>
Expand Down Expand Up @@ -79,13 +78,12 @@ yaml_config::Schema GreeterServiceComponent::GetStaticConfigSchema() {
int main(int argc, char* argv[]) {
const auto component_list = components::MinimalServerComponentList()
.Append<components::TestsuiteSupport>()
.AppendComponentList(ugrpc::server::DefaultComponentList())
.Append<ugrpc::client::CommonComponent>()
.Append<ugrpc::client::ClientFactoryComponent>()
.Append<ugrpc::server::ServerComponent>()
.Append<samples::GreeterServiceComponent>()
.Append<clients::dns::Component>()
.Append<server::middlewares::HeadersPropagatorFactory>()
.Append<ugrpc::server::middlewares::headers_propagator::Component>()
.Append<clients::http::plugins::headers_propagator::Component>()
.Append<components::HttpClient>();
return utils::DaemonMain(argc, argv, component_list);
Expand Down
7 changes: 6 additions & 1 deletion grpc/functional_tests/basic_server/static_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ components_manager:
greeter-service:
echo-url: 'mockserver/v1/translations' # Some other microservice listens on this URL
task-processor: main-task-processor
disable-all-pipeline-middlewares: true
middlewares:
- grpc-server-headers-propagator
grpc-server-headers-propagator:

grpc-server-middlewares-pipeline:

http-client:
fs-task-processor: main-task-processor
Expand All @@ -53,6 +56,8 @@ components_manager:

http-client-plugin-headers-propagator: {}

congestion-control:

server:
listener:
port: 8092
Expand Down
10 changes: 2 additions & 8 deletions grpc/functional_tests/metrics/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,16 @@
#include <userver/ugrpc/client/middlewares/baggage/component.hpp>
#include <userver/ugrpc/client/middlewares/deadline_propagation/component.hpp>
#include <userver/ugrpc/client/middlewares/log/component.hpp>
#include <userver/ugrpc/server/middlewares/baggage/component.hpp>
#include <userver/ugrpc/server/middlewares/deadline_propagation/component.hpp>
#include <userver/ugrpc/server/middlewares/log/component.hpp>
#include <userver/ugrpc/server/server_component.hpp>
#include <userver/ugrpc/server/component_list.hpp>

#include "greeter_client.hpp"
#include "greeter_service.hpp"

int main(int argc, const char* const argv[]) {
const auto component_list = components::MinimalServerComponentList()
.Append<server::handlers::ServerMonitor>()
.AppendComponentList(ugrpc::server::DefaultComponentList())
.Append<components::TestsuiteSupport>()
.Append<ugrpc::server::ServerComponent>()
.Append<ugrpc::server::middlewares::log::Component>()
.Append<ugrpc::server::middlewares::deadline_propagation::Component>()
.Append<ugrpc::server::middlewares::baggage::Component>()
.Append<ugrpc::client::middlewares::baggage::Component>()
.Append<ugrpc::client::middlewares::log::Component>()
.Append<ugrpc::client::middlewares::deadline_propagation::Component>()
Expand Down
13 changes: 9 additions & 4 deletions grpc/functional_tests/metrics/static_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,26 @@ components_manager:
method: GET
task_processor: main-task-processor


# gRPC server and service
grpc-server:
port: 8091

congestion-control:

grpc-server-logging:
msg-size-log-limit: 10

grpc-server-deadline-propagation:
grpc-server-baggage:
grpc-server-middlewares-pipeline:

greeter-service:
task-processor: main-task-processor
disable-all-pipeline-middlewares: true
middlewares:
- grpc-server-logging
- grpc-server-baggage
grpc-server-logging:
enabled: true
grpc-server-baggage:
enabled: true

# gRPC client
grpc-client-common:
Expand Down
7 changes: 2 additions & 5 deletions grpc/functional_tests/middleware_server/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@

#include <userver/utest/using_namespace_userver.hpp>

#include <userver/components/component.hpp>
#include <userver/components/component_base.hpp>
#include <userver/components/minimal_server_component_list.hpp>
#include <userver/server/handlers/server_monitor.hpp>
#include <userver/testsuite/testsuite_support.hpp>
#include <userver/ugrpc/server/middlewares/log/component.hpp>
#include <userver/ugrpc/server/server_component.hpp>
#include <userver/ugrpc/server/component_list.hpp>
#include <userver/utils/daemon_run.hpp>

#include "my_middleware.hpp"
Expand All @@ -16,10 +14,9 @@

int main(int argc, const char* const argv[]) {
const auto component_list = components::MinimalServerComponentList()
.AppendComponentList(ugrpc::server::DefaultComponentList())
.Append<server::handlers::ServerMonitor>()
.Append<components::TestsuiteSupport>()
.Append<ugrpc::server::ServerComponent>()
.Append<ugrpc::server::middlewares::log::Component>()
.Append<functional_tests::MyMiddlewareComponent>()
.Append<functional_tests::MySecondMiddlewareComponent>()
.Append<functional_tests::GreeterServiceComponent>();
Expand Down
Loading

0 comments on commit 5da918f

Please sign in to comment.