Commit 2f741ae9 authored by Sean McGivern's avatar Sean McGivern

Fix sidekiq-cluster name selector with colons

A queue name can have colons (to separate it from its namespace). This
wasn't part of the term regex so trying to select a queue by name, when
the name contained a colon, would fail.

This also allows every other predicate to accept colons. Although none
of them strictly need to, it doesn't harm them: feature categories and
resource boundaries can't contain colons anyway, and colons weren't part
of the general syntax.
parent 9cd3ab07
...@@ -21,7 +21,7 @@ module Gitlab ...@@ -21,7 +21,7 @@ module Gitlab
QUERY_OR_OPERATOR = '|' QUERY_OR_OPERATOR = '|'
QUERY_AND_OPERATOR = '&' QUERY_AND_OPERATOR = '&'
QUERY_CONCATENATE_OPERATOR = ',' QUERY_CONCATENATE_OPERATOR = ','
QUERY_TERM_REGEX = %r{^(\w+)(!?=)([\w#{QUERY_CONCATENATE_OPERATOR}]+)}.freeze QUERY_TERM_REGEX = %r{^(\w+)(!?=)([\w:#{QUERY_CONCATENATE_OPERATOR}]+)}.freeze
QUERY_PREDICATES = { QUERY_PREDICATES = {
feature_category: :to_sym, feature_category: :to_sym,
......
...@@ -128,7 +128,7 @@ describe Gitlab::SidekiqConfig::CliMethods do ...@@ -128,7 +128,7 @@ describe Gitlab::SidekiqConfig::CliMethods do
resource_boundary: :cpu resource_boundary: :cpu
}, },
{ {
name: 'a_2', name: 'a:2',
feature_category: :category_a, feature_category: :category_a,
has_external_dependencies: false, has_external_dependencies: false,
latency_sensitive: true, latency_sensitive: true,
...@@ -154,40 +154,40 @@ describe Gitlab::SidekiqConfig::CliMethods do ...@@ -154,40 +154,40 @@ describe Gitlab::SidekiqConfig::CliMethods do
context 'with valid input' do context 'with valid input' do
where(:query, :selected_queues) do where(:query, :selected_queues) do
# feature_category # feature_category
'feature_category=category_a' | %w(a a_2) 'feature_category=category_a' | %w(a a:2)
'feature_category=category_a,category_c' | %w(a a_2 c) 'feature_category=category_a,category_c' | %w(a a:2 c)
'feature_category=category_a|feature_category=category_c' | %w(a a_2 c) 'feature_category=category_a|feature_category=category_c' | %w(a a:2 c)
'feature_category!=category_a' | %w(b c) 'feature_category!=category_a' | %w(b c)
# has_external_dependencies # has_external_dependencies
'has_external_dependencies=true' | %w(b) 'has_external_dependencies=true' | %w(b)
'has_external_dependencies=false' | %w(a a_2 c) 'has_external_dependencies=false' | %w(a a:2 c)
'has_external_dependencies=true,false' | %w(a a_2 b c) 'has_external_dependencies=true,false' | %w(a a:2 b c)
'has_external_dependencies=true|has_external_dependencies=false' | %w(a a_2 b c) 'has_external_dependencies=true|has_external_dependencies=false' | %w(a a:2 b c)
'has_external_dependencies!=true' | %w(a a_2 c) 'has_external_dependencies!=true' | %w(a a:2 c)
# latency_sensitive # latency_sensitive
'latency_sensitive=true' | %w(a_2 b) 'latency_sensitive=true' | %w(a:2 b)
'latency_sensitive=false' | %w(a c) 'latency_sensitive=false' | %w(a c)
'latency_sensitive=true,false' | %w(a a_2 b c) 'latency_sensitive=true,false' | %w(a a:2 b c)
'latency_sensitive=true|latency_sensitive=false' | %w(a a_2 b c) 'latency_sensitive=true|latency_sensitive=false' | %w(a a:2 b c)
'latency_sensitive!=true' | %w(a c) 'latency_sensitive!=true' | %w(a c)
# name # name
'name=a' | %w(a) 'name=a' | %w(a)
'name=a,b' | %w(a b) 'name=a,b' | %w(a b)
'name=a,a_2|name=b' | %w(a a_2 b) 'name=a,a:2|name=b' | %w(a a:2 b)
'name!=a,a_2' | %w(b c) 'name!=a,a:2' | %w(b c)
# resource_boundary # resource_boundary
'resource_boundary=memory' | %w(b c) 'resource_boundary=memory' | %w(b c)
'resource_boundary=memory,cpu' | %w(a b c) 'resource_boundary=memory,cpu' | %w(a b c)
'resource_boundary=memory|resource_boundary=cpu' | %w(a b c) 'resource_boundary=memory|resource_boundary=cpu' | %w(a b c)
'resource_boundary!=memory,cpu' | %w(a_2) 'resource_boundary!=memory,cpu' | %w(a:2)
# combinations # combinations
'feature_category=category_a&latency_sensitive=true' | %w(a_2) 'feature_category=category_a&latency_sensitive=true' | %w(a:2)
'feature_category=category_a&latency_sensitive=true|feature_category=category_c' | %w(a_2 c) 'feature_category=category_a&latency_sensitive=true|feature_category=category_c' | %w(a:2 c)
end end
with_them do with_them do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment