redis

package
v0.0.0-...-f651441 Latest Latest
Warning

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

Go to latest
Published: Sep 23, 2019 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// ResetHard HARD mode for RESET command
	ResetHard = "HARD"
	// ResetSoft SOFT mode for RESET command
	ResetSoft = "SOFT"
)
View Source
const (
	// ClusterInfosUnset status of the cluster info: no data set
	ClusterInfosUnset = "Unset"
	// ClusterInfosPartial status of the cluster info: data is not complete (some nodes didn't respond)
	ClusterInfosPartial = "Partial"
	// ClusterInfosInconsistent status of the cluster info: nodesinfos is not consistent between nodes
	ClusterInfosInconsistent = "Inconsistent"
	// ClusterInfosConsistent status of the cluster info: nodeinfos is complete and consistent between nodes
	ClusterInfosConsistent = "Consistent"
)
View Source
const (
	// RedisLinkStateConnected redis connection status connected
	RedisLinkStateConnected = "connected"
	// RedisLinkStateDisconnected redis connection status disconnected
	RedisLinkStateDisconnected = "disconnected"
)
View Source
const (
	// NodeStatusPFail Node is in PFAIL state. Not reachable for the node you are contacting, but still logically reachable
	NodeStatusPFail = "fail?"
	// NodeStatusFail Node is in FAIL state. It was not reachable for multiple nodes that promoted the PFAIL state to FAIL
	NodeStatusFail = "fail"
	// NodeStatusHandshake Untrusted node, we are handshaking.
	NodeStatusHandshake = "handshake"
	// NodeStatusNoAddr No address known for this node
	NodeStatusNoAddr = "noaddr"
	// NodeStatusNoFlags no flags at all
	NodeStatusNoFlags = "noflags"
)
View Source
const (
	// DefaultRedisPort define the default Redis Port
	DefaultRedisPort = "6379"
)
View Source
const (

	// ErrNotFound cannot find a node to connect to
	ErrNotFound = "Unable to find a node to connect"
)
View Source
const (
	// HashMaxSlots Numbers or Redis slots used for Key hashing
	HashMaxSlots = 16383
)

Variables

View Source
var IsMasterWithNoSlot = func(n *Node) bool {
	if (n.GetRole() == v1.RedisClusterNodeRoleMaster) && (n.TotalSlots() == 0) {
		return true
	}
	return false
}

IsMasterWithNoSlot anonymous function for searching Master Node with no slot

View Source
var IsMasterWithSlot = func(n *Node) bool {
	if (n.GetRole() == v1.RedisClusterNodeRoleMaster) && (n.TotalSlots() > 0) {
		return true
	}
	return false
}

IsMasterWithSlot anonymous function for searching Master Node withslot

View Source
var IsSlave = func(n *Node) bool {
	return n.GetRole() == v1.RedisClusterNodeRoleSlave
}

IsSlave anonymous function for searching Slave Node

Functions

func Contains

func Contains(s []Slot, e Slot) bool

Contains returns true if a node slice contains a node

func DecodeNodeStartTime

func DecodeNodeStartTime(input *string) (time.Time, error)

DecodeNodeStartTime decode from the cmd output the Redis instance info. Second argument is the node on which we are connected to request info

func DecodeSlotRange

func DecodeSlotRange(str string) ([]Slot, *ImportingSlot, *MigratingSlot, error)

DecodeSlotRange decode from a string a RangeSlot

each entry can have 4 representations:
     * single slot: ex: 42
     * slot range: ex: 42-52
     * migrating slot: ex: [42->-67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1]
     * importing slot: ex: [42-<-67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1]

func IsInconsistentError

func IsInconsistentError(err error) bool

IsInconsistentError eturns true if the error is due to cluster inconsistencies

func IsNodeNotFoundedError

func IsNodeNotFoundedError(err error) bool

IsNodeNotFoundedError returns true if the current error is a NodeNotFoundedError

func IsPartialError

func IsPartialError(err error) bool

IsPartialError returns true if the error is due to partial data recovery

func LessByID

func LessByID(n1, n2 *Node) bool

LessByID compare 2 Nodes with there ID

func MoreByID

func MoreByID(n1, n2 *Node) bool

MoreByID compare 2 Nodes with there ID

