Skip to content

dualstack: Move resolver re-resolution out of subconn and into pickfirst #7534

@arjan-bal

Description

@arjan-bal

Presently, addrConn is requesting a re-resolution before reporting TRANSIENT_FAILURE once all the addresses have been tried:

grpc-go/clientconn.go

Lines 1256 to 1266 in 3cb3342

if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil {
ac.cc.resolveNow(resolver.ResolveNowOptions{})
ac.mu.Lock()
if acCtx.Err() != nil {
// addrConn was torn down.
ac.mu.Unlock()
return
}
// After exhausting all addresses, the addrConn enters
// TRANSIENT_FAILURE.
ac.updateConnectivityState(connectivity.TransientFailure, err)

With the dualstack changes for moving pickfirst logic from the subchannel to the new pickfirst LB policy, there will be one address per subchannel and the re-resolution should happen only once all the subchannels have reported TRANSIENT_FAILURE once. Subsequent re-resolutions should happen after seeing |subchannels| TRANSIENT_FAILUREs.

Metadata

Metadata

Assignees

Labels

Area: Resolvers/BalancersIncludes LB policy & NR APIs, resolver/balancer/picker wrappers, LB policy impls and utilities.P2Type: Internal CleanupRefactors, etc

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions