diff --git a/source/extensions/filters/http/ratelimit/ratelimit.cc b/source/extensions/filters/http/ratelimit/ratelimit.cc index fa4122ef8dc16..d1b31f67e7268 100644 --- a/source/extensions/filters/http/ratelimit/ratelimit.cc +++ b/source/extensions/filters/http/ratelimit/ratelimit.cc @@ -150,7 +150,9 @@ void Filter::complete(RateLimit::LimitStatus status, Http::HeaderMapPtr&& header } else if (status == RateLimit::LimitStatus::Error) { if (config_->failureModeAllow()) { cluster_->statsScope().counter("ratelimit.failure_mode_allowed").inc(); - callbacks_->continueDecoding(); + if (!initiating_call_) { + callbacks_->continueDecoding(); + } } else { state_ = State::Responded; callbacks_->sendLocalReply(Http::Code::InternalServerError, "", nullptr); diff --git a/source/extensions/filters/network/ratelimit/ratelimit.cc b/source/extensions/filters/network/ratelimit/ratelimit.cc index b74f94d0e0fdc..6543292797d57 100644 --- a/source/extensions/filters/network/ratelimit/ratelimit.cc +++ b/source/extensions/filters/network/ratelimit/ratelimit.cc @@ -91,7 +91,9 @@ void Filter::complete(RateLimit::LimitStatus status, Http::HeaderMapPtr&&) { } else if (status == RateLimit::LimitStatus::Error) { if (config_->failureModeAllow()) { config_->stats().failure_mode_allowed_.inc(); - filter_callbacks_->continueReading(); + if (!calling_limit_) { + filter_callbacks_->continueReading(); + } } else { config_->stats().cx_closed_.inc(); filter_callbacks_->connection().close(Network::ConnectionCloseType::NoFlush);