client

package
v1.21.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2023 License: Apache-2.0 Imports: 15 Imported by: 44

Documentation

Index

Constants

View Source
const (
	Voter   = protocol.Voter
	StandBy = protocol.StandBy
	Spare   = protocol.Spare
)

Node roles

View Source
const (
	LogNone  = logging.None
	LogDebug = logging.Debug
	LogInfo  = logging.Info
	LogWarn  = logging.Warn
	LogError = logging.Error
)

Available logging levels.

Variables

View Source
var NewInmemNodeStore = protocol.NewInmemNodeStore

NewInmemNodeStore creates NodeStore which stores its data in-memory.

Functions

func DefaultDialFunc

func DefaultDialFunc(ctx context.Context, address string) (net.Conn, error)

DefaultDialFunc is the default dial function, which can handle plain TCP and Unix socket endpoints. You can customize it with WithDialFunc()

func DefaultLogFunc

func DefaultLogFunc(l LogLevel, format string, a ...interface{})

DefaultLogFunc doesn't emit any message.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client speaks the dqlite wire protocol.

func FindLeader

func FindLeader(ctx context.Context, store NodeStore, options ...Option) (*Client, error)

FindLeader returns a Client connected to the current cluster leader.

The function will iterate through to all nodes in the given store, and for each of them check if it's the current leader. If no leader is found, the function will keep retrying (with a capped exponential backoff) until the given context is canceled.

func New

func New(ctx context.Context, address string, options ...Option) (*Client, error)

New creates a new client connected to the dqlite node with the given address.

func (*Client) Add

func (c *Client) Add(ctx context.Context, node NodeInfo) error

Add a node to a cluster.

The new node will have the role specified in node.Role. Note that if the desired role is Voter, the node being added must be online, since it will be granted voting rights only once it catches up with the leader's log.

func (*Client) Assign added in v1.3.0

func (c *Client) Assign(ctx context.Context, id uint64, role NodeRole) error

Assign a role to a node.

Possible roles are:

- Voter: the node will replicate data and participate in quorum. - StandBy: the node will replicate data but won't participate in quorum. - Spare: the node won't replicate data and won't participate in quorum.

If the target node does not exist or has already the desired role, an error is returned.

func (*Client) Close

func (c *Client) Close() error

Close the client.

func (*Client) Cluster

func (c *Client) Cluster(ctx context.Context) ([]NodeInfo, error)

Cluster returns information about all nodes in the cluster.

func (*Client) Describe added in v1.7.0

func (c *Client) Describe(ctx context.Context) (*NodeMetadata, error)

Describe returns metadata about the node we're connected with.

func (*Client) Dump

func (c *Client) Dump(ctx context.Context, dbname string) ([]File, error)

Dump the content of the database with the given name. Two files will be returned, the first is the main database file (which has the same name as the database), the second is the WAL file (which has the same name as the database plus the suffix "-wal").

func (*Client) Leader

func (c *Client) Leader(ctx context.Context) (*NodeInfo, error)

Leader returns information about the current leader, if any.

func (*Client) Remove

func (c *Client) Remove(ctx context.Context, id uint64) error

Remove a node from the cluster.

func (*Client) Transfer added in v1.3.0

func (c *Client) Transfer(ctx context.Context, id uint64) error

Transfer leadership from the current leader to another node.

This must be invoked one client connected to the current leader.

func (*Client) Weight added in v1.7.0

func (c *Client) Weight(ctx context.Context, weight uint64) error

Weight updates the weight associated to the node we're connected with.

type DatabaseNodeStore

type DatabaseNodeStore struct {
	// contains filtered or unexported fields
}

DatabaseNodeStore persists a list addresses of dqlite nodes in a SQL table.

func NewNodeStore

func NewNodeStore(db *sql.DB, schema, table, column string, options ...NodeStoreOption) *DatabaseNodeStore

NewNodeStore creates a new NodeStore.

func (*DatabaseNodeStore) Get

func (d *DatabaseNodeStore) Get(ctx context.Context) ([]NodeInfo, error)

Get the current servers.

func (*DatabaseNodeStore) Set

func (d *DatabaseNodeStore) Set(ctx context.Context, servers []NodeInfo) error

Set the servers addresses.

type DialFunc

type DialFunc = protocol.DialFunc

DialFunc is a function that can be used to establish a network connection.

func DialFuncWithTLS added in v1.5.0

func DialFuncWithTLS(dial DialFunc, config *tls.Config) DialFunc

DialFuncWithTLS returns a dial function that uses TLS encryption.

The given dial function will be used to establish the network connection, and the given TLS config will be used for encryption.

type File

type File struct {
	Name string
	Data []byte
}

File holds the content of a single database file.

type InmemNodeStore

type InmemNodeStore = protocol.InmemNodeStore

InmemNodeStore keeps the list of target dqlite nodes in memory.

type LogFunc

type LogFunc = logging.Func

LogFunc is a function that can be used for logging.

type LogLevel

type LogLevel = logging.Level

LogLevel defines the logging level.

type NodeInfo

type NodeInfo = protocol.NodeInfo

NodeInfo holds information about a single server.

type NodeMetadata added in v1.7.0

type NodeMetadata struct {
	FailureDomain uint64
	Weight        uint64
}

NodeMetadata user-defined node-level metadata.

type NodeRole added in v1.3.0

type NodeRole = protocol.NodeRole

NodeRole identifies the role of a node.

type NodeStore

type NodeStore = protocol.NodeStore

NodeStore is used by a dqlite client to get an initial list of candidate dqlite nodes that it can dial in order to find a leader dqlite node to use.

func DefaultNodeStore

func DefaultNodeStore(filename string) (NodeStore, error)

DefaultNodeStore creates a new NodeStore using the given filename.

If the filename ends with ".yaml" then the YamlNodeStore implementation will be used. Otherwise the SQLite-based one will be picked, with default names for the schema, table and column parameters.

It also creates the table if it doesn't exist yet.

type NodeStoreOption added in v1.3.0

type NodeStoreOption func(*nodeStoreOptions)

Option that can be used to tweak node store parameters.

func WithNodeStoreWhereClause added in v1.3.0

func WithNodeStoreWhereClause(where string) NodeStoreOption

WithNodeStoreWhereClause configures the node store to append the given hard-coded where clause to the SELECT query used to fetch nodes. Only the clause itself must be given, without the "WHERE" prefix.

type Option

type Option func(*options)

Option that can be used to tweak client parameters.

func WithDialFunc

func WithDialFunc(dial DialFunc) Option

WithDialFunc sets a custom dial function for creating the client network connection.

func WithLogFunc

func WithLogFunc(log LogFunc) Option

WithLogFunc sets a custom log function. connection.

type YamlNodeStore added in v1.5.0

type YamlNodeStore struct {
	// contains filtered or unexported fields
}

Persists a list addresses of dqlite nodes in a YAML file.

func NewYamlNodeStore added in v1.5.0

func NewYamlNodeStore(path string) (*YamlNodeStore, error)

NewYamlNodeStore creates a new YamlNodeStore backed by the given YAML file.

func (*YamlNodeStore) Get added in v1.5.0

func (s *YamlNodeStore) Get(ctx context.Context) ([]NodeInfo, error)

Get the current servers.

func (*YamlNodeStore) Set added in v1.5.0

func (s *YamlNodeStore) Set(ctx context.Context, servers []NodeInfo) error

Set the servers addresses.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL