Skip to content

Conversation

@gjcairo
Copy link
Collaborator

Motivation

We currently provide an idle read timeout to fail requests that take more than a given amount of time to produce any response data. We were missing its counterpart: to provide a timeout for when no request data is being written either.
This could happen, for example, when uploading large files: if for whatever reason (e.g. back pressure from the server, etc) the client does not write any bytes, and there is no data being sent from the server either, the connection could be idle and unused, but remain open for longer than necessary. With an idle write timeout, we can avoid this.

Modifications

Added a new idle write timeout.

Result

Users can now configure an idle write timeout in addition to an idle read timeout.

@gjcairogjcairo marked this pull request as ready for review December 14, 2023 15:24
@gjcairogjcairo requested a review from dnadobaDecember 15, 2023 12:02
assert(self.idleWriteTimeoutTimer ==nil,"Expected there is no timeout timer so far.")

self.idleWriteTimeoutTimer =self.eventLoop.scheduleTask(in: timeAmount){
guardself.idleWriteTimeoutTimer !=nilelse{return}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In HTTP1 we use a timer "ID" but here we are just setting the timer to nil. Is there a reason for these two different approaches?

Copy link
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is an inconsistency and should be changed because race conditions can happen with this current approach. It was actually fixed for HTTP1 in #455, but not in HTTP2. I just decided to keep things as they currently are in this PR (without using the timer ID) to avoid mixing multiple changes in a single PR, but I'll send a follow-up that adds a timer and changes these checks.

@gjcairogjcairo added the 🆕 semver/minor Adds new public API. label Dec 18, 2023
@gjcairogjcairo merged commit d2d3566 into swift-server:mainDec 18, 2023
@gjcairogjcairo deleted the write-timeout branch December 18, 2023 12:06
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🆕 semver/minorAdds new public API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gjcairo@dnadoba