From 4f91ab9bc17bba9b16629f1628b2a6f39d35d7e7 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 18 Jun 2021 23:02:24 +0000 Subject: [PATCH 01/10] wip std -> absl --- extensions/common/context.cc | 18 +++++++++--------- extensions/common/context.h | 3 --- extensions/common/proto_util.cc | 4 ++-- extensions/common/util.cc | 2 +- extensions/common/util.h | 18 ++++++++++++++++++ 5 files changed, 30 insertions(+), 15 deletions(-) diff --git a/extensions/common/context.cc b/extensions/common/context.cc index f0eef345063..f8263b15f24 100644 --- a/extensions/common/context.cc +++ b/extensions/common/context.cc @@ -266,9 +266,9 @@ flatbuffers::DetachedBuffer extractLocalNodeFlatBuffer() { } } if (getValue({"node", "metadata", "APP_CONTAINERS"}, &value)) { - std::vector containers = absl::StrSplit(value, ','); + std::vector containers = absl::StrSplit(value, ','); for (const auto& container : containers) { - app_containers.push_back(fbb.CreateString(container)); + app_containers.push_back(fbb.CreateString(toStdStringView(container))); } } @@ -300,7 +300,7 @@ bool extractPeerMetadataFromUpstreamHostMetadata( &endpoint_labels)) { return false; } - std::vector parts = absl::StrSplit(endpoint_labels, ';'); + std::vector parts = absl::StrSplit(endpoint_labels, ';'); // workload label should semicolon separated four parts string: // workload_name;namespace;canonical_service;canonical_revision;cluster_id. if (parts.size() < 4) { @@ -310,22 +310,22 @@ bool extractPeerMetadataFromUpstreamHostMetadata( flatbuffers::Offset workload_name, namespace_, cluster_id; std::vector> labels; - workload_name = fbb.CreateString(parts[0]); - namespace_ = fbb.CreateString(parts[1]); + workload_name = fbb.CreateString(toStdStringView(parts[0])); + namespace_ = fbb.CreateString(toStdStringView(parts[1])); if (!parts[2].empty()) { labels.push_back(CreateKeyVal(fbb, fbb.CreateString(kCanonicalServiceLabelName), - fbb.CreateString(parts[2]))); + fbb.CreateString(toStdStringView(parts[2])))); } if (!parts[3].empty()) { labels.push_back( CreateKeyVal(fbb, fbb.CreateString(kCanonicalServiceRevisionLabelName), - fbb.CreateString(parts[3]))); + fbb.CreateString(toStdStringView(parts[3])))); } if (parts.size() >= 5) { // In case newer proxy runs with old control plane, only extract cluster // name if there are the fifth part. - cluster_id = fbb.CreateString(parts[4]); + cluster_id = fbb.CreateString(toStdStringView(parts[4])); } auto labels_offset = fbb.CreateVectorOfSortedTables(&labels); @@ -518,7 +518,7 @@ bool populateGRPCInfo(RequestInfo* request_info) { } // The expected byte serialization of grpc_stats filter is "x,y" where "x" // is the request message count and "y" is the response message count. - std::vector parts = absl::StrSplit(value, ','); + std::vector parts = absl::StrSplit(value, ','); if (parts.size() == 2) { return absl::SimpleAtoi(parts[0], &request_info->request_message_count) && absl::SimpleAtoi(parts[1], &request_info->response_message_count); diff --git a/extensions/common/context.h b/extensions/common/context.h index 8c6f59c5977..91e52f9d21a 100644 --- a/extensions/common/context.h +++ b/extensions/common/context.h @@ -92,9 +92,6 @@ std::string_view AuthenticationPolicyString(ServiceAuthenticationPolicy policy); std::string_view TCPConnectionStateString(TCPConnectionState state); std::string_view ProtocolString(Protocol protocol); -// None response flag. -const std::string NONE = "-"; - // RequestInfo represents the information collected from filter stream // callbacks. This is used to fill metrics and logs. struct RequestInfo { diff --git a/extensions/common/proto_util.cc b/extensions/common/proto_util.cc index 4958118c23c..8e04ce8497d 100644 --- a/extensions/common/proto_util.cc +++ b/extensions/common/proto_util.cc @@ -70,10 +70,10 @@ flatbuffers::DetachedBuffer extractNodeFlatBufferFromStruct( fbb.CreateString(platform_it.second.string_value()))); } } else if (it.first == "APP_CONTAINERS") { - std::vector containers = + std::vector containers = absl::StrSplit(it.second.string_value(), ','); for (const auto& container : containers) { - app_containers.push_back(fbb.CreateString(container)); + app_containers.push_back(fbb.CreateString(toStdStringView(container))); } } } diff --git a/extensions/common/util.cc b/extensions/common/util.cc index de2db6b2f9f..12a00f6994b 100644 --- a/extensions/common/util.cc +++ b/extensions/common/util.cc @@ -15,7 +15,7 @@ #include -#include "extensions/common/context.h" +#include "extensions/common/util.h" namespace Wasm { namespace Common { diff --git a/extensions/common/util.h b/extensions/common/util.h index fd2773a6116..4df5fc7f566 100644 --- a/extensions/common/util.h +++ b/extensions/common/util.h @@ -17,11 +17,29 @@ #include +#include "absl/strings/string_view.h" + namespace Wasm { namespace Common { +// None response flag. +const std::string NONE = "-"; + // Parses an integer response flag into a readable short string. const std::string parseResponseFlag(uint64_t response_flag); +// Used for converting sanctioned uses of std string_view (e.g. extensions) to absl::string_view +// for internal use. +inline absl::string_view toAbslStringView(std::string_view view) { + return absl::string_view(view.data(), view.size()); +} + +// Used for converting internal absl::string_view to sanctioned uses of std string_view (e.g. +// extensions). +inline std::string_view toStdStringView(absl::string_view view) { + return std::string_view(view.data(), view.size()); +} + + } // namespace Common } // namespace Wasm From be7a96063eb9a97ae49a1ec47f0e33cd77ad6169 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Sat, 19 Jun 2021 00:22:30 +0000 Subject: [PATCH 02/10] update. --- extensions/common/BUILD | 2 ++ extensions/common/proto_util.cc | 1 + extensions/stackdriver/stackdriver.cc | 1 + 3 files changed, 4 insertions(+) diff --git a/extensions/common/BUILD b/extensions/common/BUILD index 938b489341f..8763ff80f17 100644 --- a/extensions/common/BUILD +++ b/extensions/common/BUILD @@ -55,9 +55,11 @@ envoy_cc_library( name = "proto_util", srcs = [ "proto_util.cc", + "util.cc", ], hdrs = [ "proto_util.h", + "util.h", ], repository = "@envoy", visibility = ["//visibility:public"], diff --git a/extensions/common/proto_util.cc b/extensions/common/proto_util.cc index 8e04ce8497d..3103c053d30 100644 --- a/extensions/common/proto_util.cc +++ b/extensions/common/proto_util.cc @@ -19,6 +19,7 @@ #include "absl/strings/str_join.h" #include "absl/strings/str_split.h" +#include "extensions/common/util.h" // WASM_PROLOG #ifndef NULL_PLUGIN diff --git a/extensions/stackdriver/stackdriver.cc b/extensions/stackdriver/stackdriver.cc index 950cf9de61d..ed865723446 100644 --- a/extensions/stackdriver/stackdriver.cc +++ b/extensions/stackdriver/stackdriver.cc @@ -22,6 +22,7 @@ #include #include "extensions/common/proto_util.h" +#include "extensions/common/util.h" #include "extensions/stackdriver/log/exporter.h" #include "extensions/stackdriver/metric/registry.h" #include "google/protobuf/util/time_util.h" From 692717f78fcb7da41212e0477a666da979ae064c Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 25 Jun 2021 16:13:59 +0000 Subject: [PATCH 03/10] wip --- WORKSPACE | 6 +-- envoy.bazelrc | 4 ++ extensions/common/BUILD | 49 ++++++++++++------- extensions/common/util.cc | 4 +- extensions/common/util.h | 9 ++-- extensions/common/wasm/json_util.h | 2 + extensions/metadata_exchange/plugin.cc | 9 ++-- extensions/stackdriver/common/utils.cc | 16 ++++-- extensions/stackdriver/stackdriver.cc | 3 +- extensions/stats/plugin.cc | 10 ++-- .../metadata_exchange/metadata_exchange.cc | 11 +++-- .../tcp/metadata_exchange/metadata_exchange.h | 3 +- 12 files changed, 79 insertions(+), 47 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index b249db97577..d13671954d6 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -38,10 +38,10 @@ bind( # 2. Update .bazelversion, envoy.bazelrc and .bazelrc if needed. # # Note: this is needed by release builder to resolve envoy dep sha to tag. -# Commit date: 2021-06-04 -ENVOY_SHA = "436946bb9df0acda0e4e709592205f0d199dfb79" +# Commit date: 2021-06-18 +ENVOY_SHA = "c7c53b675c5a1337964403d91a2575c18075173c" -ENVOY_SHA256 = "bc6218475a7333b4ca5af106761ee034d47a94350d5507114a692860362f101a" +ENVOY_SHA256 = "d5fe518e092a6466657102c75fb0b4717f7614ba812ab9b2b332c367cc6a4ca0" ENVOY_ORG = "envoyproxy" diff --git a/envoy.bazelrc b/envoy.bazelrc index 21d0db6bb1a..225246fbea4 100644 --- a/envoy.bazelrc +++ b/envoy.bazelrc @@ -46,6 +46,10 @@ build:sanitizer --test_tag_filters=-no_san build:clang --action_env=BAZEL_COMPILER=clang build:clang --linkopt=-fuse-ld=lld +# Flags for Clang + PCH +build:clang-pch --spawn_strategy=local +build:clang-pch --define=ENVOY_CLANG_PCH=1 + # Basic ASAN/UBSAN that works for gcc build:asan --action_env=ENVOY_ASAN=1 build:asan --config=sanitizer diff --git a/extensions/common/BUILD b/extensions/common/BUILD index 8763ff80f17..cb2d564b185 100644 --- a/extensions/common/BUILD +++ b/extensions/common/BUILD @@ -36,17 +36,16 @@ envoy_cc_library( name = "context", srcs = [ "context.cc", - "util.cc", ], hdrs = [ "context.h", "istio_dimensions.h", - "util.h", ], repository = "@envoy", visibility = ["//visibility:public"], deps = [ ":node_info_fb_cc", + ":util", "@proxy_wasm_cpp_host//:null_lib", ], ) @@ -55,21 +54,35 @@ envoy_cc_library( name = "proto_util", srcs = [ "proto_util.cc", - "util.cc", ], hdrs = [ "proto_util.h", - "util.h", ], repository = "@envoy", visibility = ["//visibility:public"], deps = [ ":node_info_fb_cc", + ":util", "@com_google_protobuf//:protobuf", "@proxy_wasm_cpp_host//:null_lib", ], ) +envoy_cc_library( + name = "util", + srcs = [ + "util.cc", + ], + hdrs = [ + "util.h", + ], + repository = "@envoy", + visibility = ["//visibility:public"], + deps = [ + "@proxy_wasm_cpp_host//:null_lib", + ], +) + envoy_cc_library( name = "istio_dimensions", hdrs = [ @@ -113,20 +126,20 @@ envoy_cc_test( ], ) -envoy_cc_benchmark_binary( - name = "proto_util_speed_test", - srcs = ["proto_util_speed_test.cc"], - external_deps = [ - "benchmark", - ], - repository = "@envoy", - deps = [ - ":node_info_fb_cc", - ":proto_util", - "@envoy//source/common/stream_info:filter_state_lib", - "@envoy//source/extensions/common/wasm:wasm_lib", - ], -) +# envoy_cc_benchmark_binary( +# name = "proto_util_speed_test", +# srcs = ["proto_util_speed_test.cc"], +# external_deps = [ +# "benchmark", +# ], +# repository = "@envoy", +# deps = [ +# ":node_info_fb_cc", +# ":proto_util", +# "@envoy//source/common/stream_info:filter_state_lib", +# "@envoy//source/extensions/common/wasm:wasm_lib", +# ], +# ) flatbuffer_library_public( name = "node_info_fbs", diff --git a/extensions/common/util.cc b/extensions/common/util.cc index 12a00f6994b..69bf688a2fe 100644 --- a/extensions/common/util.cc +++ b/extensions/common/util.cc @@ -13,10 +13,10 @@ * limitations under the License. */ -#include - #include "extensions/common/util.h" +#include + namespace Wasm { namespace Common { diff --git a/extensions/common/util.h b/extensions/common/util.h index 4df5fc7f566..08b05bc5b92 100644 --- a/extensions/common/util.h +++ b/extensions/common/util.h @@ -28,18 +28,17 @@ const std::string NONE = "-"; // Parses an integer response flag into a readable short string. const std::string parseResponseFlag(uint64_t response_flag); -// Used for converting sanctioned uses of std string_view (e.g. extensions) to absl::string_view -// for internal use. +// Used for converting sanctioned uses of std string_view (e.g. extensions) to +// absl::string_view for internal use. inline absl::string_view toAbslStringView(std::string_view view) { return absl::string_view(view.data(), view.size()); } -// Used for converting internal absl::string_view to sanctioned uses of std string_view (e.g. -// extensions). +// Used for converting internal absl::string_view to sanctioned uses of std +// string_view (e.g. extensions). inline std::string_view toStdStringView(absl::string_view view) { return std::string_view(view.data(), view.size()); } - } // namespace Common } // namespace Wasm diff --git a/extensions/common/wasm/json_util.h b/extensions/common/wasm/json_util.h index 8fe0813bc45..9f44c4becfd 100644 --- a/extensions/common/wasm/json_util.h +++ b/extensions/common/wasm/json_util.h @@ -26,6 +26,7 @@ namespace Common { using JsonObject = ::nlohmann::json; enum JsonParserResultDetail { + UNKNOWN, OK, OUT_OF_RANGE, TYPE_ERROR, @@ -38,6 +39,7 @@ template std::pair, JsonParserResultDetail> JsonValueAs( const JsonObject&) { static_assert(true, "Unsupported Type"); + return std::make_pair(std::nullopt, JsonParserResultDetail::UNKNOWN); } template <> diff --git a/extensions/metadata_exchange/plugin.cc b/extensions/metadata_exchange/plugin.cc index cc7c1b9f6a1..ce345b75c76 100644 --- a/extensions/metadata_exchange/plugin.cc +++ b/extensions/metadata_exchange/plugin.cc @@ -19,6 +19,7 @@ #include "absl/strings/str_split.h" #include "extensions/common/context.h" #include "extensions/common/proto_util.h" +#include "extensions/common/util.h" #include "extensions/common/wasm/json_util.h" #ifndef NULL_PLUGIN @@ -103,8 +104,9 @@ bool PluginRootContext::configure(size_t configuration_size) { // Parse configuration JSON string. auto result = ::Wasm::Common::JsonParse(configuration_data->view()); if (!result.has_value()) { - LOG_WARN(absl::StrCat("cannot parse plugin configuration JSON string: ", - configuration_data->view())); + LOG_WARN(absl::StrCat( + "cannot parse plugin configuration JSON string: ", + ::Wasm::Common::toAbslStringView(configuration_data->view()))); return false; } @@ -130,7 +132,8 @@ bool PluginRootContext::updatePeer(std::string_view key, } } - auto bytes = Base64::decodeWithoutPadding(peer_header); + auto bytes = + Base64::decodeWithoutPadding(Wasm::Common::toAbslStringView(peer_header)); google::protobuf::Struct metadata; if (!metadata.ParseFromString(bytes)) { return false; diff --git a/extensions/stackdriver/common/utils.cc b/extensions/stackdriver/common/utils.cc index c4277509f90..f654ea1f4d5 100644 --- a/extensions/stackdriver/common/utils.cc +++ b/extensions/stackdriver/common/utils.cc @@ -15,6 +15,7 @@ #include "extensions/stackdriver/common/utils.h" +#include "extensions/common/util.h" #include "extensions/stackdriver/common/constants.h" #include "grpcpp/grpcpp.h" @@ -106,9 +107,13 @@ std::string getGCEInstanceUID(const ::Wasm::Common::FlatNode &node) { } if (name.size() > 0 && project && location) { - return absl::StrCat("//compute.googleapis.com/projects/", - project->value()->string_view(), "/zones/", - location->value()->string_view(), "/instances/", name); + return ""; + // return absl::StrCat( + // absl::string_view("//compute.googleapis.com/projects/"), + // ::Wasm::Common::toAbslStringView(project->value()->string_view()), + // "/zones/", + // ::Wasm::Common::toAbslStringView(location->value()->string_view()), + // "/instances/", name); } return ""; @@ -131,8 +136,9 @@ std::string getOwner(const ::Wasm::Common::FlatNode &node) { } auto created_by = platform_metadata->LookupByKey(kGCECreatedByKey.data()); if (created_by) { - return absl::StrCat("//compute.googleapis.com/", - created_by->value()->string_view()); + return absl::StrCat( + "//compute.googleapis.com/", + ::Wasm::Common::toAbslStringView(created_by->value()->string_view())); } return getGCEInstanceUID(node); diff --git a/extensions/stackdriver/stackdriver.cc b/extensions/stackdriver/stackdriver.cc index ed865723446..b64209c07e1 100644 --- a/extensions/stackdriver/stackdriver.cc +++ b/extensions/stackdriver/stackdriver.cc @@ -264,7 +264,8 @@ void fillAuthzDryRunInfo( std::string shadow_deny_policy = ""; std::string shadow_allow_policy = ""; for (const auto& [key, val] : md.value()->pairs()) { - LOG_DEBUG(absl::StrCat("RBAC metadata found: key=", key, ", value=", val)); + // LOG_DEBUG(absl::StrCat(std::string("RBAC metadata found: key="), key, ", + // value=", val)); if (key == kDryRunDenyShadowEngineResult) { shadow_deny_result = (val == "allowed"); } else if (key == kDryRunAllowShadowEngineResult) { diff --git a/extensions/stats/plugin.cc b/extensions/stats/plugin.cc index e9078872a09..33ec0c51c87 100644 --- a/extensions/stats/plugin.cc +++ b/extensions/stats/plugin.cc @@ -470,8 +470,9 @@ bool PluginRootContext::configure(size_t configuration_size) { auto result = ::Wasm::Common::JsonParse(configuration_data->view()); if (!result.has_value()) { - LOG_WARN(absl::StrCat("cannot parse plugin configuration JSON string: ", - configuration_data->view())); + LOG_WARN(absl::StrCat( + "cannot parse plugin configuration JSON string: ", + ::Wasm::Common::toAbslStringView(configuration_data->view()))); return false; } @@ -634,8 +635,9 @@ void PluginRootContext::report(::Wasm::Common::RequestInfo& request_info, continue; } auto stat = statgen.resolve(istio_dimensions_); - LOG_DEBUG(absl::StrCat("metricKey cache miss ", statgen.name(), " ", - ", stat=", stat.metric_id_, + LOG_DEBUG(absl::StrCat("metricKey cache miss ", + ::Wasm::Common::toAbslStringView(statgen.name()), + " ", ", stat=", stat.metric_id_, ", recurrent=", stat.recurrent_)); if (end_stream || stat.recurrent_) { stat.record(request_info); diff --git a/src/envoy/tcp/metadata_exchange/metadata_exchange.cc b/src/envoy/tcp/metadata_exchange/metadata_exchange.cc index 4ee5b46761a..c49850c77ea 100644 --- a/src/envoy/tcp/metadata_exchange/metadata_exchange.cc +++ b/src/envoy/tcp/metadata_exchange/metadata_exchange.cc @@ -275,9 +275,10 @@ void MetadataExchangeFilter::tryReadProxyData(Buffer::Instance& data) { value_struct.fields().find(ExchangeMetadataHeaderId); if (key_metadata_id_it != value_struct.fields().end()) { Envoy::ProtobufWkt::Value val = key_metadata_id_it->second; - updatePeerId(config_->filter_direction_ == FilterDirection::Downstream - ? ::Wasm::Common::kDownstreamMetadataIdKey - : ::Wasm::Common::kUpstreamMetadataIdKey, + updatePeerId(toAbslStringView(config_->filter_direction_ == + FilterDirection::Downstream + ? ::Wasm::Common::kDownstreamMetadataIdKey + : ::Wasm::Common::kUpstreamMetadataIdKey), val.string_value()); } } @@ -298,7 +299,7 @@ void MetadataExchangeFilter::updatePeer( ? ::Wasm::Common::kDownstreamMetadataKey : ::Wasm::Common::kUpstreamMetadataKey; read_callbacks_->connection().streamInfo().filterState()->setData( - absl::StrCat("wasm.", key), std::move(state), + absl::StrCat("wasm.", toAbslStringView(key)), std::move(state), StreamInfo::FilterState::StateType::Mutable, StreamInfo::FilterState::LifeSpan::Connection); } @@ -335,7 +336,7 @@ void MetadataExchangeFilter::setMetadataNotFoundFilterState() { auto key = config_->filter_direction_ == FilterDirection::Downstream ? ::Wasm::Common::kDownstreamMetadataIdKey : ::Wasm::Common::kUpstreamMetadataIdKey; - updatePeerId(key, ::Wasm::Common::kMetadataNotFoundValue); + updatePeerId(toAbslStringView(key), ::Wasm::Common::kMetadataNotFoundValue); } } // namespace MetadataExchange diff --git a/src/envoy/tcp/metadata_exchange/metadata_exchange.h b/src/envoy/tcp/metadata_exchange/metadata_exchange.h index 9a2c365878c..bd8a9f5c717 100644 --- a/src/envoy/tcp/metadata_exchange/metadata_exchange.h +++ b/src/envoy/tcp/metadata_exchange/metadata_exchange.h @@ -26,6 +26,7 @@ #include "extensions/common/context.h" #include "extensions/common/node_info_bfbs_generated.h" #include "extensions/common/proto_util.h" +#include "source/common/common/stl_helpers.h" #include "source/common/protobuf/protobuf.h" #include "source/extensions/filters/common/expr/cel_state.h" #include "src/envoy/tcp/metadata_exchange/config/metadata_exchange.pb.h" @@ -86,7 +87,7 @@ class MetadataExchangeConfig { static const CelStatePrototype* const prototype = new CelStatePrototype( true, ::Envoy::Extensions::Filters::Common::Expr::CelStateType::FlatBuffers, - ::Wasm::Common::nodeInfoSchema(), + toAbslStringView(::Wasm::Common::nodeInfoSchema()), StreamInfo::FilterState::LifeSpan::Connection); return *prototype; } From 07e9f517e3ca4260f5d8d29bba87247fbf972731 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 25 Jun 2021 16:21:42 +0000 Subject: [PATCH 04/10] update. --- extensions/common/BUILD | 28 +++++++++++----------- extensions/common/proto_util_speed_test.cc | 8 ++++--- extensions/stackdriver/common/utils.cc | 12 +++++----- extensions/stackdriver/stackdriver.cc | 5 ++-- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/extensions/common/BUILD b/extensions/common/BUILD index cb2d564b185..71996ca5fa2 100644 --- a/extensions/common/BUILD +++ b/extensions/common/BUILD @@ -126,20 +126,20 @@ envoy_cc_test( ], ) -# envoy_cc_benchmark_binary( -# name = "proto_util_speed_test", -# srcs = ["proto_util_speed_test.cc"], -# external_deps = [ -# "benchmark", -# ], -# repository = "@envoy", -# deps = [ -# ":node_info_fb_cc", -# ":proto_util", -# "@envoy//source/common/stream_info:filter_state_lib", -# "@envoy//source/extensions/common/wasm:wasm_lib", -# ], -# ) +envoy_cc_benchmark_binary( + name = "proto_util_speed_test", + srcs = ["proto_util_speed_test.cc"], + external_deps = [ + "benchmark", + ], + repository = "@envoy", + deps = [ + ":node_info_fb_cc", + ":proto_util", + "@envoy//source/common/stream_info:filter_state_lib", + "@envoy//source/extensions/common/wasm:wasm_lib", + ], +) flatbuffer_library_public( name = "node_info_fbs", diff --git a/extensions/common/proto_util_speed_test.cc b/extensions/common/proto_util_speed_test.cc index cfd0cdd81e6..ee917f2910e 100644 --- a/extensions/common/proto_util_speed_test.cc +++ b/extensions/common/proto_util_speed_test.cc @@ -16,6 +16,7 @@ #include "benchmark/benchmark.h" #include "extensions/common/node_info_generated.h" #include "extensions/common/proto_util.h" +#include "extensions/common/util.h" #include "google/protobuf/util/json_util.h" #include "source/common/stream_info/filter_state_impl.h" #include "source/extensions/filters/common/expr/cel_state.h" @@ -64,15 +65,16 @@ static void setData(Envoy::StreamInfo::FilterStateImpl& filter_state, auto state_ptr = std::make_unique( prototype); - state_ptr->setValue(value); - filter_state.setData(key, std::move(state_ptr), + state_ptr->setValue(toAbslStringView(value)); + filter_state.setData(toAbslStringView(key), std::move(state_ptr), Envoy::StreamInfo::FilterState::StateType::Mutable); } static const std::string& getData( Envoy::StreamInfo::FilterStateImpl& filter_state, std::string_view key) { return filter_state - .getDataReadOnly(key) + .getDataReadOnly( + toAbslStringView(key)) .value(); } diff --git a/extensions/stackdriver/common/utils.cc b/extensions/stackdriver/common/utils.cc index f654ea1f4d5..f5edd082107 100644 --- a/extensions/stackdriver/common/utils.cc +++ b/extensions/stackdriver/common/utils.cc @@ -108,12 +108,12 @@ std::string getGCEInstanceUID(const ::Wasm::Common::FlatNode &node) { if (name.size() > 0 && project && location) { return ""; - // return absl::StrCat( - // absl::string_view("//compute.googleapis.com/projects/"), - // ::Wasm::Common::toAbslStringView(project->value()->string_view()), - // "/zones/", - // ::Wasm::Common::toAbslStringView(location->value()->string_view()), - // "/instances/", name); + return absl::StrCat( + "//compute.googleapis.com/projects/", + ::Wasm::Common::toAbslStringView(project->value()->string_view()), + "/zones/", + ::Wasm::Common::toAbslStringView(location->value()->string_view()), + "/instances/", ::Wasm::Common::toAbslStringView(name)); } return ""; diff --git a/extensions/stackdriver/stackdriver.cc b/extensions/stackdriver/stackdriver.cc index b64209c07e1..e6776c9831d 100644 --- a/extensions/stackdriver/stackdriver.cc +++ b/extensions/stackdriver/stackdriver.cc @@ -264,8 +264,9 @@ void fillAuthzDryRunInfo( std::string shadow_deny_policy = ""; std::string shadow_allow_policy = ""; for (const auto& [key, val] : md.value()->pairs()) { - // LOG_DEBUG(absl::StrCat(std::string("RBAC metadata found: key="), key, ", - // value=", val)); + LOG_DEBUG(absl::StrCat( + "RBAC metadata found: key=", Wasm::Common::toAbslStringView(key), + ", value=", Wasm::Common::toAbslStringView(val))); if (key == kDryRunDenyShadowEngineResult) { shadow_deny_result = (val == "allowed"); } else if (key == kDryRunAllowShadowEngineResult) { From bc1ce0efbd2ff0589d769f1fecf5876a181c7513 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 25 Jun 2021 20:07:41 +0000 Subject: [PATCH 05/10] update --- extensions/metadata_exchange/plugin.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/extensions/metadata_exchange/plugin.cc b/extensions/metadata_exchange/plugin.cc index ce345b75c76..98c9102af0c 100644 --- a/extensions/metadata_exchange/plugin.cc +++ b/extensions/metadata_exchange/plugin.cc @@ -132,8 +132,13 @@ bool PluginRootContext::updatePeer(std::string_view key, } } - auto bytes = - Base64::decodeWithoutPadding(Wasm::Common::toAbslStringView(peer_header)); +#ifndef NULL_PLUGIN + auto peer_header_view = peer_header; +#else + auto peer_header_view = Wasm::Common::toAbslStringView(peer_header); +#endif + + auto bytes = Base64::decodeWithoutPadding(peer_header_view); google::protobuf::Struct metadata; if (!metadata.ParseFromString(bytes)) { return false; From eff899b9cdd40022221235488060e40dfff4d1dc Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 25 Jun 2021 23:40:51 +0000 Subject: [PATCH 06/10] fix. --- src/envoy/http/authn/authn_utils.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/envoy/http/authn/authn_utils.cc b/src/envoy/http/authn/authn_utils.cc index 096cbd42d8d..f661dd942f0 100644 --- a/src/envoy/http/authn/authn_utils.cc +++ b/src/envoy/http/authn/authn_utils.cc @@ -47,7 +47,7 @@ void process(const Wasm::Common::JsonObject& json_obj, // 1. Try to parse as string. auto value_string = - Wasm::Common::JsonGetField(json_obj, key); + Wasm::Common::JsonGetField(json_obj, key); if (value_string.detail() == Wasm::Common::JsonParserResultDetail::OK) { const auto list = absl::StrSplit(value_string.value().data(), ' ', absl::SkipEmpty()); @@ -60,9 +60,8 @@ void process(const Wasm::Common::JsonObject& json_obj, continue; } // 2. If not a string, try to parse as list of string. - auto value_list = - Wasm::Common::JsonGetField>(json_obj, - key); + auto value_list = Wasm::Common::JsonGetField>( + json_obj, key); if (value_list.detail() == Wasm::Common::JsonParserResultDetail::OK) { for (const auto& s : value_list.value()) { (*claims.mutable_fields())[key] From abe68f5fac5e38d467562487bbbdfe0ec67852bc Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Fri, 25 Jun 2021 23:59:47 +0000 Subject: [PATCH 07/10] update --- extensions/stackdriver/common/utils.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/stackdriver/common/utils.cc b/extensions/stackdriver/common/utils.cc index f5edd082107..a1470e111e2 100644 --- a/extensions/stackdriver/common/utils.cc +++ b/extensions/stackdriver/common/utils.cc @@ -107,7 +107,6 @@ std::string getGCEInstanceUID(const ::Wasm::Common::FlatNode &node) { } if (name.size() > 0 && project && location) { - return ""; return absl::StrCat( "//compute.googleapis.com/projects/", ::Wasm::Common::toAbslStringView(project->value()->string_view()), From e958e8aadbdd6bf348e2da9565ca31fa23e14d09 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Sun, 27 Jun 2021 22:52:35 +0000 Subject: [PATCH 08/10] update --- .bazelrc | 1 + extensions/common/util.h | 2 +- extensions/common/wasm/json_util.h | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bazelrc b/.bazelrc index 2464939ae5d..8da5d3bca16 100644 --- a/.bazelrc +++ b/.bazelrc @@ -52,3 +52,4 @@ build --host_linkopt=-pthread build --action_env=CXXFLAGS=-Wno-unused-variable build:libc++ --action_env=CXXFLAGS=-stdlib="libc++ -Wno-unused-variable" build:rbe-toolchain-clang-libc++ --action_env=CXXFLAGS="-stdlib=libc++ -Wno-unused-variable" +build --cxxopt -Wno-range-loop-analysis diff --git a/extensions/common/util.h b/extensions/common/util.h index 08b05bc5b92..9bfd37f0d0e 100644 --- a/extensions/common/util.h +++ b/extensions/common/util.h @@ -23,7 +23,7 @@ namespace Wasm { namespace Common { // None response flag. -const std::string NONE = "-"; +const char NONE[] = "-"; // Parses an integer response flag into a readable short string. const std::string parseResponseFlag(uint64_t response_flag); diff --git a/extensions/common/wasm/json_util.h b/extensions/common/wasm/json_util.h index 9f44c4becfd..48c8046ba71 100644 --- a/extensions/common/wasm/json_util.h +++ b/extensions/common/wasm/json_util.h @@ -39,7 +39,6 @@ template std::pair, JsonParserResultDetail> JsonValueAs( const JsonObject&) { static_assert(true, "Unsupported Type"); - return std::make_pair(std::nullopt, JsonParserResultDetail::UNKNOWN); } template <> From 078730146fe739495cebc346d33a17aef18cf0ba Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Tue, 29 Jun 2021 21:10:48 +0000 Subject: [PATCH 09/10] clean --- .bazelrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.bazelrc b/.bazelrc index 8da5d3bca16..2464939ae5d 100644 --- a/.bazelrc +++ b/.bazelrc @@ -52,4 +52,3 @@ build --host_linkopt=-pthread build --action_env=CXXFLAGS=-Wno-unused-variable build:libc++ --action_env=CXXFLAGS=-stdlib="libc++ -Wno-unused-variable" build:rbe-toolchain-clang-libc++ --action_env=CXXFLAGS="-stdlib=libc++ -Wno-unused-variable" -build --cxxopt -Wno-range-loop-analysis From d9f2af5de723f1285dd5cd7779f410a3cb73fd33 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Tue, 29 Jun 2021 21:20:18 +0000 Subject: [PATCH 10/10] fix --- extensions/common/util.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions/common/util.cc b/extensions/common/util.cc index a9793965d7a..18256aa5811 100644 --- a/extensions/common/util.cc +++ b/extensions/common/util.cc @@ -16,7 +16,6 @@ #include "extensions/common/util.h" #include "absl/strings/str_cat.h" -#include "extensions/common/context.h" namespace Wasm { namespace Common { @@ -87,7 +86,7 @@ enum ResponseFlag { void appendString(std::string& result, const absl::string_view& append) { if (result.empty()) { - result = append; + result = std::string(append); } else { absl::StrAppend(&result, ",", append); }