Some improvements to HttpSysDelegator logging and retry logic #2671
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.
This PR has two changes:
Added logic to retry delegation when an ObjectDisposedException happens when delegating
Update HttpSysDelegator to support detaching from and re-initializing queues when the http.sys queue no longer exists #2426 added support to detach from an existing queue when ERROR_OBJECT_NO_LONGER_EXISTS happens due to the owning process detaching from the queue. This works but there exists a race condition where other requests might have already obtained the old handle before we re-initialized and then they get an ObjectDisposedException when trying to use the old handle. Now we retry this error so the request will obtain the new handle and retry the delegation.
Added an ID to the DelegationQueueState (which holds the current handle to the queue) and included that ID in most existing logs.
We've seen some odd behavior with IIS and queue management around iisreset. With multiple threads trying to delegate, detach, re-initialize, it's hard to fully follow from logs what exactly is happening. This change uses the current activity's span id as the DelegationQueueState's id. This allows us to track which requests cause queues to be re-initialized/reset.