Skip to content

Commit 4f42a79

Browse files
authored
[xcvrd] Return non-zero error code on SFP error (sonic-net#67)
Currently when there is an error event in xcvrd within SFP state machine, it returns with 0 exit code. With this change the SFP if it has an error event with return with non-zero exit code. Signed-off-by: vaibhav-dahiya <[email protected]>
1 parent e665ee8 commit 4f42a79

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

sonic-xcvrd/scripts/xcvrd

+11-4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ SFP_EEPROM_NOT_READY = -2
7171
SFPUTIL_LOAD_ERROR = 1
7272
PORT_CONFIG_LOAD_ERROR = 2
7373
NOT_IMPLEMENTED_ERROR = 3
74+
SFP_SYSTEM_ERROR = 4
7475

7576
RETRY_TIMES_FOR_SYSTEM_READY = 24
7677
RETRY_PERIOD_FOR_SYSTEM_READY_MSECS = 5000
@@ -801,7 +802,7 @@ class sfp_state_update_task:
801802
logger.log_debug("mapping from {} {} to {}".format(status, port_dict, event))
802803
return event
803804

804-
def task_worker(self, stopping_event):
805+
def task_worker(self, stopping_event, sfp_error_event):
805806
logger.log_info("Start SFP monitoring loop")
806807

807808
transceiver_dict = {}
@@ -898,6 +899,7 @@ class sfp_state_update_task:
898899
if retry >= RETRY_TIMES_FOR_SYSTEM_READY:
899900
logger.log_error("System failed to get ready in {} secs or received system error. Exiting...".format((RETRY_PERIOD_FOR_SYSTEM_READY_MSECS/1000)*RETRY_TIMES_FOR_SYSTEM_READY))
900901
next_state = STATE_EXIT
902+
sfp_error_event.set()
901903
else:
902904
retry = retry + 1
903905

@@ -985,6 +987,7 @@ class sfp_state_update_task:
985987
if retry >= RETRY_TIMES_FOR_SYSTEM_FAIL:
986988
logger.log_error("System failed to recover in {} secs. Exiting...".format((RETRY_PERIOD_FOR_SYSTEM_FAIL_MSECS/1000)*RETRY_TIMES_FOR_SYSTEM_FAIL))
987989
next_state = STATE_EXIT
990+
sfp_error_event.set()
988991
else:
989992
retry = retry + 1
990993
waiting_time_compensation_with_sleep(time_start, RETRY_PERIOD_FOR_SYSTEM_FAIL_MSECS/1000)
@@ -1010,11 +1013,11 @@ class sfp_state_update_task:
10101013

10111014
logger.log_info("Stop SFP monitoring loop")
10121015

1013-
def task_run(self):
1016+
def task_run(self, sfp_error_event):
10141017
if self.task_stopping_event.is_set():
10151018
return
10161019

1017-
self.task_process = multiprocessing.Process(target=self.task_worker,args=(self.task_stopping_event,))
1020+
self.task_process = multiprocessing.Process(target=self.task_worker,args=(self.task_stopping_event, sfp_error_event))
10181021
self.task_process.start()
10191022

10201023
def task_stop(self):
@@ -1031,6 +1034,7 @@ class DaemonXcvrd(DaemonBase):
10311034

10321035
self.timeout = XCVRD_MAIN_THREAD_SLEEP_SECS
10331036
self.stop_event = threading.Event()
1037+
self.sfp_error_event = multiprocessing.Event()
10341038

10351039
# Signal handler
10361040
def signal_handler(self, sig, frame):
@@ -1166,7 +1170,7 @@ class DaemonXcvrd(DaemonBase):
11661170

11671171
# Start the sfp state info update process
11681172
sfp_state_update = sfp_state_update_task()
1169-
sfp_state_update.task_run()
1173+
sfp_state_update.task_run(self.sfp_error_event)
11701174

11711175
# Start main loop
11721176
logger.log_info("Start daemon main loop")
@@ -1188,6 +1192,9 @@ class DaemonXcvrd(DaemonBase):
11881192

11891193
logger.log_info("Shutting down...")
11901194

1195+
if self.sfp_error_event.is_set():
1196+
sys.exit(SFP_SYSTEM_ERROR)
1197+
11911198
#
11921199
# Main =========================================================================
11931200
#

0 commit comments

Comments
 (0)