diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_search_settings.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_search_settings.yml index 7ea5c20..348658f 100644 --- a/core/modules/migrate_drupal/config/migrate.migration.d6_search_settings.yml +++ b/core/modules/migrate_drupal/config/migrate.migration.d6_search_settings.yml @@ -4,13 +4,11 @@ source: variables: - minimum_word_size - overlap_cjk - - search_cron_limit - search_tag_weights - search_and_or_limit process: 'index:minimum_word_size': minimum_word_size 'index:overlap_cjk': overlap_cjk - 'index:cron_limit': search_cron_limit destination: plugin: d8_config config_name: search.settings diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSearchConfigsTest.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSearchConfigsTest.php index 414296f..c71930a 100644 --- a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSearchConfigsTest.php +++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSearchConfigsTest.php @@ -41,6 +41,5 @@ public function testSearchSettings() { $config = \Drupal::config('search.settings'); $this->assertIdentical($config->get('index.minimum_word_size'), 3); $this->assertIdentical($config->get('index.overlap_cjk'), TRUE); - $this->assertIdentical($config->get('index.cron_limit'), 100); } } diff --git a/core/modules/node/config/schema/node.schema.yml b/core/modules/node/config/schema/node.schema.yml index 506049b..7aa1aa6 100644 --- a/core/modules/node/config/schema/node.schema.yml +++ b/core/modules/node/config/schema/node.schema.yml @@ -87,3 +87,6 @@ search.plugin.node_search: sequence: - type: integer label: 'Influence' + cron_limit: + type: integer + label: 'Number of items to index per cron run' diff --git a/core/modules/node/config/search.page.node_search.yml b/core/modules/node/config/search.page.node_search.yml index 597f4e3..92ef4e1 100644 --- a/core/modules/node/config/search.page.node_search.yml +++ b/core/modules/node/config/search.page.node_search.yml @@ -8,3 +8,4 @@ weight: -10 plugin: node_search configuration: rankings: { } + cron_limit: 100 diff --git a/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php b/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php index fb0538a..353f36f 100644 --- a/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php +++ b/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php @@ -7,6 +7,7 @@ namespace Drupal\node\Plugin\Search; +use Drupal\Component\Utility\MapArray; use Drupal\Core\Config\Config; use Drupal\Core\Database\Connection; use Drupal\Core\Database\Query\SelectExtender; @@ -291,7 +292,7 @@ protected function addNodeRankings(SelectExtender $query) { * {@inheritdoc} */ public function updateIndex() { - $limit = (int) $this->searchSettings->get('index.cron_limit'); + $limit = (int) $this->configuration['cron_limit']; $result = $this->database->queryRange("SELECT DISTINCT n.nid, d.reindex FROM {node} n LEFT JOIN {search_dataset} d ON d.type = :type AND d.sid = n.nid WHERE d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid ASC", 0, $limit, array(':type' => $this->getPluginId()), array('target' => 'slave')); $nids = $result->fetchCol(); @@ -540,6 +541,7 @@ protected function getRankings() { public function defaultConfiguration() { $configuration = array( 'rankings' => array(), + 'cron_limit' => 100, ); return $configuration; } @@ -548,6 +550,20 @@ public function defaultConfiguration() { * {@inheritdoc} */ public function buildConfigurationForm(array $form, array &$form_state) { + + // Indexing throttle: + $form['indexing_throttle'] = array( + '#type' => 'details', + '#title' => $this->t('Indexing throttle') + ); + $form['indexing_throttle']['cron_limit'] = array( + '#type' => 'select', + '#title' => $this->t('Number of items to index per cron run'), + '#default_value' => $this->configuration['cron_limit'], + '#options' => MapArray::copyValuesToKeys(array(10, 20, 50, 100, 200, 500)), + '#description' => $this->t('The maximum number of items indexed by this search page in each pass of a cron maintenance task. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status'))), + ); + // Output form for defining rank factor weights. $form['content_ranking'] = array( '#type' => 'details', @@ -583,6 +599,7 @@ public function submitConfigurationForm(array &$form, array &$form_state) { unset($this->configuration['rankings'][$var]); } } + $this->configuration['cron_limit'] = $form_state['values']['cron_limit']; } } diff --git a/core/modules/search/config/schema/search.schema.yml b/core/modules/search/config/schema/search.schema.yml index 68e6877..e1ef850 100644 --- a/core/modules/search/config/schema/search.schema.yml +++ b/core/modules/search/config/schema/search.schema.yml @@ -14,9 +14,6 @@ search.settings: type: mapping label: 'Indexing settings' mapping: - cron_limit: - type: integer - label: 'Number of items to index per cron run' overlap_cjk: type: boolean label: 'Simple CJK handling' diff --git a/core/modules/search/config/search.settings.yml b/core/modules/search/config/search.settings.yml index 09c09cb..1e73038 100644 --- a/core/modules/search/config/search.settings.yml +++ b/core/modules/search/config/search.settings.yml @@ -1,7 +1,6 @@ and_or_limit: 7 default_page: node_search index: - cron_limit: 100 overlap_cjk: true minimum_word_size: 3 tag_weights: diff --git a/core/modules/search/lib/Drupal/search/Plugin/SearchIndexingInterface.php b/core/modules/search/lib/Drupal/search/Plugin/SearchIndexingInterface.php index 26edef5..0b137d4 100644 --- a/core/modules/search/lib/Drupal/search/Plugin/SearchIndexingInterface.php +++ b/core/modules/search/lib/Drupal/search/Plugin/SearchIndexingInterface.php @@ -34,10 +34,10 @@ * When implementing this method, your module should index content items that * were modified or added since the last run. PHP has a time limit * for cron, though, so it is advisable to limit how many items you index - * per run using config('search.settings')->get('index.cron_limit'). Also, - * since the cron run could time out and abort in the middle of your run, you - * should update any needed internal bookkeeping on when items have last - * been indexed as you go rather than waiting to the end of indexing. + * per run (see the cron_limit setting on NodeSearch). Also, since the cron + * run could time out and abort in the middle of your run, you should update + * any needed internal bookkeeping on when items have last been indexed as you + * go rather than waiting to the end of indexing. */ public function updateIndex(); diff --git a/core/modules/search/lib/Drupal/search/SearchPageListController.php b/core/modules/search/lib/Drupal/search/SearchPageListController.php index 61b17d9..377d713 100644 --- a/core/modules/search/lib/Drupal/search/SearchPageListController.php +++ b/core/modules/search/lib/Drupal/search/SearchPageListController.php @@ -7,7 +7,6 @@ namespace Drupal\search; -use Drupal\Component\Utility\MapArray; use Drupal\Core\Config\ConfigFactory; use Drupal\Core\Config\Context\ContextInterface; use Drupal\Core\Config\Entity\DraggableListController; @@ -175,20 +174,6 @@ public function buildForm(array $form, array &$form_state) { '#submit' => array(array($this, 'searchAdminReindexSubmit')), ); - $items = MapArray::copyValuesToKeys(array(10, 20, 50, 100, 200, 500)); - - // Indexing throttle: - $form['indexing_throttle'] = array( - '#type' => 'details', - '#title' => $this->t('Indexing throttle') - ); - $form['indexing_throttle']['cron_limit'] = array( - '#type' => 'select', - '#title' => $this->t('Number of items to index per cron run'), - '#default_value' => $search_settings->get('index.cron_limit'), - '#options' => $items, - '#description' => $this->t('The maximum number of items indexed in each pass of a cron maintenance task. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status'))), - ); // Indexing settings: $form['indexing_settings'] = array( '#type' => 'details', @@ -306,9 +291,6 @@ public function submitForm(array &$form, array &$form_state) { search_reindex(); } - $search_settings - ->set('index.cron_limit', $form_state['values']['cron_limit']) - ->save(); drupal_set_message($this->t('The configuration options have been saved.')); } diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php index 282b7ab..fe86451 100644 --- a/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php +++ b/core/modules/search/lib/Drupal/search/Tests/SearchMultilingualEntityTest.php @@ -99,7 +99,7 @@ function setUp() { */ function testIndexingThrottle() { // Index only 4 items per cron run. - \Drupal::config('search.settings')->set('index.cron_limit', 4)->save(); + \Drupal::config('search.page.node_search')->set('cron_limit', 4)->save(); // Update the index. This does the initial processing. $plugin = $this->container->get('plugin.manager.search')->createInstance('node_search'); $plugin->updateIndex();