[service] add warmboot finializer service (#2725)
After warm reboot is done, we need to disable warm reboot flag and tear down anything setup for warm reboot and persisted across. Signed-off-by: Ying Xie <ying.xie@microsoft.com>
This commit is contained in:
parent
1b07437205
commit
681e34a2b1
@ -144,6 +144,11 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable ntp-config.service
|
||||
sudo cp $IMAGE_CONFIGS/ntp/ntp-config.sh $FILESYSTEM_ROOT/usr/bin/
|
||||
sudo cp $IMAGE_CONFIGS/ntp/ntp.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
|
||||
|
||||
# Copy warmboot-finalizer files
|
||||
sudo LANG=C cp $IMAGE_CONFIGS/warmboot-finalizer/finalize-warmboot.sh $FILESYSTEM_ROOT/usr/local/bin/finalize-warmboot.sh
|
||||
sudo LANG=C cp $IMAGE_CONFIGS/warmboot-finalizer/warmboot-finalizer.service $FILESYSTEM_ROOT/etc/systemd/system/
|
||||
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable warmboot-finalizer.service
|
||||
|
||||
# Copy rsyslog configuration files and templates
|
||||
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-config.service $FILESYSTEM_ROOT/etc/systemd/system/
|
||||
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable rsyslog-config.service
|
||||
|
96
files/image_config/warmboot-finalizer/finalize-warmboot.sh
Executable file
96
files/image_config/warmboot-finalizer/finalize-warmboot.sh
Executable file
@ -0,0 +1,96 @@
|
||||
#! /bin/bash
|
||||
|
||||
VERBOSE=no
|
||||
|
||||
# Check components
|
||||
COMP_LIST="orchagent neighsyncd bgp"
|
||||
EXP_STATE="reconciled"
|
||||
|
||||
ASSISTANT_SCRIPT="/usr/bin/neighbor_advertiser"
|
||||
|
||||
|
||||
function debug()
|
||||
{
|
||||
/usr/bin/logger "WARMBOOT_FINALIZER : $1"
|
||||
if [[ x"${VERBOSE}" == x"yes" ]]; then
|
||||
echo `date` "- $1"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function check_warm_boot()
|
||||
{
|
||||
WARM_BOOT=`/usr/bin/redis-cli -n 6 hget "WARM_RESTART_ENABLE_TABLE|system" enable`
|
||||
}
|
||||
|
||||
|
||||
function wait_for_database_service()
|
||||
{
|
||||
debug "Wait for database to become ready..."
|
||||
|
||||
# Wait for redis server start before database clean
|
||||
until [[ $(/usr/bin/docker exec database redis-cli ping | grep -c PONG) -gt 0 ]];
|
||||
do sleep 1;
|
||||
done
|
||||
|
||||
# Wait for configDB initialization
|
||||
until [[ $(/usr/bin/docker exec database redis-cli -n 4 GET "CONFIG_DB_INITIALIZED") ]];
|
||||
do sleep 1;
|
||||
done
|
||||
|
||||
debug "Database is ready..."
|
||||
}
|
||||
|
||||
|
||||
function get_component_state()
|
||||
{
|
||||
/usr/bin/redis-cli -n 6 hget "WARM_RESTART_TABLE|$1" state
|
||||
}
|
||||
|
||||
|
||||
function check_list()
|
||||
{
|
||||
RET_LIST=''
|
||||
for comp in $@; do
|
||||
state=`get_component_state ${comp}`
|
||||
if [[ x"${state}" != x"${EXP_STATE}" ]]; then
|
||||
RET_LIST="${RET_LIST} ${comp}"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ${RET_LIST}
|
||||
}
|
||||
|
||||
|
||||
function finalize_warm_boot()
|
||||
{
|
||||
debug "Finalizing warmboot..."
|
||||
sudo config warm_restart disable
|
||||
}
|
||||
|
||||
|
||||
wait_for_database_service
|
||||
|
||||
check_warm_boot
|
||||
|
||||
if [[ x"${WARM_BOOT}" != x"true" ]]; then
|
||||
debug "warmboot is not enabled ..."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
list=${COMP_LIST}
|
||||
|
||||
# Wait up to 5 minutes
|
||||
for i in `seq 60`; do
|
||||
list=`check_list ${list}`
|
||||
if [[ -z "${list}" ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
|
||||
if [[ -n "${list}" ]]; then
|
||||
debug "Some components didn't finish reconcile: ${list} ..."
|
||||
fi
|
||||
|
||||
finalize_warm_boot
|
@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Monitor warm recovery and disable warmboot when done
|
||||
Requires=database.service
|
||||
After=database.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/local/bin/finalize-warmboot.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user