Documentation
¶
Index ¶
- Variables
- type Client
- type CommitFn
- type Config
- type ConsensusFn
- type HostnameSource
- type MemberLister
- type NodeIterationStrategy
- type NodeIterator
- type Remote
- type ResponseFn
- type State
- type Transaction
- type TransactionType
- type TxBroadcaster
- func (t *TxBroadcaster) BroadcastAbortTransaction(ctx context.Context, tx *Transaction) error
- func (t *TxBroadcaster) BroadcastCommitTransaction(ctx context.Context, tx *Transaction) error
- func (t *TxBroadcaster) BroadcastTransaction(ctx context.Context, tx *Transaction) error
- func (t *TxBroadcaster) SetConsensusFunction(fn ConsensusFn)
- type TxManager
- func (c *TxManager) BeginTransaction(ctx context.Context, trType TransactionType, payload interface{}, ...) (*Transaction, error)
- func (c *TxManager) CloseReadTransaction(ctx context.Context, tx *Transaction) error
- func (c *TxManager) CommitWriteTransaction(ctx context.Context, tx *Transaction) error
- func (c *TxManager) IncomingAbortTransaction(ctx context.Context, tx *Transaction)
- func (c *TxManager) IncomingBeginTransaction(ctx context.Context, tx *Transaction) error
- func (c *TxManager) IncomingCommitTransaction(ctx context.Context, tx *Transaction) error
- func (c *TxManager) SetCommitFn(fn CommitFn)
- func (c *TxManager) SetResponseFn(fn ResponseFn)
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client interface { OpenTransaction(ctx context.Context, host string, tx *Transaction) error AbortTransaction(ctx context.Context, host string, tx *Transaction) error CommitTransaction(ctx context.Context, host string, tx *Transaction) error }
type ConsensusFn ¶
type ConsensusFn func(ctx context.Context, in []*Transaction) (*Transaction, error)
The Broadcaster is the link between the the current node and all other nodes during a tx operation. This makes it a natural place to inject a consensus function for read transactions. How consensus is reached is completely opaque to the broadcaster and can be controlled through custom business logic.
type HostnameSource ¶
type HostnameSource interface {
AllNames() []string
}
type MemberLister ¶
type MemberLister interface {
Hostnames() []string
}
type NodeIterationStrategy ¶
type NodeIterationStrategy int
const ( StartRandom NodeIterationStrategy = iota StartAfter )
type NodeIterator ¶
type NodeIterator struct {
// contains filtered or unexported fields
}
func NewNodeIterator ¶
func NewNodeIterator(source HostnameSource, strategy NodeIterationStrategy, ) (*NodeIterator, error)
func (*NodeIterator) Next ¶
func (n *NodeIterator) Next() string
func (*NodeIterator) SetStartNode ¶
func (n *NodeIterator) SetStartNode(startNode string)
type Remote ¶
type Remote interface { BroadcastTransaction(ctx context.Context, tx *Transaction) error BroadcastAbortTransaction(ctx context.Context, tx *Transaction) error BroadcastCommitTransaction(ctx context.Context, tx *Transaction) error }
type ResponseFn ¶
type ResponseFn func(ctx context.Context, tx *Transaction) error
type State ¶
type State struct {
// contains filtered or unexported fields
}
func (*State) AllHostnames ¶
AllHostnames for live members, including self.
func (*State) ClusterHealthScore ¶
func (*State) Hostnames ¶
Hostnames for all live members, except self. Use AllHostnames to include self, prefixes the data port.
type Transaction ¶
type Transaction struct { ID string Type TransactionType Payload interface{} Deadline time.Time }
type TransactionType ¶
type TransactionType string
type TxBroadcaster ¶
type TxBroadcaster struct {
// contains filtered or unexported fields
}
func NewTxBroadcaster ¶
func NewTxBroadcaster(state MemberLister, client Client) *TxBroadcaster
func (*TxBroadcaster) BroadcastAbortTransaction ¶
func (t *TxBroadcaster) BroadcastAbortTransaction(ctx context.Context, tx *Transaction) error
func (*TxBroadcaster) BroadcastCommitTransaction ¶
func (t *TxBroadcaster) BroadcastCommitTransaction(ctx context.Context, tx *Transaction) error
func (*TxBroadcaster) BroadcastTransaction ¶
func (t *TxBroadcaster) BroadcastTransaction(ctx context.Context, tx *Transaction) error
func (*TxBroadcaster) SetConsensusFunction ¶
func (t *TxBroadcaster) SetConsensusFunction(fn ConsensusFn)
type TxManager ¶
func NewTxManager ¶
func NewTxManager(remote Remote, logger logrus.FieldLogger) *TxManager
func (*TxManager) BeginTransaction ¶
func (c *TxManager) BeginTransaction(ctx context.Context, trType TransactionType, payload interface{}, ttl time.Duration, ) (*Transaction, error)
Begin a Transaction with the specified type and payload. Transactions expire after the specified TTL. For a transaction that does not ever expire, pass in a ttl of 0. When choosing TTLs keep in mind that clocks might be slightly skewed in the cluster, therefore set your TTL for desiredTTL + toleratedClockSkew
func (*TxManager) CloseReadTransaction ¶
func (c *TxManager) CloseReadTransaction(ctx context.Context, tx *Transaction, ) error
func (*TxManager) CommitWriteTransaction ¶
func (c *TxManager) CommitWriteTransaction(ctx context.Context, tx *Transaction, ) error
func (*TxManager) IncomingAbortTransaction ¶
func (c *TxManager) IncomingAbortTransaction(ctx context.Context, tx *Transaction, )
func (*TxManager) IncomingBeginTransaction ¶
func (c *TxManager) IncomingBeginTransaction(ctx context.Context, tx *Transaction, ) error
func (*TxManager) IncomingCommitTransaction ¶
func (c *TxManager) IncomingCommitTransaction(ctx context.Context, tx *Transaction, ) error
func (*TxManager) SetCommitFn ¶
SetCommitFn sets a function that is used in Write Transactions, you can read from the transaction payload and use that state to alter your local state
func (*TxManager) SetResponseFn ¶
func (c *TxManager) SetResponseFn(fn ResponseFn)
SetResponseFn sets a function that is used in Read Transactions. The function sets the local state (by writing it into the Tx Payload). It can then be sent to other nodes. Consensus is not part of the ResponseFn. The coordinator - who initiated the Tx - is responsible for coming up with consensus. Deciding on Consensus requires insights into business logic, as from the TX's perspective payloads are opaque.