Documentation ¶
Overview ¶
Package topology contains types that handles the discovery, monitoring, and selection of servers. This package is designed to expose enough inner workings of service discovery and monitoring to allow low level applications to have fine grained control, while hiding most of the detailed implementation of the algorithms.
Index ¶
- Variables
- type Connection
- func (c *Connection) Address() address.Address
- func (c *Connection) Close() error
- func (c *Connection) CompressWireMessage(src, dst []byte) ([]byte, error)
- func (c *Connection) Description() description.Server
- func (c *Connection) ID() string
- func (c *Connection) ReadWireMessage(ctx context.Context, dst []byte) ([]byte, error)
- func (c *Connection) WriteWireMessage(ctx context.Context, wm []byte) error
- type ConnectionError
- type ConnectionOption
- func WithAppName(fn func(string) string) ConnectionOption
- func WithCompressors(fn func([]string) []string) ConnectionOption
- func WithConnectTimeout(fn func(time.Duration) time.Duration) ConnectionOption
- func WithDialer(fn func(Dialer) Dialer) ConnectionOption
- func WithHandshaker(fn func(Handshaker) Handshaker) ConnectionOption
- func WithIdleTimeout(fn func(time.Duration) time.Duration) ConnectionOption
- func WithLifeTimeout(fn func(time.Duration) time.Duration) ConnectionOption
- func WithMonitor(fn func(*event.CommandMonitor) *event.CommandMonitor) ConnectionOption
- func WithReadTimeout(fn func(time.Duration) time.Duration) ConnectionOption
- func WithTLSConfig(fn func(*tls.Config) *tls.Config) ConnectionOption
- func WithWriteTimeout(fn func(time.Duration) time.Duration) ConnectionOption
- func WithZlibLevel(fn func(*int) *int) ConnectionOption
- type Dialer
- type DialerFunc
- type Handshaker
- type HandshakerFunc
- type MonitorMode
- type Option
- func WithConnString(fn func(connstring.ConnString) connstring.ConnString) Option
- func WithMode(fn func(MonitorMode) MonitorMode) Option
- func WithReplicaSetName(fn func(string) string) Option
- func WithSeedList(fn func(...string) []string) Option
- func WithServerOptions(fn func(...ServerOption) []ServerOption) Option
- func WithServerSelectionTimeout(fn func(time.Duration) time.Duration) Option
- type PoolError
- type SelectedServer
- type Server
- func (s *Server) Connect(updateCallback func(description.Server)) error
- func (s *Server) Connection(ctx context.Context) (driver.Connection, error)
- func (s *Server) ConnectionLegacy(ctx context.Context) (connectionlegacy.Connection, error)
- func (s *Server) Description() description.Server
- func (s *Server) Disconnect(ctx context.Context) error
- func (s *Server) Drain() error
- func (s *Server) ProcessError(err error)
- func (s *Server) ProcessWriteConcernError(err *result.WriteConcernError)
- func (s *Server) RequestImmediateCheck()
- func (s *Server) SelectedDescription() description.SelectedServer
- func (s *Server) String() string
- func (s *Server) Subscribe() (*ServerSubscription, error)
- type ServerOption
- func WithClock(fn func(clock *session.ClusterClock) *session.ClusterClock) ServerOption
- func WithCompressionOptions(fn func(...string) []string) ServerOption
- func WithConnectionOptions(fn func(...ConnectionOption) []ConnectionOption) ServerOption
- func WithHeartbeatInterval(fn func(time.Duration) time.Duration) ServerOption
- func WithHeartbeatTimeout(fn func(time.Duration) time.Duration) ServerOption
- func WithMaxConnections(fn func(uint16) uint16) ServerOption
- func WithMaxIdleConnections(fn func(uint16) uint16) ServerOption
- func WithRegistry(fn func(*bsoncodec.Registry) *bsoncodec.Registry) ServerOption
- type ServerSubscription
- type Subscription
- type Topology
- func (t *Topology) Connect() error
- func (t *Topology) Description() description.Topology
- func (t *Topology) Disconnect(ctx context.Context) error
- func (t *Topology) FindServer(selected description.Server) (*SelectedServer, error)
- func (t *Topology) Kind() description.TopologyKind
- func (t *Topology) RequestImmediateCheck()
- func (t *Topology) SelectServer(ctx context.Context, ss description.ServerSelector) (driver.Server, error)
- func (t *Topology) SelectServerLegacy(ctx context.Context, ss description.ServerSelector) (*SelectedServer, error)
- func (t *Topology) String() string
- func (t *Topology) Subscribe() (*Subscription, error)
- func (t *Topology) SupportsRetry() bool
- func (t *Topology) SupportsSessions() bool
Constants ¶
This section is empty.
Variables ¶
var ErrConnectionClosed = ConnectionError{ConnectionID: "<closed>", /* contains filtered or unexported fields */}
ErrConnectionClosed is returned from an attempt to use an already closed connection.
var ErrPoolConnected = PoolError("pool is connected")
ErrPoolConnected is returned from an attempt to connect an already connected pool
var ErrPoolDisconnected = PoolError("pool is disconnected or disconnecting")
ErrPoolDisconnected is returned from an attempt to disconnect an already disconnected or disconnecting pool.
var ErrServerClosed = errors.New("server is closed")
ErrServerClosed occurs when an attempt to get a connection is made after the server has been closed.
var ErrServerConnected = errors.New("server is connected")
ErrServerConnected occurs when at attempt to connect is made after a server has already been connected.
var ErrServerSelectionTimeout = errors.New("server selection timeout")
ErrServerSelectionTimeout is returned from server selection when the server selection process took longer than allowed by the timeout.
var ErrSubscribeAfterClosed = errors.New("cannot subscribe after close")
ErrSubscribeAfterClosed is returned when a user attempts to subscribe to a closed Server or Topology.
var ErrTopologyClosed = errors.New("topology is closed")
ErrTopologyClosed is returned when a user attempts to call a method on a closed Topology.
var ErrTopologyConnected = errors.New("topology is connected or connecting")
ErrTopologyConnected is returned whena user attempts to connect to an already connected Topology.
var ErrWrongPool = PoolError("connection does not belong to this pool")
ErrWrongPool is return when a connection is returned to a pool it doesn't belong to.
Functions ¶
This section is empty.
Types ¶
type Connection ¶ added in v1.0.3
type Connection struct {
// contains filtered or unexported fields
}
Connection implements the driver.Connection interface. It allows reading and writing wire messages.
func (*Connection) Address ¶ added in v1.0.3
func (c *Connection) Address() address.Address
Address returns the address of this connection.
func (*Connection) Close ¶ added in v1.0.3
func (c *Connection) Close() error
Close returns this connection to the connection pool. This method may not close the underlying socket.
func (*Connection) CompressWireMessage ¶ added in v1.0.3
func (c *Connection) CompressWireMessage(src, dst []byte) ([]byte, error)
CompressWireMessage handles compressing the provided wire message using the underlying connection's compressor. The dst parameter will be overwritten with the new wire message. If there is no compressor set on the underlying connection, then no compression will be performed.
func (*Connection) Description ¶ added in v1.0.3
func (c *Connection) Description() description.Server
Description returns the server description of the server this connection is connected to.
func (*Connection) ID ¶ added in v1.0.3
func (c *Connection) ID() string
ID returns the ID of this connection.
func (*Connection) ReadWireMessage ¶ added in v1.0.3
ReadWireMessage handles reading a wire message from the underlying connection. The dst parameter will be overwritten with the new wire message.
func (*Connection) WriteWireMessage ¶ added in v1.0.3
func (c *Connection) WriteWireMessage(ctx context.Context, wm []byte) error
WriteWireMessage handles writing a wire message to the underlying connection.
type ConnectionError ¶ added in v1.0.3
type ConnectionError struct { ConnectionID string Wrapped error // contains filtered or unexported fields }
ConnectionError represents a connection error.
func (ConnectionError) Error ¶ added in v1.0.3
func (e ConnectionError) Error() string
Error implements the error interface.
type ConnectionOption ¶ added in v1.0.3
type ConnectionOption func(*connectionConfig) error
ConnectionOption is used to configure a connection.
func WithAppName ¶ added in v1.0.3
func WithAppName(fn func(string) string) ConnectionOption
WithAppName sets the application name which gets sent to MongoDB when it first connects.
func WithCompressors ¶ added in v1.0.3
func WithCompressors(fn func([]string) []string) ConnectionOption
WithCompressors sets the compressors that can be used for communication.
func WithConnectTimeout ¶ added in v1.0.3
func WithConnectTimeout(fn func(time.Duration) time.Duration) ConnectionOption
WithConnectTimeout configures the maximum amount of time a dial will wait for a connect to complete. The default is 30 seconds.
func WithDialer ¶ added in v1.0.3
func WithDialer(fn func(Dialer) Dialer) ConnectionOption
WithDialer configures the Dialer to use when making a new connection to MongoDB.
func WithHandshaker ¶ added in v1.0.3
func WithHandshaker(fn func(Handshaker) Handshaker) ConnectionOption
WithHandshaker configures the Handshaker that wll be used to initialize newly dialed connections.
func WithIdleTimeout ¶ added in v1.0.3
func WithIdleTimeout(fn func(time.Duration) time.Duration) ConnectionOption
WithIdleTimeout configures the maximum idle time to allow for a connection.
func WithLifeTimeout ¶ added in v1.0.3
func WithLifeTimeout(fn func(time.Duration) time.Duration) ConnectionOption
WithLifeTimeout configures the maximum life of a connection.
func WithMonitor ¶ added in v1.0.3
func WithMonitor(fn func(*event.CommandMonitor) *event.CommandMonitor) ConnectionOption
WithMonitor configures a event for command monitoring.
func WithReadTimeout ¶ added in v1.0.3
func WithReadTimeout(fn func(time.Duration) time.Duration) ConnectionOption
WithReadTimeout configures the maximum read time for a connection.
func WithTLSConfig ¶ added in v1.0.3
func WithTLSConfig(fn func(*tls.Config) *tls.Config) ConnectionOption
WithTLSConfig configures the TLS options for a connection.
func WithWriteTimeout ¶ added in v1.0.3
func WithWriteTimeout(fn func(time.Duration) time.Duration) ConnectionOption
WithWriteTimeout configures the maximum write time for a connection.
func WithZlibLevel ¶ added in v1.0.3
func WithZlibLevel(fn func(*int) *int) ConnectionOption
WithZlibLevel sets the zLib compression level.
type Dialer ¶ added in v1.0.3
type Dialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
Dialer is used to make network connections.
DefaultDialer is the Dialer implementation that is used by this package. Changing this will also change the Dialer used for this package. This should only be changed why all of the connections being made need to use a different Dialer. Most of the time, using a WithDialer option is more appropriate than changing this variable.
type DialerFunc ¶ added in v1.0.3
DialerFunc is a type implemented by functions that can be used as a Dialer.
func (DialerFunc) DialContext ¶ added in v1.0.3
DialContext implements the Dialer interface.
type Handshaker ¶ added in v1.0.3
type Handshaker = driver.Handshaker
Handshaker is the interface implemented by types that can perform a MongoDB handshake over a provided driver.Connection. This is used during connection initialization. Implementations must be goroutine safe.
type HandshakerFunc ¶ added in v1.0.3
type HandshakerFunc = driver.HandshakerFunc
HandshakerFunc is an adapter to allow the use of ordinary functions as connection handshakers.
type MonitorMode ¶
type MonitorMode uint8
MonitorMode represents the way in which a server is monitored.
const ( AutomaticMode MonitorMode = iota SingleMode )
These constants are the available monitoring modes.
type Option ¶
type Option func(*config) error
Option is a configuration option for a topology.
func WithConnString ¶
func WithConnString(fn func(connstring.ConnString) connstring.ConnString) Option
WithConnString configures the topology using the connection string.
func WithMode ¶
func WithMode(fn func(MonitorMode) MonitorMode) Option
WithMode configures the topology's monitor mode.
func WithReplicaSetName ¶
WithReplicaSetName configures the topology's default replica set name.
func WithSeedList ¶
WithSeedList configures a topology's seed list.
func WithServerOptions ¶
func WithServerOptions(fn func(...ServerOption) []ServerOption) Option
WithServerOptions configures a topology's server options for when a new server needs to be created.
type PoolError ¶ added in v1.0.3
type PoolError string
PoolError is an error returned from a Pool method.
type SelectedServer ¶
type SelectedServer struct { *Server Kind description.TopologyKind }
SelectedServer represents a specific server that was selected during server selection. It contains the kind of the topology it was selected from.
func (*SelectedServer) Description ¶
func (ss *SelectedServer) Description() description.SelectedServer
Description returns a description of the server as of the last heartbeat.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is a single server within a topology.
func ConnectServer ¶
func ConnectServer(addr address.Address, updateCallback func(description.Server), opts ...ServerOption) (*Server, error)
ConnectServer creates a new Server and then initializes it using the Connect method.
func NewServer ¶
func NewServer(addr address.Address, opts ...ServerOption) (*Server, error)
NewServer creates a new server. The mongodb server at the address will be monitored on an internal monitoring goroutine.
func (*Server) Connect ¶
func (s *Server) Connect(updateCallback func(description.Server)) error
Connect initializes the Server by starting background monitoring goroutines. This method must be called before a Server can be used.
func (*Server) Connection ¶
Connection gets a connection to the server.
func (*Server) ConnectionLegacy ¶ added in v1.0.3
func (s *Server) ConnectionLegacy(ctx context.Context) (connectionlegacy.Connection, error)
ConnectionLegacy gets a connection to the server.
func (*Server) Description ¶
func (s *Server) Description() description.Server
Description returns a description of the server as of the last heartbeat.
func (*Server) Disconnect ¶
Disconnect closes sockets to the server referenced by this Server. Subscriptions to this Server will be closed. Disconnect will shutdown any monitoring goroutines, close the idle connection pool, and will wait until all the in use connections have been returned to the connection pool and are closed before returning. If the context expires via cancellation, deadline, or timeout before the in use connections have been returned, the in use connections will be closed, resulting in the failure of any in flight read or write operations. If this method returns with no errors, all connections associated with this Server have been closed.
func (*Server) Drain ¶
Drain will drain the connection pool of this server. This is mainly here so the pool for the server doesn't need to be directly exposed and so that when an error is returned from reading or writing, a client can drain the pool for this server. This is exposed here so we don't have to wrap the Connection type and sniff responses for errors that would cause the pool to be drained, which can in turn centralize the logic for handling errors in the Client type.
TODO(GODRIVER-617): I don't think we actually need this method. It's likely replaced by ProcessError.
func (*Server) ProcessError ¶ added in v1.0.3
ProcessError handles SDAM error handling and implements driver.ErrorProcessor.
func (*Server) ProcessWriteConcernError ¶ added in v1.0.0
func (s *Server) ProcessWriteConcernError(err *result.WriteConcernError)
ProcessWriteConcernError checks if a WriteConcernError is an isNotMaster or isRecovering error, and if so updates the server accordingly.
func (*Server) RequestImmediateCheck ¶
func (s *Server) RequestImmediateCheck()
RequestImmediateCheck will cause the server to send a heartbeat immediately instead of waiting for the heartbeat timeout.
func (*Server) SelectedDescription ¶
func (s *Server) SelectedDescription() description.SelectedServer
SelectedDescription returns a description.SelectedServer with a Kind of Single. This can be used when performing tasks like monitoring a batch of servers and you want to run one off commands against those servers.
func (*Server) Subscribe ¶
func (s *Server) Subscribe() (*ServerSubscription, error)
Subscribe returns a ServerSubscription which has a channel on which all updated server descriptions will be sent. The channel will have a buffer size of one, and will be pre-populated with the current description.
type ServerOption ¶
type ServerOption func(*serverConfig) error
ServerOption configures a server.
func WithClock ¶
func WithClock(fn func(clock *session.ClusterClock) *session.ClusterClock) ServerOption
WithClock configures the ClusterClock for the server to use.
func WithCompressionOptions ¶
func WithCompressionOptions(fn func(...string) []string) ServerOption
WithCompressionOptions configures the server's compressors.
func WithConnectionOptions ¶
func WithConnectionOptions(fn func(...ConnectionOption) []ConnectionOption) ServerOption
WithConnectionOptions configures the server's connections.
func WithHeartbeatInterval ¶
func WithHeartbeatInterval(fn func(time.Duration) time.Duration) ServerOption
WithHeartbeatInterval configures a server's heartbeat interval.
func WithHeartbeatTimeout ¶
func WithHeartbeatTimeout(fn func(time.Duration) time.Duration) ServerOption
WithHeartbeatTimeout configures how long to wait for a heartbeat socket to connection.
func WithMaxConnections ¶
func WithMaxConnections(fn func(uint16) uint16) ServerOption
WithMaxConnections configures the maximum number of connections to allow for a given server. If max is 0, then there is no upper limit to the number of connections.
func WithMaxIdleConnections ¶
func WithMaxIdleConnections(fn func(uint16) uint16) ServerOption
WithMaxIdleConnections configures the maximum number of idle connections allowed for the server.
func WithRegistry ¶
func WithRegistry(fn func(*bsoncodec.Registry) *bsoncodec.Registry) ServerOption
WithRegistry configures the registry for the server to use when creating cursors.
type ServerSubscription ¶
type ServerSubscription struct { C <-chan description.Server // contains filtered or unexported fields }
ServerSubscription represents a subscription to the description.Server updates for a specific server.
func (*ServerSubscription) Unsubscribe ¶
func (ss *ServerSubscription) Unsubscribe() error
Unsubscribe unsubscribes this ServerSubscription from updates and closes the subscription channel.
type Subscription ¶
type Subscription struct { C <-chan description.Topology // contains filtered or unexported fields }
Subscription is a subscription to updates to the description of the Topology that created this Subscription.
func (*Subscription) Unsubscribe ¶
func (s *Subscription) Unsubscribe() error
Unsubscribe unsubscribes this Subscription from updates and closes the subscription channel.
type Topology ¶
Topology represents a MongoDB deployment.
func (*Topology) Connect ¶
Connect initializes a Topology and starts the monitoring process. This function must be called to properly monitor the topology.
func (*Topology) Description ¶
func (t *Topology) Description() description.Topology
Description returns a description of the topology.
func (*Topology) Disconnect ¶
Disconnect closes the topology. It stops the monitoring thread and closes all open subscriptions.
func (*Topology) FindServer ¶
func (t *Topology) FindServer(selected description.Server) (*SelectedServer, error)
FindServer will attempt to find a server that fits the given server description. This method will return nil, nil if a matching server could not be found.
func (*Topology) Kind ¶ added in v1.0.3
func (t *Topology) Kind() description.TopologyKind
Kind returns the topology kind of this Topology.
func (*Topology) RequestImmediateCheck ¶
func (t *Topology) RequestImmediateCheck()
RequestImmediateCheck will send heartbeats to all the servers in the topology right away, instead of waiting for the heartbeat timeout.
func (*Topology) SelectServer ¶
func (t *Topology) SelectServer(ctx context.Context, ss description.ServerSelector) (driver.Server, error)
SelectServer selects a server with given a selector. SelectServer complies with the server selection spec, and will time out after severSelectionTimeout or when the parent context is done.
func (*Topology) SelectServerLegacy ¶ added in v1.0.3
func (t *Topology) SelectServerLegacy(ctx context.Context, ss description.ServerSelector) (*SelectedServer, error)
SelectServerLegacy selects a server with given a selector. SelectServerLegacy complies with the server selection spec, and will time out after severSelectionTimeout or when the parent context is done.
func (*Topology) Subscribe ¶
func (t *Topology) Subscribe() (*Subscription, error)
Subscribe returns a Subscription on which all updated description.Topologys will be sent. The channel of the subscription will have a buffer size of one, and will be pre-populated with the current description.Topology.
func (*Topology) SupportsRetry ¶ added in v1.0.3
SupportsRetry returns true if the topology supports retryability, which it does if it supports sessions.
func (*Topology) SupportsSessions ¶
SupportsSessions returns true if the topology supports sessions.