Magento – Notice: Undefined index: default in vendor/magento/module-catalog/……BatchSizeCalculator.php

errorindexingmagento2magento2.2.2reindex

I got this error when try to reindex catalog_product_price

php bin/magento indexer:reindex catalog_product_price

Notice: Undefined index: default in
/public_html/vendor/magento/module-catalog/Model/ResourceModel/Product/Indexer/Price/BatchSizeCalculator.php
on line 55

and from system.log

2019-11-27 20:03:04] main.ERROR: Cron Job indexer_reindex_all_invalid
has an error: Notice: Undefined property:
Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\BatchSizeCalculator::$_batchRowsCount
in
/public_html/vendor/magento/module-catalog/Model/ResourceModel/Product/Indexer/Price/BatchSizeCalculator.php
on line 55. Statistics:
{"sum":0,"count":1,"realmem":0,"emalloc":0,"realmem_start":138412032,"emalloc_start":134564184}
[] []

BatchSizeCalculator.php as below ( unmodified)

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Price;

/**
 * Ensure that size of index MEMORY table is enough for configured rows count in batch.
 */
class BatchSizeCalculator
{
    /**
     * @var array
     */
    private $batchRowsCount;

    /**
     * @var \Magento\Framework\Indexer\BatchSizeManagementInterface[]
     */
    private $estimators;

    /**
     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\CompositeProductBatchSizeAdjusterInterface[]
     */
    private $batchSizeAdjusters;

    /**
     * BatchSizeCalculator constructor.
     * @param array $batchRowsCount
     * @param array $estimators
     * @param array $batchSizeAdjusters
     */
    public function __construct(array $batchRowsCount, array $estimators, array $batchSizeAdjusters)
    {
        $this->batchRowsCount = $batchRowsCount;
        $this->estimators = $estimators;
        $this->batchSizeAdjusters = $batchSizeAdjusters;
    }

    /**
     * Retrieve batch size for the given indexer.
     *
     * Ensure that the database will be able to handle provided batch size correctly.
     *
     * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
     * @param string $indexerTypeId
     * @return int
     */
    public function estimateBatchSize(\Magento\Framework\DB\Adapter\AdapterInterface $connection, $indexerTypeId)
    {
        $batchRowsCount = isset($this->batchRowsCount[$indexerTypeId])
            ? $this->batchRowsCount[$indexerTypeId]
            : $this->batchRowsCount['default'];

        /** @var \Magento\Framework\Indexer\BatchSizeManagementInterface $calculator */
        $calculator = isset($this->estimators[$indexerTypeId])
            ? $this->estimators[$indexerTypeId]
            : $this->estimators['default'];

        $batchRowsCount = isset($this->batchSizeAdjusters[$indexerTypeId])
            ? $this->batchSizeAdjusters[$indexerTypeId]->adjust($batchRowsCount)
            : $batchRowsCount;

        $calculator->ensureBatchSize($connection, $batchRowsCount);

        return $batchRowsCount;
    }
}

tried running following doesn't work

bin/magento setup:upgrade

bin/magento setup:di:compile

bin/magento setup:static-content:deploy -f 

bin/magento indexer:reindex

bin/magento cache:clean

bin/magento cache:flush

I also tried add the following to

app/etc/di.xml

but doesn't work

<type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\BatchSizeCalculator">
    <arguments>
        <argument name="batchRowsCount" xsi:type="array">
            <item name="default" xsi:type="number">1000</item>
        </argument>
    </arguments>
</type>

Best Answer

my temporary solution is to change line 55 in the BatchSizeCalculator.php file from

$this->batchRowsCount['default'];

to

$this->batchRowsCount['configurable'];

then i can successfully reindex catalog_product_price