Question about multiple upstream-> calls

Maxim Dounin mdounin at
Wed Apr 11 09:41:15 UTC 2012


On Tue, Apr 10, 2012 at 07:50:43PM -0700, Mike Gagnon wrote:

> Hello,
> I am developing a load-balancing module for nginx. I have noticed that
> when a peer fails (say because the connection was reset by the peer)
> the r->upstream-> function is called multiple times on the
> same peer connection: the first time with state == NGX_PEER_FAILED
> set, and the second time with state == 0.
> What is the purpose of calling multiple times?

There is no real reason, it's more or less bug.  It's not yet 
fixed as it doesn't cause any problems with vanilla balancer 
modules (well, actually there is a workaround in upstream 
keepalive, though it's mostly result of the fact it was developed 
as a separate module).  We'll likely fix this somewhere in 

> Is there a
> recommended way to tell if a call to is the first call (for
> that peer connection)? Or to tell if it is the last call (for that
> peer connection)?
> This issue is important for the correctness of my code.

For now I would recommend doing similar thing as upstream 
keepalive does: remember 1st free() call in an internal data and 
ignore subsequent calls.

Maxim Dounin

More information about the nginx-devel mailing list