Types

type Admin

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

Admin wraps redis cluster admin logic

func (*Admin) AddSlots

func (a *Admin) AddSlots(addr string, slots []Slot) error

AddSlots use to ADDSLOT commands on several slots

func (*Admin) AttachNodeToCluster

func (a *Admin) AttachNodeToCluster(addr string) error

AttachNodeToCluster command use to connect a Node to the cluster

func (*Admin) AttachSlaveToMaster

func (a *Admin) AttachSlaveToMaster(slave *Node, master *Node) error

AttachSlaveToMaster attach a slave to a master node

func (*Admin) Close

func (a *Admin) Close()

Close used to close all possible resources instanciate by the Admin

func (*Admin) Connections

func (a *Admin) Connections() AdminConnectionsInterface

Connections returns the connection map of all clients

func (*Admin) CountKeysInSlot

func (a *Admin) CountKeysInSlot(addr string, slot Slot) (int64, error)

CountKeysInSlot exec the redis command to count the number of keys in the given slot on a node

func (*Admin) DelSlots

func (a *Admin) DelSlots(addr string, slots []Slot) error

DelSlots exec the redis command to del slots in a pipeline

func (*Admin) DetachSlave

func (a *Admin) DetachSlave(slave *Node) error

DetachSlave use to detach a slave to a master

func (*Admin) FlushAll

func (a *Admin) FlushAll()

FlushAll flush all keys in cluster

func (*Admin) FlushAndReset

func (a *Admin) FlushAndReset(addr string, mode string) error

FlushAndReset flush the cluster and reset the cluster configuration of the node. Commands are piped, to ensure no items arrived between flush and reset

func (*Admin) ForgetNode

func (a *Admin) ForgetNode(id string) error

ForgetNode used to force other redis cluster node to forget a specific node

func (*Admin) ForgetNodeByAddr

func (a *Admin) ForgetNodeByAddr(addr string) error

ForgetNodeByAddr used to force other redis cluster node to forget a specific node

func (*Admin) GetClusterInfos

func (a *Admin) GetClusterInfos() (*ClusterInfos, error)

GetClusterInfos return the Nodes infos for all nodes

func (*Admin) GetClusterInfosSelected

func (a *Admin) GetClusterInfosSelected(addrs []string) (*ClusterInfos, error)

GetClusterInfosSelected return the Nodes infos for all nodes selected in the cluster

func (*Admin) GetHashMaxSlot

func (a *Admin) GetHashMaxSlot() Slot

GetHashMaxSlot get the max slot value

func (*Admin) GetKeysInSlot

func (a *Admin) GetKeysInSlot(addr string, slot Slot, batch int, limit bool) ([]string, error)

GetKeysInSlot exec the redis command to get the keys in the given slot on the node we are connected to Batch is the number of keys fetch per batch, Limit can be use to limit to one batch

func (*Admin) InitRedisCluster

func (a *Admin) InitRedisCluster(addr string) error

InitRedisCluster used to init a single node redis cluster

func (*Admin) MigrateKeys

func (a *Admin) MigrateKeys(addr string, dest *Node, slots []Slot, batch int, timeout int, replace bool) (int, error)

MigrateKeys use to migrate keys from slots to other slots. if replace is true, replace key on busy error timeout is in milliseconds

func (*Admin) RebuildConnectionMap

func (a *Admin) RebuildConnectionMap(addrs []string, options *AdminOptions)

RebuildConnectionMap rebuild the connection map according to the given addresse

func (*Admin) SetSlots

func (a *Admin) SetSlots(addr, action string, slots []Slot, nodeID string) error

SetSlots use to set SETSLOT command on several slots

func (*Admin) StartFailover

func (a *Admin) StartFailover(addr string) error

StartFailover used to force the failover of a specific redis master node

type AdminConnections

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

AdminConnections connection map for redis cluster currently the admin connection is not threadSafe since it is only use in the Events thread.

func (*AdminConnections) Add

func (cnx *AdminConnections) Add(addr string) error

Add connect to the given address and register the client connection to the map

func (*AdminConnections) AddAll

func (cnx *AdminConnections) AddAll(addrs []string)

AddAll connect to the given list of addresses and register them in the map fail silently

func (*AdminConnections) Close

