mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-19 02:05:23 +00:00
PT-2156 Fix tests for lib, part2 (#650)
* PT-2156 - Fix tests for lib Fixed tests, broken by putting fix for PT-1554 into the library code, mostly by updating checksums. Added AutoCommit option for test lib/QueryReview.t Reset SQL mode to empty to allow TableChunker to work with invalid and zero dates * PT-2156 - Fix tests for lib Adjusted t/lib/SchemaIterator.t to work with version 8.0 * PT-2156 - Fix tests for lib Adjusted b/t/lib/Processlist.t, so it reflects fix for PT-981 * PT-2156 - Fix tests for lib Adjusted t/lib/HTTP/Micro.t, so it works with different order of parameters, returned at v.percona.com/ Adjusted test for empty files in t/lib/bash/collect.t Disabled mysqladmin debug test in t/lib/bash/collect.t, because of PT-2242 * PT-2156 - Fix tests for lib Added LC_NUMERRIC=POSIX into t/lib/bash/report_system_info.sh, so reports in tests are not environment-dependent Updated expected results in t/lib/bash/report_system_info.sh, so they reflect new information, collected by pt-summary * PT-2156 - Fix tests for lib - Improved fix for PT-76, so it handles inline comments - Added test case for PT-76 - Improved fix for PT-1720, so it ignores unrecognizable option only if it comes from the toolkit-wide files and still errors out if wrong option was passed via command line or the tool-specific option file. * PT-2156 - Fix tests for lib - Improved fix for PT-2102, so it finds running instance configuration file using PID and also does not break t/lib/bash/report_mysql_info.t test - Removed unnecessary copy-paste from t/pt-mysql-summary/pt-2102.t test - Adjusted number of collected files in t/lib/bash/collect_mysql_info.sh * PT-2156 - Fix tests for lib - Fix for PT-1543 and MyRocks collection were originally put only into lib/bash/report_mysql_info.shthat broke the logic of collecting data first, then formatting report from this data. This, in its turn, broke test t/lib/bash/report_mysql_info.sh/t/lib/bash/report_mysql_info.t, because CMD_MYSQL is not defined in this library. I rewrote these fixes, so they follow original logic of the tool (pt-mysql-summary) - Added tests for keyring plugin, encrypted tables, and MyRocks for t/lib/bash/report_mysql_info.sh and t/pt-mysql-summary/pt-mysql-summary_encryption.t * PT-2156 - Fix tests for lib - Added FLUSH TABLES to t/lib/bash/collect.sh, so it does not fail opentables tests if run when more than 1000 tables open in the sandbox environment - Changed number of expected sample files to reflect keyring colletion file * PT-2156 - Fix tests for lib - Added skip to some tests in lib that file when run with PXC, because not supported to work with PXC - Adjusted configuration files for PXC, so they allow LOAD DATA/SELECT INTO OUTFILE commands - Adjusted data samples, so they do not depend on auto increment values - Fixed lib tests, failing with PXC * PT-2156 - Fix tests for lib Updated tests for pt-online-schema-change, so they work with PXC and skipped if designed for semi-synchronous replication setup * PT-2156 - Fix tests for lib - Added cluster-specific samples for t/lib/SchemaIterator.t - Removed extra debugging print from t/pt-table-checksum/pt-1728.t * PT-2156 - Fix tests for lib Evgeniy's review on July 20 * Update t/lib/TableSyncer.t Removed comment left after debugging * Update t/pt-mysql-summary/pt-mysql-summary_encryption.t Removed extra debug output * PT-2156 - Fix tests for lib Tabs to spaces
This commit is contained in:
@@ -77,6 +77,7 @@ OPT_VERSION="" # If --version was specified
|
||||
OPT_HELP="" # If --help was specified
|
||||
OPT_ASK_PASS="" # If --ask-pass was specified
|
||||
PO_DIR="" # Directory with program option spec files
|
||||
GLOBAL_CONFIG=0 # We ignore non-recognized options in global configs
|
||||
|
||||
usage() {
|
||||
local file="$1"
|
||||
@@ -205,9 +206,15 @@ parse_options() {
|
||||
_parse_config_files "$user_config_file"
|
||||
done
|
||||
else
|
||||
_parse_config_files "/etc/percona-toolkit/percona-toolkit.conf" "/etc/percona-toolkit/$TOOL.conf"
|
||||
GLOBAL_CONFIG=1
|
||||
_parse_config_files "/etc/percona-toolkit/percona-toolkit.conf"
|
||||
GLOBAL_CONFIG=0
|
||||
_parse_config_files "/etc/percona-toolkit/$TOOL.conf"
|
||||
if [ "${HOME:-}" ]; then
|
||||
_parse_config_files "$HOME/.percona-toolkit.conf" "$HOME/.$TOOL.conf"
|
||||
GLOBAL_CONFIG=1
|
||||
_parse_config_files "$HOME/.percona-toolkit.conf"
|
||||
GLOBAL_CONFIG=0
|
||||
_parse_config_files "$HOME/.$TOOL.conf"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -314,7 +321,7 @@ _parse_config_files() {
|
||||
|
||||
echo "$config_opt" | grep '^[ ]*[^#]' >/dev/null 2>&1 || continue
|
||||
|
||||
config_opt="$(echo "$config_opt" | sed -e 's/^ *//g' -e 's/ *$//g' -e 's/[ ]*=[ ]*/=/' -e 's/[ ]+#.*$//')"
|
||||
config_opt="$(echo "$config_opt" | sed -e 's/^ *//g' -e 's/ *$//g' -e 's/[ ]*=[ ]*/=/' -e 's/\s[ ]*#.*$//')"
|
||||
|
||||
[ "$config_opt" = "" ] && continue
|
||||
|
||||
@@ -406,7 +413,11 @@ _parse_command_line() {
|
||||
else
|
||||
spec=$(grep "^short form:-$opt\$" "$PT_TMPDIR"/po/* | cut -d ':' -f 1)
|
||||
if [ -z "$spec" ]; then
|
||||
continue
|
||||
if [ $GLOBAL_CONFIG -eq 1 ]; then
|
||||
continue
|
||||
else
|
||||
option_error "Unknown option: $real_opt"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -872,9 +883,21 @@ collect_mysqld_instances () {
|
||||
find_my_cnf_file() {
|
||||
local file="$1"
|
||||
local port="${2:-""}"
|
||||
local pid_file="${3:-""}"
|
||||
|
||||
local cnf_file=""
|
||||
|
||||
if [ "$pid_file" ]; then
|
||||
local pid=$(cat "$pid_file")
|
||||
cnf_file="$(grep --max-count 1 -E "^\s*$pid\s+" "$file" \
|
||||
| awk 'BEGIN{RS=" "; FS="=";} $1 ~ /--defaults-file/ { print $2; }')"
|
||||
|
||||
if [ -n "$cnf_file" ]; then
|
||||
echo "$cnf_file"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$port" ]; then
|
||||
cnf_file="$(grep --max-count 1 "/mysqld.*--port=$port" "$file" \
|
||||
| awk 'BEGIN{RS=" "; FS="=";} $1 ~ /--defaults-file/ { print $2; }')"
|
||||
@@ -883,12 +906,11 @@ find_my_cnf_file() {
|
||||
echo "$cnf_file"
|
||||
return
|
||||
fi
|
||||
else
|
||||
cnf_file="$(grep --max-count 1 '/mysqld' "$file" \
|
||||
| awk 'BEGIN{RS=" "; FS="=";} $1 ~ /--defaults-file/ { print $2; }')"
|
||||
fi
|
||||
|
||||
cnf_file="$(grep --max-count 1 '/mysqld' "$file" \
|
||||
| awk 'BEGIN{RS=" "; FS="=";} $1 ~ /--defaults-file/ { print $2; }')"
|
||||
|
||||
|
||||
if [ -z "$cnf_file" ]; then
|
||||
if [ -e "/etc/my.cnf" ]; then
|
||||
cnf_file="/etc/my.cnf"
|
||||
@@ -990,6 +1012,43 @@ collect_internal_vars () {
|
||||
i=$(($i + 1))
|
||||
done < "$mysqld_executables"
|
||||
fi
|
||||
|
||||
local JEMALLOC_STATUS=''
|
||||
local GENERAL_JEMALLOC_STATUS=0
|
||||
local JEMALLOC_LOCATION=''
|
||||
|
||||
for pid in $(pidof mysqld); do
|
||||
grep -qc jemalloc /proc/${pid}/environ || ldd $(which mysqld) 2>/dev/null | grep -qc jemalloc
|
||||
jemalloc_status=$?
|
||||
if [ $jemalloc_status = 1 ]; then
|
||||
echo "pt-summary-internal-jemalloc_enabled_for_pid_${pid} 0"
|
||||
else
|
||||
echo "pt-summary-internal-jemalloc_enabled_for_pid_${pid} 1"
|
||||
GENERAL_JEMALLOC_STATUS=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $GENERAL_JEMALLOC_STATUS -eq 1 ]; then
|
||||
JEMALLOC_LOCATION=$(find /usr/lib64/ /usr/lib/x86_64-linux-gnu /usr/lib -name "libjemalloc.*" 2>/dev/null | head -n 1)
|
||||
echo "pt-summary-internal-jemalloc_location ${JEMALLOC_LOCATION}"
|
||||
fi
|
||||
}
|
||||
|
||||
collect_keyring_plugins() {
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e 'SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE "keyring%";'
|
||||
}
|
||||
|
||||
collect_encrypted_tables() {
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION=_Y_%';"
|
||||
}
|
||||
|
||||
collect_encrypted_tablespaces() {
|
||||
local version="$1"
|
||||
if [ "$version" '<' "8.0" ]; then
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT SPACE, NAME, SPACE_TYPE from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES where FLAG&8192 = 8192;"
|
||||
else
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT SPACE, NAME, SPACE_TYPE from INFORMATION_SCHEMA.INNODB_TABLESPACES where FLAG&8192 = 8192;"
|
||||
fi
|
||||
}
|
||||
|
||||
get_mysqldump_for () {
|
||||
@@ -1047,6 +1106,7 @@ collect_mysql_info () {
|
||||
collect_mysql_processlist > "$dir/mysql-processlist"
|
||||
collect_mysql_users > "$dir/mysql-users"
|
||||
collect_mysql_roles > "$dir/mysql-roles"
|
||||
collect_keyring_plugins > "$dir/keyring-plugins"
|
||||
|
||||
collect_mysqld_instances "$dir/mysql-variables" > "$dir/mysqld-instances"
|
||||
collect_mysqld_executables "$dir/mysqld-instances" > "$dir/mysqld-executables"
|
||||
@@ -1061,16 +1121,16 @@ collect_mysql_info () {
|
||||
local current_time="$($CMD_MYSQL $EXT_ARGV -ss -e \
|
||||
"SELECT LEFT(NOW() - INTERVAL ${uptime} SECOND, 16)")"
|
||||
|
||||
local port="$(get_var port "$dir/mysql-variables")"
|
||||
local cnf_file="$(find_my_cnf_file "$dir/mysqld-instances" ${port})"
|
||||
|
||||
[ -e "$cnf_file" ] && cat "$cnf_file" > "$dir/mysql-config-file"
|
||||
|
||||
local pid_file="$(get_var "pid_file" "$dir/mysql-variables")"
|
||||
local pid_file_exists=""
|
||||
[ -e "${pid_file}" ] && pid_file_exists=1
|
||||
echo "pt-summary-internal-pid_file_exists $pid_file_exists" >> "$dir/mysql-variables"
|
||||
|
||||
local port="$(get_var port "$dir/mysql-variables")"
|
||||
local cnf_file="$(find_my_cnf_file "$dir/mysqld-instances" ${port} ${pid_file})"
|
||||
|
||||
[ -e "$cnf_file" ] && cat "$cnf_file" > "$dir/mysql-config-file"
|
||||
|
||||
echo "pt-summary-internal-current_time $current_time" >> "$dir/mysql-variables"
|
||||
echo "pt-summary-internal-Config_File_path $cnf_file" >> "$dir/mysql-variables"
|
||||
collect_internal_vars "$dir/mysqld-executables" >> "$dir/mysql-variables"
|
||||
@@ -1081,6 +1141,12 @@ collect_mysql_info () {
|
||||
get_mysqldump_for "${trg_arg}" "$dbs" > "$dir/mysqldump"
|
||||
fi
|
||||
|
||||
if [ "${OPT_LIST_ENCRYPTED_TABLES}" = 'yes' ]; then
|
||||
local mysql_version="$(get_var version "$dir/mysql-variables")"
|
||||
collect_encrypted_tables > "$dir/encrypted-tables"
|
||||
collect_encrypted_tablespaces ${mysql_version} > "$dir/encrypted-tablespaces"
|
||||
fi
|
||||
|
||||
(
|
||||
sleep $OPT_SLEEP
|
||||
collect_mysql_deferred_status "$dir/mysql-status" > "$dir/mysql-status-defer"
|
||||
@@ -1182,24 +1248,6 @@ get_plugin_status () {
|
||||
echo ${status:-"Not found"}
|
||||
}
|
||||
|
||||
collect_keyring_plugins() {
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e 'SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE "keyring%";'
|
||||
}
|
||||
|
||||
collect_encrypted_tables() {
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION=\"Y\"%';"
|
||||
}
|
||||
|
||||
collect_encrypted_tablespaces() {
|
||||
local version="$1"
|
||||
if [ "$version" '<' "8.0" ]; then
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT SPACE, NAME, SPACE_TYPE from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES where FLAG&8192 = 8192;"
|
||||
else
|
||||
$CMD_MYSQL $EXT_ARGV --table -ss -e "SELECT SPACE, NAME, SPACE_TYPE from INFORMATION_SCHEMA.INNODB_TABLESPACES where FLAG&8192 = 8192;"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
_NO_FALSE_NEGATIVES=""
|
||||
parse_mysqld_instances () {
|
||||
@@ -2293,30 +2341,31 @@ parse_wsrep_provider_options () {
|
||||
}
|
||||
|
||||
report_jemalloc_enabled() {
|
||||
local JEMALLOC_STATUS=''
|
||||
local GENERAL_JEMALLOC_STATUS=0
|
||||
local JEMALLOC_LOCATION=''
|
||||
local instances_file="$1"
|
||||
local variables_file="$2"
|
||||
local GENERAL_JEMALLOC_STATUS=0
|
||||
|
||||
for pid in $(grep '/mysqld ' "$instances_file" | awk '{print $1;}'); do
|
||||
local jemalloc_status="$(get_var "pt-summary-internal-jemalloc_enabled_for_pid_${pid}" "${variables_file}")"
|
||||
if [ -z $jemalloc_status ]; then
|
||||
continue
|
||||
elif [ $jemalloc_status = 0 ]; then
|
||||
echo "jemalloc is not enabled in mysql config for process with id ${pid}"
|
||||
else
|
||||
echo "jemalloc enabled in mysql config for process with id ${pid}"
|
||||
GENERAL_JEMALLOC_STATUS=1
|
||||
fi
|
||||
done
|
||||
|
||||
for pid in $(pidof mysqld); do
|
||||
grep -qc jemalloc /proc/${pid}/environ || ldd $(which mysqld) 2>/dev/null | grep -qc jemalloc
|
||||
jemalloc_status=$?
|
||||
if [ $jemalloc_status = 1 ]; then
|
||||
echo "jemalloc is not enabled in mysql config for process with id ${pid}"
|
||||
else
|
||||
echo "jemalloc enabled in mysql config for process with id ${pid}"
|
||||
GENERAL_JEMALLOC_STATUS=1
|
||||
fi
|
||||
done
|
||||
if [ $GENERAL_JEMALLOC_STATUS -eq 1 ]; then
|
||||
local jemalloc_location="$(get_var "pt-summary-internal-jemalloc_location" "${variables_file}")"
|
||||
if [ -n "$jemalloc_location" ]; then
|
||||
echo "Using jemalloc from $jemalloc_location"
|
||||
else
|
||||
echo "Jemalloc library not found"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $GENERAL_JEMALLOC_STATUS -eq 1 ]; then
|
||||
JEMALLOC_LOCATION=$(find /usr/lib64/ /usr/lib/x86_64-linux-gnu /usr/lib -name "libjemalloc.*" 2>/dev/null | head -n 1)
|
||||
if [ -z "$JEMALLOC_LOCATION" ]; then
|
||||
echo "Jemalloc library not found"
|
||||
else
|
||||
echo "Using jemalloc from $JEMALLOC_LOCATION"
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
report_mysql_summary () {
|
||||
@@ -2522,7 +2571,7 @@ report_mysql_summary () {
|
||||
fi
|
||||
fi
|
||||
|
||||
local has_rocksdb=$($CMD_MYSQL $EXT_ARGV -ss -e 'SHOW ENGINES' 2>/dev/null | grep -i 'rocksdb')
|
||||
local has_rocksdb=$(cat $dir/mysql-plugins | grep -i 'rocksdb.*active.*storage engine')
|
||||
if [ ! -z "$has_rocksdb" ]; then
|
||||
section "RocksDB"
|
||||
section_rocksdb "$dir/mysql-variables" "$dir/mysql-status"
|
||||
@@ -2547,13 +2596,17 @@ report_mysql_summary () {
|
||||
fi
|
||||
|
||||
section "Encryption"
|
||||
local keyring_plugins="$(collect_keyring_plugins)"
|
||||
local keyring_plugins=""
|
||||
local encrypted_tables=""
|
||||
local encrypted_tablespaces=""
|
||||
if [ "${OPT_LIST_ENCRYPTED_TABLES}" = 'yes' ]; then
|
||||
local mysql_version="$(get_var version "$dir/mysql-variables")"
|
||||
encrypted_tables="$(collect_encrypted_tables)"
|
||||
encrypted_tablespaces="$(collect_encrypted_tablespaces ${mysql_version})"
|
||||
if [ -s "$dir/keyring-plugins" ]; then
|
||||
keyring_plugins="$(cat $dir/keyring-plugins)"
|
||||
fi
|
||||
if [ -s "$dir/encrypted-tables" ]; then
|
||||
encrypted_tables="$(cat $dir/encrypted-tables)"
|
||||
fi
|
||||
if [ -s "$dir/encrypted-tablespaces" ]; then
|
||||
encrypted_tablespaces="$(cat $dir/encrypted-tablespaces)"
|
||||
fi
|
||||
|
||||
format_keyring_plugins "$keyring_plugins" "$encrypted_tables"
|
||||
@@ -2588,7 +2641,7 @@ report_mysql_summary () {
|
||||
fi
|
||||
|
||||
section "Memory management library"
|
||||
report_jemalloc_enabled
|
||||
report_jemalloc_enabled "$dir/mysqld-instances" "$dir/mysql-variables"
|
||||
|
||||
section "The End"
|
||||
}
|
||||
|
Reference in New Issue
Block a user