From 671a7f1c2750d89d575b5b3c3487fda6e05c7a93 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 20 Jun 2014 09:58:09 -0700 Subject: [PATCH 1/2] File name should have changed during query->selector rename. --- pkg/labels/{query.go => selector.go} | 0 pkg/labels/{query_test.go => selector_test.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename pkg/labels/{query.go => selector.go} (100%) rename pkg/labels/{query_test.go => selector_test.go} (100%) diff --git a/pkg/labels/query.go b/pkg/labels/selector.go similarity index 100% rename from pkg/labels/query.go rename to pkg/labels/selector.go diff --git a/pkg/labels/query_test.go b/pkg/labels/selector_test.go similarity index 100% rename from pkg/labels/query_test.go rename to pkg/labels/selector_test.go From b3fbc47bd4e2bbb45c3de6f37ebae3d5bd9ab492 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 20 Jun 2014 10:03:56 -0700 Subject: [PATCH 2/2] Make selector parsing deterministic --- pkg/labels/selector.go | 2 ++ pkg/labels/selector_test.go | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/pkg/labels/selector.go b/pkg/labels/selector.go index 52e712cb3c4..668699ee8ab 100644 --- a/pkg/labels/selector.go +++ b/pkg/labels/selector.go @@ -18,6 +18,7 @@ package labels import ( "fmt" + "sort" "strings" ) @@ -101,6 +102,7 @@ func SelectorFromSet(ls Set) Selector { // Takes a string repsenting a selector and returns an object suitable for matching, or an error. func ParseSelector(selector string) (Selector, error) { parts := strings.Split(selector, ",") + sort.StringSlice(parts).Sort() var items []Selector for _, part := range parts { if part == "" { diff --git a/pkg/labels/selector_test.go b/pkg/labels/selector_test.go index 2947e042bf8..30d6f265895 100644 --- a/pkg/labels/selector_test.go +++ b/pkg/labels/selector_test.go @@ -47,6 +47,17 @@ func TestSelectorParse(t *testing.T) { } } +func TestDeterministicParse(t *testing.T) { + s1, err := ParseSelector("x=a,a=x") + s2, err2 := ParseSelector("a=x,x=a") + if err != nil || err2 != nil { + t.Errorf("Unexpected parse error") + } + if s1.String() != s2.String() { + t.Errorf("Non-deterministic parse") + } +} + func expectMatch(t *testing.T, selector string, ls Set) { lq, err := ParseSelector(selector) if err != nil {