func (cnx *AdminConnections) Close()

Close used to close all possible resources instanciate by the Connections

func (*AdminConnections) Get

func (cnx *AdminConnections) Get(addr string) (ClientInterface, error)

Get returns a client connection for the given adress, connects if the connection is not in the map yet

func (*AdminConnections) GetAll

func (cnx *AdminConnections) GetAll() map[string]ClientInterface

GetAll returns a map of all clients per address

func (*AdminConnections) GetDifferentFrom

func (cnx *AdminConnections) GetDifferentFrom(addr string) (ClientInterface, error)

GetDifferentFrom returns random a client connection different from given address

func (*AdminConnections) GetRandom

func (cnx *AdminConnections) GetRandom() (ClientInterface, error)

GetRandom returns a client connection to a random node of the client map

func (*AdminConnections) GetSelected

func (cnx *AdminConnections) GetSelected(addrs []string) map[string]ClientInterface

GetSelected returns a map of clients based on the input addresses

func (*AdminConnections) Reconnect

func (cnx *AdminConnections) Reconnect(addr string) error

Reconnect force a reconnection on the given address is the adress is not part of the map, act like Add

func (*AdminConnections) Remove

func (cnx *AdminConnections) Remove(addr string)

Remove disconnect and remove the client connection from the map

func (*AdminConnections) ReplaceAll

func (cnx *AdminConnections) ReplaceAll(addrs []string)

ReplaceAll clear the pool and re-populate it with new connections fail silently

func (*AdminConnections) Reset

func (cnx *AdminConnections) Reset()

Reset close all connections and clear the connection map

func (*AdminConnections) Update

func (cnx *AdminConnections) Update(addr string) (ClientInterface, error)

Update returns a client connection for the given adress, connects if the connection is not in the map yet

func (*AdminConnections) ValidatePipeResp

func (cnx *AdminConnections) ValidatePipeResp(client ClientInterface, addr, errMessage string) bool

ValidatePipeResp wait for all answers in the pipe and validate the response in case of network issue clear the pipe and return in case of error, return false

func (*AdminConnections) ValidateResp

func (cnx *AdminConnections) ValidateResp(resp *redis.Resp, addr, errMessage string) error

ValidateResp check the redis resp, eventually reconnect on connection error in case of error, customize the error, log it and return it

type AdminConnectionsInterface

type AdminConnectionsInterface interface {
	// Add connect to the given address and
	// register the client connection to the pool
	Add(addr string) error
	// Remove disconnect and remove the client connection from the map
	Remove(addr string)
	// Get returns a client connection for the given address,
	// connects if the connection is not in the map yet
	Get(addr string) (ClientInterface, error)
	// GetRandom returns a client connection to a random node of the client map
	GetRandom() (ClientInterface, error)
	// GetDifferentFrom returns a random client connection different from given address
	GetDifferentFrom(addr string) (ClientInterface, error)
	// GetAll returns a map of all clients per address
	GetAll() map[string]ClientInterface
	//GetSelected returns a map of clients based on the input addresses
	GetSelected(addrs []string) map[string]ClientInterface
	// Reconnect force a reconnection on the given address
	// if the adress is not part of the map, act like Add
	Reconnect(addr string) error
	// AddAll connect to the given list of addresses and
	// register them in the map
	// fail silently
	AddAll(addrs []string)
	// ReplaceAll clear the map and re-populate it with new connections
	// fail silently
	ReplaceAll(addrs []string)
	// ValidateResp check the redis resp, eventually reconnect on connection error
	// in case of error, customize the error, log it and return it
	ValidateResp(resp *redis.Resp, addr, errMessage string) error
	// ValidatePipeResp wait for all answers in the pipe and validate the response
	// in case of network issue clear the pipe and return
	// in case of error return false
	ValidatePipeResp(c ClientInterface, addr, errMessage string) bool
	// Reset close all connections and clear the connection map
	Reset()
}

AdminConnectionsInterface interface representing the map of admin connections to redis cluster nodes

func NewAdminConnections

func NewAdminConnections(addrs []string, options *AdminOptions) AdminConnectionsInterface

NewAdminConnections returns and instance of AdminConnectionsInterface

type AdminInterface

