Skip to content

ACSD-67166 patch - incorrect logic when filtering products to load from legacy stock status cache #3441

@engcom-Hotel

Description

@engcom-Hotel

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

  1. Set a breakpoint in the array_filter callback 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.

Metadata

Metadata

Assignees

Labels

Area: CatalogComponent: InventoryCatalogIssue: ConfirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedPriority: P2Reproduced on 2.4.xThe issue has been reproduced on latest 2.4-develop branchTriage: Dev.ExperienceIssue related to Developer Experience and needs help with Triage to Confirm or Reject it

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions