Skip to content

Draft: Save and reset pause indexing state during migrations

What does this MR do?

Related to #332602 (closed)

During Advanced Search migrations, indexing was only paused if the migration needed the indexing paused. However, this caused issues if the migration did not require pausing AND indexing was paused prior to the migrations being run. Having indexing paused in that scenario caused the migration to run forever and never finish (as indexed documents built up in the queue but were never indexed).

This change saves the pause indexing state before running the migration, unpauses or pauses indexing depending on what the migration requires, and resets it back to the initial state once the migration is completed.

How to test

Note: Make sure Elasticsearch is setup in gdk, Advanced Search is enabled and the projects/data are indexed.

  1. Navigate to the Admin Settings - Settings - Advanced Search Settings screen
  2. Pause Elasticsearch indexing, save, and verify that Pause Elasticsearch indexing is checked
  3. Create a new migration file under /ee/elastic/migrate (see example below for what I used)
  4. Refresh the Advanced Search Settings page and verify that Pause Elasticsearch indexing is checked and disabled
  5. Open rails console
  6. Start a Migration Worker Elastic::MigrationWorker.perform_async
  7. Refresh the Advanced Search Settings page and verify that Pause Elasticsearch indexing is unchecked and disabled
  8. change the migration completed? to return true
  9. Start a Migration Worker Elastic::MigrationWorker.perform_async
  10. Refresh the Advanced Search Settings page and verify that Pause Elasticsearch indexing is checked (reset back to original setting) and enabled

example migration

# frozen_string_literal: true

class TestMigration < Elastic::Migration
  batched!
  throttle_delay 10.seconds

  def migrate
    # no op
    log "Pause index setting: #{Gitlab::CurrentSettings.elasticsearch_pause_indexing?}"

  end

  def completed?
    false
  end
end

Screenshots (strongly suggested)

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Terri Chu

Merge request reports