type AdminInterface interface {
	// Connections returns the connection map of all clients
	Connections() AdminConnectionsInterface
	// Close the admin connections
	Close()
	// InitRedisCluster used to configure the first node of a cluster
	InitRedisCluster(addr string) error
	// GetClusterInfos get node infos for all nodes
	GetClusterInfos() (*ClusterInfos, error)
	// GetClusterInfosSelected return the Nodes infos for all nodes selected in the cluster
	GetClusterInfosSelected(addrs []string) (*ClusterInfos, error)
	// AttachNodeToCluster command use to connect a Node to the cluster
	// the connection will be done on a random node part of the connection pool
	AttachNodeToCluster(addr string) error
	// AttachSlaveToMaster attach a slave to a master node
	AttachSlaveToMaster(slave *Node, master *Node) error
	// DetachSlave dettach a slave to its master
	DetachSlave(slave *Node) error
	// StartFailover execute the failover of the Redis Master corresponding to the addr
	StartFailover(addr string) error
	// ForgetNode execute the Redis command to force the cluster to forgot the the Node
	ForgetNode(id string) error
	// ForgetNodeByAddr execute the Redis command to force the cluster to forgot the the Node
	ForgetNodeByAddr(id string) error
	// SetSlots exect the redis command to set slots in a pipeline, provide
	// and empty nodeID if the set slots commands doesn't take a nodeID in parameter
	SetSlots(addr string, action string, slots []Slot, nodeID string) error
	// AddSlots exect the redis command to add slots in a pipeline
	AddSlots(addr string, slots []Slot) error
	// DelSlots exec the redis command to del slots in a pipeline
	DelSlots(addr string, slots []Slot) error
	// GetKeysInSlot exec the redis command to get the keys in the given slot on the node we are connected to
	GetKeysInSlot(addr string, slot Slot, batch int, limit bool) ([]string, error)
	// CountKeysInSlot exec the redis command to count the keys given slot on the node
	CountKeysInSlot(addr string, slot Slot) (int64, error)
	// MigrateKeys from addr to destination node. returns number of slot migrated. If replace is true, replace key on busy error
	MigrateKeys(addr string, dest *Node, slots []Slot, batch, timeout int, replace bool) (int, error)
	// FlushAndReset reset the cluster configuration of the node, the node is flushed in the same pipe to ensure reset works
	FlushAndReset(addr string, mode string) error
	// FlushAll flush all keys in cluster
	FlushAll()
	// GetHashMaxSlot get the max slot value
	GetHashMaxSlot() Slot
	//RebuildConnectionMap rebuild the connection map according to the given addresses
	RebuildConnectionMap(addrs []string, options *AdminOptions)
}

AdminInterface redis cluster admin interface

func NewAdmin

func NewAdmin(addrs []string, options *AdminOptions) AdminInterface

NewAdmin returns new AdminInterface instance at the same time it connects to all Redis Nodes thanks to the addrs list

type AdminOptions

type AdminOptions struct {
	ConnectionTimeout  time.Duration
	ClientName         string
	RenameCommandsFile string
}

AdminOptions optional options for redis admin

type Client

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

Client structure representing a client connection to redis

func (*Client) Close

func (c *Client) Close() error

Close closes the connection.

func (*Client) Cmd

func (c *Client) Cmd(cmd string, args ...interface{}) *redis.Resp

Cmd calls the given Redis command.

func (*Client) PipeAppend

func (c *Client) PipeAppend(cmd string, args ...interface{})

PipeAppend adds the given call to the pipeline queue.

func (*Client) PipeClear

func (c *Client) PipeClear() (int, int)

PipeClear clears the contents of the current pipeline queue

func (*Client) PipeResp

func (c *Client) PipeResp() *redis.Resp

PipeResp returns the reply for the next request in the pipeline queue. Err

func (*Client) ReadResp

func (c *Client) ReadResp() *redis.Resp

ReadResp will read a Resp off of the connection without sending anything

type ClientInterface

