From 08b3c3d4b02de32174148b48dcec8299efca8d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Thu, 20 Jun 2024 08:16:04 +0200 Subject: [PATCH 1/6] init limits if nil --- transport.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/transport.go b/transport.go index 20f69941f..2f8555ec9 100644 --- a/transport.go +++ b/transport.go @@ -689,6 +689,10 @@ func (t *HTTPSyncTransport) SendEventWithContext(ctx context.Context, event *Eve Logger.Printf("Sending %s failed with the following error: %s", eventType, string(b)) } + if t.limits == nil { + t.limits = make(ratelimit.Map) + } + t.mu.Lock() t.limits.Merge(ratelimit.FromResponse(response)) t.mu.Unlock() From 5cda3f9f37333a8dd362d12e7d5bc54126789ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Thu, 20 Jun 2024 08:16:49 +0200 Subject: [PATCH 2/6] init limits if nil --- transport.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/transport.go b/transport.go index 2f8555ec9..05473ac6f 100644 --- a/transport.go +++ b/transport.go @@ -550,9 +550,14 @@ func (t *HTTPTransport) worker() { } Logger.Printf("Sending %s failed with the following error: %s", eventType, string(b)) } + t.mu.Lock() + if t.limits == nil { + t.limits = make(ratelimit.Map) + } t.limits.Merge(ratelimit.FromResponse(response)) t.mu.Unlock() + // Drain body up to a limit and close it, allowing the // transport to reuse TCP connections. _, _ = io.CopyN(io.Discard, response.Body, maxDrainResponseBytes) @@ -689,11 +694,11 @@ func (t *HTTPSyncTransport) SendEventWithContext(ctx context.Context, event *Eve Logger.Printf("Sending %s failed with the following error: %s", eventType, string(b)) } + t.mu.Lock() if t.limits == nil { t.limits = make(ratelimit.Map) } - t.mu.Lock() t.limits.Merge(ratelimit.FromResponse(response)) t.mu.Unlock() From e2ff00e04f7a40bdebbbf628afd21bcbd4a02f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Mon, 24 Jun 2024 11:03:01 +0200 Subject: [PATCH 3/6] add test for nil limit --- transport.go | 1 - transport_test.go | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/transport.go b/transport.go index 05473ac6f..02fc1d4f1 100644 --- a/transport.go +++ b/transport.go @@ -357,7 +357,6 @@ func NewHTTPTransport() *HTTPTransport { transport := HTTPTransport{ BufferSize: defaultBufferSize, Timeout: defaultTimeout, - limits: make(ratelimit.Map), } return &transport } diff --git a/transport_test.go b/transport_test.go index 9d70db2f7..b371cae45 100644 --- a/transport_test.go +++ b/transport_test.go @@ -434,6 +434,7 @@ func TestHTTPTransport(t *testing.T) { e.EventID = EventID(id) transport.SendEvent(e) + t.Logf("[CLIENT] {%.4s} event sent", e.EventID) return id } From e04dec8750d46ce8a2676a18f76389be3d5f4b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Tue, 25 Jun 2024 18:01:25 +0200 Subject: [PATCH 4/6] add tests for nil limits --- transport_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/transport_test.go b/transport_test.go index b371cae45..29a182955 100644 --- a/transport_test.go +++ b/transport_test.go @@ -713,3 +713,41 @@ no_tags@second:1|c|T1597790835 t.Errorf("Envelope mismatch (-want +got):\n%s", diff) } } + +func TestHTTPTransport_SendEventWithContext_NilLimits(t *testing.T) { + server := newTestHTTPServer(t) + defer server.Close() + + transport := NewHTTPTransport() + transport.Configure(ClientOptions{ + Dsn: fmt.Sprintf("https://test@%s/1", server.Listener.Addr()), + HTTPClient: server.Client(), + }) + + // Explicitly set t.limits to nil + transport.mu.Lock() + transport.limits = nil + transport.mu.Unlock() + + event := NewEvent() + event.EventID = EventID(uuid()) + + transport.SendEventWithContext(context.Background(), event) + + server.Unblock() + + if !transport.Flush(testutils.FlushTimeout()) { + t.Fatal("Flush timed out") + } + + if server.EventCount() != 1 { + t.Fatalf("expected 1 event to be sent, but got %d", server.EventCount()) + } + + // Validate that t.limits is initialized and merged + transport.mu.RLock() + defer transport.mu.RUnlock() + if transport.limits == nil { + t.Fatal("expected t.limits to be initialized") + } +} From 7db67b461a31fc64276938674196295561d2085d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Tue, 25 Jun 2024 18:43:44 +0200 Subject: [PATCH 5/6] add test --- transport_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/transport_test.go b/transport_test.go index 29a182955..3ad90f0d7 100644 --- a/transport_test.go +++ b/transport_test.go @@ -718,12 +718,14 @@ func TestHTTPTransport_SendEventWithContext_NilLimits(t *testing.T) { server := newTestHTTPServer(t) defer server.Close() - transport := NewHTTPTransport() + transport := NewHTTPSyncTransport() transport.Configure(ClientOptions{ Dsn: fmt.Sprintf("https://test@%s/1", server.Listener.Addr()), HTTPClient: server.Client(), }) + server.Unblock() + // Explicitly set t.limits to nil transport.mu.Lock() transport.limits = nil @@ -734,8 +736,6 @@ func TestHTTPTransport_SendEventWithContext_NilLimits(t *testing.T) { transport.SendEventWithContext(context.Background(), event) - server.Unblock() - if !transport.Flush(testutils.FlushTimeout()) { t.Fatal("Flush timed out") } @@ -745,8 +745,8 @@ func TestHTTPTransport_SendEventWithContext_NilLimits(t *testing.T) { } // Validate that t.limits is initialized and merged - transport.mu.RLock() - defer transport.mu.RUnlock() + transport.mu.Lock() + defer transport.mu.Unlock() if transport.limits == nil { t.Fatal("expected t.limits to be initialized") } From 06ac400e247416e06e580bac1e2b0481908bbf01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emir=20Ribi=C4=87?= Date: Fri, 19 Jul 2024 16:36:48 +0200 Subject: [PATCH 6/6] Remove tests --- transport_test.go | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/transport_test.go b/transport_test.go index 3ad90f0d7..b371cae45 100644 --- a/transport_test.go +++ b/transport_test.go @@ -713,41 +713,3 @@ no_tags@second:1|c|T1597790835 t.Errorf("Envelope mismatch (-want +got):\n%s", diff) } } - -func TestHTTPTransport_SendEventWithContext_NilLimits(t *testing.T) { - server := newTestHTTPServer(t) - defer server.Close() - - transport := NewHTTPSyncTransport() - transport.Configure(ClientOptions{ - Dsn: fmt.Sprintf("https://test@%s/1", server.Listener.Addr()), - HTTPClient: server.Client(), - }) - - server.Unblock() - - // Explicitly set t.limits to nil - transport.mu.Lock() - transport.limits = nil - transport.mu.Unlock() - - event := NewEvent() - event.EventID = EventID(uuid()) - - transport.SendEventWithContext(context.Background(), event) - - if !transport.Flush(testutils.FlushTimeout()) { - t.Fatal("Flush timed out") - } - - if server.EventCount() != 1 { - t.Fatalf("expected 1 event to be sent, but got %d", server.EventCount()) - } - - // Validate that t.limits is initialized and merged - transport.mu.Lock() - defer transport.mu.Unlock() - if transport.limits == nil { - t.Fatal("expected t.limits to be initialized") - } -}