Skip to content

Commit 9a20a06

Browse files
authored
allow to specify inactivity timeout for http connections (#12075)
1 parent 3cf6c02 commit 9a20a06

File tree

8 files changed

+11
-4
lines changed

8 files changed

+11
-4
lines changed

ydb/core/driver_lib/run/config_parser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ void TRunCommandConfigParser::ApplyParsedOptions() {
367367
Config.AppConfig.MutableMonitoringConfig()->SetMonitoringAddress(RunOpts.MonitoringAddress);
368368
Config.AppConfig.MutableMonitoringConfig()->SetMonitoringThreads(RunOpts.MonitoringThreads);
369369
Config.AppConfig.MutableMonitoringConfig()->SetMaxRequestsPerSecond(RunOpts.MonitoringMaxRequestsPerSecond);
370+
Config.AppConfig.MutableMonitoringConfig()->SetInactivityTimeout(ToString(RunOpts.MonitoringInactivityTimeout.Seconds()));
370371
Config.AppConfig.MutableMonitoringConfig()->SetMonitoringCertificate(TUnbufferedFileInput(RunOpts.MonitoringCertificateFile).ReadAll());
371372
Config.AppConfig.MutableRestartsCountConfig()->SetRestartsCountFile(RunOpts.RestartsCountFile);
372373
}

ydb/core/driver_lib/run/config_parser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class TRunCommandConfigParser {
5151
TString MonitoringCertificateFile;
5252
ui32 MonitoringThreads;
5353
ui32 MonitoringMaxRequestsPerSecond;
54+
TDuration MonitoringInactivityTimeout;
5455
TString RestartsCountFile;
5556
bool StartTracingBusProxy;
5657
TString TracePath;

ydb/core/driver_lib/run/run.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ void TKikimrRunner::InitializeMonitoring(const TKikimrRunConfig& runConfig, bool
442442
monConfig.Address = appConfig.GetMonitoringConfig().GetMonitoringAddress();
443443
monConfig.Certificate = appConfig.GetMonitoringConfig().GetMonitoringCertificate();
444444
monConfig.MaxRequestsPerSecond = appConfig.GetMonitoringConfig().GetMaxRequestsPerSecond();
445+
monConfig.InactivityTimeout = TDuration::Parse(appConfig.GetMonitoringConfig().GetInactivityTimeout());
445446
if (appConfig.GetMonitoringConfig().HasMonitoringCertificateFile()) {
446447
monConfig.Certificate = TUnbufferedFileInput(appConfig.GetMonitoringConfig().GetMonitoringCertificateFile()).ReadAll();
447448
}

ydb/core/mon/mon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class TMon {
4242
TString RedirectMainPageTo;
4343
TString Certificate;
4444
ui32 MaxRequestsPerSecond = 0;
45+
TDuration InactivityTimeout = TDuration::Minutes(2);
4546
};
4647

4748
virtual ~TMon() = default;

ydb/core/protos/config.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ message TMonitoringConfig {
538538
optional string MonitoringCertificateFile = 15;
539539
optional string MemAllocDumpPathPrefix = 16;
540540
optional uint32 MaxRequestsPerSecond = 17 [default = 0];
541+
optional string InactivityTimeout = 18 [default = "2m"];
541542
}
542543

543544
message TRestartsCountConfig {

ydb/library/actors/http/http_proxy.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct TEvHttpProxy {
6868
std::vector<TString> CompressContentTypes;
6969
ui32 MaxRequestsPerSecond = 0;
7070
ui32 MaxRecycledRequestsCount = DEFAULT_MAX_RECYCLED_REQUESTS_COUNT;
71+
TDuration InactivityTimeout = TDuration::Minutes(2);
7172

7273
TEvAddListeningPort() = default;
7374

@@ -251,6 +252,7 @@ struct TPrivateEndpointInfo : THttpEndpointInfo {
251252
TActorId Owner;
252253
TSslHelpers::TSslHolder<SSL_CTX> SecureContext;
253254
TRateLimiter RateLimiter;
255+
TDuration InactivityTimeout;
254256

255257
TPrivateEndpointInfo(const std::vector<TString>& compressContentTypes)
256258
: THttpEndpointInfo(compressContentTypes)

ydb/library/actors/http/http_proxy_acceptor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class TAcceptorActor : public NActors::TActor<TAcceptorActor>, public THttpConfi
5959
Endpoint->Secure = event->Get()->Secure;
6060
Endpoint->RateLimiter.Limit = event->Get()->MaxRequestsPerSecond;
6161
Endpoint->RateLimiter.Period = TDuration::Seconds(1);
62+
Endpoint->InactivityTimeout = event->Get()->InactivityTimeout;
6263
int err = 0;
6364
if (Endpoint->Secure) {
6465
if (!event->Get()->SslCertificatePem.empty()) {

ydb/library/actors/http/http_proxy_incoming.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ class TIncomingConnectionActor : public TActor<TIncomingConnectionActor<TSocketI
2020
TDeque<THttpIncomingRequestPtr> RecycledRequests;
2121

2222
THPTimer InactivityTimer;
23-
static constexpr TDuration InactivityTimeout = TDuration::Minutes(2);
2423
TEvPollerReady* InactivityEvent = nullptr;
2524

2625
TPollerToken::TPtr PollerToken;
@@ -71,7 +70,7 @@ class TIncomingConnectionActor : public TActor<TIncomingConnectionActor<TSocketI
7170
protected:
7271
void Bootstrap(const TActorContext& ctx) {
7372
InactivityTimer.Reset();
74-
ctx.Schedule(InactivityTimeout, InactivityEvent = new TEvPollerReady(nullptr, false, false));
73+
ctx.Schedule(Endpoint->InactivityTimeout, InactivityEvent = new TEvPollerReady(nullptr, false, false));
7574
LOG_DEBUG_S(ctx, HttpLog, "(#" << TSocketImpl::GetRawSocket() << "," << Address << ") incoming connection opened");
7675
OnAccept(ctx);
7776
}
@@ -177,11 +176,11 @@ class TIncomingConnectionActor : public TActor<TIncomingConnectionActor<TSocketI
177176
}
178177
if (event->Get() == InactivityEvent) {
179178
const TDuration passed = TDuration::Seconds(std::abs(InactivityTimer.Passed()));
180-
if (passed >= InactivityTimeout) {
179+
if (passed >= Endpoint->InactivityTimeout) {
181180
LOG_DEBUG_S(ctx, HttpLog, "(#" << TSocketImpl::GetRawSocket() << "," << Address << ") connection closed by inactivity timeout");
182181
return Die(ctx); // timeout
183182
} else {
184-
ctx.Schedule(InactivityTimeout - passed, InactivityEvent = new TEvPollerReady(nullptr, false, false));
183+
ctx.Schedule(Endpoint->InactivityTimeout - passed, InactivityEvent = new TEvPollerReady(nullptr, false, false));
185184
}
186185
}
187186
if (event->Get()->Write) {

0 commit comments

Comments
 (0)