Skip to content

Bugged Interaction Between Collection Cache and Configurable Products Gallery #33965

Closed
@JamesFX2

Description

@JamesFX2

We noticed occasional errors in site logs

Preconditions (*)

  1. 2.3.5 - 2.4 develop

Steps to reproduce (*)

  1. When the getOptionsMediaGalleryDataJson() method is called in \Magento\Catalog\Block\Product\View\Gallery
  2. If the product is a configurable product, the plugin at \Magento\ConfigurableProduct\Block\Plugin\Product\Media\Gallery is called and calls the type instance's getUsedProducts method.
  3. This is then intercepted by the plugin as Magento\ConfigurableProduct\Model\Plugin\Front\UsedProductsCache which serializes the array of items loaded.
  4. The next time another instance of the Product needs to pull in getUsedProducts, it's loaded from the frontend cache which unserializes the data, creates new instances of Products via the Factory method but the problem occurs when somehow, one of the array of Products that was saved has already called getMediaGalleryImages() so has a value set for 'media_gallery_images' - when this is unserialized, it's just created as 'media_gallery_images' => []
  5. So when the block now calls getOptionsMediaGalleryDataJson() since the Product has a value for 'media_gallery_images', line 1560 causes an error. Please consider modifying this to check.

Expected result (*)

  1. Collection of DataObjects returned with images from the gallery / JSON array

Actual result (*)

  1. [31-Aug-2021 21:26:44 UTC] PHP Fatal error: Uncaught Error: Call to a member function count() on array in /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-catalog/Model/Product.php:1533

Stack trace:
#0 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-configurable-product/Block/Plugin/Product/Media/Gallery.php(62): Magento\Catalog\Model\Product->getMediaGalleryImages()
#1 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-configurable-product/Block/Plugin/Product/Media/Gallery.php(49): Magento\ConfigurableProduct\Block\Plugin\Product\Media\Gallery->getProductGallery(Object(Magento\Catalog\Model\Product\Interceptor))
#2 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/framework/Interception/Interceptor.php(146): Magento\ConfigurableProduct\Block\Plugin\Product\Media\Gallery->afterGetOptionsMediaGalleryDataJson(Objec in /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-catalog/Model/Product.php on line 1533
[31-Aug-2021 21:26:48 UTC] PHP Fatal error: Uncaught Error: Call to a member function count() on array in /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-catalog/Model/Product.php:1533
Stack trace:
#0 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-configurable-product/Block/Plugin/Product/Media/Gallery.php(62): Magento\Catalog\Model\Product->getMediaGalleryImages()
#1 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-configurable-product/Block/Plugin/Product/Media/Gallery.php(49): Magento\ConfigurableProduct\Block\Plugin\Product\Media\Gallery->getProductGallery(Object(Magento\Catalog\Model\Product\Interceptor))
#2 /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/framework/Interception/Interceptor.php(146): Magento\ConfigurableProduct\Block\Plugin\Product\Media\Gallery->afterGetOptionsMediaGalleryDataJson(Objec in /home/cloudpanel/htdocs/www.redacted.com/releases/2021_08_27_10_55_43_branch_v2.3.5-72/vendor/magento/module-catalog/Model/Product.php on line 1533


Please provide Severity assessment for the Issue as Reporter. This information will help during Confirmation and Issue triage processes.

  • Severity: S0 - Affects critical data or functionality and leaves users without workaround.
  • Severity: S1 - Affects critical data or functionality and forces users to employ a workaround.
  • Severity: S2 - Affects non-critical data or functionality and forces users to employ a workaround.
  • Severity: S3 - Affects non-critical data or functionality and does not force users to employ a workaround.
  • Severity: S4 - Affects aesthetics, professional look and feel, “quality” or “usability”.

Metadata

Metadata

Assignees

Labels

Component: CacheIssue: Cannot ReproduceCannot reproduce the issue on the latest `2.4-develop` branchIssue: needs updateAdditional information is require, waiting for responseTriage: Dev.ExperienceIssue related to Developer Experience and needs help with Triage to Confirm or Reject it

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions