Source File
resolver_conn_wrapper.go
Belonging Package
google.golang.org/grpc
package grpc
import (
)
func ( *ClientConn, resolver.Builder) (*ccResolverWrapper, error) {
:= &ccResolverWrapper{
cc: ,
done: grpcsync.NewEvent(),
}
var credentials.TransportCredentials
if := .dopts.copts.TransportCredentials; != nil {
= .Clone()
}
:= resolver.BuildOptions{
DisableServiceConfig: .dopts.disableServiceConfig,
DialCreds: ,
CredsBundle: .dopts.copts.CredsBundle,
Dialer: .dopts.copts.Dialer,
}
.resolverMu.Lock()
defer .resolverMu.Unlock()
.resolver, = .Build(.parsedTarget, , )
if != nil {
return nil,
}
return , nil
}
func ( *ccResolverWrapper) ( resolver.ResolveNowOptions) {
.resolverMu.Lock()
if !.done.HasFired() {
.resolver.ResolveNow()
}
.resolverMu.Unlock()
}
func ( *ccResolverWrapper) () {
.resolverMu.Lock()
.resolver.Close()
.done.Fire()
.resolverMu.Unlock()
}
return
}
:= make(chan struct{})
.polling =
go func() {
for := 0; ; ++ {
.resolveNow(resolver.ResolveNowOptions{})
:= time.NewTimer(.cc.dopts.resolveNowBackoff())
select {
case <-:
.Stop()
return
}
}
}()
}
func ( *ccResolverWrapper) ( resolver.State) {
if .done.HasFired() {
return
}
channelz.Infof(logger, .cc.channelzID, "ccResolverWrapper: sending update to cc: %v", )
if channelz.IsOn() {
.addChannelzTraceEvent()
}
.curState =
.poll(.cc.updateResolverState(.curState, nil))
}
func ( *ccResolverWrapper) ( error) {
if .done.HasFired() {
return
}
channelz.Warningf(logger, .cc.channelzID, "ccResolverWrapper: reporting error to cc: %v", )
.poll(.cc.updateResolverState(resolver.State{}, ))
}
func ( *ccResolverWrapper) ( []resolver.Address) {
if .done.HasFired() {
return
}
channelz.Infof(logger, .cc.channelzID, "ccResolverWrapper: sending new addresses to cc: %v", )
if channelz.IsOn() {
.addChannelzTraceEvent(resolver.State{Addresses: , ServiceConfig: .curState.ServiceConfig})
}
.curState.Addresses =
.poll(.cc.updateResolverState(.curState, nil))
}
func ( *ccResolverWrapper) ( string) {
if .done.HasFired() {
return
}
channelz.Infof(logger, .cc.channelzID, "ccResolverWrapper: got new service config: %v", )
if .cc.dopts.disableServiceConfig {
channelz.Info(logger, .cc.channelzID, "Service config lookups disabled; ignoring config")
return
}
:= parseServiceConfig()
if .Err != nil {
channelz.Warningf(logger, .cc.channelzID, "ccResolverWrapper: error parsing service config: %v", .Err)
.poll(balancer.ErrBadResolverState)
return
}
if channelz.IsOn() {
.addChannelzTraceEvent(resolver.State{Addresses: .curState.Addresses, ServiceConfig: })
}
.curState.ServiceConfig =
.poll(.cc.updateResolverState(.curState, nil))
}
func ( *ccResolverWrapper) ( string) *serviceconfig.ParseResult {
return parseServiceConfig()
}
func ( *ccResolverWrapper) ( resolver.State) {
var []string
var , *ServiceConfig
var , bool
if .curState.ServiceConfig != nil {
, = .curState.ServiceConfig.Config.(*ServiceConfig)
}
if .ServiceConfig != nil {
, = .ServiceConfig.Config.(*ServiceConfig)
}
if != || ( && && .rawJSONString != .rawJSONString) {
= append(, "service config updated")
}
if len(.curState.Addresses) > 0 && len(.Addresses) == 0 {
= append(, "resolver returned an empty address list")
} else if len(.curState.Addresses) == 0 && len(.Addresses) > 0 {
= append(, "resolver returned new addresses")
}
channelz.AddTraceEvent(logger, .cc.channelzID, 0, &channelz.TraceEventDesc{
Desc: fmt.Sprintf("Resolver state updated: %+v (%v)", , strings.Join(, "; ")),
Severity: channelz.CtINFO,
})
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |