From 4a0ccfdfbb02c08ebe847b50aa820ed1760dcada Mon Sep 17 00:00:00 2001 From: Kuat Yessenov Date: Tue, 22 Jan 2019 14:45:46 -0800 Subject: [PATCH 1/2] use route directive regardless of rpc status Signed-off-by: Kuat Yessenov --- src/envoy/http/mixer/filter.cc | 25 ++++++++++++++++--------- src/istio/mixerclient/check_cache.h | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/envoy/http/mixer/filter.cc b/src/envoy/http/mixer/filter.cc index f06b99062f1..e02b9f8814a 100644 --- a/src/envoy/http/mixer/filter.cc +++ b/src/envoy/http/mixer/filter.cc @@ -155,21 +155,16 @@ void Filter::completeCheck(const CheckResponseInfo& info) { return; } + route_directive_ = info.route_directive; + + // set UAEX access log flag if (!status.ok()) { - state_ = Responded; - int status_code = ::istio::utils::StatusHttpCode(status.error_code()); - decoder_callbacks_->sendLocalReply(Code(status_code), status.ToString(), - nullptr, absl::nullopt); decoder_callbacks_->streamInfo().setResponseFlag( StreamInfo::ResponseFlag::UnauthorizedExternalService); - return; } - state_ = Complete; - route_directive_ = info.route_directive; - // handle direct response from the route directive - if (status.ok() && route_directive_.direct_response_code() != 0) { + if (route_directive_.direct_response_code() != 0) { ENVOY_LOG(debug, "Mixer::Filter direct response"); state_ = Responded; decoder_callbacks_->sendLocalReply( @@ -182,6 +177,18 @@ void Filter::completeCheck(const CheckResponseInfo& info) { return; } + // create a local reply for status not OK even if there is no direct response + if (!status.ok()) { + state_ = Responded; + + int status_code = ::istio::utils::StatusHttpCode(status.error_code()); + decoder_callbacks_->sendLocalReply(Code(status_code), status.ToString(), + nullptr, absl::nullopt); + return; + } + + state_ = Complete; + // handle request header operations if (nullptr != headers_) { UpdateHeaders(*headers_, route_directive_.request_header_operations()); diff --git a/src/istio/mixerclient/check_cache.h b/src/istio/mixerclient/check_cache.h index e5aa7ea934d..9e2d6d3fc2d 100644 --- a/src/istio/mixerclient/check_cache.h +++ b/src/istio/mixerclient/check_cache.h @@ -76,7 +76,7 @@ class CheckCache { // Check status. ::google::protobuf::util::Status status_; - // Route directive (if status is OK). + // Route directive ::istio::mixer::v1::RouteDirective route_directive_; // The function to set check response. From a108a2c468aa90ddb60bf0d527982db50b62d6d9 Mon Sep 17 00:00:00 2001 From: Kuat Yessenov Date: Tue, 22 Jan 2019 17:34:43 -0800 Subject: [PATCH 2/2] log response code Signed-off-by: Kuat Yessenov --- src/envoy/http/mixer/filter.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/envoy/http/mixer/filter.cc b/src/envoy/http/mixer/filter.cc index e02b9f8814a..788e7b228ac 100644 --- a/src/envoy/http/mixer/filter.cc +++ b/src/envoy/http/mixer/filter.cc @@ -165,11 +165,11 @@ void Filter::completeCheck(const CheckResponseInfo& info) { // handle direct response from the route directive if (route_directive_.direct_response_code() != 0) { - ENVOY_LOG(debug, "Mixer::Filter direct response"); + int status_code = route_directive_.direct_response_code(); + ENVOY_LOG(debug, "Mixer::Filter direct response {}", status_code); state_ = Responded; decoder_callbacks_->sendLocalReply( - Code(route_directive_.direct_response_code()), - route_directive_.direct_response_body(), + Code(status_code), route_directive_.direct_response_body(), [this](HeaderMap& headers) { UpdateHeaders(headers, route_directive_.response_header_operations()); },