-
Notifications
You must be signed in to change notification settings - Fork 292
CP-48676: Reuse pool sessions on slave logins #6258
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CP-48676: Reuse pool sessions on slave logins #6258
Conversation
81c5fd5
to
f17fb1b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some minor style issues. The general approach seems quite sensible, even if a race can cause xapi to use more than one session (to avoid a loop when getting an invalid resusable session)
f17fb1b
to
b94335a
Compare
The Ring3: BVT + BST suiteruns I have run were all green, both with (211574) and without (211571) additional debug logging. The debug suiterun shows that the pool sessions are being reused as expected. |
b94335a
to
3efb3bb
Compare
3efb3bb
to
151686b
Compare
I've marked all the comments as resolved where appropriate. This is still an outstanding question for me though. |
151686b
to
c6da552
Compare
This is still being tested, apparently the member is not reusing the session enough times (we were trying to determine whether it is able to cope with a coordinator restart, and it seems it can, but then it is not trying to reuse the session either). Putting back into draft until we figure out whether once it is reusing the session properly if it still works. |
OK looked at this in more detail, and the pool session was mostly actually created on the coordinator, so this is fine (it avoids lots of DB calls to create sessions, and reuses them). |
Prevent this reusable pool session from being destroyed so that it remains valid. This feature can be toggled with the flag reuse-pool-sessions. This commit has been reworked to use Atomic instead of a mutex to prevent a deadlock as shown in CA-400339. Signed-off-by: Steven Woods <steven.woods@citrix.com>
Add a new flag validate-reusable-pool-session to xapi globs which skips the reusable pool session validity check if it is false. This saves time as we are no longer calling pool.get_all for each session. Signed-off-by: Steven Woods <steven.woods@citrix.com>
This can be reverted once we have sufficient confidence from running nightlies Signed-off-by: Steven Woods <steven.woods@cloud.com>
1d07b7c
to
e42cca1
Compare
I've added a commit which defaults reuse_pool_sessions to false, so this PR is a noop and safe to merge. We can then run some nightlies with the commit reverted and then revert the commit on master when we are confident. |
This was first introduced in #5986 but was later reverted as the mutex it introduced caused a deadlock with the DB mutex. This PR has now been reworked to use an Atomic variable, removing the need for the mutex.
This PR allows pool sessions to be reused (if the flag is turned on, which it is by default). This greatly speeds up communications between hosts which is important for repetitive calls e.g. one customer was running get_servertime frequently on all hosts in a pool which was causing problems due to the length of each call.
When we get this reusable session, we can optionally validate the session before using it but this increases the duration of the call, so this is off by default. Excepting a toolstack restart, the reusable session should always be valid as it is excluded from deletion in destroy_db_session