From f74b86b7ea24f1edcbb6fa3ab5b68ce20809f957 Mon Sep 17 00:00:00 2001 From: Gaurav Singh Date: Sat, 25 Apr 2020 20:35:04 -0400 Subject: [PATCH 1/3] Fix race condition in decoder Kubernetes-commit: 9027f30aa865f108c827060ef59ac62c9d07002b --- rest/watch/decoder_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest/watch/decoder_test.go b/rest/watch/decoder_test.go index 2e02cf75..0bda7748 100644 --- a/rest/watch/decoder_test.go +++ b/rest/watch/decoder_test.go @@ -48,7 +48,7 @@ func TestDecoder(t *testing.T) { out, in := io.Pipe() decoder := restclientwatch.NewDecoder(streaming.NewDecoder(out, getDecoder()), getDecoder()) - + eventType := eventType expect := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}} encoder := json.NewEncoder(in) go func() { From be961bda71c36770e6355c562180486d8cc896fc Mon Sep 17 00:00:00 2001 From: Gaurav Singh Date: Sun, 26 Apr 2020 11:06:32 -0400 Subject: [PATCH 2/3] goroutine: Convert eventType to interface{} Kubernetes-commit: e3dde36e1410b4c9b49648378b2dea1612f612fb --- rest/watch/decoder_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rest/watch/decoder_test.go b/rest/watch/decoder_test.go index 0bda7748..493434ec 100644 --- a/rest/watch/decoder_test.go +++ b/rest/watch/decoder_test.go @@ -48,10 +48,9 @@ func TestDecoder(t *testing.T) { out, in := io.Pipe() decoder := restclientwatch.NewDecoder(streaming.NewDecoder(out, getDecoder()), getDecoder()) - eventType := eventType expect := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}} encoder := json.NewEncoder(in) - go func() { + go func(eventType interface{}) { data, err := runtime.Encode(scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), expect) if err != nil { t.Fatalf("Unexpected error %v", err) @@ -64,10 +63,10 @@ func TestDecoder(t *testing.T) { t.Errorf("Unexpected error %v", err) } in.Close() - }() + }(eventType) done := make(chan struct{}) - go func() { + go func(eventType interface{}) { action, got, err := decoder.Decode() if err != nil { t.Fatalf("Unexpected error %v", err) @@ -80,7 +79,7 @@ func TestDecoder(t *testing.T) { } t.Logf("Exited read") close(done) - }() + }(eventType) <-done done = make(chan struct{}) From d3f56086aa62cd8ccc3bacf29fc0066489ca04eb Mon Sep 17 00:00:00 2001 From: Gaurav Singh Date: Mon, 4 May 2020 21:52:06 -0400 Subject: [PATCH 3/3] duplicate iteration variable in go func Kubernetes-commit: c6ac8ea5f7b4e4a6f4d4895122ab1b613840b199 --- rest/watch/decoder_test.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rest/watch/decoder_test.go b/rest/watch/decoder_test.go index 493434ec..c014f065 100644 --- a/rest/watch/decoder_test.go +++ b/rest/watch/decoder_test.go @@ -50,28 +50,29 @@ func TestDecoder(t *testing.T) { decoder := restclientwatch.NewDecoder(streaming.NewDecoder(out, getDecoder()), getDecoder()) expect := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}} encoder := json.NewEncoder(in) - go func(eventType interface{}) { + eType := eventType + go func() { data, err := runtime.Encode(scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), expect) if err != nil { t.Fatalf("Unexpected error %v", err) } event := metav1.WatchEvent{ - Type: string(eventType), + Type: string(eType), Object: runtime.RawExtension{Raw: json.RawMessage(data)}, } if err := encoder.Encode(&event); err != nil { t.Errorf("Unexpected error %v", err) } in.Close() - }(eventType) + }() done := make(chan struct{}) - go func(eventType interface{}) { + go func() { action, got, err := decoder.Decode() if err != nil { t.Fatalf("Unexpected error %v", err) } - if e, a := eventType, action; e != a { + if e, a := eType, action; e != a { t.Errorf("Expected %v, got %v", e, a) } if e, a := expect, got; !apiequality.Semantic.DeepDerivative(e, a) { @@ -79,7 +80,7 @@ func TestDecoder(t *testing.T) { } t.Logf("Exited read") close(done) - }(eventType) + }() <-done done = make(chan struct{})