grpc: Index | Files | Directories

package resolver

import ""

Package resolver defines APIs for name resolution in gRPC. All APIs in this package are experimental.


Package Files


func GetDefaultScheme Uses

func GetDefaultScheme() string

GetDefaultScheme gets the default scheme that will be used.

func Register Uses

func Register(b Builder)

Register registers the resolver builder to the resolver map. b.Scheme will be used as the scheme registered with this builder.

NOTE: this function must only be called during initialization time (i.e. in an init() function), and is not thread-safe. If multiple Resolvers are registered with the same name, the one registered last will take effect.

func SetDefaultScheme Uses

func SetDefaultScheme(scheme string)

SetDefaultScheme sets the default scheme that will be used. The default default scheme is "passthrough".

NOTE: this function must only be called during initialization time (i.e. in an init() function), and is not thread-safe. The scheme set last overrides previously set values.

func UnregisterForTesting Uses

func UnregisterForTesting(scheme string)

UnregisterForTesting removes the resolver builder with the given scheme from the resolver map. This function is for testing only.

type Address Uses

type Address struct {
    // Addr is the server address on which a connection will be established.
    Addr string
    // Type is the type of this address.
    Type AddressType
    // ServerName is the name of this address.
    // If non-empty, the ServerName is used as the transport certification authority for
    // the address, instead of the hostname from the Dial target string. In most cases,
    // this should not be set.
    // If Type is GRPCLB, ServerName should be the name of the remote load
    // balancer, not the name of the backend.
    // WARNING: ServerName must only be populated with trusted values. It
    // is insecure to populate it with data from untrusted inputs since untrusted
    // values could be used to bypass the authority checks performed by TLS.
    ServerName string
    // Metadata is the information associated with Addr, which may be used
    // to make load balancing decision.
    Metadata interface{}

Address represents a server the client connects to. This is the EXPERIMENTAL API and may be changed or extended in the future.

type AddressType Uses

type AddressType uint8

AddressType indicates the address type returned by name resolution.

const (
    // Backend indicates the address is for a backend server.
    Backend AddressType = iota
    // GRPCLB indicates the address is for a grpclb load balancer.

type BuildOption Uses

type BuildOption struct {
    // DisableServiceConfig indicates whether resolver should fetch service config data.
    DisableServiceConfig bool

BuildOption includes additional information for the builder to create the resolver.

type Builder Uses

type Builder interface {
    // Build creates a new resolver for the given target.
    // gRPC dial calls Build synchronously, and fails if the returned error is
    // not nil.
    Build(target Target, cc ClientConn, opts BuildOption) (Resolver, error)
    // Scheme returns the scheme supported by this resolver.
    // Scheme is defined at
    Scheme() string

Builder creates a resolver that will be used to watch name resolution updates.

func Get Uses

func Get(scheme string) Builder

Get returns the resolver builder registered with the given scheme.

If no builder is register with the scheme, nil will be returned.

type ClientConn Uses

type ClientConn interface {
    // UpdateState updates the state of the ClientConn appropriately.
    // ReportError notifies the ClientConn that the Resolver encountered an
    // error.  The ClientConn will notify the load balancer and begin calling
    // ResolveNow on the Resolver with exponential backoff.
    // NewAddress is called by resolver to notify ClientConn a new list
    // of resolved addresses.
    // The address list should be the complete list of resolved addresses.
    // Deprecated: Use UpdateState instead.
    NewAddress(addresses []Address)
    // NewServiceConfig is called by resolver to notify ClientConn a new
    // service config. The service config should be provided as a json string.
    // Deprecated: Use UpdateState instead.
    NewServiceConfig(serviceConfig string)
    // ParseServiceConfig parses the provided service config and returns an
    // object that provides the parsed config.
    ParseServiceConfig(serviceConfigJSON string) *serviceconfig.ParseResult

ClientConn contains the callbacks for resolver to notify any updates to the gRPC ClientConn.

This interface is to be implemented by gRPC. Users should not need a brand new implementation of this interface. For the situations like testing, the new implementation should embed this interface. This allows gRPC to add new methods to this interface.

type ResolveNowOption Uses

type ResolveNowOption struct{}

ResolveNowOption includes additional information for ResolveNow.

type Resolver Uses

type Resolver interface {
    // ResolveNow will be called by gRPC to try to resolve the target name
    // again. It's just a hint, resolver can ignore this if it's not necessary.
    // It could be called multiple times concurrently.
    // Close closes the resolver.

Resolver watches for the updates on the specified target. Updates include address updates and service config updates.

type State Uses

type State struct {
    // Addresses is the latest set of resolved addresses for the target.
    Addresses []Address

    // ServiceConfig contains the result from parsing the latest service
    // config.  If it is nil, it indicates no service config is present or the
    // resolver does not provide service configs.
    ServiceConfig *serviceconfig.ParseResult

State contains the current Resolver state relevant to the ClientConn.

type Target Uses

type Target struct {
    Scheme    string
    Authority string
    Endpoint  string

Target represents a target for gRPC, as specified in: It is parsed from the target string that gets passed into Dial or DialContext by the user. And grpc passes it to the resolver and the balancer.

If the target follows the naming spec, and the parsed scheme is registered with grpc, we will parse the target string according to the spec. e.g. "dns://some_authority/" will be parsed into &Target{Scheme: "dns", Authority: "some_authority", Endpoint: ""}

If the target does not contain a scheme, we will apply the default scheme, and set the Target to be the full target string. e.g. "" will be parsed into &Target{Scheme: resolver.GetDefaultScheme(), Endpoint: ""}.

If the parsed scheme is not registered (i.e. no corresponding resolver available to resolve the endpoint), we set the Scheme to be the default scheme, and set the Endpoint to be the full target string. e.g. target string "unknown_scheme://authority/endpoint" will be parsed into &Target{Scheme: resolver.GetDefaultScheme(), Endpoint: "unknown_scheme://authority/endpoint"}.


dnsPackage dns implements a dns resolver to be installed as the default resolver in grpc.
manualPackage manual defines a resolver that can be used to manually send resolved addresses to ClientConn.
passthroughPackage passthrough implements a pass-through resolver.

Package resolver imports 1 packages (graph) and is imported by 103 packages. Updated 2019-10-09. Refresh now. Tools for package owners.