Move the constraint check for number of presets not to exceed the num… (#35167)
* Move the constraint check for number of presets not to exceed the number of presets supported from the atomic write commit command handling to the write request
* Minor fix
* Do not check if totalExpectedCount > 0 since its an unsigned integer
- Also no need to check if numberOfPresetsSupported is 0.
* Update src/app/clusters/thermostat-server/thermostat-server-presets.cpp
* Update src/app/clusters/thermostat-server/thermostat-server-presets.cpp
---------
Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>
diff --git a/src/app/clusters/thermostat-server/thermostat-server-presets.cpp b/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
index e57c2f9..a56c94f 100644
--- a/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
+++ b/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
@@ -402,6 +402,20 @@
return CHIP_IM_GLOBAL_STATUS(ConstraintError);
}
+ // Before adding this preset to the pending presets, if the expected length of the pending presets' list
+ // exceeds the total number of presets supported, return RESOURCE_EXHAUSTED. Note that the preset has not been appended yet.
+
+ uint8_t numberOfPendingPresets = CountNumberOfPendingPresets(delegate);
+
+ // We will be adding one more preset, so reject if the length is already at max.
+ if (numberOfPendingPresets >= delegate->GetNumberOfPresets())
+ {
+ return CHIP_IM_GLOBAL_STATUS(ResourceExhausted);
+ }
+
+ // TODO #34556 : Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
+ // scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.
+
return delegate->AppendToPendingPresetList(preset);
}
@@ -504,25 +518,6 @@
}
}
- uint8_t totalCount = CountNumberOfPendingPresets(delegate);
-
- uint8_t numberOfPresetsSupported = delegate->GetNumberOfPresets();
-
- if (numberOfPresetsSupported == 0)
- {
- ChipLogError(Zcl, "emberAfThermostatClusterCommitPresetsSchedulesRequestCallback: Failed to get NumberOfPresets");
- return Status::InvalidInState;
- }
-
- // If the expected length of the presets attribute with the applied changes exceeds the total number of presets supported,
- // return RESOURCE_EXHAUSTED. Note that the changes are not yet applied.
- if (numberOfPresetsSupported > 0 && totalCount > numberOfPresetsSupported)
- {
- return Status::ResourceExhausted;
- }
-
- // TODO: Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
- // scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.
return Status::Success;
}