diff --git a/ee/app/services/search/rake_task_executor_service.rb b/ee/app/services/search/rake_task_executor_service.rb index 63b66341f20073f3549252028456335c12ecd813..2a45e10e5a220a3d2fbe22602a3b02a6edbe0efd 100644 --- a/ee/app/services/search/rake_task_executor_service.rb +++ b/ee/app/services/search/rake_task_executor_service.rb @@ -314,7 +314,6 @@ def index_users def index_namespaces Namespace.by_parent(nil).each_batch do |batch| batch = batch.include_route - batch = batch.select(&:use_elasticsearch?) ElasticNamespaceIndexerWorker.bulk_perform_async_with_contexts( batch, diff --git a/ee/app/workers/elastic_namespace_indexer_worker.rb b/ee/app/workers/elastic_namespace_indexer_worker.rb index 11d1a78d9508be519a0eb0a11479a5fc988beda3..e24349c8969840212d945e8621804e5dc6d8a1f0 100644 --- a/ee/app/workers/elastic_namespace_indexer_worker.rb +++ b/ee/app/workers/elastic_namespace_indexer_worker.rb @@ -23,7 +23,6 @@ def perform(namespace_id, operation) case operation.to_s when /index/ index_projects(namespace) - index_group_wikis(namespace) if should_maintain_group_wiki_index?(namespace) index_group_associations(namespace) when /delete/ delete_from_index(namespace) @@ -47,7 +46,14 @@ def index_group_wikis(namespace) end def index_group_associations(namespace) - Elastic::ProcessBookkeepingService.maintain_indexed_namespace_associations!(namespace) + namespace.self_and_descendants.each_batch do |batch| + Elastic::ProcessBookkeepingService.maintain_indexed_namespace_associations!(*batch) + + batch.group_namespaces.each.with_index do |namespace, idx| + interval = idx % ElasticWikiIndexerWorker::MAX_JOBS_PER_HOUR + ElasticWikiIndexerWorker.perform_in(interval, namespace.id, namespace.class.name, { 'force' => true }) + end + end end def delete_from_index(namespace) diff --git a/ee/spec/workers/elastic_namespace_indexer_worker_spec.rb b/ee/spec/workers/elastic_namespace_indexer_worker_spec.rb index 3ff16db80901e71a7a88e69f52c7f0815e147f62..f3b04b879db77fb1676766fc015c74c144edba1a 100644 --- a/ee/spec/workers/elastic_namespace_indexer_worker_spec.rb +++ b/ee/spec/workers/elastic_namespace_indexer_worker_spec.rb @@ -27,8 +27,8 @@ end describe 'indexing and deleting', :elastic_helpers do - let_it_be(:namespace) { create :namespace } - let_it_be(:projects) { create_list :project, 3, namespace: namespace } + let_it_be(:namespace) { create(:namespace) } + let_it_be(:projects) { create_list(:project, 3, namespace: namespace) } context 'for :index' do it_behaves_like 'an idempotent worker' do @@ -99,7 +99,7 @@ it 'calls Elastic::ProcessBookkeepingService.maintain_indexed_namespace_associations!' do expect(Elastic::ProcessBookkeepingService).to receive(:maintain_indexed_namespace_associations!) - .with(*parent_group).once + .with(parent_group, sub_group, sub_child_group).once worker.perform(*job_args) end