Skip to content

Commit 2bcf936

Browse files
authored
[ycabled] fix the posting for mux_cable_static_info per downlink when ycabled is spawned; synchronizing executing Telemetry API (#257)
This PR is meant to do two fixes. For the Y-cable if presence is missing, currently there is no provision for posting the MUX_CABLE_STATIC_INFO, this PR puts in that fix. ycabled now utilizes the MUX_CABLE_TABLE: to be notified/prepared to toggle the mux and blocks all ongoing i2c telemetry transactions which could be concurrently running. This PR utilizes a support for adding a mux_toggle_status variable inside the base class for mux_cable. Using this variable the Derived classes for mux_cable can check this and return in case of a mux_toggle_status is in progress. From the higher layer this allows ycabled to synchronize the calls and not let mux_cable toggle to go in conjunction with some of the Telemetry calls. also added a commented sub-routine to poll the mux direction after toggle dependent on [Credo][Ycable] changes for synchronizing executing Telemetry API's when mux toggle is inprogress sonic-platform-common#280 Signed-off-by: vaibhav-dahiya vdahiya@microsoft.com Description Motivation and Context How Has This Been Tested? Unit-tests as well as ran changes on Arista7050cx3 testbed Signed-off-by: vaibhav-dahiya <vdahiya@microsoft.com>
1 parent ce217c0 commit 2bcf936

File tree

2 files changed

+216
-12
lines changed

2 files changed

+216
-12
lines changed

sonic-ycabled/tests/test_y_cable_helper.py

+78-6
Original file line numberDiff line numberDiff line change
@@ -347,9 +347,20 @@ def test_y_cable_toggle_mux_torA_update_status_exception(self):
347347

348348
with patch('ycable.ycable_utilities.y_cable_helper.y_cable_port_instances') as port_instance:
349349

350-
port_instance.get.return_value = "simulated_port"
351-
port_instance.toggle_mux_to_tor_a.return_value = Exception(
352-
NotImplementedError)
350+
class PortInstanceHelper():
351+
def __init__(self):
352+
self.EEPROM_ERROR = -1
353+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 0
354+
355+
# Defining function without self argument creates an exception,
356+
# which is what we want for this test.
357+
def get_mux_direction():
358+
pass
359+
def toggle_mux_to_tor_a():
360+
raise NotImplementedError
361+
362+
port_instance.get.return_value = PortInstanceHelper()
363+
353364

354365
rc = y_cable_toggle_mux_torA(1)
355366

@@ -379,9 +390,19 @@ def test_y_cable_toggle_mux_torB_no_port_instance(self):
379390
def test_y_cable_toggle_mux_torB_update_status_exception(self):
380391
with patch('ycable.ycable_utilities.y_cable_helper.y_cable_port_instances') as port_instance:
381392

382-
port_instance.get.return_value = "simulated_port"
383-
port_instance.toggle_mux_to_tor_a.return_value = Exception(
384-
NotImplementedError)
393+
class PortInstanceHelper():
394+
def __init__(self):
395+
self.EEPROM_ERROR = -1
396+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 0
397+
398+
# Defining function without self argument creates an exception,
399+
# which is what we want for this test.
400+
def get_mux_direction():
401+
pass
402+
def toggle_mux_to_tor_a():
403+
raise NotImplementedError
404+
405+
port_instance.get.return_value = PortInstanceHelper()
385406

386407
rc = y_cable_toggle_mux_torB(1)
387408

@@ -1857,6 +1878,10 @@ def __init__(self):
18571878
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
18581879
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
18591880
self.download_firmware_status = 0
1881+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
1882+
self.MUX_TOGGLE_STATUS_FAILED = 2
1883+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
1884+
self.mux_toggle_status = 0
18601885
self.SWITCH_COUNT_MANUAL = "manual"
18611886
self.SWITCH_COUNT_AUTO = "auto"
18621887

@@ -1919,6 +1944,10 @@ def __init__(self):
19191944
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
19201945
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
19211946
self.download_firmware_status = 0
1947+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
1948+
self.MUX_TOGGLE_STATUS_FAILED = 2
1949+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
1950+
self.mux_toggle_status = 0
19221951
self.SWITCH_COUNT_MANUAL = "manual"
19231952
self.SWITCH_COUNT_AUTO = "auto"
19241953

@@ -1979,6 +2008,10 @@ def __init__(self):
19792008
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
19802009
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
19812010
self.download_firmware_status = 0
2011+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2012+
self.MUX_TOGGLE_STATUS_FAILED = 2
2013+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2014+
self.mux_toggle_status = 0
19822015
self.SWITCH_COUNT_MANUAL = "manual"
19832016
self.SWITCH_COUNT_AUTO = "auto"
19842017

@@ -2041,6 +2074,10 @@ def __init__(self):
20412074
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
20422075
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
20432076
self.download_firmware_status = 0
2077+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2078+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2079+
self.MUX_TOGGLE_STATUS_FAILED = 2
2080+
self.mux_toggle_status = 0
20442081
self.SWITCH_COUNT_MANUAL = "manual"
20452082
self.SWITCH_COUNT_AUTO = "auto"
20462083

@@ -2101,6 +2138,10 @@ def __init__(self):
21012138
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
21022139
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
21032140
self.download_firmware_status = 0
2141+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2142+
self.MUX_TOGGLE_STATUS_FAILED = 2
2143+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2144+
self.mux_toggle_status = 0
21042145
self.SWITCH_COUNT_MANUAL = "manual"
21052146
self.SWITCH_COUNT_AUTO = "auto"
21062147

@@ -2163,6 +2204,9 @@ def __init__(self):
21632204
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
21642205
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
21652206
self.download_firmware_status = 0
2207+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2208+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2209+
self.mux_toggle_status = 0
21662210
self.SWITCH_COUNT_MANUAL = "manual"
21672211
self.SWITCH_COUNT_AUTO = "auto"
21682212

@@ -2223,6 +2267,10 @@ def __init__(self):
22232267
self.TARGET_TOR_B = 2
22242268
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
22252269
self.download_firmware_status = 1
2270+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2271+
self.MUX_TOGGLE_STATUS_FAILED = 2
2272+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2273+
self.mux_toggle_status = 0
22262274
self.SWITCH_COUNT_MANUAL = "manual"
22272275
self.SWITCH_COUNT_AUTO = "auto"
22282276

@@ -2298,6 +2346,10 @@ def __init__(self):
22982346
self.TARGET_TOR_B = 2
22992347
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
23002348
self.download_firmware_status = 1
2349+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2350+
self.MUX_TOGGLE_STATUS_FAILED = 2
2351+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2352+
self.mux_toggle_status = 0
23012353
self.SWITCH_COUNT_MANUAL = "manual"
23022354
self.SWITCH_COUNT_AUTO = "auto"
23032355

@@ -2373,6 +2425,10 @@ def __init__(self):
23732425
self.TARGET_TOR_B = 2
23742426
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
23752427
self.download_firmware_status = 1
2428+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
2429+
self.MUX_TOGGLE_STATUS_FAILED = 2
2430+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
2431+
self.mux_toggle_status = 0
23762432
self.SWITCH_COUNT_MANUAL = "manual"
23772433
self.SWITCH_COUNT_AUTO = "auto"
23782434

@@ -3887,6 +3943,10 @@ def __init__(self):
38873943
self.FIRMWARE_DOWNLOAD_STATUS_INPROGRESS = 1
38883944
self.FIRMWARE_DOWNLOAD_STATUS_FAILED = 2
38893945
self.download_firmware_status = 0
3946+
self.MUX_TOGGLE_STATUS_INPROGRESS = 1
3947+
self.MUX_TOGGLE_STATUS_FAILED = 2
3948+
self.MUX_TOGGLE_STATUS_NOT_INITIATED_OR_FINISHED = 2
3949+
self.mux_toggle_status = 0
38903950
self.SWITCH_COUNT_MANUAL = "manual"
38913951
self.SWITCH_COUNT_AUTO = "auto"
38923952

@@ -4674,3 +4734,15 @@ def get_mux_direction(self):
46744734
rc = handle_show_hwmode_state_cmd_arg_tbl_notification(
46754735
fvp, xcvrd_show_hwmode_dir_cmd_sts_tbl, xcvrd_show_hwmode_dir_rsp_tbl, xcvrd_show_hwmode_dir_res_tbl, asic_index, port)
46764736
assert(rc == None)
4737+
4738+
def test_get_mux_cable_static_info_without_presence(self):
4739+
4740+
rc = get_muxcable_static_info_without_presence()
4741+
4742+
assert(rc['read_side'] == '-1')
4743+
assert(rc['nic_lane1_precursor1'] == 'N/A')
4744+
assert(rc['nic_lane1_precursor1'] == 'N/A')
4745+
assert(rc['nic_lane1_postcursor1'] == 'N/A')
4746+
assert(rc['nic_lane1_postcursor2'] == 'N/A')
4747+
4748+

0 commit comments

Comments
 (0)