/**
  * Process a single group.
  *
  * Without queuedjobs, it's necessary to shell this out to a background task as this is
  * very memory intensive.
  *
  * The sub-process will then invoke $processor->runGroup() in {@see Solr_Reindex::doReindex}
  *
  * @param LoggerInterface $logger
  * @param SolrIndex $indexInstance Index instance
  * @param array $state Variant state
  * @param string $class Class to index
  * @param int $groups Total groups
  * @param int $group Index of group to process
  * @param string $taskName Name of task script to run
  */
 protected function processGroup(LoggerInterface $logger, SolrIndex $indexInstance, $state, $class, $groups, $group, $taskName)
 {
     // Build state
     $statevar = json_encode($state);
     if (strpos(PHP_OS, "WIN") !== false) {
         $statevar = '"' . str_replace('"', '\\"', $statevar) . '"';
     } else {
         $statevar = "'" . $statevar . "'";
     }
     // Build script
     $indexName = $indexInstance->getIndexName();
     $scriptPath = sprintf("%s%sframework%scli-script.php", BASE_PATH, DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR);
     $scriptTask = "php {$scriptPath} dev/tasks/{$taskName}";
     $cmd = "{$scriptTask} index={$indexName} class={$class} group={$group} groups={$groups} variantstate={$statevar}";
     $cmd .= " verbose=1 2>&1";
     $logger->info("Running '{$cmd}'");
     // Execute script via shell
     $res = $logger ? passthru($cmd) : `{$cmd}`;
     if ($logger) {
         $logger->info(preg_replace('/\\r\\n|\\n/', '$0  ', $res));
     }
     // If we're in dev mode, commit more often for fun and profit
     if (Director::isDev()) {
         Solr::service($indexName)->commit();
     }
     // This will slow down things a tiny bit, but it is done so that we don't timeout to the database during a reindex
     DB::query('SELECT 1');
 }
 protected function processGroup(LoggerInterface $logger, SolrIndex $indexInstance, $state, $class, $groups, $group, $taskName)
 {
     // Trigger another job for this group
     $job = Injector::inst()->create('SolrReindexGroupQueuedJob', $indexInstance->getIndexName(), $state, $class, $groups, $group);
     $this->getQueuedJobService()->queueJob($job);
     $title = $job->getTitle();
     $logger->info("Queued {$title}");
 }
 public function processGroup(LoggerInterface $logger, SolrIndex $indexInstance, $state, $class, $groups, $group, $taskName)
 {
     $indexName = $indexInstance->getIndexName();
     $stateName = json_encode($state);
     $logger->info("Called processGroup with {$indexName}, {$stateName}, {$class}, group {$group} of {$groups}");
 }
 /**
  * Update the index on the given store
  * 
  * @param SolrIndex $instance Instance
  * @param SolrConfigStore $store
  */
 protected function updateIndex($instance, $store)
 {
     $index = $instance->getIndexName();
     $this->getLogger()->info("Configuring {$index}.");
     // Upload the config files for this index
     $this->getLogger()->info("Uploading configuration ...");
     $instance->uploadConfig($store);
     // Then tell Solr to use those config files
     $service = Solr::service();
     if ($service->coreIsActive($index)) {
         $this->getLogger()->info("Reloading core ...");
         $service->coreReload($index);
     } else {
         $this->getLogger()->info("Creating core ...");
         $service->coreCreate($index, $store->instanceDir($index));
     }
     $this->getLogger()->info("Done");
 }