Skip to content

Commit

Permalink
add support for MCLAG (sonic-net#453)
Browse files Browse the repository at this point in the history
* add support for MCLAG

Signed-off-by: shine.chen <[email protected]>

* add warm-reboot support for ICCPd

Signed-off-by: shine.chen <[email protected]>

* ensure iccpd is there before stop iccpd

Signed-off-by: shine.chen <[email protected]>

* fix service function

* remove unused comment

* refactor code according to feature management mechanism

Signed-off-by: shine.chen <[email protected]>
  • Loading branch information
shine4chen authored Feb 24, 2020
1 parent 118620f commit 8aea564
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
41 changes: 41 additions & 0 deletions config/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,14 @@ def _abort_if_false(ctx, param, value):
if not value:
ctx.abort()

def _get_optional_services():
config_db = ConfigDBConnector()
config_db.connect()
optional_services_dict = config_db.get_table('FEATURE')
if not optional_services_dict:
return None
return optional_services_dict.keys()

def _stop_services():
# on Mellanox platform pmon is stopped by syncd
services_to_stop = [
Expand Down Expand Up @@ -439,6 +447,17 @@ def _stop_services():
log_error("Stopping {} failed with error {}".format(service, e))
raise

# For optional services they don't start by default
for service in _get_optional_services():
(out, err) = run_command("systemctl status {}".format(service), return_output = True)
if not err and 'Active: active (running)' in out:
try:
click.echo("Stopping service {} ...".format(service))
run_command("systemctl stop {}".format(service))
except SystemExit as e:
log_error("Stopping {} failed with error {}".format(service, e))
raise

def _reset_failed_services():
services_to_reset = [
'bgp',
Expand Down Expand Up @@ -474,6 +493,17 @@ def _reset_failed_services():
log_error("Failed to reset failed status for service {}".format(service))
raise

# For optional services they don't start by default
for service in _get_optional_services():
(out, err) = run_command("systemctl is-enabled {}".format(service), return_output = True)
if not err and 'enabled' in out:
try:
click.echo("Resetting failed status for service {} ...".format(service))
run_command("systemctl reset-failed {}".format(service))
except SystemExit as e:
log_error("Failed to reset failed status for service {}".format(service))
raise

def _restart_services():
# on Mellanox platform pmon is started by syncd
services_to_restart = [
Expand Down Expand Up @@ -508,6 +538,17 @@ def _restart_services():
log_error("Restart {} failed with error {}".format(service, e))
raise

# For optional services they don't start by default
for service in _get_optional_services():
(out, err) = run_command("systemctl is-enabled {}".format(service), return_output = True)
if not err and 'enabled' in out:
try:
click.echo("Restarting service {} ...".format(service))
run_command("systemctl restart {}".format(service))
except SystemExit as e:
log_error("Restart {} failed with error {}".format(service, e))
raise

def is_ipaddress(val):
""" Validate if an entry is a valid IP """
if not val:
Expand Down
18 changes: 18 additions & 0 deletions scripts/fast-reboot
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,24 @@ debug "Stopped bgp ..."
docker kill lldp &> /dev/null || debug "Docker lldp is not running ($?) ..."
systemctl stop lldp
if [[ "$REBOOT_TYPE" = "fast-reboot" ]]; then
if echo $(docker ps) | grep -q iccpd; then
docker kill iccpd > /dev/null || [ $? == 1 ]
fi
fi
# Stop iccpd gracefully
if [[ "$REBOOT_TYPE" = "warm-reboot" || "$REBOOT_TYPE" = "fastfast-reboot" ]]; then
if echo $(docker ps) | grep -q iccpd; then
debug "Stopping iccpd ..."
# Send USR1 signal to iccpd to stop it
# It will prepare iccpd for warm-reboot
# Note: We must send USR1 signal before syncd, or some state of iccpd maybe lost
docker exec -i iccpd pkill -USR1 iccpd || [ $? == 1 ] > /dev/null
debug "Stopped iccpd ..."
fi
fi
if [[ "$REBOOT_TYPE" = "fast-reboot" ]]; then
# Kill teamd processes inside of teamd container with SIGUSR2 to allow them to send last LACP frames
# We call `docker kill teamd` to ensure the container stops as quickly as possible,
Expand Down

0 comments on commit 8aea564

Please sign in to comment.