type ClientInterface interface {
	// Close closes the connection.
	Close() error

	// Cmd calls the given Redis command.
	Cmd(cmd string, args ...interface{}) *redis.Resp

	// PipeAppend adds the given call to the pipeline queue.
	// Use PipeResp() to read the response.
	PipeAppend(cmd string, args ...interface{})

	// PipeResp returns the reply for the next request in the pipeline queue. Err
	// with ErrPipelineEmpty is returned if the pipeline queue is empty.
	PipeResp() *redis.Resp

	// PipeClear clears the contents of the current pipeline queue, both commands
	// queued by PipeAppend which have yet to be sent and responses which have yet
	// to be retrieved through PipeResp. The first returned int will be the number
	// of pending commands dropped, the second will be the number of pending
	// responses dropped
	PipeClear() (int, int)

	// ReadResp will read a Resp off of the connection without sending anything
	// first (useful after you've sent a SUSBSCRIBE command). This will block until
	// a reply is received or the timeout is reached (returning the IOErr). You can
	// use IsTimeout to check if the Resp is due to a Timeout
	//
	// Note: this is a more low-level function, you really shouldn't have to
	// actually use it unless you're writing your own pub/sub code
	ReadResp() *redis.Resp
}

ClientInterface redis client interface

func NewClient

func NewClient(addr string, cnxTimeout time.Duration, commandsMapping map[string]string) (ClientInterface, error)

NewClient build a client connection and connect to a redis address

type Cluster

type Cluster struct {
	Name           string
	Namespace      string
	Nodes          map[string]*Node
	Status         v1.ClusterStatus
	NodesPlacement v1.NodesPlacementInfo
	ActionsInfo    ClusterActionsInfo
}

Cluster represents a Redis Cluster

func NewCluster

func NewCluster(name, namespace string) *Cluster

NewCluster builds and returns new Cluster instance

func (*Cluster) AddNode

func (c *Cluster) AddNode(node *Node)

AddNode used to add new Node in the cluster if node with the same ID is already present in the cluster the previous Node is replaced

func (*Cluster) GetNodeByFunc

func (c *Cluster) GetNodeByFunc(f FindNodeFunc) (*Node, error)

GetNodeByFunc returns first node found by the FindNodeFunc

func (*Cluster) GetNodeByID

func (c *Cluster) GetNodeByID(id string) (*Node, error)

GetNodeByID returns a Cluster Node by its ID if not present in the cluster return an error

func (*Cluster) GetNodeByIP

func (c *Cluster) GetNodeByIP(ip string) (*Node, error)

GetNodeByIP returns a Cluster Node by its ID if not present in the cluster return an error

func (*Cluster) GetNodeByPodName

func (c *Cluster) GetNodeByPodName(name string) (*Node, error)

GetNodeByPodName returns a Cluster Node by its Pod name if not present in the cluster return an error

func (*Cluster) GetNodesByFunc

func (c *Cluster) GetNodesByFunc(f FindNodeFunc) (Nodes, error)

GetNodesByFunc returns first node found by the FindNodeFunc

func (*Cluster) ToAPIClusterStatus

func (c *Cluster) ToAPIClusterStatus() v1.RedisClusterClusterStatus

ToAPIClusterStatus convert the Cluster information to a api

type ClusterActionsInfo

type ClusterActionsInfo struct {
	NbslotsToMigrate int32
}

ClusterActionsInfo use to store information about current action on the Cluster

type ClusterInconsistencies

type ClusterInconsistencies map[Slot]OwneshipView

ClusterInconsistencies structure representing inconsistencies in the cluster

func (ClusterInconsistencies) String

func (ci ClusterInconsistencies) String() string

String

type ClusterInfos

type ClusterInfos struct {
	Infos  map[string]*NodeInfos
	Status string
}

ClusterInfos represents the node infos for all nodes of the cluster

func NewClusterInfos

func NewClusterInfos() *ClusterInfos

NewClusterInfos returns an instance of ClusterInfos

func (*ClusterInfos) ComputeStatus

func (c *ClusterInfos) ComputeStatus() bool

ComputeStatus check the ClusterInfos status based on the current data the status ClusterInfosPartial is set while building the clusterinfos if already set, do nothing returns true if contistent or if another error

func (*ClusterInfos) GetInconsistencies

func (c *ClusterInfos) GetInconsistencies() *ClusterInconsistencies

GetInconsistencies returns a view of the inconsistent configuration per slot

func (*ClusterInfos) GetNodes

func (c *ClusterInfos) GetNodes() Nodes

