From be61bd22fec626040ce1b02af98fd8ae3067fafe Mon Sep 17 00:00:00 2001 From: Dmitry Gruzd <dgruzd@gitlab.com> Date: Wed, 29 Nov 2023 18:49:50 +0100 Subject: [PATCH] Fix cluster reindexing preflight check EE: true Changelog: fixed --- .../services/elastic/cluster_reindexing_service.rb | 8 +++++++- .../elastic/cluster_reindexing_service_spec.rb | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ee/app/services/elastic/cluster_reindexing_service.rb b/ee/app/services/elastic/cluster_reindexing_service.rb index 07a9905eb0180..8de3a8c6273a5 100644 --- a/ee/app/services/elastic/cluster_reindexing_service.rb +++ b/ee/app/services/elastic/cluster_reindexing_service.rb @@ -61,7 +61,13 @@ def initial! return false end - expected_free_size = alias_names.sum { |name| elastic_helper.index_size_bytes(index_name: name) } * 2 + target_classes = current_task.target_classes + current_size = target_classes.sum do |klass| + name = elastic_helper.klass_to_alias_name(klass: klass) + elastic_helper.index_size_bytes(index_name: name) + end + + expected_free_size = current_size * 2 if elastic_helper.cluster_free_size_bytes < expected_free_size abort_reindexing!("You should have at least #{expected_free_size} bytes of storage available to perform reindexing. Please increase the storage in your Elasticsearch cluster before reindexing.") return false diff --git a/ee/spec/services/elastic/cluster_reindexing_service_spec.rb b/ee/spec/services/elastic/cluster_reindexing_service_spec.rb index 7827648a7cecc..8676f23e3523c 100644 --- a/ee/spec/services/elastic/cluster_reindexing_service_spec.rb +++ b/ee/spec/services/elastic/cluster_reindexing_service_spec.rb @@ -43,6 +43,18 @@ expect(Gitlab::CurrentSettings.elasticsearch_pause_indexing).to eq(true) end + + context 'when partial reindexing' do + let(:task) { create(:elastic_reindexing_task, state: :initial, targets: %w[Project User]) } + + it 'errors when there is not enough space' do + allow(helper).to receive(:index_size_bytes).twice.and_return(10.megabytes) + allow(helper).to receive(:cluster_free_size_bytes).and_return(30.megabytes) + + expect { cluster_reindexing_service.execute }.to change { task.reload.state }.from('initial').to('failure') + expect(task.reload.error_message).to match(/storage available/) + end + end end context 'state: indexing_paused' do -- GitLab