From e4ff4d2e3aef68058b6636f33d5d59b618dd0cdd Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Wed, 24 Nov 2021 20:56:00 +0800 Subject: [PATCH] [Mellanox] Fan speed should not be 100% when PSU is powered off (#9258) - Why I did it When PSU is powered off, the PSU is still on the switch and the air flow is still the same. In this case, it is not necessary to set FAN speed to 100%. - How I did it When PSU is powered of, don't treat it as absent. - How to verify it Adjust existing unit test case Add new case in sonic-mgmt --- .../sonic_platform/thermal_infos.py | 6 +++--- .../mlnx-platform-api/tests/test_thermal_policy.py | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_infos.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_infos.py index df262557c4..983e788c96 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_infos.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_infos.py @@ -45,7 +45,7 @@ class FanInfo(ThermalPolicyInfoBase): elif status and fan in self._fault_fans: self._fault_fans.remove(fan) self._status_changed = True - + def get_absence_fans(self): """ @@ -96,12 +96,12 @@ class PsuInfo(ThermalPolicyInfoBase): """ self._status_changed = False for psu in chassis.get_all_psus(): - if psu.get_presence() and psu.get_powergood_status() and psu not in self._presence_psus: + if psu.get_presence() and psu not in self._presence_psus: self._presence_psus.add(psu) self._status_changed = True if psu in self._absence_psus: self._absence_psus.remove(psu) - elif (not psu.get_presence() or not psu.get_powergood_status()) and psu not in self._absence_psus: + elif (not psu.get_presence()) and psu not in self._absence_psus: self._absence_psus.add(psu) self._status_changed = True if psu in self._presence_psus: diff --git a/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py b/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py index e2fb26cf60..ed656ddd51 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_thermal_policy.py @@ -81,9 +81,9 @@ def test_psu_info(): psu_list[0].powergood = False psu_info.collect(chassis) - assert len(psu_info.get_absence_psus()) == 1 - assert len(psu_info.get_presence_psus()) == 0 - assert psu_info.is_status_changed() + assert len(psu_info.get_absence_psus()) == 0 + assert len(psu_info.get_presence_psus()) == 1 + assert not psu_info.is_status_changed() def test_fan_policy(thermal_manager): @@ -324,12 +324,12 @@ def test_load_control_thermal_algo_action(): json_str = '{\"status\": \"false\"}' json_obj = json.loads(json_str) action.load_from_json(json_obj) - assert not action.status + assert not action.status json_str = '{\"status\": \"true\"}' json_obj = json.loads(json_str) action.load_from_json(json_obj) - assert action.status + assert action.status json_str = '{\"status\": \"invalid\"}' json_obj = json.loads(json_str) @@ -428,7 +428,7 @@ def test_load_policy_with_same_conditions(): with pytest.raises(Exception): MockThermalManager.load(os.path.join(test_path, 'policy_with_same_conditions.json')) - + def test_dynamic_minimum_table_data(): from sonic_platform.device_data import DEVICE_DATA for platform, platform_data in DEVICE_DATA.items(): @@ -453,7 +453,7 @@ def check_minimum_table_data(platform, minimum_table): for item in data_list: cooling_level = item[0] range_str = item[1] - + ranges = range_str.split(':') low = int(ranges[0]) high = int(ranges[1])