1#!/bin/sh -eu
2
3# This is a simple example of wsrep notification script (wsrep_notify_cmd).
4# It will create 'wsrep' schema and two tables in it: 'membeship' and 'status'
5# and fill them on every membership or node status change.
6#
7# Edit parameters below to specify the address and login to server.
8
9USER=root
10PSWD=rootpass
11HOST=127.0.0.1
12PORT=3306
13
14SCHEMA="wsrep"
15MEMB_TABLE="$SCHEMA.membership"
16STATUS_TABLE="$SCHEMA.status"
17
18BEGIN="
19SET wsrep_on=0;
20DROP SCHEMA IF EXISTS $SCHEMA; CREATE SCHEMA $SCHEMA;
21CREATE TABLE $MEMB_TABLE (
22    idx  INT UNIQUE PRIMARY KEY,
23    uuid CHAR(40) UNIQUE, /* node UUID */
24    name VARCHAR(32),     /* node name */
25    addr VARCHAR(256)     /* node address */
26) ENGINE=MEMORY;
27CREATE TABLE $STATUS_TABLE (
28    size   INT,      /* component size   */
29    idx    INT,      /* this node index  */
30    status CHAR(16), /* this node status */
31    uuid   CHAR(40), /* cluster UUID */
32    prim   BOOLEAN   /* if component is primary */
33) ENGINE=MEMORY;
34BEGIN;
35DELETE FROM $MEMB_TABLE;
36DELETE FROM $STATUS_TABLE;
37"
38END="COMMIT;"
39
40configuration_change()
41{
42    echo "$BEGIN;"
43
44    local idx=0
45
46    for NODE in $(echo $MEMBERS | sed s/,/\ /g)
47    do
48        echo "INSERT INTO $MEMB_TABLE VALUES ( $idx, "
49        # Don't forget to properly quote string values
50        echo "'$NODE'" | sed  s/\\//\',\'/g
51        echo ");"
52        idx=$(( $idx + 1 ))
53    done
54
55    echo "INSERT INTO $STATUS_TABLE VALUES($idx, $INDEX, '$STATUS', '$CLUSTER_UUID', $PRIMARY);"
56
57    echo "$END"
58}
59
60status_update()
61{
62    echo "SET wsrep_on=0; BEGIN; UPDATE $STATUS_TABLE SET status='$STATUS'; COMMIT;"
63}
64
65COM=status_update # not a configuration change by default
66
67while [ $# -gt 0 ]
68do
69    case $1 in
70    --status)
71        STATUS=$2
72        shift
73        ;;
74    --uuid)
75        CLUSTER_UUID=$2
76        shift
77        ;;
78    --primary)
79        [ "$2" = "yes" ] && PRIMARY="1" || PRIMARY="0"
80        COM=configuration_change
81        shift
82        ;;
83    --index)
84        INDEX=$2
85        shift
86        ;;
87    --members)
88        MEMBERS=$2
89        shift
90        ;;
91    esac
92    shift
93done
94
95# Undefined means node is shutting down
96if [ "$STATUS" != "Undefined" ]
97then
98    $COM | mysql -B -u$USER -p$PSWD -h$HOST -P$PORT
99fi
100
101exit 0
102#
103