kdumpctl: reduce file operations on kdump.conf
Every call to kdump_get_conf_val parses kdump.conf although the file has already been parsed in check_config. Thus store the values parsed in check_config in an array and use them later instead of re-parsing the file over and over again. While at it rename check_config to parse_config. Signed-off-by: Philipp Rudo <prudo@redhat.com> Reviewed-by: Tao Liu <ltao@redhat.com> Reviewed-by: Coiby Xu <coxu@redhat.com>
This commit is contained in:
parent
4adf6d3cc8
commit
edb1d04425
73
kdumpctl
73
kdumpctl
@ -27,6 +27,8 @@ standard_kexec_args="-d -p"
|
|||||||
# Some default values in case /etc/sysconfig/kdump doesn't include
|
# Some default values in case /etc/sysconfig/kdump doesn't include
|
||||||
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug"
|
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug"
|
||||||
|
|
||||||
|
declare -A OPT
|
||||||
|
|
||||||
if [[ -f /etc/sysconfig/kdump ]]; then
|
if [[ -f /etc/sysconfig/kdump ]]; then
|
||||||
. /etc/sysconfig/kdump
|
. /etc/sysconfig/kdump
|
||||||
fi
|
fi
|
||||||
@ -185,9 +187,29 @@ restore_default_initrd()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_config()
|
_set_config()
|
||||||
|
{
|
||||||
|
local opt=$1
|
||||||
|
local val=$2
|
||||||
|
|
||||||
|
if [[ -z $val ]]; then
|
||||||
|
derror "Invalid kdump config value for option '$opt'"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n ${OPT[$opt]} ]]; then
|
||||||
|
if [[ $opt == _target ]]; then
|
||||||
|
derror "More than one dump targets specified"
|
||||||
|
else
|
||||||
|
derror "Duplicated kdump config value of option $opt"
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
OPT[$opt]="$val"
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_config()
|
||||||
{
|
{
|
||||||
local -A _opt_rec
|
|
||||||
while read -r config_opt config_val; do
|
while read -r config_opt config_val; do
|
||||||
case "$config_opt" in
|
case "$config_opt" in
|
||||||
dracut_args)
|
dracut_args)
|
||||||
@ -196,7 +218,7 @@ check_config()
|
|||||||
derror 'Multiple mount targets specified in one "dracut_args".'
|
derror 'Multiple mount targets specified in one "dracut_args".'
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
config_opt=_target
|
_set_config _target "$(get_dracut_args_target "$config_val")" || return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
raw)
|
raw)
|
||||||
@ -240,20 +262,7 @@ check_config()
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ -z $config_val ]]; then
|
_set_config "$config_opt" "$config_val" || return 1
|
||||||
derror "Invalid kdump config value for option '$config_opt'"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n ${_opt_rec[$config_opt]} ]]; then
|
|
||||||
if [[ $config_opt == _target ]]; then
|
|
||||||
derror "More than one dump targets specified"
|
|
||||||
else
|
|
||||||
derror "Duplicated kdump config value of option $config_opt"
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
_opt_rec[$config_opt]="$config_val"
|
|
||||||
done <<< "$(kdump_read_conf)"
|
done <<< "$(kdump_read_conf)"
|
||||||
|
|
||||||
check_failure_action_config || return 1
|
check_failure_action_config || return 1
|
||||||
@ -321,8 +330,8 @@ check_files_modified()
|
|||||||
#also rebuild when Pacemaker cluster conf is changed and fence kdump is enabled.
|
#also rebuild when Pacemaker cluster conf is changed and fence kdump is enabled.
|
||||||
modified_files=$(get_pcs_cluster_modified_files)
|
modified_files=$(get_pcs_cluster_modified_files)
|
||||||
|
|
||||||
EXTRA_BINS=$(kdump_get_conf_val kdump_post)
|
EXTRA_BINS=${OPT[kdump_post]}
|
||||||
CHECK_FILES=$(kdump_get_conf_val kdump_pre)
|
CHECK_FILES=${OPT[kdump_pre]}
|
||||||
HOOKS="/etc/kdump/post.d/ /etc/kdump/pre.d/"
|
HOOKS="/etc/kdump/post.d/ /etc/kdump/pre.d/"
|
||||||
if [[ -d /etc/kdump/post.d ]]; then
|
if [[ -d /etc/kdump/post.d ]]; then
|
||||||
for file in /etc/kdump/post.d/*; do
|
for file in /etc/kdump/post.d/*; do
|
||||||
@ -339,17 +348,17 @@ check_files_modified()
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
HOOKS="$HOOKS $POST_FILES $PRE_FILES"
|
HOOKS="$HOOKS $POST_FILES $PRE_FILES"
|
||||||
CORE_COLLECTOR=$(kdump_get_conf_val core_collector | awk '{print $1}')
|
CORE_COLLECTOR=$(echo "${OPT[core_collector]}" | awk '{print $1}')
|
||||||
CORE_COLLECTOR=$(type -P "$CORE_COLLECTOR")
|
CORE_COLLECTOR=$(type -P "$CORE_COLLECTOR")
|
||||||
# POST_FILES and PRE_FILES are already checked against executable, need not to check again.
|
# POST_FILES and PRE_FILES are already checked against executable, need not to check again.
|
||||||
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
|
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
|
||||||
CHECK_FILES=$(kdump_get_conf_val extra_bins)
|
CHECK_FILES=${OPT[extra_bins]}
|
||||||
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
|
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
|
||||||
files="$KDUMP_CONFIG_FILE $KDUMP_KERNEL $EXTRA_BINS $CORE_COLLECTOR"
|
files="$KDUMP_CONFIG_FILE $KDUMP_KERNEL $EXTRA_BINS $CORE_COLLECTOR"
|
||||||
[[ -e /etc/fstab ]] && files="$files /etc/fstab"
|
[[ -e /etc/fstab ]] && files="$files /etc/fstab"
|
||||||
|
|
||||||
# Check for any updated extra module
|
# Check for any updated extra module
|
||||||
EXTRA_MODULES="$(kdump_get_conf_val extra_modules)"
|
EXTRA_MODULES="${OPT[extra_modules]}"
|
||||||
if [[ -n $EXTRA_MODULES ]]; then
|
if [[ -n $EXTRA_MODULES ]]; then
|
||||||
if [[ -e /lib/modules/$KDUMP_KERNELVER/modules.dep ]]; then
|
if [[ -e /lib/modules/$KDUMP_KERNELVER/modules.dep ]]; then
|
||||||
files="$files /lib/modules/$KDUMP_KERNELVER/modules.dep"
|
files="$files /lib/modules/$KDUMP_KERNELVER/modules.dep"
|
||||||
@ -541,14 +550,14 @@ check_rebuild()
|
|||||||
|
|
||||||
setup_initrd || return 1
|
setup_initrd || return 1
|
||||||
|
|
||||||
force_no_rebuild=$(kdump_get_conf_val force_no_rebuild)
|
force_no_rebuild=${OPT[force_no_rebuild]}
|
||||||
force_no_rebuild=${force_no_rebuild:-0}
|
force_no_rebuild=${force_no_rebuild:-0}
|
||||||
if [[ $force_no_rebuild != "0" ]] && [[ $force_no_rebuild != "1" ]]; then
|
if [[ $force_no_rebuild != "0" ]] && [[ $force_no_rebuild != "1" ]]; then
|
||||||
derror "Error: force_no_rebuild value is invalid"
|
derror "Error: force_no_rebuild value is invalid"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
force_rebuild=$(kdump_get_conf_val force_rebuild)
|
force_rebuild=${OPT[force_rebuild]}
|
||||||
force_rebuild=${force_rebuild:-0}
|
force_rebuild=${force_rebuild:-0}
|
||||||
if [[ $force_rebuild != "0" ]] && [[ $force_rebuild != "1" ]]; then
|
if [[ $force_rebuild != "0" ]] && [[ $force_rebuild != "1" ]]; then
|
||||||
derror "Error: force_rebuild value is invalid"
|
derror "Error: force_rebuild value is invalid"
|
||||||
@ -751,7 +760,7 @@ propagate_ssh_key()
|
|||||||
{
|
{
|
||||||
local SSH_USER SSH_SERVER
|
local SSH_USER SSH_SERVER
|
||||||
|
|
||||||
check_config || return 1
|
parse_config || return 1
|
||||||
|
|
||||||
if [[ -z $DUMP_TARGET ]] ; then
|
if [[ -z $DUMP_TARGET ]] ; then
|
||||||
derror "No ssh destination defined in $KDUMP_CONFIG_FILE."
|
derror "No ssh destination defined in $KDUMP_CONFIG_FILE."
|
||||||
@ -825,7 +834,7 @@ save_raw()
|
|||||||
dwarn "Warning: Detected '$check_fs' signature on $raw_target, data loss is expected."
|
dwarn "Warning: Detected '$check_fs' signature on $raw_target, data loss is expected."
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
kdump_dir=$(kdump_get_conf_val path)
|
kdump_dir=${OPT[path]}
|
||||||
if [[ -z ${kdump_dir} ]]; then
|
if [[ -z ${kdump_dir} ]]; then
|
||||||
coredir="/var/crash/$(date +"%Y-%m-%d-%H:%M")"
|
coredir="/var/crash/$(date +"%Y-%m-%d-%H:%M")"
|
||||||
else
|
else
|
||||||
@ -911,7 +920,7 @@ check_fence_kdump_config()
|
|||||||
|
|
||||||
hostname=$(hostname)
|
hostname=$(hostname)
|
||||||
ipaddrs=$(hostname -I)
|
ipaddrs=$(hostname -I)
|
||||||
nodes=$(kdump_get_conf_val "fence_kdump_nodes")
|
nodes=${OPT[fence_kdump_nodes]}
|
||||||
|
|
||||||
for node in $nodes; do
|
for node in $nodes; do
|
||||||
if [[ $node == "$hostname" ]]; then
|
if [[ $node == "$hostname" ]]; then
|
||||||
@ -964,8 +973,8 @@ check_failure_action_config()
|
|||||||
local failure_action
|
local failure_action
|
||||||
local option="failure_action"
|
local option="failure_action"
|
||||||
|
|
||||||
default_option=$(kdump_get_conf_val default)
|
default_option=${OPT[default]}
|
||||||
failure_action=$(kdump_get_conf_val failure_action)
|
failure_action=${OPT[failure_action]}
|
||||||
|
|
||||||
if [[ -z $failure_action ]] && [[ -z $default_option ]]; then
|
if [[ -z $failure_action ]] && [[ -z $default_option ]]; then
|
||||||
return 0
|
return 0
|
||||||
@ -994,7 +1003,7 @@ check_final_action_config()
|
|||||||
{
|
{
|
||||||
local final_action
|
local final_action
|
||||||
|
|
||||||
final_action=$(kdump_get_conf_val final_action)
|
final_action=${OPT[final_action]}
|
||||||
if [[ -z $final_action ]]; then
|
if [[ -z $final_action ]]; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@ -1017,7 +1026,7 @@ start()
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! check_config; then
|
if ! parse_config; then
|
||||||
derror "Starting kdump: [FAILED]"
|
derror "Starting kdump: [FAILED]"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -1153,7 +1162,7 @@ stop()
|
|||||||
|
|
||||||
rebuild()
|
rebuild()
|
||||||
{
|
{
|
||||||
check_config || return 1
|
parse_config || return 1
|
||||||
check_and_wait_network_ready || return 1
|
check_and_wait_network_ready || return 1
|
||||||
|
|
||||||
setup_initrd || return 1
|
setup_initrd || return 1
|
||||||
|
Loading…
Reference in New Issue
Block a user