Skip to content

Commit 7455f1b

Browse files
RD-3149 - handle large downloads (#117)
* handle large downloads
1 parent 9d0fd34 commit 7455f1b

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/lumigo_tracer/spans_container.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
prepare_large_data,
1717
omit_keys,
1818
EXECUTION_TAGS_KEY,
19+
MAX_ENTRY_SIZE,
1920
)
2021
from lumigo_tracer import utils
2122
from lumigo_tracer.parsers.parser import get_parser, HTTP_TYPE, StepFunctionParser
@@ -182,7 +183,8 @@ def update_event_response(
182183
self.previous_response_body = b""
183184

184185
parser = get_parser(host, headers)() # type: ignore
185-
self.previous_response_body += body
186+
if len(self.previous_response_body) < MAX_ENTRY_SIZE:
187+
self.previous_response_body += body
186188
update = parser.parse_response( # type: ignore
187189
host, status_code, headers, self.previous_response_body
188190
)

src/test/unit/test_spans_container.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from lumigo_tracer.parsers.http_data_classes import HttpRequest
66
from lumigo_tracer.spans_container import SpansContainer, TimeoutMechanism
77
from lumigo_tracer import utils
8-
from lumigo_tracer.utils import Configuration, EXECUTION_TAGS_KEY
8+
from lumigo_tracer.utils import Configuration, EXECUTION_TAGS_KEY, MAX_ENTRY_SIZE
99

1010

1111
@pytest.fixture()
@@ -156,3 +156,19 @@ def test_get_tags_len():
156156
SpansContainer.get_span().add_tag("k0", "v0")
157157
SpansContainer.get_span().add_tag("k1", "v1")
158158
assert SpansContainer.get_span().get_tags_len() == 2
159+
160+
161+
def test_aggregating_response_body(dummy_http_request):
162+
"""
163+
This test is here to validate that we're not leaking memory on aggregating response body.
164+
Unfortunately python doesn't give us better tools, so we must check the problematic member itself.
165+
"""
166+
SpansContainer.create_span()
167+
SpansContainer.get_span().add_request_event(dummy_http_request)
168+
169+
big_response_chunk = b"leak" * MAX_ENTRY_SIZE
170+
for _ in range(10):
171+
SpansContainer.get_span().update_event_response(
172+
host=None, status_code=200, headers=None, body=big_response_chunk
173+
)
174+
assert len(SpansContainer.get_span().previous_response_body) <= len(big_response_chunk)

0 commit comments

Comments
 (0)