summaryrefslogtreecommitdiff
path: root/scripts/wsrep_sst_common.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/wsrep_sst_common.sh')
-rw-r--r--scripts/wsrep_sst_common.sh132
1 files changed, 96 insertions, 36 deletions
diff --git a/scripts/wsrep_sst_common.sh b/scripts/wsrep_sst_common.sh
index 6a94cb0f706..4e177073872 100644
--- a/scripts/wsrep_sst_common.sh
+++ b/scripts/wsrep_sst_common.sh
@@ -47,18 +47,51 @@ trim_string()
trim_dir()
{
- local t=$(trim_string "$1")
- if [ "$t" != '/' ]; then
- if [ "${t%/}" != "$t" ]; then
- t=$(trim_string "${t%/}")
+ if [ -n "$BASH_VERSION" ]; then
+ local pattern="![:space:]${2:-}"
+ local x="${1#*[$pattern]}"
+ local z=${#1}
+ x=${#x}
+ if [ $x -ne $z ]; then
+ local y="${1%[$pattern/]*}"
+ y=${#y}
+ x=$(( z-x-1 ))
+ y=$(( y-x+1 ))
+ x="${1:$x:$y}"
+ [ -z "$x" ] && x='.'
+ printf '%s' "$x"
+ else
+ printf ''
fi
else
- t='.'
+ local pattern="[:space:]${2:-}"
+ local x=$(echo "$1" | sed -E "s/^[$pattern]+|[$pattern/]+\$//g")
+ if [ -n "$x" ]; then
+ echo "$x"
+ elif "${1#*/}" != "$1"; then
+ echo '.'
+ else
+ echo ''
+ fi
fi
+}
+
+trim_right()
+{
if [ -n "$BASH_VERSION" ]; then
- printf '%s' "$t"
+ local pattern="[![:space:]${2:-}]"
+ local z=${#1}
+ local y="${1%$pattern*}"
+ y=${#y}
+ if [ $y -ne $z ]; then
+ y=$(( y+1 ))
+ printf '%s' "${1:0:$y}"
+ else
+ printf ''
+ fi
else
- echo "$t"
+ local pattern="[[:space:]${2:-}]"
+ echo "$1" | sed -E "s/$pattern+\$//g"
fi
}
@@ -101,6 +134,7 @@ WSREP_SST_OPT_ADDR=""
WSREP_SST_OPT_ADDR_PORT=""
WSREP_SST_OPT_HOST=""
WSREP_SST_OPT_HOST_UNESCAPED=""
+ARIA_LOG_DIR=""
INNODB_DATA_HOME_DIR=$(trim_dir "${INNODB_DATA_HOME_DIR:-}")
INNODB_LOG_GROUP_HOME=$(trim_dir "${INNODB_LOG_GROUP_HOME:-}")
INNODB_UNDO_DIR=$(trim_dir "${INNODB_UNDO_DIR:-}")
@@ -111,7 +145,7 @@ INNOEXTRA=""
while [ $# -gt 0 ]; do
case "$1" in
'--address')
- WSREP_SST_OPT_ADDR="$2"
+ WSREP_SST_OPT_ADDR=$(trim_string "$2")
#
# Break address string into host:port/path parts
#
@@ -119,20 +153,22 @@ case "$1" in
\[*)
# IPv6
# Remove the starting and ending square brackets, if present:
- addr_no_bracket="${WSREP_SST_OPT_ADDR#\[}"
+ addr="${WSREP_SST_OPT_ADDR#\[}"
+ addr=$(trim_right "${addr%%\]*}")
# Some utilities and subsequent code require an address
# without square brackets:
- readonly WSREP_SST_OPT_HOST_UNESCAPED="${addr_no_bracket%%\]*}"
+ readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr"
# Square brackets are needed in most cases:
- readonly WSREP_SST_OPT_HOST="[$WSREP_SST_OPT_HOST_UNESCAPED]"
+ readonly WSREP_SST_OPT_HOST="[$addr]"
# Mark this address as IPv6:
readonly WSREP_SST_OPT_HOST_IPv6=1
# Let's remove the leading part that contains the host address:
remain="${WSREP_SST_OPT_ADDR#*\]}"
;;
*)
- readonly WSREP_SST_OPT_HOST="${WSREP_SST_OPT_ADDR%%[:/]*}"
- readonly WSREP_SST_OPT_HOST_UNESCAPED="$WSREP_SST_OPT_HOST"
+ addr=$(trim_right "${WSREP_SST_OPT_ADDR%%[:/]*}")
+ readonly WSREP_SST_OPT_HOST="$addr"
+ readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr"
readonly WSREP_SST_OPT_HOST_IPv6=0
# Let's remove the leading part that contains the host address:
remain="${WSREP_SST_OPT_ADDR#*[:/]}"
@@ -154,17 +190,18 @@ case "$1" in
else
readonly WSREP_SST_OPT_PATH=""
fi
+ WSREP_SST_OPT_ADDR_PORT=$(trim_right "$WSREP_SST_OPT_ADDR_PORT")
# Remove the module name part from the string, which ends with "/":
remain="${WSREP_SST_OPT_PATH#*/}"
# This operation removes the tail after the very first occurrence
# of the "/" character, inclusively:
- readonly WSREP_SST_OPT_MODULE="${WSREP_SST_OPT_PATH%%/*}"
+ readonly WSREP_SST_OPT_MODULE=$(trim_right "${WSREP_SST_OPT_PATH%%/*}")
# If there is one more "/" in the string, then everything before
# it will be the LSN, otherwise the LSN is empty:
if [ "$remain" != "$WSREP_SST_OPT_PATH" ]; then
# Extract the part that matches the LSN by removing all
# characters starting from the very first "/":
- readonly WSREP_SST_OPT_LSN="${remain%%/*}"
+ readonly WSREP_SST_OPT_LSN=$(trim_right "${remain%%/*}")
# Exctract everything after the first occurrence of
# the "/" character in the string:
source="$remain"
@@ -176,7 +213,7 @@ case "$1" in
# Let's extract the version number by removing the tail
# after the very first occurence of the "/" character
# (inclusively):
- readonly WSREP_SST_OPT_SST_VER="${remain%%/*}"
+ readonly WSREP_SST_OPT_SST_VER=$(trim_right "${remain%%/*}")
else
readonly WSREP_SST_OPT_SST_VER=""
fi
@@ -198,6 +235,11 @@ case "$1" in
readonly WSREP_SST_OPT_DATA=$(trim_dir "$2")
shift
;;
+ '--aria-log-dir-path')
+ # Let's remove the trailing slash:
+ readonly ARIA_LOG_DIR=$(trim_dir "$2")
+ shift
+ ;;
'--innodb-data-home-dir')
# Let's remove the trailing slash:
readonly INNODB_DATA_HOME_DIR=$(trim_dir "$2")
@@ -218,41 +260,46 @@ case "$1" in
shift
;;
'--defaults-file')
- readonly WSREP_SST_OPT_DEFAULT="$1=$2"
- readonly WSREP_SST_OPT_DEFAULTS="$1='$2'"
+ file=$(trim_string "$2")
+ readonly WSREP_SST_OPT_DEFAULT="$1=$file"
+ readonly WSREP_SST_OPT_DEFAULTS="$1='$file'"
shift
;;
'--defaults-extra-file')
- readonly WSREP_SST_OPT_EXTRA_DEFAULT="$1=$2"
- readonly WSREP_SST_OPT_EXTRA_DEFAULTS="$1='$2'"
+ file=$(trim_string "$2")
+ readonly WSREP_SST_OPT_EXTRA_DEFAULT="$1=$file"
+ readonly WSREP_SST_OPT_EXTRA_DEFAULTS="$1='$file'"
shift
;;
'--defaults-group-suffix')
- readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$2"
- readonly WSREP_SST_OPT_SUFFIX_VALUE="$2"
+ suffix=$(trim_string "$2")
+ readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$suffix"
+ readonly WSREP_SST_OPT_SUFFIX_VALUE="$suffix"
shift
;;
'--host')
- case "$2" in
+ addr=$(trim_string "$2")
+ case "$addr" in
\[*)
# IPv6
# Remove the starting and ending square brackets, if present:
- addr_no_bracket="${2#\[}"
+ addr="${addr#\[}"
+ addr=$(trim_right "${addr%%\]*}")
# Some utilities and subsequent code require an address
# without square brackets:
- readonly WSREP_SST_OPT_HOST_UNESCAPED="${addr_no_bracket%%\]*}"
+ readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr"
# Square brackets are needed in most cases:
- readonly WSREP_SST_OPT_HOST="[${WSREP_SST_OPT_HOST_UNESCAPED}]"
+ readonly WSREP_SST_OPT_HOST="[$addr]"
# Mark this address as IPv6:
readonly WSREP_SST_OPT_HOST_IPv6=1
;;
*)
- readonly WSREP_SST_OPT_HOST="$2"
- readonly WSREP_SST_OPT_HOST_UNESCAPED="$2"
+ readonly WSREP_SST_OPT_HOST="$addr"
+ readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr"
readonly WSREP_SST_OPT_HOST_IPv6=0
;;
esac
- WSREP_SST_OPT_ADDR="$WSREP_SST_OPT_HOST"
+ WSREP_SST_OPT_ADDR="$addr"
shift
;;
'--local-port')
@@ -272,11 +319,11 @@ case "$1" in
shift
;;
'--role')
- readonly WSREP_SST_OPT_ROLE="$2"
+ readonly WSREP_SST_OPT_ROLE=$(trim_string "$2")
shift
;;
'--socket')
- readonly WSREP_SST_OPT_SOCKET="$2"
+ readonly WSREP_SST_OPT_SOCKET=$(trim_string "$2")
shift
;;
'--user')
@@ -284,23 +331,23 @@ case "$1" in
shift
;;
'--gtid')
- readonly WSREP_SST_OPT_GTID="$2"
+ readonly WSREP_SST_OPT_GTID=$(trim_string "$2")
shift
;;
'--binlog'|'--log-bin')
- readonly WSREP_SST_OPT_BINLOG="$2"
+ readonly WSREP_SST_OPT_BINLOG=$(trim_string "$2")
shift
;;
'--binlog-index'|'--log-bin-index')
- WSREP_SST_OPT_BINLOG_INDEX="$2"
+ WSREP_SST_OPT_BINLOG_INDEX=$(trim_string "$2")
shift
;;
'--log-basename')
- readonly WSREP_SST_OPT_LOG_BASENAME="$2"
+ readonly WSREP_SST_OPT_LOG_BASENAME=$(trim_string "$2")
shift
;;
'--gtid-domain-id')
- readonly WSREP_SST_OPT_GTID_DOMAIN_ID="$2"
+ readonly WSREP_SST_OPT_GTID_DOMAIN_ID=$(trim_string "$2")
shift
;;
'--mysqld-args')
@@ -458,6 +505,12 @@ case "$1" in
# from mysqld's argument list:
skip_mysqld_arg=0
case "$option" in
+ '--aria-log-dir-path')
+ if [ -z "$ARIA_LOG_DIR" ]; then
+ MYSQLD_OPT_ARIA_LOG_DIR=$(trim_dir "$value")
+ fi
+ skip_mysqld_arg=1
+ ;;
'--innodb-data-home-dir')
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
MYSQLD_OPT_INNODB_DATA_HOME_DIR=$(trim_dir "$value")
@@ -551,6 +604,10 @@ readonly WSREP_SST_OPT_PROGRESS
# The same argument can be present on the command line several
# times, in this case we must take its last value:
+if [ -n "${MYSQLD_OPT_ARIA_LOG_DIR:-}" -a \
+ -z "$ARIA_LOG_DIR" ]; then
+ readonly ARIA_LOG_DIR="$MYSQLD_OPT_ARIA_LOG_DIR"
+fi
if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \
-z "$INNODB_DATA_HOME_DIR" ]; then
readonly INNODB_DATA_HOME_DIR="$MYSQLD_OPT_INNODB_DATA_HOME_DIR"
@@ -608,6 +665,9 @@ if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then
WSREP_SST_OPT_MYSQLD="--log-basename='$WSREP_SST_OPT_LOG_BASENAME'"
fi
fi
+if [ -n "$ARIA_LOG_DIR" ]; then
+ INNOEXTRA="$INNOEXTRA --aria-log-dir-path='$ARIA_LOG_DIR'"
+fi
if [ -n "$INNODB_DATA_HOME_DIR" ]; then
INNOEXTRA="$INNOEXTRA --innodb-data-home-dir='$INNODB_DATA_HOME_DIR'"
fi