GetNodes returns a nodeSlice view of the cluster the slice if formed from how each node see itself you should check the Status before doing it, to wait for a consistent view

type ClusterInfosError

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

ClusterInfosError error type for redis cluster infos access

func NewClusterInfosError

func NewClusterInfosError() ClusterInfosError

NewClusterInfosError returns an instance of cluster infos error

func (ClusterInfosError) Error

func (e ClusterInfosError) Error() string

Error error string

func (ClusterInfosError) Inconsistent

func (e ClusterInfosError) Inconsistent() bool

Inconsistent true if the nodes do not agree with each other

func (ClusterInfosError) Partial

func (e ClusterInfosError) Partial() bool

Partial true if the some nodes of the cluster didn't answer

type ConfigSignature

type ConfigSignature map[string]SlotSlice

ConfigSignature Represents the slots of each node

func (ConfigSignature) String

func (c ConfigSignature) String() string

String representation of a ConfigSignaure

type Error

type Error string

Error used to represent an error

func (Error) Error

func (e Error) Error() string

type FindNodeFunc

type FindNodeFunc func(node *Node) bool

FindNodeFunc function for finding a Node it is use as input for GetNodeByFunc and GetNodesByFunc

type ImportingSlot

type ImportingSlot struct {
	SlotID     Slot   `json:"slot"`
	FromNodeID string `json:"fromNodeId"`
}

ImportingSlot represents an importing slot (slot + importing from node id)

func (ImportingSlot) String

func (s ImportingSlot) String() string

String string representation of an importing slot

type Manager

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

Manager regroups Function for managing a Redis Cluster

func NewManager

func NewManager(admin *Admin) *Manager

NewManager builds and returns new Manager instance

func (*Manager) BuildClusterStatus

func (m *Manager) BuildClusterStatus() (*v1.RedisClusterClusterStatus, error)

BuildClusterStatus builds and returns new instance of the RedisClusterClusterStatus

type MigratingSlot

type MigratingSlot struct {
	SlotID   Slot   `json:"slot"`
	ToNodeID string `json:"toNodeId"`
}

MigratingSlot represents a migrating slot (slot + migrating to node id)

func (MigratingSlot) String

func (s MigratingSlot) String() string

String string representation of a migratting slot

type Node

type Node struct {
	ID              string
	IP              string
	Port            string
	Role            string
	LinkState       string
	MasterReferent  string
	FailStatus      []string
	PingSent        int64
	PongRecv        int64
	ConfigEpoch     int64
	Slots           []Slot
	MigratingSlots  map[Slot]string
	ImportingSlots  map[Slot]string
	ServerStartTime time.Time

	Pod *kapiv1.Pod
}

Node Represent a Redis Node

func NewDefaultNode

func NewDefaultNode() *Node

NewDefaultNode builds and returns new defaultNode instance

func NewNode

func NewNode(id, ip string, pod *kapiv1.Pod) *Node

NewNode builds and returns new Node instance

func (*Node) Clear

func (n *Node) Clear()

Clear used to clear possible ressources attach to the current Node

func (*Node) GetRole

func (n *Node) GetRole() v1.RedisClusterNodeRole

GetRole return the Redis Cluster Node GetRole

func (*Node) HasStatus

func (n *Node) HasStatus(flag string) bool

HasStatus returns true if the node has the provided fail status flag

func (*Node) IPPort

func (n *Node) IPPort() string

IPPort returns join Ip Port string

func (*Node) SetFailureStatus

func (n *Node) SetFailureStatus(flags string)

SetFailureStatus set from inputs flags the possible failure status

func (*Node) SetLinkStatus

func (n *Node) SetLinkStatus(status string) error

SetLinkStatus set the Node link status

func (*Node) SetReferentMaster

func (n *Node) SetReferentMaster(ref string)

SetReferentMaster set the redis node parent referent

func (*Node) SetRole

func (n *Node) SetRole(flags string) error

SetRole from a flags string list set the Node's role

func (*Node) String

func (n *Node) String() string

String string representation of a Instance

func (*Node) ToAPINode

func (n *Node) ToAPINode() v1.RedisClusterNode

ToAPINode used to convert the current Node to an API v1.RedisClusterNode

func (*Node) TotalSlots

func (n *Node) TotalSlots() int

