Skip to content

Commit b00b63b

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 5ef0d07 commit b00b63b

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
@@ -2013,12 +2013,13 @@ def update_log_level(self):
20132013

20142014

20152015
class DaemonXcvrd(daemon_base.DaemonBase):
2016-
def __init__(self, log_identifier, skip_cmis_mgr=False, enable_sff_mgr=False):
2016+
def __init__(self, log_identifier, skip_cmis_mgr=False, enable_sff_mgr=False, dom_temperature_poll_interval=None):
20172017
super(DaemonXcvrd, self).__init__(log_identifier, enable_runtime_log_config=True)
20182018
self.stop_event = threading.Event()
20192019
self.sfp_error_event = threading.Event()
20202020
self.skip_cmis_mgr = skip_cmis_mgr
20212021
self.enable_sff_mgr = enable_sff_mgr
2022+
self.dom_temperature_poll_interval = dom_temperature_poll_interval
20222023
self.namespaces = ['']
20232024
self.threads = []
20242025
self.sfp_obj_dict = {}
@@ -2295,9 +2296,12 @@ def run(self):
22952296
self.threads.append(dom_info_update)
22962297

22972298
# Start the dom thermal sensor info update thread
2298-
dom_thermal_info_update = DomThermalInfoUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event)
2299-
dom_thermal_info_update.start()
2300-
self.threads.append(dom_thermal_info_update)
2299+
dom_thermal_info_update = None
2300+
if self.dom_temperature_poll_interval is not None:
2301+
dom_thermal_info_update = DomThermalInfoUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event,
2302+
self.dom_temperature_poll_interval)
2303+
dom_thermal_info_update.start()
2304+
self.threads.append(dom_thermal_info_update)
23012305

23022306
# Start the sfp state info update thread
23032307
sfp_state_update = SfpStateUpdateTask(self.namespaces, port_mapping_data, self.sfp_obj_dict, self.stop_event, self.sfp_error_event)
@@ -2342,8 +2346,9 @@ def run(self):
23422346
dom_info_update.join()
23432347

23442348
# Stop the dom thermal sensor info update thread
2345-
if dom_thermal_info_update.is_alive():
2346-
dom_thermal_info_update.join()
2349+
if dom_thermal_info_update is not None:
2350+
if dom_thermal_info_update.is_alive():
2351+
dom_thermal_info_update.join()
23472352

23482353
# Stop the sfp state info update thread
23492354
if sfp_state_update.is_alive():
@@ -2370,9 +2375,11 @@ def main():
23702375
parser = argparse.ArgumentParser()
23712376
parser.add_argument('--skip_cmis_mgr', action='store_true')
23722377
parser.add_argument('--enable_sff_mgr', action='store_true')
2378+
parser.add_argument('--dom_temperature_poll_interval', default=None, type=int)
23732379

23742380
args = parser.parse_args()
2375-
xcvrd = DaemonXcvrd(SYSLOG_IDENTIFIER, args.skip_cmis_mgr, args.enable_sff_mgr)
2381+
xcvrd = DaemonXcvrd(SYSLOG_IDENTIFIER, args.skip_cmis_mgr, args.enable_sff_mgr,
2382+
args.dom_temperature_poll_interval)
23762383
xcvrd.run()
23772384

23782385

0 commit comments

Comments
 (0)