Documentation
¶
Overview ¶
Package resolver provides internal resolver-related functionality.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func SetConfigSelector ¶
func SetConfigSelector(state resolver.State, cs ConfigSelector) resolver.State
SetConfigSelector sets the config selector in state and returns the new state.
Types ¶
type ClientInterceptor ¶ added in v1.37.0
type ClientInterceptor interface {
// NewStream produces a ClientStream for an RPC which may optionally use
// the provided function to produce a stream for delegation. Note:
// RPCInfo.Context should not be used (will be nil).
//
// done is invoked when the RPC is finished using its connection, or could
// not be assigned a connection. RPC operations may still occur on
// ClientStream after done is called, since the interceptor is invoked by
// application-layer operations. done must never be nil when called.
NewStream(ctx context.Context, ri RPCInfo, done func(), newStream func(ctx context.Context, done func()) (ClientStream, error)) (ClientStream, error)
}
ClientInterceptor is an interceptor for gRPC client streams.
type ClientStream ¶ added in v1.37.0
type ClientStream interface {
// Header returns the header metadata received from the server if there
// is any. It blocks if the metadata is not ready to read.
Header() (metadata.MD, error)
// Trailer returns the trailer metadata from the server, if there is any.
// It must only be called after stream.CloseAndRecv has returned, or
// stream.Recv has returned a non-nil error (including io.EOF).
Trailer() metadata.MD
// CloseSend closes the send direction of the stream. It closes the stream
// when non-nil error is met. It is also not safe to call CloseSend
// concurrently with SendMsg.
CloseSend() error
// Context returns the context for this stream.
//
// It should not be called until after Header or RecvMsg has returned. Once
// called, subsequent client-side retries are disabled.
Context() context.Context
// SendMsg is generally called by generated code. On error, SendMsg aborts
// the stream. If the error was generated by the client, the status is
// returned directly; otherwise, io.EOF is returned and the status of
// the stream may be discovered using RecvMsg.
//
// SendMsg blocks until:
// - There is sufficient flow control to schedule m with the transport, or
// - The stream is done, or
// - The stream breaks.
//
// SendMsg does not wait until the message is received by the server. An
// untimely stream closure may result in lost messages. To ensure delivery,
// users should ensure the RPC completed successfully using RecvMsg.
//
// It is safe to have a goroutine calling SendMsg and another goroutine
// calling RecvMsg on the same stream at the same time, but it is not safe
// to call SendMsg on the same stream in different goroutines. It is also
// not safe to call CloseSend concurrently with SendMsg.
SendMsg(m any) error
// RecvMsg blocks until it receives a message into m or the stream is
// done. It returns io.EOF when the stream completes successfully. On
// any other error, the stream is aborted and the error contains the RPC
// status.
//
// It is safe to have a goroutine calling SendMsg and another goroutine
// calling RecvMsg on the same stream at the same time, but it is not
// safe to call RecvMsg on the same stream in different goroutines.
RecvMsg(m any) error
}
ClientStream is the same as grpc.ClientStream, but defined here for circular dependency reasons.
type ConfigSelector ¶
type ConfigSelector interface {
// Selects the configuration for the RPC, or terminates it using the error.
// This error will be converted by the gRPC library to a status error with
// code UNKNOWN if it is not returned as a status error.
SelectConfig(RPCInfo) (*RPCConfig, error)
}
ConfigSelector controls what configuration to use for every RPC.
func GetConfigSelector ¶
func GetConfigSelector(state resolver.State) ConfigSelector
GetConfigSelector retrieves the config selector from state, if present, and returns it or nil if absent.
type RPCConfig ¶
type RPCConfig struct {
// The context to use for the remainder of the RPC; can pass info to LB
// policy or affect timeout or metadata.
Context context.Context
MethodConfig serviceconfig.MethodConfig // configuration to use for this RPC
OnCommitted func() // Called when the RPC has been committed (retries no longer possible)
Interceptor ClientInterceptor
}
RPCConfig describes the configuration to use for each RPC.
type RPCInfo ¶
type RPCInfo struct {
// Context is the user's context for the RPC and contains headers and
// application timeout. It is passed for interception purposes and for
// efficiency reasons. SelectConfig should not be blocking.
Context context.Context
Method string // i.e. "/Service/Method"
}
RPCInfo contains RPC information needed by a ConfigSelector.
type SafeConfigSelector ¶
type SafeConfigSelector struct {
// contains filtered or unexported fields
}
SafeConfigSelector allows for safe switching of ConfigSelector implementations such that previous values are guaranteed to not be in use when UpdateConfigSelector returns.
func (*SafeConfigSelector) SelectConfig ¶
func (scs *SafeConfigSelector) SelectConfig(r RPCInfo) (*RPCConfig, error)
SelectConfig defers to the current ConfigSelector in scs.
func (*SafeConfigSelector) UpdateConfigSelector ¶
func (scs *SafeConfigSelector) UpdateConfigSelector(cs ConfigSelector)
UpdateConfigSelector swaps to the provided ConfigSelector and blocks until all uses of the previous ConfigSelector have completed.
type ServerInterceptor ¶ added in v1.37.0
type ServerInterceptor interface {
// AllowRPC checks if an incoming RPC is allowed to proceed based on
// information about connection RPC was received on, and HTTP Headers. This
// information will be piped into context.
AllowRPC(ctx context.Context) error // TODO: Make this a real interceptor for filters such as rate limiting.
}
ServerInterceptor is an interceptor for incoming RPC's on gRPC server side.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package delegatingresolver implements a resolver capable of resolving both target URIs and proxy addresses.
|
Package delegatingresolver implements a resolver capable of resolving both target URIs and proxy addresses. |
|
Package dns implements a dns resolver to be installed as the default resolver in grpc.
|
Package dns implements a dns resolver to be installed as the default resolver in grpc. |
|
internal
Package internal contains functionality internal to the dns resolver package.
|
Package internal contains functionality internal to the dns resolver package. |
|
Package passthrough implements a pass-through resolver.
|
Package passthrough implements a pass-through resolver. |
|
Package unix implements a resolver for unix targets.
|
Package unix implements a resolver for unix targets. |