Always close completed app sessions#36651
Merged
rosstimothy merged 3 commits intomasterfrom Jan 13, 2024
Merged
Conversation
The FnCacheConfig now provides an optional OnExpires callback which will be called when any item in the cache is removed due to expiry. Eviction of expired entries used to only happen on retrieval attempts, but this can now be triggered on demand using (FnCache) RemoveExpired. A new Shutdown method was also added to allow all items in the cache to be removed. If OnExpires is set then it will be called for every item in the cache during Shutdown.
The previous use of gravitational/ttlmap with a fixed capacity led to sessions leaking and never being closed if a spike of sessions greater than the capcity occurred. The sessionChunkCache relied on the expiry callback function set on the ttlmap to be called in order to close the app session and release resources. However, if an item was evicted from the ttlmap because the capacity had been exceeded the expiry callback was fired. Instead of increasing the capacity to a larger size the ttlmap was replaced entirely by utils.FnCache. It offers equivalent functionality while still being actively maintained. This also allowed refactoring to remove the sessionChunkCache entirely since the FnCache took care of most of the added functionality that the ttlmap wrapper was providing. Partially addressed #36541.
zmb3
approved these changes
Jan 13, 2024
Collaborator
zmb3
left a comment
There was a problem hiding this comment.
Overall looks great but I wonder if we need to expire sessions every second.
| } | ||
|
|
||
| func (s *Server) expireSessions() { | ||
| ticker := time.NewTicker(time.Second) |
Collaborator
There was a problem hiding this comment.
Why one second? Seems pretty frequent.
Contributor
Author
There was a problem hiding this comment.
58de094 to
8623b38
Compare
tigrato
approved these changes
Jan 13, 2024
|
@rosstimothy See the table below for backport results.
|
This was referenced Jan 18, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The previous use of gravitational/ttlmap with a fixed capacity led to sessions leaking and never being closed if a spike of sessions greater than the capacity occurred. The sessionChunkCache relied on the expiry callback function set on the ttlmap to be called in order to close the app session and release resources. However, if an item was evicted from the ttlmap because the capacity had been exceeded the expiry callback was fired.
Instead of increasing the capacity to a larger size the ttlmap was replaced entirely by utils.FnCache. It offers equivalent functionality while still being actively maintained. This also allowed refactoring to remove the sessionChunkCache entirely since the FnCache took care of most of the added functionality that the ttlmap wrapper was providing.
Partially addressed #36541.
changelog: Ensure that any opened app session is always closed on completion