Skip to content

Commit c76669b

Browse files
author
lexeyo
committed
fix core/server/http: set http graceful shutdown headers after request processing
commit_hash:2133bb9d42294f032144af078f07d99c97f43d7c
1 parent 0129fc4 commit c76669b

2 files changed

Lines changed: 22 additions & 9 deletions

File tree

core/src/server/middlewares/graceful_shutdown_headers.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,32 @@
44
#include <fmt/ranges.h>
55

66
#include <dynamic_config/variables/GRACEFUL_SHUTDOWN_HEADERS.hpp>
7-
87
#include <server/request/internal_request_context.hpp>
98
#include <userver/components/component_config.hpp>
109
#include <userver/components/component_context.hpp>
10+
#include <userver/dynamic_config/storage/component.hpp>
1111
#include <userver/server/http/http_request.hpp>
1212
#include <userver/server/request/request_context.hpp>
1313

1414
USERVER_NAMESPACE_BEGIN
1515

1616
namespace server::middlewares {
1717

18-
GracefulShutdownHeaders::GracefulShutdownHeaders(const handlers::HttpHandlerBase&, const components::State& state)
18+
GracefulShutdownHeaders::GracefulShutdownHeaders(
19+
const handlers::HttpHandlerBase&,
20+
const components::State& state,
21+
const dynamic_config::Source& config_source
22+
)
1923
: HttpMiddlewareBase(),
20-
state_(state)
24+
state_(state),
25+
config_source_(config_source)
2126
{}
2227

2328
void GracefulShutdownHeaders::HandleRequest(http::HttpRequest& request, request::RequestContext& context) const {
29+
Next(request, context);
30+
2431
if (state_.GetServiceLifetimeStage() == components::ServiceLifetimeStage::kGracefulShutdown) {
25-
const auto config = context.GetInternalContext().GetConfigSnapshot();
32+
const auto config = config_source_.GetSnapshot();
2633
auto graceful_shutdown_headers = config[::dynamic_config::GRACEFUL_SHUTDOWN_HEADERS];
2734
if (graceful_shutdown_headers.enabled) {
2835
auto& response = request.GetHttpResponse();
@@ -31,23 +38,22 @@ void GracefulShutdownHeaders::HandleRequest(http::HttpRequest& request, request:
3138
}
3239
}
3340
}
34-
35-
Next(request, context);
3641
}
3742

3843
GracefulShutdownHeadersFactory::GracefulShutdownHeadersFactory(
3944
const components::ComponentConfig& config,
4045
const components::ComponentContext& context
4146
)
4247
: HttpMiddlewareFactoryBase(config, context),
43-
state_(context)
48+
state_(context),
49+
config_source_(context.FindComponent<components::DynamicConfig>().GetSource())
4450
{}
4551

4652
std::unique_ptr<HttpMiddlewareBase> GracefulShutdownHeadersFactory::Create(
4753
const handlers::HttpHandlerBase& handler,
4854
yaml_config::YamlConfig
4955
) const {
50-
return std::make_unique<GracefulShutdownHeaders>(handler, state_);
56+
return std::make_unique<GracefulShutdownHeaders>(handler, state_, config_source_);
5157
}
5258

5359
} // namespace server::middlewares

core/src/server/middlewares/graceful_shutdown_headers.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <userver/components/state.hpp>
4+
#include <userver/dynamic_config/source.hpp>
45
#include <userver/server/middlewares/builtin.hpp>
56
#include <userver/server/middlewares/http_middleware_base.hpp>
67
USERVER_NAMESPACE_BEGIN
@@ -9,12 +10,17 @@ namespace server::middlewares {
910

1011
class GracefulShutdownHeaders final : public HttpMiddlewareBase {
1112
public:
12-
explicit GracefulShutdownHeaders(const handlers::HttpHandlerBase&, const components::State& state);
13+
explicit GracefulShutdownHeaders(
14+
const handlers::HttpHandlerBase&,
15+
const components::State& state,
16+
const dynamic_config::Source& config_source
17+
);
1318

1419
private:
1520
void HandleRequest(http::HttpRequest& request, request::RequestContext& context) const override;
1621

1722
const components::State state_;
23+
const dynamic_config::Source config_source_;
1824
};
1925

2026
class GracefulShutdownHeadersFactory final : public HttpMiddlewareFactoryBase {
@@ -30,6 +36,7 @@ class GracefulShutdownHeadersFactory final : public HttpMiddlewareFactoryBase {
3036
) const override;
3137

3238
const components::State state_;
39+
const dynamic_config::Source config_source_;
3340
};
3441

3542
} // namespace server::middlewares

0 commit comments

Comments
 (0)