lör 2012-07-07 klockan 21:26 +1200 skrev Amos Jeffries: > What I'm thinking when reading this is that we could implement something > like this easily using the FwdState destinations array and a timeout. > While it is true that our destinations array is N-protocol rather than > 2-protocol, the same failover principles apply between any address > regardless of protocol family.
Actually the underlying problem does not only apply to ipv4/ipv6. It applies in any multi-path situation. > Right now we are still on the old serial sequence algorithm of 0-N timeouts Which is bad. : > * start opening destination[0], create a timeout event of N ms > * when the timeout occurs if the connection has not completed, bump > the destination[0] entry off and try the next. > * when a connection succeeds, > - if serverConn is already set, push the new conn into idle pconn > immediately and stop. > - otherwise; set serverConn and *if* it is the destination[0] shift > that list. continue with the request in any event. Missing some minor things * Integration with OK/BAD address status. If a selected address is known good then wait significantly longer (seconds) for connections to complete before trying next in parallell. * Early killing of redundant connection attempts. After a connection have succeeded we should quickly time out any other pending connection attempts to other addresses for the same host name. But don't mark them as bad. Only a full timeout period should make an address as bad. * A filter to avoid doing this too often per hostname or IP. A suggestion is to wait for previous attempt to complete/fail before trying to open a new connection to an IP of unknown status. > Possibly some modifications for the retries handling. Which retries? Failed connection attempt or failed request? Regards Henrik
