Skip to content
Snippets Groups Projects

Add cron worker to automatically rollout zoekt exact code search to paid namespaces

Merged John Mason requested to merge jm-namespace-assignment-service into master
1 unresolved thread
Compare and Show latest version
2 files
+ 5
77
Compare changes
  • Side-by-side
  • Inline
Files
2
# frozen_string_literal: true
module Search
module Zoekt
class AssignmentManager
def self.execute(enabled_namespaces:, num_replicas:, buffer_factor: 3, **kwargs)
new(enabled_namespaces, num_replicas, buffer_factor).execute(**kwargs)
end
def initialize(enabled_namespaces, num_replicas, buffer_factor)
@enabled_namespaces = enabled_namespaces
@num_replicas = num_replicas
@buffer_factor = buffer_factor
@errors = []
end
def execute(dry_run: true, ignore_errors: false)
plan = plan_assignments
plan_errors = plan[:namespaces].flat_map { |n| n[:errors] }
if plan_errors.present? && !ignore_errors
raise ArgumentError,
"Cannot provision a plan with errors: #{plan_errors}"
end
changes = provision_assignments(plan)
return { dry_run: true, changes: changes } if dry_run
save_changes(changes[:namespaces])
{ dry_run: false, errors: (@errors + changes[:errors]) }
end
private
attr_reader :enabled_namespaces, :num_replicas, :buffer_factor, :errors
def plan_assignments
Search::Zoekt::PlanningService.plan(
enabled_namespaces: enabled_namespaces,
num_replicas: num_replicas,
buffer_factor: buffer_factor
)
rescue StandardError => e
errors << { type: :planning_failed, details: e.message }
raise e
end
def provision_assignments(plan)
Search::Zoekt::ProvisioningService.execute(plan)
rescue StandardError => e
errors << { type: :provisioning_failed, details: e.message }
raise e
end
def save_changes(namespace_changes)
namespace_changes.each_value(&:save!)
rescue StandardError => e
errors << { type: :saving_failed, details: e.message }
raise e
end
def logger
@logger ||= Search::Zoekt::Logger.build
end
end
end
end
Loading