feat: enable tcp keepalive for http server #4019
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I hereby agree to the terms of the GreptimeDB CLA.
Refer to a related PR or issue link (optional)
What's changed and what's your intention?
In our customer's env, we've observed a lot of "dangling" http connections. They are all in the “established” state, even the client side pods were already destroyed long before. These dangling connections are harmful, somehow they consumed a lot of memory.
For the origin of the dangling connections, my guessing is that the client side pods are not gracefully shutdown, or the bad network. They are both common situations in cloud env, so I decide to add the keepalive option for http server: if the connections are idle for 1 hour, close it actively in the server side.
I'm a little hesitate to expose the keepalive option in the config file. For http connection, if not http2, rebuilding is very common. Any decent http connection pool can do that (there are keepalive options in themselves, too). So I think for the sake of simplicity, the keepalive option is hardcoded, and make it one hour long so to give the connections long enough time to say they are alive.
After adding the keepalive option, our customer says the memory issue is gone.
This PR also modify some codes to make greptimedb able to be integrated into other projects.
Checklist