redisutil

package
v0.0.0-...-01eed89 Latest Latest
Warning

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

Go to latest
Published: Sep 19, 2023 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// defaultHashMaxSlots higher value of slot
	// as slots start at 0, total number of slots is defaultHashMaxSlots+1
	DefaultHashMaxSlots = 16383

	// 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 (
	// DefaultRedisPort define the default Redis Port
	DefaultRedisPort = "6379"
	// RedisMasterRole redis role master
	RedisMasterRole = "master"
	// RedisSlaveRole redis role slave
	RedisSlaveRole = "slave"
)
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 (

	// ErrNotFound cannot find a node to connect to
	ErrNotFound = "unable to find a node to connect"
)

Variables

View Source
var IsMasterWithNoSlot = func(n *Node) bool {
	if (n.GetRole() == redisv1alpha1.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() == redisv1alpha1.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() == redisv1alpha1.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, log logr.Logger) (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, masterID string) 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) ClusterManagerNodeIsEmpty

func (a *Admin) ClusterManagerNodeIsEmpty() (bool, error)

ClusterManagerNodeIsEmpty Checks whether the node is empty. Node is considered not-empty if it has some key or if it already knows other nodes

func (*Admin) Connections

func (a *Admin) Connections() IAdminConnections

Connections returns the connection map of all clients

func (*Admin) DetachSlave

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

DetachSlave use to detach a slave to a master

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) GetAllConfig

func (a *Admin) GetAllConfig(c IClient, addr string) (map[string]string, error)

GetAllConfig get redis config by CONFIG GET *

func (*Admin) GetClusterInfos

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

GetClusterInfos return the Nodes infos for all nodes

func (*Admin) GetHashMaxSlot

func (a *Admin) GetHashMaxSlot() Slot

GetHashMaxSlot get the max slot value

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) MigrateKeysInSlot

func (a *Admin) MigrateKeysInSlot(addr string, dest *Node, slot Slot, batch int, timeout int, replace bool) (int, error)

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

func (*Admin) ResetPassword

func (a *Admin) ResetPassword(newPassword string) error

ResetPassword reset redis node masterauth and requirepass.

func (*Admin) SetConfigEpoch

func (a *Admin) SetConfigEpoch() error

func (*Admin) SetConfigIfNeed

func (a *Admin) SetConfigIfNeed(newConfig map[string]string) error

SetConfigIfNeed set redis config

func (*Admin) SetSlot

func (a *Admin) SetSlot(addr, action string, slot Slot, nodeID string) error

SetSlot use to set SETSLOT command on a slot

func (*Admin) SetSlots

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

SetSlots use to set SETSLOT command on several slots

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) (IClient, error)

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

func (*AdminConnections) GetAUTH

func (cnx *AdminConnections) GetAUTH() (string, bool)

GetAUTH return password and true if connection password is set, else return false.

func (*AdminConnections) GetAll

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

GetAll returns a map of all clients per address

func (*AdminConnections) GetDifferentFrom

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

GetDifferentFrom returns random a client connection different from given address

func (*AdminConnections) GetRandom

func (cnx *AdminConnections) GetRandom() (IClient, 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]IClient

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) (IClient, 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 IClient, 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 AdminOptions

type AdminOptions struct {
	ConnectionTimeout  time.Duration
	ClientName         string
	RenameCommandsFile string
	Password           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 Cluster

type Cluster struct {
	Name           string
	Namespace      string
	Nodes          map[string]*Node
	Status         redisv1alpha1.ClusterStatus
	NodesPlacement redisv1alpha1.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

type ClusterActionsInfo

type ClusterActionsInfo struct {
	NbslotsToMigrate int32
}

ClusterActionsInfo use to store information about current action on the Cluster

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(log logr.Logger) 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) 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 IAdmin

type IAdmin interface {
	// Connections returns the connection map of all clients
	Connections() IAdminConnections
	// Close the admin connections
	Close()
	// GetClusterInfos get node infos for all nodes
	GetClusterInfos() (*ClusterInfos, error)
	// ClusterManagerNodeIsEmpty Checks whether the node is empty. Node is considered not-empty if it has
	// some key or if it already knows other nodes
	ClusterManagerNodeIsEmpty() (bool, error)
	// SetConfigEpoch Assign a different config epoch to each node
	SetConfigEpoch() error
	// SetConfigIfNeed set redis config
	SetConfigIfNeed(newConfig map[string]string) error
	// GetAllConfig get redis config by CONFIG GET *
	GetAllConfig(c IClient, addr string) (map[string]string, 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, masterID string) error
	// DetachSlave dettach a slave to its master
	DetachSlave(slave *Node) error
	// ForgetNode execute the Redis command to force the cluster to forgot the the Node
	ForgetNode(id string) error
	// SetSlots exec 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 exec the redis command to add slots in a pipeline
	AddSlots(addr string, slots []Slot) error
	// SetSlot use to set SETSLOT command on a slot
	SetSlot(addr, action string, slot Slot, nodeID string) 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)
	// MigrateKeys use to migrate keys from slot to other slot. if replace is true, replace key on busy error
	// timeout is in milliseconds
	MigrateKeysInSlot(addr string, dest *Node, slot Slot, batch int, 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
	// GetHashMaxSlot get the max slot value
	GetHashMaxSlot() Slot
	// ResetPassword reset redis node masterauth and requirepass.
	ResetPassword(newPassword string) error
}

IAdmin redis cluster admin interface

func NewAdmin

func NewAdmin(addrs []string, options *AdminOptions, log logr.Logger) IAdmin

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

type IAdminConnections

type IAdminConnections 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) (IClient, error)
	// GetRandom returns a client connection to a random node of the client map
	GetRandom() (IClient, error)
	// GetDifferentFrom returns a random client connection different from given address
	GetDifferentFrom(addr string) (IClient, error)
	// GetAll returns a map of all clients per address
	GetAll() map[string]IClient
	//GetSelected returns a map of clients based on the input addresses
	GetSelected(addrs []string) map[string]IClient
	// 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 IClient, addr, errMessage string) bool
	// Reset close all connections and clear the connection map
	Reset()
	// GetAUTH return password and true if connection password is set, else return false.
	GetAUTH() (string, bool)
}

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

func NewAdminConnections

func NewAdminConnections(addrs []string, options *AdminOptions, log logr.Logger) IAdminConnections

NewAdminConnections returns and instance of AdminConnectionsInterface

type IClient

type IClient 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
}

IClient redis client interface

func NewClient

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

NewClient build a client connection and connect to a redis address

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 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

	NodeName    string
	PodName     string
	StatefulSet string
	// contains filtered or unexported fields
}

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 *corev1.Pod) *Node

NewNode builds and returns new Node instance

func (*Node) Balance

func (n *Node) Balance() int

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() redisv1alpha1.RedisRole

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) SetBalance

func (n *Node) SetBalance(balance int)

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() redisv1alpha1.RedisClusterNode

ToAPINode used to convert the current Node to an API redisv1alpha1.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, log logr.Logger) *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 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 RemoveSlot

func RemoveSlot(slots []Slot, removedSlot Slot) []Slot

RemoveSlot return a new list of slot where a specified slot have been removed.

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)

Jump to

Keyboard shortcuts

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