Skip to content

Commit a6015f2

Browse files
patrickmacarthuryxieca
authored andcommitted
chassisd: Fix crash on exit on linecard (#347)
We try to access config_manager, even if it wasn't set. Unconditionally set it to resolve the issue.
1 parent dcc0079 commit a6015f2

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

sonic-chassisd/scripts/chassisd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@ class ChassisdDaemon(daemon_base.DaemonBase):
435435
if self.module_updater.supervisor_slot == self.module_updater.my_slot:
436436
config_manager = ConfigManagerTask()
437437
config_manager.task_run()
438+
else:
439+
config_manager = None
438440

439441
# Start main loop
440442
self.log_info("Start daemon main loop")

sonic-chassisd/tests/mock_swsscommon.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,18 @@ class FieldValuePairs:
3030
def __init__(self, fvs):
3131
self.fv_dict = dict(fvs)
3232
pass
33+
34+
class Select:
35+
TIMEOUT = 1
36+
37+
def addSelectable(self, selectable):
38+
pass
39+
40+
def removeSelectable(self, selectable):
41+
pass
42+
43+
def select(self, timeout=-1, interrupt_on_signal=False):
44+
return self.TIMEOUT, None
45+
46+
class SubscriberStateTable(Table):
47+
pass

sonic-chassisd/tests/test_chassisd.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,9 +507,20 @@ def test_signal_handler():
507507
assert daemon_chassisd.stop.set.call_count == 0
508508
assert exit_code == 0
509509

510-
def test_daemon_run():
510+
def test_daemon_run_supervisor():
511511
# Test the chassisd run
512512
daemon_chassisd = ChassisdDaemon(SYSLOG_IDENTIFIER)
513513
daemon_chassisd.stop = MagicMock()
514514
daemon_chassisd.stop.wait.return_value = True
515515
daemon_chassisd.run()
516+
517+
def test_daemon_run_linecard():
518+
# Test the chassisd run
519+
daemon_chassisd = ChassisdDaemon(SYSLOG_IDENTIFIER)
520+
daemon_chassisd.stop = MagicMock()
521+
daemon_chassisd.stop.wait.return_value = True
522+
523+
import sonic_platform.platform
524+
with patch.object(sonic_platform.platform.Chassis, 'get_my_slot') as mock:
525+
mock.return_value = sonic_platform.platform.Platform().get_chassis().get_supervisor_slot() + 1
526+
daemon_chassisd.run()

0 commit comments

Comments
 (0)