TotalSlots return the total number of slot

type NodeInfos

type NodeInfos struct {
	Node    *Node
	Friends Nodes
}

NodeInfos representation of a node info, i.e. data returned by the CLUSTER NODE redis command Node is the information of the targetted node Friends are the view of the other nodes from the targetted node

func DecodeNodeInfos

func DecodeNodeInfos(input *string, addr string) *NodeInfos

DecodeNodeInfos decode from the cmd output the Redis nodes info. Second argument is the node on which we are connected to request info

func NewNodeInfos

func NewNodeInfos() *NodeInfos

NewNodeInfos returns an instance of NodeInfo

type Nodes

type Nodes []*Node

Nodes represent a Node slice

func (Nodes) CountByFunc

func (n Nodes) CountByFunc(fn func(*Node) bool) (result int)

CountByFunc gives the number elements of NodeSlice that return true for the passed func.

func (Nodes) FilterByFunc

func (n Nodes) FilterByFunc(fn func(*Node) bool) Nodes

FilterByFunc remove a node from a slice by node ID and returns the slice. If not found, fail silently. Value must be unique

func (Nodes) GetNodeByID

func (n Nodes) GetNodeByID(id string) (*Node, error)

GetNodeByID returns a Redis Node by its ID if not present in the Nodes slice return an error

func (Nodes) GetNodesByFunc

func (n Nodes) GetNodesByFunc(f FindNodeFunc) (Nodes, error)

GetNodesByFunc returns first node found by the FindNodeFunc

func (Nodes) Len

func (n Nodes) Len() int

Len is the number of elements in the collection.

func (Nodes) Less

func (n Nodes) Less(i, j int) bool

Less reports whether the element with index i should sort before the element with index j.

func (Nodes) SortByFunc

func (n Nodes) SortByFunc(less func(*Node, *Node) bool) Nodes

SortByFunc returns a new ordered NodeSlice, determined by a func defining ‘less’.

func (Nodes) SortNodes

func (n Nodes) SortNodes() Nodes

SortNodes sort Nodes and return the sorted Nodes

func (Nodes) String

func (n Nodes) String() string

func (Nodes) Swap

func (n Nodes) Swap(i, j int)

Swap swaps the elements with indexes i and j.

type OwnerWithStatus

type OwnerWithStatus struct {
	Addr   string
	Status string
}

OwnerWithStatus represents a node owner and the way it sees the slot

type OwneshipView

type OwneshipView map[OwnerWithStatus][]string

OwneshipView map representing who owns a slot and who sees it

type Slot

type Slot uint64

Slot represent a Redis Cluster slot

func AddSlots

func AddSlots(slots []Slot, addedSlots []Slot) []Slot

AddSlots return a new list of slots after adding some slots in it, duplicates are removed

func BuildSlotSlice

func BuildSlotSlice(min, max Slot) []Slot

BuildSlotSlice return a slice of all slots between this range

func DecodeSlot

func DecodeSlot(s string) (Slot, error)

DecodeSlot parse a string representation of a slot slot

func RemoveSlots

func RemoveSlots(slots []Slot, removedSlots []Slot) []Slot

RemoveSlots return a new list of slot where a list of slots have been removed, doesn't work if duplicates

func (Slot) String

func (s Slot) String() string

String string representation of a slot

type SlotRange

type SlotRange struct {
	Min Slot `json:"min"`
	Max Slot `json:"max"`
}

SlotRange represent a Range of slots

func SlotRangesFromSlots

func SlotRangesFromSlots(slots []Slot) []SlotRange

SlotRangesFromSlots return a slice of slot ranges from a slice of slots

func (SlotRange) String

func (s SlotRange) String() string

String string representation of a slotrange

func (SlotRange) Total

func (s SlotRange) Total() int

Total returns total slot present in the range

type SlotSlice

type SlotSlice []Slot

SlotSlice attaches the methods of sort.Interface to []string, sorting in increasing order.

func (SlotSlice) Len

func (s SlotSlice) Len() int

func (SlotSlice) Less

func (s SlotSlice) Less(i, j int) bool

func (SlotSlice) String

func (s SlotSlice) String() string

func (SlotSlice) Swap

func (s SlotSlice) Swap(i, j int)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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