From 0c7027b5a04df38acaac221bcf4733e78799008c Mon Sep 17 00:00:00 2001 From: Stavros Kontopoulos Date: Thu, 1 Apr 2021 16:25:26 +0300 Subject: [PATCH 1/3] add benchmark for tracing handler --- tracing/http_test.go | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tracing/http_test.go b/tracing/http_test.go index a463a88828..b89535aeb4 100644 --- a/tracing/http_test.go +++ b/tracing/http_test.go @@ -166,3 +166,49 @@ func TestHTTPSpanIgnoringPaths(t *testing.T) { }) } } + +func BenchmarkSpanMiddleware(b *testing.B) { + cfg := config.Config{ + Backend: config.Zipkin, + Debug: true, + } + + // Create tracer with reporter recorder + reporter, co := FakeZipkinExporter() + oct := NewOpenCensusTracer(co) + b.Cleanup(func() { + reporter.Close() + oct.Finish() + }) + + if err := oct.ApplyConfig(&cfg); err != nil { + b.Error("Failed to apply tracer config:", err) + } + + next := testHandler{} + middleware := HTTPSpanMiddleware(&next) + + fw := &fakeWriter{} + + req, err := http.NewRequest("GET", "http://test.example.com", nil) + if err != nil { + b.Fatal("Failed to make fake request:", err) + } + const traceID = "821e0d50d931235a5ba3fa42eddddd8f" + req.Header["X-B3-Traceid"] = []string{traceID} + req.Header["X-B3-Spanid"] = []string{"b3bd5e1c4318c78a"} + + b.Run("sequential", func(b *testing.B) { + for j := 0; j < b.N; j++ { + middleware.ServeHTTP(fw, req) + } + }) + + b.Run("parallel", func(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + middleware.ServeHTTP(fw, req) + } + }) + }) +} From 934c5deb0402705d5dd39a59f328001cea0e1436 Mon Sep 17 00:00:00 2001 From: Stavros Kontopoulos Date: Thu, 1 Apr 2021 17:42:16 +0300 Subject: [PATCH 2/3] updates --- tracing/http_test.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tracing/http_test.go b/tracing/http_test.go index b89535aeb4..a469f8a691 100644 --- a/tracing/http_test.go +++ b/tracing/http_test.go @@ -41,6 +41,18 @@ func (fw *fakeWriter) Write(data []byte) (int, error) { func (fw *fakeWriter) WriteHeader(statusCode int) {} +type dummyWriter struct {} + +func (dw *dummyWriter) Header() http.Header { + return http.Header{} +} + +func (dw *dummyWriter) Write(data []byte) (int, error) { + return 0, nil +} + +func (dw *dummyWriter) WriteHeader(statusCode int) {} + type testHandler struct{} func (th *testHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -70,7 +82,7 @@ func TestHTTPSpanMiddleware(t *testing.T) { fw := &fakeWriter{} - req, err := http.NewRequest("GET", "http://test.example.com", nil) + req, err := http.NewRequest(http.MethodGet, "http://test.example.com", nil) if err != nil { t.Fatal("Failed to make fake request:", err) } @@ -188,9 +200,9 @@ func BenchmarkSpanMiddleware(b *testing.B) { next := testHandler{} middleware := HTTPSpanMiddleware(&next) - fw := &fakeWriter{} + dw := &dummyWriter{} - req, err := http.NewRequest("GET", "http://test.example.com", nil) + req, err := http.NewRequest(http.MethodGet, "http://test.example.com", nil) if err != nil { b.Fatal("Failed to make fake request:", err) } @@ -200,14 +212,14 @@ func BenchmarkSpanMiddleware(b *testing.B) { b.Run("sequential", func(b *testing.B) { for j := 0; j < b.N; j++ { - middleware.ServeHTTP(fw, req) + middleware.ServeHTTP(dw, req) } }) b.Run("parallel", func(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { - middleware.ServeHTTP(fw, req) + middleware.ServeHTTP(dw, req) } }) }) From d78d37235c18503dcf13d1cc758ce9177c79da6b Mon Sep 17 00:00:00 2001 From: Stavros Kontopoulos Date: Thu, 1 Apr 2021 17:53:01 +0300 Subject: [PATCH 3/3] fixes --- tracing/http_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tracing/http_test.go b/tracing/http_test.go index a469f8a691..f3b46166ce 100644 --- a/tracing/http_test.go +++ b/tracing/http_test.go @@ -41,17 +41,17 @@ func (fw *fakeWriter) Write(data []byte) (int, error) { func (fw *fakeWriter) WriteHeader(statusCode int) {} -type dummyWriter struct {} +type benchWriter struct{} -func (dw *dummyWriter) Header() http.Header { +func (dw *benchWriter) Header() http.Header { return http.Header{} } -func (dw *dummyWriter) Write(data []byte) (int, error) { +func (dw *benchWriter) Write(data []byte) (int, error) { return 0, nil } -func (dw *dummyWriter) WriteHeader(statusCode int) {} +func (dw *benchWriter) WriteHeader(statusCode int) {} type testHandler struct{} @@ -200,7 +200,7 @@ func BenchmarkSpanMiddleware(b *testing.B) { next := testHandler{} middleware := HTTPSpanMiddleware(&next) - dw := &dummyWriter{} + bw := &benchWriter{} req, err := http.NewRequest(http.MethodGet, "http://test.example.com", nil) if err != nil { @@ -212,14 +212,14 @@ func BenchmarkSpanMiddleware(b *testing.B) { b.Run("sequential", func(b *testing.B) { for j := 0; j < b.N; j++ { - middleware.ServeHTTP(dw, req) + middleware.ServeHTTP(bw, req) } }) b.Run("parallel", func(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { - middleware.ServeHTTP(dw, req) + middleware.ServeHTTP(bw, req) } }) })