Skip to content

Commit

Permalink
mobile: adding a config knob for building without listeners (#25443)
Browse files Browse the repository at this point in the history
Risk Level: low
Testing: common CI, manual testing
Docs Changes: n/a
Release Notes: n/a
part of envoyproxy/envoy-mobile#2711

Signed-off-by: Alyssa Wilk <alyssar@chromium.org>
  • Loading branch information
alyssawilk authored Feb 9, 2023
1 parent d8dd01d commit e77841e
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 15 deletions.
1 change: 1 addition & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ build --tool_java_runtime_version=remotejdk_11
build --platform_mappings=bazel/platform_mappings
# silence absl logspam.
build --copt=-DABSL_MIN_LOG_LEVEL=4
build --define envoy_mobile_listener=enabled

# Pass PATH, CC, CXX and LLVM_CONFIG variables from the environment.
build --action_env=CC --host_action_env=CC
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
--action_env=LD_LIBRARY_PATH \
--test_env=ENVOY_IP_TEST_VERSIONS=v4only \
--test_output=all \
--define envoy_mobile_listener=disabled \
$([ -z $GITHUB_TOKEN ] || echo "--config=remote-ci-linux") \
--remote_header="Authorization=Bearer $GITHUB_TOKEN" \
//test/common/...
5 changes: 5 additions & 0 deletions bazel/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ config_setting(
values = {"define": "envoy_mobile_request_compression=disabled"},
)

config_setting(
name = "disable_envoy_mobile_listener",
values = {"define": "envoy_mobile_listener=disabled"},
)

config_setting(
name = "disable_logging",
values = {"define": "enable_logging=disabled"},
Expand Down
2 changes: 2 additions & 0 deletions bazel/envoy_build_system.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ load(
_envoy_select_boringssl = "envoy_select_boringssl",
_envoy_select_disable_logging = "envoy_select_disable_logging",
_envoy_select_enable_http3 = "envoy_select_enable_http3",
_envoy_select_envoy_mobile_listener = "envoy_select_envoy_mobile_listener",
_envoy_select_envoy_mobile_request_compression = "envoy_select_envoy_mobile_request_compression",
_envoy_select_google_grpc = "envoy_select_google_grpc",
_envoy_select_hot_restart = "envoy_select_hot_restart",
Expand Down Expand Up @@ -227,6 +228,7 @@ envoy_select_admin_no_html = _envoy_select_admin_no_html
envoy_select_admin_functionality = _envoy_select_admin_functionality
envoy_select_static_extension_registration = _envoy_select_static_extension_registration
envoy_select_envoy_mobile_request_compression = _envoy_select_envoy_mobile_request_compression
envoy_select_envoy_mobile_listener = _envoy_select_envoy_mobile_listener
envoy_select_boringssl = _envoy_select_boringssl
envoy_select_disable_logging = _envoy_select_disable_logging
envoy_select_google_grpc = _envoy_select_google_grpc
Expand Down
3 changes: 2 additions & 1 deletion bazel/envoy_mobile_copts.bzl
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# DO NOT LOAD THIS FILE. Load envoy_build_system.bzl instead.
load(":envoy_select.bzl", "envoy_select_admin_functionality", "envoy_select_enable_http3", "envoy_select_envoy_mobile_request_compression")
load(":envoy_select.bzl", "envoy_select_admin_functionality", "envoy_select_enable_http3", "envoy_select_envoy_mobile_listener", "envoy_select_envoy_mobile_request_compression")

# Compute the copts needed for Envoy Mobile libraries that don't use Envoy's main library wrappers.
def envoy_mobile_copts(repository):
return envoy_select_admin_functionality(["-DENVOY_ADMIN_FUNCTIONALITY"], repository) + \
envoy_select_enable_http3(["-DENVOY_ENABLE_QUIC"], repository) + \
envoy_select_envoy_mobile_listener(["-DENVOY_MOBILE_ENABLE_LISTENER"], repository) + \
envoy_select_envoy_mobile_request_compression(["-DENVOY_MOBILE_REQUEST_COMPRESSION"], repository)
7 changes: 7 additions & 0 deletions bazel/envoy_select.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ def envoy_select_envoy_mobile_request_compression(xs, repository = ""):
"//conditions:default": xs,
})

# Selects the given values if the Envoy Mobile listener is enabled in the current build.
def envoy_select_envoy_mobile_listener(xs, repository = ""):
return select({
repository + "//bazel:disable_envoy_mobile_listener": [],
"//conditions:default": xs,
})

# Selects the given values if http3 is enabled in the current build.
def envoy_select_enable_http3(xs, repository = ""):
return select({
Expand Down
11 changes: 8 additions & 3 deletions mobile/envoy_build_config/BUILD
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
load("@envoy//bazel:envoy_build_system.bzl", "envoy_cc_library", "envoy_package", "envoy_select_enable_http3", "envoy_select_envoy_mobile_request_compression")
load("@envoy//bazel:envoy_build_system.bzl", "envoy_cc_library", "envoy_package", "envoy_select_enable_http3", "envoy_select_envoy_mobile_listener", "envoy_select_envoy_mobile_request_compression")

licenses(["notice"]) # Apache 2

Expand All @@ -12,8 +12,8 @@ envoy_cc_library(
hdrs = ["extension_registry.h"],
repository = "@envoy",
deps = [
"@envoy//source/extensions/listener_managers/listener_manager:listener_manager_lib", #TODO(2711) remove
"extension_registry_platform_additions",
"@envoy//source/common/network/matching:inputs_lib",
"@envoy//source/common/http/matching:inputs_lib",
"@envoy//source/common/network:socket_lib",
"@envoy//source/common/router:upstream_codec_filter_lib",
Expand All @@ -30,7 +30,6 @@ envoy_cc_library(
"@envoy//source/extensions/filters/http/router:config",
"@envoy//source/extensions/filters/network/http_connection_manager:config",
"@envoy//source/extensions/http/header_formatters/preserve_case:config",
"@envoy//source/extensions/listener_managers/listener_manager:connection_handler_lib",
"@envoy//source/extensions/network/dns_resolver/getaddrinfo:config",
"@envoy//source/extensions/path/match/uri_template:config",
"@envoy//source/extensions/path/rewrite/uri_template:config",
Expand Down Expand Up @@ -65,6 +64,12 @@ envoy_cc_library(
"@envoy//source/extensions/filters/http/compressor:config",
],
"@envoy",
) + envoy_select_envoy_mobile_listener(
[
"@envoy//source/extensions/listener_managers/listener_manager:listener_manager_lib",
"@envoy//source/extensions/listener_managers/listener_manager:connection_handler_lib",
],
"@envoy",
),
)

Expand Down
30 changes: 20 additions & 10 deletions mobile/envoy_build_config/extension_registry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@
#include "source/extensions/http/header_formatters/preserve_case/config.h"
#include "source/extensions/http/header_validators/envoy_default/config.h"
#include "source/extensions/http/original_ip_detection/xff/config.h"
#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h"
#include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h"
#include "source/extensions/network/dns_resolver/getaddrinfo/getaddrinfo.h"
#include "source/extensions/path/match/uri_template/config.h"
#include "source/extensions/path/rewrite/uri_template/config.h"
Expand All @@ -43,13 +41,20 @@
#include "source/extensions/udp_packet_writer/default/config.h"
#include "source/extensions/upstreams/http/generic/config.h"

#ifdef ENVOY_MOBILE_ENABLE_LISTENER
#include "source/extensions/listener_managers/listener_manager/listener_manager_impl.h"
#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h"
#endif

#ifdef ENVOY_ENABLE_QUIC
#include "source/common/quic/quic_transport_socket_factory.h"
#ifdef ENVOY_MOBILE_ENABLE_LISTENER
#include "source/common/quic/server_codec_impl.h"
#include "source/extensions/quic/connection_id_generator/envoy_deterministic_connection_id_generator_config.h"
#include "source/extensions/quic/crypto_stream/envoy_quic_crypto_server_stream.h"
#include "source/extensions/quic/proof_source/envoy_quic_proof_source_factory_impl.h"
#endif
#include "source/common/quic/quic_transport_socket_factory.h"
#endif

#include "extension_registry_platform_additions.h"
#include "library/common/extensions/cert_validator/platform_bridge/config.h"
Expand Down Expand Up @@ -139,21 +144,26 @@ void ExtensionRegistry::registerFactories() {
Router::forceRegisterRouteListMatchActionFactory();
Router::forceRegisterRouteMatchActionFactory();
Router::forceRegisterUpstreamCodecFilterFactory();
Server::FilterChain::forceRegisterFilterChainNameActionFactory();
Server::forceRegisterApiListenerManagerFactoryImpl();
Server::forceRegisterConnectionHandlerFactoryImpl();
Server::forceRegisterDefaultListenerManagerFactoryImpl();
Upstream::forceRegisterLogicalDnsClusterFactory();
Upstream::forceRegisterStaticClusterFactory();
Watchdog::forceRegisterAbortActionFactory();

#ifdef ENVOY_MOBILE_ENABLE_LISTENER
Server::forceRegisterConnectionHandlerFactoryImpl();
Server::forceRegisterDefaultListenerManagerFactoryImpl();
Server::FilterChain::forceRegisterFilterChainNameActionFactory();
#endif

#ifdef ENVOY_ENABLE_QUIC
Quic::forceRegisterEnvoyDeterministicConnectionIdGeneratorConfigFactory();
Quic::forceRegisterEnvoyQuicCryptoServerStreamFactoryImpl();
Quic::forceRegisterEnvoyQuicProofSourceFactoryImpl();
Quic::forceRegisterQuicClientTransportSocketConfigFactory();

#ifdef ENVOY_MOBILE_ENABLE_LISTENER
Quic::forceRegisterQuicHttpServerConnectionFactoryImpl();
Quic::forceRegisterQuicServerTransportSocketConfigFactory();
Quic::forceRegisterEnvoyQuicProofSourceFactoryImpl();
Quic::forceRegisterEnvoyDeterministicConnectionIdGeneratorConfigFactory();
#endif
Quic::forceRegisterQuicClientTransportSocketConfigFactory();
#endif

#ifdef ENVOY_MOBILE_REQUEST_COMPRESSION
Expand Down
29 changes: 28 additions & 1 deletion mobile/library/common/engine_common.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,38 @@
#include "source/common/runtime/runtime_impl.h"

namespace Envoy {
namespace {

bool useApiListener(const envoy::config::bootstrap::v3::Bootstrap& bootstrap) {
#ifndef ENVOY_MOBILE_ENABLE_LISTENER
return true;
#endif
if (bootstrap.layered_runtime().layers().size() == 0) {
return false;
}
for (auto field : bootstrap.layered_runtime().layers(0).static_layer().fields()) {
if (absl::string_view(field.first) == "envoy") {
for (auto inner_field : field.second.struct_value().fields()) {
if (absl::string_view(inner_field.first) == "reloadable_features") {
for (auto flag_field : inner_field.second.struct_value().fields()) {
if (absl::string_view(flag_field.first) == "use_api_listener") {
return flag_field.second.bool_value();
}
}
}
}
}
}
return false;
}

} // namespace

EngineCommon::EngineCommon(std::unique_ptr<Envoy::OptionsImpl>&& options)
: options_(std::move(options)) {
// TODO(alyssar) when this defaults true, move E-M default config over to boostrap config.
if (absl::StrContains(options_->configYaml(), "use_api_listener: true")) {
if (useApiListener(options_->configProto()) ||
absl::StrContains(options_->configYaml(), "use_api_listener: true")) {
options_->setListenerManager("envoy.listener_manager_impl.api");
}

Expand Down

0 comments on commit e77841e

Please sign in to comment.