66
77namespace Magento \Indexer \Console \Command ;
88
9+ use Magento \Framework \App \ObjectManager ;
910use Magento \Framework \App \ObjectManagerFactory ;
1011use Magento \Framework \Console \Cli ;
1112use Magento \Framework \Exception \LocalizedException ;
1415use Magento \Framework \Indexer \IndexerInterface ;
1516use Magento \Framework \Indexer \IndexerRegistry ;
1617use Magento \Framework \Indexer \StateInterface ;
18+ use Magento \Indexer \Model \Processor \MakeSharedIndexValid ;
1719use Symfony \Component \Console \Input \InputInterface ;
1820use Symfony \Component \Console \Output \OutputInterface ;
1921
2022/**
2123 * Command to run indexers
24+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2225 */
2326class IndexerReindexCommand extends AbstractIndexerManageCommand
2427{
@@ -42,18 +45,26 @@ class IndexerReindexCommand extends AbstractIndexerManageCommand
4245 */
4346 private $ dependencyInfoProvider ;
4447
48+ /**
49+ * @var MakeSharedIndexValid|null
50+ */
51+ private $ makeSharedValid ;
52+
4553 /**
4654 * @param ObjectManagerFactory $objectManagerFactory
4755 * @param IndexerRegistry|null $indexerRegistry
4856 * @param DependencyInfoProvider|null $dependencyInfoProvider
57+ * @param MakeSharedIndexValid|null $makeSharedValid
4958 */
5059 public function __construct (
5160 ObjectManagerFactory $ objectManagerFactory ,
5261 IndexerRegistry $ indexerRegistry = null ,
53- DependencyInfoProvider $ dependencyInfoProvider = null
62+ DependencyInfoProvider $ dependencyInfoProvider = null ,
63+ MakeSharedIndexValid $ makeSharedValid = null
5464 ) {
5565 $ this ->indexerRegistry = $ indexerRegistry ;
5666 $ this ->dependencyInfoProvider = $ dependencyInfoProvider ;
67+ $ this ->makeSharedValid = $ makeSharedValid ;
5768 parent ::__construct ($ objectManagerFactory );
5869 }
5970
@@ -88,8 +99,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
8899 // Skip indexers having shared index that was already complete
89100 if (!in_array ($ sharedIndex , $ this ->sharedIndexesComplete )) {
90101 $ indexer ->reindexAll ();
91- if ($ sharedIndex ) {
92- $ this ->validateSharedIndex ( $ sharedIndex) ;
102+ if (! empty ( $ sharedIndex) && $ this -> getMakeSharedValid ()-> execute ( $ sharedIndex ) ) {
103+ $ this ->sharedIndexesComplete [] = $ sharedIndex ;
93104 }
94105 }
95106 $ resultTime = microtime (true ) - $ startTime ;
@@ -215,54 +226,6 @@ private function validateIndexerStatus(IndexerInterface $indexer)
215226 }
216227 }
217228
218- /**
219- * Get indexer ids that have common shared index
220- *
221- * @param string $sharedIndex
222- * @return array
223- */
224- private function getIndexerIdsBySharedIndex ($ sharedIndex )
225- {
226- $ indexers = $ this ->getConfig ()->getIndexers ();
227- $ result = [];
228- foreach ($ indexers as $ indexerConfig ) {
229- if ($ indexerConfig ['shared_index ' ] == $ sharedIndex ) {
230- $ result [] = $ indexerConfig ['indexer_id ' ];
231- }
232- }
233- return $ result ;
234- }
235-
236- /**
237- * Validate indexers by shared index ID
238- *
239- * @param string $sharedIndex
240- * @return $this
241- */
242- private function validateSharedIndex ($ sharedIndex )
243- {
244- if (empty ($ sharedIndex )) {
245- throw new \InvalidArgumentException (
246- 'The sharedIndex is an invalid shared index identifier. Verify the identifier and try again. '
247- );
248- }
249- $ indexerIds = $ this ->getIndexerIdsBySharedIndex ($ sharedIndex );
250- if (empty ($ indexerIds )) {
251- return $ this ;
252- }
253- foreach ($ indexerIds as $ indexerId ) {
254- $ indexer = $ this ->getIndexerRegistry ()->get ($ indexerId );
255- /** @var \Magento\Indexer\Model\Indexer\State $state */
256- $ state = $ indexer ->getState ();
257- $ state ->setStatus (StateInterface::STATUS_WORKING );
258- $ state ->save ();
259- $ state ->setStatus (StateInterface::STATUS_VALID );
260- $ state ->save ();
261- }
262- $ this ->sharedIndexesComplete [] = $ sharedIndex ;
263- return $ this ;
264- }
265-
266229 /**
267230 * Get config
268231 *
@@ -278,30 +241,30 @@ private function getConfig()
278241 }
279242
280243 /**
281- * Get indexer registry
244+ * Get dependency info provider
282245 *
283- * @return IndexerRegistry
246+ * @return DependencyInfoProvider
284247 * @deprecated 100.2.0
285248 */
286- private function getIndexerRegistry ()
249+ private function getDependencyInfoProvider ()
287250 {
288- if (!$ this ->indexerRegistry ) {
289- $ this ->indexerRegistry = $ this ->getObjectManager ()->get (IndexerRegistry ::class);
251+ if (!$ this ->dependencyInfoProvider ) {
252+ $ this ->dependencyInfoProvider = $ this ->getObjectManager ()->get (DependencyInfoProvider ::class);
290253 }
291- return $ this ->indexerRegistry ;
254+ return $ this ->dependencyInfoProvider ;
292255 }
293256
294257 /**
295- * Get dependency info provider
258+ * Get MakeSharedIndexValid processor.
296259 *
297- * @return DependencyInfoProvider
298- * @deprecated 100.2.0
260+ * @return MakeSharedIndexValid
299261 */
300- private function getDependencyInfoProvider ()
262+ private function getMakeSharedValid (): MakeSharedIndexValid
301263 {
302- if (!$ this ->dependencyInfoProvider ) {
303- $ this ->dependencyInfoProvider = $ this ->getObjectManager ()->get (DependencyInfoProvider ::class);
264+ if (!$ this ->makeSharedValid ) {
265+ $ this ->makeSharedValid = $ this ->getObjectManager ()->get (MakeSharedIndexValid ::class);
304266 }
305- return $ this ->dependencyInfoProvider ;
267+
268+ return $ this ->makeSharedValid ;
306269 }
307270}
0 commit comments