diff --git a/files/scripts/syncd.sh b/files/scripts/syncd.sh index 2ceb0c21b3fc..ad3ddd164cde 100755 --- a/files/scripts/syncd.sh +++ b/files/scripts/syncd.sh @@ -56,6 +56,8 @@ start() { lock_service_state_change + mkdir -p /host/warmboot + wait_for_database_service check_warm_boot @@ -93,6 +95,19 @@ stop() { check_warm_boot debug "Warm boot flag: ${SERVICE} ${WARM_BOOT}." + if [[ x"$WARM_BOOT" == x"true" ]]; then + debug "Warm shutdown syncd process ..." + /usr/bin/docker exec -i syncd /usr/bin/syncd_request_shutdown --warm + + # wait until syncd quits gracefully + while docker top syncd | grep -q /usr/bin/syncd; do + sleep 0.1 + done + + /usr/bin/docker exec -i syncd /bin/sync + debug "Finished warm shutdown syncd process ..." + fi + /usr/bin/${SERVICE}.sh stop debug "Stopped ${SERVICE} service..." diff --git a/platform/broadcom/docker-syncd-brcm.mk b/platform/broadcom/docker-syncd-brcm.mk index 80da1446a9a8..088437060964 100644 --- a/platform/broadcom/docker-syncd-brcm.mk +++ b/platform/broadcom/docker-syncd-brcm.mk @@ -15,6 +15,7 @@ $(DOCKER_SYNCD_BRCM)_RUN_OPT += --net=host --privileged -t $(DOCKER_SYNCD_BRCM)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf $(DOCKER_SYNCD_BRCM)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd $(DOCKER_SYNCD_BRCM)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_SYNCD_BRCM)_RUN_OPT += -v /host/warmboot:/var/warmboot $(DOCKER_SYNCD_BRCM)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd $(DOCKER_SYNCD_BRCM)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh