6
6
7
7
namespace Magento \Indexer \Console \Command ;
8
8
9
+ use Magento \Framework \App \ObjectManager ;
9
10
use Magento \Framework \App \ObjectManagerFactory ;
10
11
use Magento \Framework \Console \Cli ;
11
12
use Magento \Framework \Exception \LocalizedException ;
14
15
use Magento \Framework \Indexer \IndexerInterface ;
15
16
use Magento \Framework \Indexer \IndexerRegistry ;
16
17
use Magento \Framework \Indexer \StateInterface ;
18
+ use Magento \Indexer \Model \Processor \MakeSharedIndexValid ;
17
19
use Symfony \Component \Console \Input \InputInterface ;
18
20
use Symfony \Component \Console \Output \OutputInterface ;
19
21
20
22
/**
21
23
* Command to run indexers
24
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
22
25
*/
23
26
class IndexerReindexCommand extends AbstractIndexerManageCommand
24
27
{
@@ -42,18 +45,26 @@ class IndexerReindexCommand extends AbstractIndexerManageCommand
42
45
*/
43
46
private $ dependencyInfoProvider ;
44
47
48
+ /**
49
+ * @var MakeSharedIndexValid|null
50
+ */
51
+ private $ makeSharedValid ;
52
+
45
53
/**
46
54
* @param ObjectManagerFactory $objectManagerFactory
47
55
* @param IndexerRegistry|null $indexerRegistry
48
56
* @param DependencyInfoProvider|null $dependencyInfoProvider
57
+ * @param MakeSharedIndexValid|null $makeSharedValid
49
58
*/
50
59
public function __construct (
51
60
ObjectManagerFactory $ objectManagerFactory ,
52
61
IndexerRegistry $ indexerRegistry = null ,
53
- DependencyInfoProvider $ dependencyInfoProvider = null
62
+ DependencyInfoProvider $ dependencyInfoProvider = null ,
63
+ MakeSharedIndexValid $ makeSharedValid = null
54
64
) {
55
65
$ this ->indexerRegistry = $ indexerRegistry ;
56
66
$ this ->dependencyInfoProvider = $ dependencyInfoProvider ;
67
+ $ this ->makeSharedValid = $ makeSharedValid ;
57
68
parent ::__construct ($ objectManagerFactory );
58
69
}
59
70
@@ -88,8 +99,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
88
99
// Skip indexers having shared index that was already complete
89
100
if (!in_array ($ sharedIndex , $ this ->sharedIndexesComplete )) {
90
101
$ indexer ->reindexAll ();
91
- if ($ sharedIndex ) {
92
- $ this ->validateSharedIndex ( $ sharedIndex) ;
102
+ if (! empty ( $ sharedIndex) && $ this -> getMakeSharedValid ()-> execute ( $ sharedIndex ) ) {
103
+ $ this ->sharedIndexesComplete [] = $ sharedIndex ;
93
104
}
94
105
}
95
106
$ resultTime = microtime (true ) - $ startTime ;
@@ -215,54 +226,6 @@ private function validateIndexerStatus(IndexerInterface $indexer)
215
226
}
216
227
}
217
228
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
-
266
229
/**
267
230
* Get config
268
231
*
@@ -278,30 +241,30 @@ private function getConfig()
278
241
}
279
242
280
243
/**
281
- * Get indexer registry
244
+ * Get dependency info provider
282
245
*
283
- * @return IndexerRegistry
246
+ * @return DependencyInfoProvider
284
247
* @deprecated 100.2.0
285
248
*/
286
- private function getIndexerRegistry ()
249
+ private function getDependencyInfoProvider ()
287
250
{
288
- if (!$ this ->indexerRegistry ) {
289
- $ this ->indexerRegistry = $ this ->getObjectManager ()->get (IndexerRegistry ::class);
251
+ if (!$ this ->dependencyInfoProvider ) {
252
+ $ this ->dependencyInfoProvider = $ this ->getObjectManager ()->get (DependencyInfoProvider ::class);
290
253
}
291
- return $ this ->indexerRegistry ;
254
+ return $ this ->dependencyInfoProvider ;
292
255
}
293
256
294
257
/**
295
- * Get dependency info provider
258
+ * Get MakeSharedIndexValid processor.
296
259
*
297
- * @return DependencyInfoProvider
298
- * @deprecated 100.2.0
260
+ * @return MakeSharedIndexValid
299
261
*/
300
- private function getDependencyInfoProvider ()
262
+ private function getMakeSharedValid (): MakeSharedIndexValid
301
263
{
302
- if (!$ this ->dependencyInfoProvider ) {
303
- $ this ->dependencyInfoProvider = $ this ->getObjectManager ()->get (DependencyInfoProvider ::class);
264
+ if (!$ this ->makeSharedValid ) {
265
+ $ this ->makeSharedValid = $ this ->getObjectManager ()->get (MakeSharedIndexValid ::class);
304
266
}
305
- return $ this ->dependencyInfoProvider ;
267
+
268
+ return $ this ->makeSharedValid ;
306
269
}
307
270
}
0 commit comments