diff --git a/lib/gitlab/sidekiq_cluster/cli.rb b/lib/gitlab/sidekiq_cluster/cli.rb index cc05fabcd9a93dad1a87b157620b3beb95963df0..dd2bcca7f0f40d15b14d82b63581e53bbca8e6c0 100644 --- a/lib/gitlab/sidekiq_cluster/cli.rb +++ b/lib/gitlab/sidekiq_cluster/cli.rb @@ -30,14 +30,16 @@ def run(argv = ARGV) option_parser.parse!(argv) + parsed_queues = SidekiqCluster.parse_queues(argv) + queues = - if @negated_queues&.any? - parsed_queues = SidekiqCluster.parse_queues(@negated_queues) + if @negate_queues parsed_queues.map { |queues| SidekiqConfig.queues(@rails_path, except: queues) } else - SidekiqCluster.parse_queues(argv) + parsed_queues end + @logger.info("Starting cluster with #{queues.length} processes") @processes = SidekiqCluster.start(queues, @environment, @rails_path) @@ -99,8 +101,8 @@ def option_parser @rails_path = path end - opt.on('-n', '--negate "[QUEUE,QUEUE] [QUEUE]"', "Run workers for all queues except these") do |queues| - @negated_queues = queues.split + opt.on('-n', '--negate', 'Run workers for all queues on sidekiq_queues.yml except the given ones') do + @negate_queues = true end opt.on('-i', '--interval INT', 'The number of seconds to wait between worker checks') do |int| diff --git a/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb b/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb index 77ead22fc7053aaf0687a8e5c23868af1404891e..56740340ecc173660bf37db27033033b886c4c2d 100644 --- a/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb +++ b/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb @@ -20,17 +20,17 @@ cli.run(%w(foo)) end - context 'with --negate argument' do - it 'starts Sidekiq workers for all queues except the negated ones' do - expect(Gitlab::SidekiqConfig).to receive(:queues).twice.and_return(['baz']) + context 'with --negate flag' do + it 'starts Sidekiq workers for all queues on sidekiq_queues.yml except the ones on argv' do + expect(Gitlab::SidekiqConfig).to receive(:queues).and_return(['baz']) expect(Gitlab::SidekiqCluster).to receive(:start) - .with([['baz'], ['baz']], 'test', Dir.pwd) + .with([['baz']], 'test', Dir.pwd) .and_return([]) expect(cli).to receive(:write_pid) expect(cli).to receive(:trap_signals) expect(cli).to receive(:start_loop) - cli.run(['-n', 'foo,bar foo,bar']) + cli.run(%w(foo -n)) end end end