I am trying to create a drush command to run a batch process. When I run the command, the batch runs just once, and I get this error :
in Drupalsearch_api_solrSolrConnectorSolrConnectorPluginBase->handleHttpException() (line 1026 of /var/www/html/web/modules/contrib/search_api_solr/src/SolrConnector/SolrConnectorPluginBase.php). Drupalsearch_api_solrSearchApiSolrException: Solr endpoint http://solr:8983/ not found (code: 404
This is my code, am I doing something wrong? Thanks for your help:
class Drush9CustomCommands extends DrushCommands { use StringTranslationTrait; private $entityTypeManager; protected $logger; protected $batchService; public function __construct(EntityTypeManagerInterface $entityTypeManager, LoggerInterface $logger, BatchService $batch_service) { parent::__construct(); $this->entityTypeManager = $entityTypeManager; $this->logger = $logger; $this->batchService = $batch_service; } /** * Update Node. * * @command update:node * @aliases update-node * * @usage update:node foo * foo is the type of node to update */ public function updateNode() { $batch = array( 'title' => t('Exporting'), 'operations' => array( array([$this->batchService,'processMyNode'], array()), ), 'finished' => [$this->batchService,'processMyNodeFinished'], ); batch_set($batch); drush_backend_batch_process(); } }
Batchservice.php
class BatchService implements ContainerInjectionInterface { use StringTranslationTrait; protected $messenger; public function __construct(MessengerInterface $messenger) { $this->messenger = $messenger; } /** * {@inheritDoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('messenger') ); } /** * Batch process callback. * * @param int $id * Id of the batch. * @param string $operation_details * Details of the operation. * @param object $context * Context for operations. */ public function processMyNode( &$context) { if (!isset($context['sandbox']['total'])) { // Get node experience ids. $query = Drupal::entityTypeManager()->getStorage('node')->getQuery(); $nids = $query ->condition('type', 'mynode') ->range(0,1000) ->accessCheck(FALSE) ->execute(); $context['sandbox']['total'] = count($nids); $context['sandbox']['node_ids'] = $nids; $context['sandbox']['current'] = 0; } $node_ids = array_slice($context['sandbox']['node_ids'], $context['sandbox']['current'], 25); foreach ($node_ids as $nid) { $node = Drupal::entityTypeManager()->getStorage('node')->load($nid); $node->set('field_my_field', 'my field value'); $node->save(); } $context['sandbox']['current'] += count($node_ids); Drupal::logger('test')->notice($context['sandbox']['current'] . ' Experiences passed / ' . $context['sandbox']['total']); if ($context['sandbox']['total'] == 0) { $context['sandbox']['#finished'] = 1; } else { $context['sandbox']['#finished'] = ($context['sandbox']['current'] / $context['sandbox']['total']); } } /** * Batch Finished callback. * * @param bool $success * Success of the operation. * @param array $results * Array of results for post processing. * @param array $operations * Array of operations. */ public function processMyNodeFinished($success, array $results, array $operations) { if ($success) { $message = Drupal::translation()->formatPlural(count($results), 'One post processed.', '@count posts processed.'); } else { $message = t('Finished with an error.'); } Drupal::logger('teset')->notice($message); } }