diff --git a/sonic-xcvrd/tests/test_xcvrd.py b/sonic-xcvrd/tests/test_xcvrd.py index 59788ffe1..29f2ebd91 100644 --- a/sonic-xcvrd/tests/test_xcvrd.py +++ b/sonic-xcvrd/tests/test_xcvrd.py @@ -3597,6 +3597,7 @@ def test_SfpStateUpdateTask_handle_port_change_event(self, mock_del_port_sfp_dom mock_table_helper.get_int_tbl = MagicMock(return_value=mock_table) mock_table_helper.get_dom_tbl = MagicMock(return_value=mock_table) mock_table_helper.get_dom_threshold_tbl = MagicMock(return_value=mock_table) + mock_table_helper.get_state_port_tbl = MagicMock(return_value=mock_table) stop_event = threading.Event() sfp_error_event = threading.Event() port_mapping = PortMapping() @@ -3606,6 +3607,7 @@ def test_SfpStateUpdateTask_handle_port_change_event(self, mock_del_port_sfp_dom task.xcvr_table_helper.get_status_tbl = mock_table_helper.get_status_tbl task.xcvr_table_helper.get_intf_tbl = mock_table_helper.get_intf_tbl task.xcvr_table_helper.get_dom_tbl = mock_table_helper.get_dom_tbl + task.xcvr_table_helper.get_state_port_tbl = mock_table_helper.get_state_port_tbl port_change_event = PortChangeEvent('Ethernet0', 1, 0, PortChangeEvent.PORT_ADD) wait_time = 5 while wait_time > 0: @@ -3836,9 +3838,13 @@ class MockTable: dom_threshold_tbl = MockTable() dom_threshold_tbl.get = MagicMock(return_value=(True, (('key4', 'value4'),))) dom_threshold_tbl.set = MagicMock() + state_port_tbl = MockTable() + state_port_tbl.get = MagicMock(return_value=(True, (('key5', 'value5'),))) + state_port_tbl.set = MagicMock() mock_table_helper.get_status_sw_tbl = MagicMock(return_value=status_sw_tbl) mock_table_helper.get_intf_tbl = MagicMock(return_value=int_tbl) mock_table_helper.get_dom_threshold_tbl = MagicMock(return_value=dom_threshold_tbl) + mock_table_helper.get_state_port_tbl = MagicMock(return_value=state_port_tbl) port_mapping = PortMapping() mock_sfp_obj_dict = MagicMock() @@ -3849,6 +3855,7 @@ class MockTable: task.xcvr_table_helper.get_status_sw_tbl = mock_table_helper.get_status_sw_tbl task.xcvr_table_helper.get_intf_tbl = mock_table_helper.get_intf_tbl task.xcvr_table_helper.get_dom_threshold_tbl = mock_table_helper.get_dom_threshold_tbl + task.xcvr_table_helper.get_state_port_tbl = mock_table_helper.get_state_port_tbl task.dom_db_utils.post_port_dom_thresholds_to_db = MagicMock() task.vdm_db_utils.post_port_vdm_thresholds_to_db = MagicMock() port_change_event = PortChangeEvent('Ethernet0', 1, 0, PortChangeEvent.PORT_ADD) diff --git a/sonic-xcvrd/xcvrd/xcvrd.py b/sonic-xcvrd/xcvrd/xcvrd.py index 7355fcf07..cea2c0331 100644 --- a/sonic-xcvrd/xcvrd/xcvrd.py +++ b/sonic-xcvrd/xcvrd/xcvrd.py @@ -1929,6 +1929,16 @@ def on_add_logical_port(self, port_change_event): # 3. SFP is not present. Only update TRANSCEIVER_STATUS_INFO table. status_sw_tbl = self.xcvr_table_helper.get_status_sw_tbl(port_change_event.asic_id) int_tbl = self.xcvr_table_helper.get_intf_tbl(port_change_event.asic_id) + # Initialize the NPU_SI_SETTINGS_SYNC_STATUS to default value + state_port_table = self.xcvr_table_helper.get_state_port_tbl(port_change_event.asic_id) + found, state_port_table_fvs = state_port_table.get(port_change_event.port_name) + if not found: + helper_logger.log_notice("Add logical port: Creating STATE_DB PORT_TABLE as unable to find for lport {}".format(port_change_event.port_name)) + state_port_table_fvs = [] + if NPU_SI_SETTINGS_SYNC_STATUS_KEY not in dict(state_port_table_fvs): + state_port_table.set(port_change_event.port_name, [(NPU_SI_SETTINGS_SYNC_STATUS_KEY, + NPU_SI_SETTINGS_DEFAULT_VALUE)]) + helper_logger.log_notice("Add logical port: Initialized NPU_SI_SETTINGS_SYNC_STATUS for lport {}".format(port_change_event.port_name)) error_description = 'N/A' status = None