-
Notifications
You must be signed in to change notification settings - Fork 254
Description
Creating this issue on behalf of @samjack28361, refer this issue magento/magento2#40256
Preconditions and environment
- Magento version 2.4.x
The official patch ACSD-67166 (https://experienceleague.adobe.com/en/docs/commerce-operations/tools/quality-patches-tool/patches-available-in-qpt/v1-1-70/acsd-67166) has the following change in the file Magento\InventoryCatalog\Model\LegacyStockStatusCache:
// Filter out product IDs that are already cached
$productIdsToLoad = array_filter($productIds, function ($productId) use ($scopeId) {
return $this->legacyStockStatusStorage->get((int)$productId, $scopeId) !== null;
According to the PHP function definition of array_filter (https://www.php.net/manual/en/function.array-filter.php), this piece of code seems to be doing the opposite of what it is intending to do:
If the callback function returns true, the current value from array is returned into the result array.
This means $productIdsToLoad is going to be a list of product Ids that are already cached which is the opposite of what is desired (list of product IDs excluding those already cached). This means that $productIdsToLoad is always empty, and the legacyStockCache never gets preloaded. The callback function should be checking for null, not not null.
Steps to reproduce
- Set a breakpoint in the
array_filtercallback function.
$this->legacyStockStatusStorage->get() returns null if the product is not cached which means that $this->legacyStockStatusStorage->get((int)$productId, $scopeId) !== null; returns true when the product is cached.
Expected result
Uncached product ids are added to $productIdsToLoad which in turn are then loaded and added to the legacy stock status storage.
Actual result
Uncached product ids are not added to $productIdsToLoad which in turn are then loaded and added to the legacy stock status storage.