Skip to content

Commit b85433b

Browse files
committed
xcvrd: Address review comments
Make the new DomThermalInfoUpdateTask optional. A program argument is now necessary for xcvrd which can be set via the `pmon_daemon_control.json` The new `--dom_temperature_poll_interval` option takes an update interval in seconds. Address misc comments
1 parent a7e6bf7 commit b85433b

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

sonic-xcvrd/tests/test_xcvrd.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ def test_DaemonXcvrd_run_with_exception(self, mock_task_join_sff, mock_task_join
416416
mock_init.return_value = PortMapping()
417417
xcvrd = DaemonXcvrd(SYSLOG_IDENTIFIER)
418418
xcvrd.enable_sff_mgr = True
419+
xcvrd.dom_temperature_poll_interval = 10
419420
xcvrd.load_feature_flags = MagicMock()
420421
xcvrd.stop_event.wait = MagicMock()
421422
xcvrd.run()

sonic-xcvrd/xcvrd/dom/dom_mgr.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def run(self):
119119
try:
120120
self.task_worker()
121121
except Exception as e:
122-
self.log_error("Exception occured at {} thread due to {}".format(threading.current_thread().getName(), repr(e)))
122+
self.log_error("Exception occurred at {} thread due to {}".format(threading.current_thread().getName(), repr(e)))
123123
xcvrd.log_exception_traceback()
124124
self.exc = e
125125
self.main_thread_stop_event.set()
@@ -488,22 +488,20 @@ def on_remove_logical_port(self, port_change_event):
488488
self.xcvr_table_helper.get_firmware_info_tbl(port_change_event.asic_id)
489489
])
490490

491-
492491
class DomThermalInfoUpdateTask(DomInfoUpdateBase):
493492
name = 'DomThermalInfoUpdateTask'
494493

495-
DOM_INFO_UPDATE_PERIOD_SECS = 5
496-
497-
def __init__(self, namespaces, port_mapping, sfp_obj_dict, main_thread_stop_event):
494+
def __init__(self, namespaces, port_mapping, sfp_obj_dict, main_thread_stop_event, poll_interval):
498495
super().__init__(namespaces, port_mapping, sfp_obj_dict, main_thread_stop_event)
496+
self.poll_interval = poll_interval
499497
self.xcvr_table_helper = XcvrTableHelper(self.namespaces)
500498
self.dom_db_utils = DOMDBUtils(self.sfp_obj_dict, self.port_mapping, self.xcvr_table_helper, self.task_stopping_event, self.helper_logger)
501499

502500
def task_worker(self):
503501
self.log_notice("Start DOM thermal monitoring loop")
504502

505503
# Set the periodic db update time
506-
dom_info_update_periodic_secs = self.DOM_INFO_UPDATE_PERIOD_SECS
504+
dom_info_update_periodic_secs = self.poll_interval
507505

508506
# Poll transceiver temperature as soon as possible
509507
next_periodic_db_update_time = datetime.datetime.now()
@@ -514,7 +512,7 @@ def task_worker(self):
514512
now = datetime.datetime.now()
515513
if next_periodic_db_update_time > now:
516514
# Sleep for 1 second or less depending on the remaining time
517-
time.sleep(min(1, (next_periodic_db_update_time - now).total_seconds()))
515+
time.sleep(max(0, min(1, (next_periodic_db_update_time - now).total_seconds())))
518516
continue
519517

520518
for physical_port, logical_ports in self.port_mapping.physical_to_logical.items():
@@ -532,7 +530,7 @@ def task_worker(self):
532530
continue
533531

534532
if not sfp_status_helper.detect_port_in_error_status(logical_port_name, self.xcvr_table_helper.get_status_sw_tbl(asic_index)):
535-
if not xcvrd._wrapper_get_presence(physical_port):
533+
if not common._wrapper_get_presence(physical_port):
536534
continue
537535

538536
try:

sonic-xcvrd/xcvrd/xcvrd.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,12 +1987,13 @@ def update_log_level(self):
19871987

19881988

19891989
class DaemonXcvrd(daemon_base.DaemonBase):
1990-
def __init__(self, log_identifier, skip_cmis_mgr=False, enable_sff_mgr=False):
1990+
def __init__(self, log_identifier, skip_cmis_mgr=False, enable_sff_mgr=False, dom_temperature_poll_interval=None):
19911991
super(DaemonXcvrd, self).__init__(log_identifier, enable_runtime_log_config=True)
19921992
self.stop_event = threading.Event()
19931993
self.sfp_error_event = threading.Event()
19941994
self.skip_cmis_mgr = skip_cmis_mgr
19951995
self.enable_sff_mgr = enable_sff_mgr
1996+
self.dom_temperature_poll_interval = dom_temperature_poll_interval
19961997
self.namespaces = ['']
19971998
self.threads = []
19981999
self.sfp_obj_dict = {}
@@ -2269,9 +2270,12 @@ def run(self):
22692270
self.threads.append(dom_info_update)
22702271

22712272
# Start the dom thermal sensor info update thread
2272-
dom_thermal_info_update = DomThermalInfoUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event)
2273-
dom_thermal_info_update.start()
2274-
self.threads.append(dom_thermal_info_update)
2273+
dom_thermal_info_update = None
2274+
if self.dom_temperature_poll_interval is not None:
2275+
dom_thermal_info_update = DomThermalInfoUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event,
2276+
self.dom_temperature_poll_interval)
2277+
dom_thermal_info_update.start()
2278+
self.threads.append(dom_thermal_info_update)
22752279

22762280
# Start the sfp state info update thread
22772281
sfp_state_update = SfpStateUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event, self.sfp_error_event)
@@ -2316,8 +2320,9 @@ def run(self):
23162320
dom_info_update.join()
23172321

23182322
# Stop the dom thermal sensor info update thread
2319-
if dom_thermal_info_update.is_alive():
2320-
dom_thermal_info_update.join()
2323+
if dom_thermal_info_update is not None:
2324+
if dom_thermal_info_update.is_alive():
2325+
dom_thermal_info_update.join()
23212326

23222327
# Stop the sfp state info update thread
23232328
if sfp_state_update.is_alive():
@@ -2344,9 +2349,11 @@ def main():
23442349
parser = argparse.ArgumentParser()
23452350
parser.add_argument('--skip_cmis_mgr', action='store_true')
23462351
parser.add_argument('--enable_sff_mgr', action='store_true')
2352+
parser.add_argument('--dom_temperature_poll_interval', default=None, type=int)
23472353

23482354
args = parser.parse_args()
2349-
xcvrd = DaemonXcvrd(SYSLOG_IDENTIFIER, args.skip_cmis_mgr, args.enable_sff_mgr)
2355+
xcvrd = DaemonXcvrd(SYSLOG_IDENTIFIER, args.skip_cmis_mgr, args.enable_sff_mgr,
2356+
args.dom_temperature_poll_interval)
23502357
xcvrd.run()
23512358

23522359

0 commit comments

Comments
 (0)