[service dependent] describe non-warm-reboot dependency outside systemd (#3311)

* [service dependent] describe non-warm-reboot dependency outside systemctl

When dependency was described with systemctl, it will kick in all the time,
including under warm reboot/restart scenarios. This is not what we always
want. For components that are capable of warm reboot/start, they need to
describe dependency in service files.

Signed-off-by: Ying Xie <ying.xie@microsoft.com>

* [service] teamd service should not require swss service

Adding require swss will cause teamd to be killed by systemctl when swss
stops. This is not what we want in warm reboot.

Signed-off-by: Ying Xie <ying.xie@microsoft.com>

* refactoring code

* rename functions to match other functions in the file
This commit is contained in:
Ying Xie 2019-08-08 15:45:17 -07:00 committed by Ying Xie
parent c29e2e28da
commit a41d9a5d3f
2 changed files with 19 additions and 8 deletions

View File

@ -1,6 +1,6 @@
[Unit] [Unit]
Description=TEAMD container Description=TEAMD container
Requires=updategraph.service swss.service Requires=updategraph.service
After=updategraph.service swss.service After=updategraph.service swss.service
Before=ntp-config.service Before=ntp-config.service
@ -11,4 +11,4 @@ ExecStart=/usr/bin/{{docker_container_name}}.sh wait
ExecStop=/usr/bin/{{docker_container_name}}.sh stop ExecStop=/usr/bin/{{docker_container_name}}.sh stop
[Install] [Install]
WantedBy=multi-user.target swss.service WantedBy=multi-user.target

View File

@ -2,6 +2,7 @@
SERVICE="swss" SERVICE="swss"
PEER="syncd" PEER="syncd"
DEPENDENT="teamd"
DEBUGLOG="/tmp/swss-syncd-debug.log" DEBUGLOG="/tmp/swss-syncd-debug.log"
LOCKFILE="/tmp/swss-syncd-lock" LOCKFILE="/tmp/swss-syncd-lock"
@ -78,11 +79,24 @@ function clean_up_tables()
end" 0 end" 0
} }
startPeerService() { start_peer_and_dependent_services() {
check_warm_boot check_warm_boot
if [[ x"$WARM_BOOT" != x"true" ]]; then if [[ x"$WARM_BOOT" != x"true" ]]; then
/bin/systemctl start ${PEER} /bin/systemctl start ${PEER}
for dep in ${DEPENDENT}; do
/bin/systemctl start ${dep}
done
fi
}
stop_peer_and_dependent_services() {
# if warm start enabled or peer lock exists, don't stop peer service docker
if [[ x"$WARM_BOOT" != x"true" ]]; then
/bin/systemctl stop ${PEER}
for dep in ${DEPENDENT}; do
/bin/systemctl stop ${dep}
done
fi fi
} }
@ -116,7 +130,7 @@ start() {
} }
wait() { wait() {
startPeerService start_peer_and_dependent_services
/usr/bin/${SERVICE}.sh wait /usr/bin/${SERVICE}.sh wait
} }
@ -135,10 +149,7 @@ stop() {
# Unlock has to happen before reaching out to peer service # Unlock has to happen before reaching out to peer service
unlock_service_state_change unlock_service_state_change
# if warm start enabled or peer lock exists, don't stop peer service docker stop_peer_and_dependent_services
if [[ x"$WARM_BOOT" != x"true" ]]; then
/bin/systemctl stop ${PEER}
fi
} }
case "$1" in case "$1" in