diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php index 296782c3873c0..1c1f57a491ab5 100644 --- a/setup/src/Magento/Setup/Model/Installer.php +++ b/setup/src/Magento/Setup/Model/Installer.php @@ -8,6 +8,7 @@ use Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; use Magento\Framework\App\Cache\Manager; +use Magento\Framework\App\Cache\StateInterface; use Magento\Framework\App\Cache\Type\Block as BlockCache; use Magento\Framework\App\Cache\Type\Config as ConfigCache; use Magento\Framework\App\Cache\Type\Layout as LayoutCache; @@ -30,6 +31,7 @@ use Magento\Framework\Module\ModuleList\Loader as ModuleLoader; use Magento\Framework\Module\ModuleListInterface; use Magento\Framework\Mview\TriggerCleaner; +use Magento\Framework\Registry; use Magento\Framework\Setup\Declaration\Schema\DryRunLogger; use Magento\Framework\Setup\FilePermissions; use Magento\Framework\Setup\InstallDataInterface; @@ -878,8 +880,8 @@ private function cleanMemoryTables(SchemaSetupInterface $setup) */ public function installSchema(array $request) { - /** @var \Magento\Framework\Registry $registry */ - $registry = $this->objectManagerProvider->get()->get(\Magento\Framework\Registry::class); + /** @var Registry $registry */ + $registry = $this->objectManagerProvider->get()->get(Registry::class); //For backward compatibility in install and upgrade scripts with enabled parallelization. $registry->register('setup-mode-enabled', true); @@ -926,14 +928,16 @@ private function convertationOfOldScriptsIsAllowed(array $request) */ public function installDataFixtures(array $request = []) { + /** @var StateInterface $cacheState */ + $cacheState = $this->objectManagerProvider->get()->get(StateInterface::class); $frontendCaches = [ - PageCache::TYPE_IDENTIFIER, - BlockCache::TYPE_IDENTIFIER, - LayoutCache::TYPE_IDENTIFIER, + PageCache::TYPE_IDENTIFIER => $cacheState->isEnabled(PageCache::TYPE_IDENTIFIER), + BlockCache::TYPE_IDENTIFIER => $cacheState->isEnabled(BlockCache::TYPE_IDENTIFIER), + LayoutCache::TYPE_IDENTIFIER => $cacheState->isEnabled(LayoutCache::TYPE_IDENTIFIER) ]; - /** @var \Magento\Framework\Registry $registry */ - $registry = $this->objectManagerProvider->get()->get(\Magento\Framework\Registry::class); + /** @var Registry $registry */ + $registry = $this->objectManagerProvider->get()->get(Registry::class); //For backward compatibility in install and upgrade scripts with enabled parallelization. $registry->register('setup-mode-enabled', true); @@ -1355,23 +1359,35 @@ public function uninstall() * @return void * @throws Exception */ - private function updateCaches($isEnabled, $types = []) + private function updateCaches(bool $isEnabled, array $types = []): void { /** @var Manager $cacheManager */ $cacheManager = $this->objectManagerProvider->get()->create(Manager::class); + $cacheTypes = array_keys($types); $availableTypes = $cacheManager->getAvailableTypes(); - $types = empty($types) ? $availableTypes : array_intersect($availableTypes, $types); - $enabledTypes = $cacheManager->setEnabled($types, $isEnabled); + $cacheTypes = empty($cacheTypes) ? $availableTypes : array_intersect($availableTypes, $cacheTypes); + if ($isEnabled) { + $enabledTypes = []; + + foreach ($types as $type => $status) { + $enabledTypes[] = $cacheManager->setEnabled((array)$type, $status); + } + + $enabledTypes = array_merge([], ...$enabledTypes); + $cacheManager->clean($enabledTypes); + + } else { + $cacheManager->setEnabled($cacheTypes, $isEnabled); } // Only get statuses of specific cache types $cacheStatus = array_filter( $cacheManager->getStatus(), - function (string $key) use ($types) { - return in_array($key, $types); + function (string $key) use ($cacheTypes) { + return in_array($key, $cacheTypes); }, ARRAY_FILTER_USE_KEY );