File: common.keys

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (144 lines) | stat: -rw-r--r-- 4,875 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#
# Common shell routines for testing remote key servers (incl. clustering)
#
# Copyright (c) 2021,2024 Red Hat.
#

# wait for local server on given port
_wait_for_key_server()
{
    __port=6379 # default
    [ $# -eq 1 ] && __port=$1
    __n=1
    while [ $__n -lt 10 ]; do
	$keys_cli -p $__port ping >/dev/null 2>&1 && return 0
	pmsleep 0.25
	__n=`expr $__n + 1`
    done
    echo _wait_for_key_server on port $__port FAILED
    return 1
}

# wait for PCP schema version to exist in local server on given port
# (must observe version 2 or higher in the pcp:version:schema key).
_wait_for_pcp_schema()
{
    __port=6379 # default
    [ $# -eq 1 ] && __port=$1
    __n=1
    while [ $__n -lt 10 ]; do
	__schema=0`$keys_cli -p $__port get pcp:version:schema 2>/dev/null`
	test "$__schema" -gt 1 && return 0
	pmsleep 0.25
	__n=`expr $__n + 1`
    done
    echo _wait_for_pcp_schema on port $__port FAILED
    return 1
}

_key_server_cluster_3nodes_start()
{
    echo "== Start a key server cluster"
    echo "== Start node 1"
    key_server_node1_port=`_find_free_port`
    $key_server --port $key_server_node1_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys1.cluster.conf > $tmp.keys1.out 2>&1 &
    __key_server_node1_pid=$!
    echo "key_server_node1_port=$key_server_node1_port" >>$seq_full
    echo "__key_server_node1_pid=$__key_server_node1_pid" >>$seq_full
    _wait_for_key_server $key_server_node1_port
    $keys_cli -p $key_server_node1_port ping
    $keys_cli -p $key_server_node1_port flushall

    echo "== Start node 2"
    key_server_node2_port=`_find_free_port`
    $key_server --port $key_server_node2_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys2.cluster.conf > $tmp.keys2.out 2>&1 &
    __key_server_node2_pid=$!
    echo "key_server_node2_port=$key_server_node2_port" >>$seq_full
    echo "__key_server_node2_pid=$__key_server_node2_pid" >>$seq_full
    _wait_for_key_server $key_server_node2_port
    $keys_cli -p $key_server_node2_port ping
    $keys_cli -p $key_server_node2_port flushall

    echo "== Start node 3"
    key_server_node3_port=`_find_free_port`
    $key_server --port $key_server_node3_port --save "" --cluster-enabled yes --cluster-config-file $tmp.keys3.cluster.conf > $tmp.keys3.out 2>&1 &
    __key_server_node3_pid=$!
    echo "key_server_node3_port=$key_server_node3_port" >>$seq_full
    echo "__key_server_node3_pid=$__key_server_node3_pid" >>$seq_full
    _wait_for_key_server $key_server_node3_port
    $keys_cli -p $key_server_node3_port ping
    $keys_cli -p $key_server_node3_port flushall

    echo
    echo "== Create key server cluster"
    # --cluster-yes is not supported <= 5.0.3 (RHEL 7), use workaround instead
    yes yes | $keys_cli --cluster create 127.0.0.1:$key_server_node1_port 127.0.0.1:$key_server_node2_port 127.0.0.1:$key_server_node3_port \
    | sed 's/\x1b\[[0-9;]*m//g' \
    | tee -a $seq_full \
    | grep '[OK]'

    echo
    echo "== Wait for cluster to get ready"
    for __i in `seq 1 30`
    do
	if $keys_cli -p $key_server_node1_port cluster info | grep -q "cluster_state:ok" && echo "OK"
	then
	    __cluster_ready=yes
	    break
	fi
	pmsleep 2
    done
    if [ -z "$__cluster_ready" ]
     then
	echo "Key server cluster didn't get ready in 60 seconds:"
	echo $keys_cli -p $key_server_node1_port cluster info
	$keys_cli -p $key_server_node1_port cluster info
	exit 1
    fi

    echo
    echo "== Cluster status"
    $keys_cli -p $key_server_node1_port cluster info | tr -d '\r' | grep -E "cluster_(state|known_nodes|size)"
}

_key_server_cluster_3nodes_stop()
{
    printf "\n== Key server Node 1 keys:\n" >> $seq_full
    $keys_cli -p $key_server_node1_port keys '*' >> $seq_full
    printf "\n== Key server Node 1 log:\n" >> $seq_full
    cat $tmp.keys1.out >> $seq_full

    printf "\n== Key server Node 2 keys:\n" >> $seq_full
    $keys_cli -p $key_server_node2_port keys '*' >> $seq_full
    printf "\n== Key server Node 2 log:\n" >> $seq_full
    cat $tmp.keys2.out >> $seq_full

    printf "\n== Key server Node 3 keys:\n" >> $seq_full
    $keys_cli -p $key_server_node3_port keys '*' >> $seq_full
    printf "\n== Key server Node 3 log:\n" >> $seq_full
    cat $tmp.keys3.out >> $seq_full

    [ -n "$key_server_node1_port" ] && $keys_cli -p $key_server_node1_port shutdown
    [ -n "$key_server_node2_port" ] && $keys_cli -p $key_server_node2_port shutdown
    [ -n "$key_server_node3_port" ] && $keys_cli -p $key_server_node3_port shutdown
}

if which valkey-cli >/dev/null 2>&1
then
    keys_cli=valkey-cli
elif which redis-cli >/dev/null 2>&1
then
    keys_cli=redis-cli
else
    _notrun "No key server command line interface found"
fi

if which valkey-server >/dev/null 2>&1
then
    key_server=valkey-server
elif which redis-server >/dev/null 2>&1
then
    key_server=redis-server
else
    _notrun "No key server binary found"
fi