123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # Cluster-specific test functions.
- #
- # Copyright (C) 2014 Salvatore Sanfilippo antirez@gmail.com
- # This softare is released under the BSD License. See the COPYING file for
- # more information.
- # Returns a parsed CLUSTER NODES output as a list of dictionaries.
- proc get_cluster_nodes id {
- set lines [split [R $id cluster nodes] "\r\n"]
- set nodes {}
- foreach l $lines {
- set l [string trim $l]
- if {$l eq {}} continue
- set args [split $l]
- set node [dict create \
- id [lindex $args 0] \
- addr [lindex $args 1] \
- flags [split [lindex $args 2] ,] \
- slaveof [lindex $args 3] \
- ping_sent [lindex $args 4] \
- pong_recv [lindex $args 5] \
- config_epoch [lindex $args 6] \
- linkstate [lindex $args 7] \
- slots [lrange $args 8 -1] \
- ]
- lappend nodes $node
- }
- return $nodes
- }
- # Test node for flag.
- proc has_flag {node flag} {
- expr {[lsearch -exact [dict get $node flags] $flag] != -1}
- }
- # Returns the parsed myself node entry as a dictionary.
- proc get_myself id {
- set nodes [get_cluster_nodes $id]
- foreach n $nodes {
- if {[has_flag $n myself]} {return $n}
- }
- return {}
- }
- # Return the value of the specified CLUSTER INFO field.
- proc CI {n field} {
- get_info_field [R $n cluster info] $field
- }
- # Assuming nodes are reest, this function performs slots allocation.
- # Only the first 'n' nodes are used.
- proc cluster_allocate_slots {n} {
- set slot 16383
- while {$slot >= 0} {
- # Allocate successive slots to random nodes.
- set node [randomInt $n]
- lappend slots_$node $slot
- incr slot -1
- }
- for {set j 0} {$j < $n} {incr j} {
- R $j cluster addslots {*}[set slots_${j}]
- }
- }
|