store

package
v3.4.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Aug 31, 2016 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

Package store provides a distributed SQLite instance.

Distributed consensus is provided via the Raft algorithm.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotLeader is returned when a node attempts to execute a leader-only
	// operation.
	ErrNotLeader = errors.New("not leader")
)

Functions

This section is empty.

Types

type ClusterState

type ClusterState int

ClusterState defines the possible Raft states the current node can be in

const (
	Leader ClusterState = iota
	Follower
	Candidate
	Shutdown
	Unknown
)

Represents the Raft cluster states

type ConsistencyLevel

type ConsistencyLevel int

ConsistencyLevel represents the available read consistency levels.

const (
	None ConsistencyLevel = iota
	Weak
	Strong
)

Represents the available consistency levels.

type DBConfig

type DBConfig struct {
	DSN    string // Any custom DSN
	Memory bool   // Whether the database is in-memory only.
}

DBConfig represents the configuration of the underlying SQLite database.

func NewDBConfig

func NewDBConfig(dsn string, memory bool) *DBConfig

NewDBConfig returns a new DB config instance.

type Store

type Store struct {
	SnapshotThreshold uint64
	HeartbeatTimeout  time.Duration
	// contains filtered or unexported fields
}

Store is a SQLite database, where all changes are made via Raft consensus.

func New

func New(dbConf *DBConfig, dir string, tn Transport) *Store

New returns a new Store.

func (*Store) APIPeers

func (s *Store) APIPeers() (map[string]string, error)

APIPeers return the map of Raft addresses to API addresses.

func (*Store) Addr

func (s *Store) Addr() net.Addr

Addr returns the address of the store.

func (*Store) Apply

func (s *Store) Apply(l *raft.Log) interface{}

Apply applies a Raft log entry to the database.

func (*Store) Backup

func (s *Store) Backup(leader bool) ([]byte, error)

Backup return a consistent snapshot of the underlying database.

func (*Store) Close

func (s *Store) Close(wait bool) error

Close closes the store. If wait is true, waits for a graceful shutdown.

func (*Store) Execute

func (s *Store) Execute(queries []string, timings, tx bool) ([]*sql.Result, error)

Execute executes queries that return no rows, but do modify the database.

func (*Store) IsLeader

func (s *Store) IsLeader() bool

IsLeader is used to determine if the current node is cluster leader

func (*Store) Join

func (s *Store) Join(addr string) error

Join joins a node, located at addr, to this store. The node must be ready to respond to Raft communications at that address.

func (*Store) JoinRequired

func (s *Store) JoinRequired() bool

JoinRequired returns whether the node needs to join a cluster after being opened.

func (*Store) Leader

func (s *Store) Leader() string

Leader returns the current leader. Returns a blank string if there is no leader.

func (*Store) Nodes

func (s *Store) Nodes() ([]string, error)

Nodes returns the list of current peers.

func (*Store) Open

func (s *Store) Open(enableSingle bool) error

Open opens the store. If enableSingle is set, and there are no existing peers, then this node becomes the first node, and therefore leader, of the cluster.

func (*Store) Path

func (s *Store) Path() string

Path returns the path to the store's storage directory.

func (*Store) Peer

func (s *Store) Peer(addr string) string

Peer returns the API address for the given addr. If there is no peer for the address, it returns the empty string.

func (*Store) Query

func (s *Store) Query(queries []string, timings, tx bool, lvl ConsistencyLevel) ([]*sql.Rows, error)

Query executes queries that return rows, and do not modify the database.

func (*Store) Remove

func (s *Store) Remove(addr string) error

Remove removes a node from the store, specified by addr.

func (*Store) Restore

func (s *Store) Restore(rc io.ReadCloser) error

Restore restores the node to a previous state.

func (*Store) Snapshot

func (s *Store) Snapshot() (raft.FSMSnapshot, error)

Snapshot returns a snapshot of the database. The caller must ensure that no transaction is taking place during this call. Hashsicorp Raft guarantees that this function will not be called concurrently with Apply.

http://sqlite.org/howtocorrupt.html states it is safe to do this as long as no transaction is in progress.

func (*Store) State

func (s *Store) State() ClusterState

State returns the current node's Raft state

func (*Store) Stats

func (s *Store) Stats() (map[string]interface{}, error)

Stats returns stats for the store.

func (*Store) UpdateAPIPeers

func (s *Store) UpdateAPIPeers(peers map[string]string) error

UpdateAPIPeers updates the cluster-wide peer information.

func (*Store) WaitForAppliedIndex

func (s *Store) WaitForAppliedIndex(idx uint64, timeout time.Duration) error

WaitForAppliedIndex blocks until a given log index has been applied, or the timeout expires.

func (*Store) WaitForLeader

func (s *Store) WaitForLeader(timeout time.Duration) (string, error)

WaitForLeader blocks until a leader is detected, or the timeout expires.

type Transport

type Transport interface {
	net.Listener

	// Dial is used to create a new outgoing connection
	Dial(address string, timeout time.Duration) (net.Conn, error)
}

Transport is the interface the network service must provide.

Jump to

Keyboard shortcuts

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