package session
import "go.mongodb.org/mongo-driver/x/mongo/driver/session"
Index ¶
- Constants
- Variables
- func MaxClusterTime(ct1, ct2 bson.Raw) bson.Raw
- type Client
- func NewClientSession(pool *Pool, clientID uuid.UUID, sessionType Type, opts ...*ClientOptions) (*Client, error)
- func (c *Client) AbortTransaction() error
- func (c *Client) AdvanceClusterTime(clusterTime bson.Raw) error
- func (c *Client) AdvanceOperationTime(opTime *primitive.Timestamp) error
- func (c *Client) ApplyCommand(desc description.Server)
- func (c *Client) CheckAbortTransaction() error
- func (c *Client) CheckCommitTransaction() error
- func (c *Client) CheckStartTransaction() error
- func (c *Client) ClearPinnedServer()
- func (c *Client) CommitTransaction() error
- func (c *Client) EndSession()
- func (c *Client) StartTransaction(opts *TransactionOptions) error
- func (c *Client) TransactionCommitted() bool
- func (c *Client) TransactionInProgress() bool
- func (c *Client) TransactionRunning() bool
- func (c *Client) TransactionStarting() bool
- func (c *Client) UpdateCommitTransactionWriteConcern()
- func (c *Client) UpdateRecoveryToken(response bson.Raw)
- func (c *Client) UpdateUseTime() error
- type ClientOptions
- type ClusterClock
- func (cc *ClusterClock) AdvanceClusterTime(clusterTime bson.Raw)
- func (cc *ClusterClock) GetClusterTime() bson.Raw
- type Node
- type Pool
- func NewPool(descChan <-chan description.Topology) *Pool
- func (p *Pool) CheckedOut() int
- func (p *Pool) GetSession() (*Server, error)
- func (p *Pool) IDSlice() []bsoncore.Document
- func (p *Pool) ReturnSession(ss *Server)
- func (p *Pool) String() string
- type Server
- type TransactionOptions
- type TransactionState
- type Type
Constants ¶
const UUIDSubtype byte = 4
UUIDSubtype is the BSON binary subtype that a UUID should be encoded as
Variables ¶
var ErrAbortAfterCommit = errors.New("cannot call abortTransaction after calling commitTransaction")
ErrAbortAfterCommit is returned when abort is called after a commit.
ErrAbortTwice is returned if abort is called after transaction is already aborted.
var ErrCommitAfterAbort = errors.New("cannot call commitTransaction after calling abortTransaction")
ErrCommitAfterAbort is returned if commit is called after an abort.
ErrNoTransactStarted is returned if a transaction operation is called when no transaction has started.
ErrSessionEnded is returned when a client session is used after a call to endSession().
ErrTransactInProgress is returned if startTransaction() is called when a transaction is in progress.
ErrUnackWCUnsupported is returned if an unacknowledged write concern is supported for a transaciton.
Functions ¶
func MaxClusterTime ¶
MaxClusterTime compares 2 clusterTime documents and returns the document representing the highest cluster time.
Types ¶
type Client ¶
type Client struct { *Server ClientID uuid.UUID ClusterTime bson.Raw Consistent bool // causal consistency OperationTime *primitive.Timestamp SessionType Type Terminated bool RetryingCommit bool Committing bool Aborting bool RetryWrite bool RetryRead bool // options for the current transaction // most recently set by transactionopt CurrentRc *readconcern.ReadConcern CurrentRp *readpref.ReadPref CurrentWc *writeconcern.WriteConcern CurrentMct *time.Duration TransactionState TransactionState PinnedServer *description.Server RecoveryToken bson.Raw // contains filtered or unexported fields }
Client is a session for clients to run commands.
func NewClientSession ¶
func NewClientSession(pool *Pool, clientID uuid.UUID, sessionType Type, opts ...*ClientOptions) (*Client, error)
NewClientSession creates a Client.
func (*Client) AbortTransaction ¶
AbortTransaction updates the state for a successfully aborted transaction and returns an error if not permissible. It does not actually perform the abort.
func (*Client) AdvanceClusterTime ¶
AdvanceClusterTime updates the session's cluster time.
func (*Client) AdvanceOperationTime ¶
AdvanceOperationTime updates the session's operation time.
func (*Client) ApplyCommand ¶
func (c *Client) ApplyCommand(desc description.Server)
ApplyCommand advances the state machine upon command execution.
func (*Client) CheckAbortTransaction ¶
CheckAbortTransaction checks to see if allowed to abort transaction and returns an error if not allowed.
func (*Client) CheckCommitTransaction ¶
CheckCommitTransaction checks to see if allowed to commit transaction and returns an error if not allowed.
func (*Client) CheckStartTransaction ¶
CheckStartTransaction checks to see if allowed to start transaction and returns an error if not allowed
func (*Client) ClearPinnedServer ¶
func (c *Client) ClearPinnedServer()
ClearPinnedServer sets the PinnedServer to nil.
func (*Client) CommitTransaction ¶
CommitTransaction updates the state for a successfully committed transaction and returns an error if not permissible. It does not actually perform the commit.
func (*Client) EndSession ¶
func (c *Client) EndSession()
EndSession ends the session.
func (*Client) StartTransaction ¶
func (c *Client) StartTransaction(opts *TransactionOptions) error
StartTransaction initializes the transaction options and advances the state machine. It does not contact the server to start the transaction.
func (*Client) TransactionCommitted ¶
TransactionCommitted returns true of the client session just committed a transaciton.
func (*Client) TransactionInProgress ¶
TransactionInProgress returns true if the client session is in an active transaction.
func (*Client) TransactionRunning ¶
TransactionRunning returns true if the client session has started the transaction and it hasn't been committed or aborted
func (*Client) TransactionStarting ¶
TransactionStarting returns true if the client session is starting a transaction.
func (*Client) UpdateCommitTransactionWriteConcern ¶
func (c *Client) UpdateCommitTransactionWriteConcern()
UpdateCommitTransactionWriteConcern will set the write concern to majority and potentially set a w timeout of 10 seconds. This should be called after a commit transaction operation fails with a retryable error or after a successful commit transaction operation.
func (*Client) UpdateRecoveryToken ¶
UpdateRecoveryToken updates the session's recovery token from the server response.
func (*Client) UpdateUseTime ¶
UpdateUseTime sets the session's last used time to the current time. This must be called whenever the session is used to send a command to the server to ensure that the session is not prematurely marked expired in the driver's session pool. If the session has already been ended, this method will return ErrSessionEnded.
type ClientOptions ¶
type ClientOptions struct { CausalConsistency *bool DefaultReadConcern *readconcern.ReadConcern DefaultWriteConcern *writeconcern.WriteConcern DefaultReadPreference *readpref.ReadPref DefaultMaxCommitTime *time.Duration }
ClientOptions represents all possible options for creating a client session.
type ClusterClock ¶
type ClusterClock struct {
// contains filtered or unexported fields
}
ClusterClock represents a logical clock for keeping track of cluster time.
func (*ClusterClock) AdvanceClusterTime ¶
func (cc *ClusterClock) AdvanceClusterTime(clusterTime bson.Raw)
AdvanceClusterTime updates the cluster's current time.
func (*ClusterClock) GetClusterTime ¶
func (cc *ClusterClock) GetClusterTime() bson.Raw
GetClusterTime returns the cluster's current time.
type Node ¶
type Node struct { *Server // contains filtered or unexported fields }
Node represents a server session in a linked list
type Pool ¶
type Pool struct {
// contains filtered or unexported fields
}
Pool is a pool of server sessions that can be reused.
func NewPool ¶
func NewPool(descChan <-chan description.Topology) *Pool
NewPool creates a new server session pool
func (*Pool) CheckedOut ¶
CheckedOut returns number of sessions checked out from pool.
func (*Pool) GetSession ¶
GetSession retrieves an unexpired session from the pool.
func (*Pool) IDSlice ¶
IDSlice returns a slice of session IDs for each session in the pool
func (*Pool) ReturnSession ¶
ReturnSession returns a session to the pool if it has not expired.
func (*Pool) String ¶
String implements the Stringer interface
type Server ¶
Server is an open session with the server.
func (*Server) IncrementTxnNumber ¶
func (ss *Server) IncrementTxnNumber()
IncrementTxnNumber increments the transaction number.
func (*Server) MarkDirty ¶
func (ss *Server) MarkDirty()
MarkDirty marks the session as dirty.
type TransactionOptions ¶
type TransactionOptions struct { ReadConcern *readconcern.ReadConcern WriteConcern *writeconcern.WriteConcern ReadPreference *readpref.ReadPref MaxCommitTime *time.Duration }
TransactionOptions represents all possible options for starting a transaction in a session.
type TransactionState ¶
type TransactionState uint8
TransactionState indicates the state of the transactions FSM.
const ( None TransactionState = iota Starting InProgress Committed Aborted )
Client Session states
func (TransactionState) String ¶
func (s TransactionState) String() string
String implements the fmt.Stringer interface.
type Type ¶
type Type uint8
Type describes the type of the session
These constants are the valid types for a client session.
Source Files ¶
client_session.go cluster_clock.go options.go server_session.go session_pool.go
- Version
- v1.5.2
- Published
- May 5, 2021
- Platform
- darwin/amd64
- Imports
- 12 packages
- Last checked
- 9 minutes ago –
Tools for package owners.