masaori335 opened a new pull request, #13474:
URL: https://github.com/apache/trafficserver/pull/13474

   A parent that accepts connections but never sends a response was marked down 
and then restored to the pool by the very next retry probe, even when that 
probe also failed, so it kept receiving traffic indefinitely while healthy 
peers took none of the load.
   
   handle_response_from_parent() called markParentUp() on entry, before the 
switch on current.state, so a parent selected as a retry candidate was restored 
before ATS knew the retry's outcome. markParentUp() zeroes failedAt and 
failCount; the markParentDown() that follows a failed probe then takes its 
result->retry branch, which leaves new_fail_count at 0, so available is never 
re-cleared. The parent therefore returned to the pool with a cleared failure 
count after every retry_time window, no matter how long it stayed degraded.
   
   The CONNECTION_ALIVE branch already calls markParentUp() for a retry that 
actually succeeded, which is the correct restore point. Removing the entry call 
restores the behavior that predates #8546: that commit backed out the 
retry-limiting work and replaced a retryComplete() call -- which only 
decremented an in-flight retry counter and never touched availability -- with 
markParentUp(), silently turning "the retry finished" into "the parent is 
healthy".
   
   Two autests pin both outcomes of the retry path. A parent that is still 
silent when probed stays down; a parent that has recovered is restored. Each 
was negative-controlled against its own call site: reverting this change fails 
the first, and removing the CONNECTION_ALIVE call fails only the second.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to