Skip to content

Commit f00ac21

Browse files
committed
.
1 parent 4a25aee commit f00ac21

1 file changed

Lines changed: 39 additions & 37 deletions

File tree

sentry_sdk/_span_batcher.py

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -106,48 +106,50 @@ def _to_transport_format(item: "StreamedSpan") -> "Any":
106106

107107
def _flush(self) -> None:
108108
with self._lock:
109-
if len(self._span_buffer) == 0:
110-
return
111-
112109
envelopes = []
113-
for spans in self._span_buffer.values():
114-
if spans:
115-
dsc = spans[0].dynamic_sampling_context()
116-
117-
# Max per envelope is 1000, so if we happen to have more than
118-
# 1000 spans in one bucket, we'll need to separate them.
119-
for start in range(0, len(spans), self.MAX_ENVELOPE_SIZE):
120-
end = min(start + self.MAX_ENVELOPE_SIZE, len(spans))
121-
122-
envelope = Envelope(
110+
flushed_trace_ids = []
111+
for trace_id, spans in self._span_buffer.items():
112+
if len(spans) < self.MAX_BEFORE_FLUSH:
113+
continue
114+
115+
flushed_trace_ids.append(trace_id)
116+
dsc = spans[0].dynamic_sampling_context()
117+
118+
# Max per envelope is 1000, so if we happen to have more than
119+
# 1000 spans in one bucket, we'll need to separate them.
120+
for start in range(0, len(spans), self.MAX_ENVELOPE_SIZE):
121+
end = min(start + self.MAX_ENVELOPE_SIZE, len(spans))
122+
123+
envelope = Envelope(
124+
headers={
125+
"sent_at": format_timestamp(datetime.now(timezone.utc)),
126+
"trace": dsc,
127+
}
128+
)
129+
130+
envelope.add_item(
131+
Item(
132+
type=self.TYPE,
133+
content_type=self.CONTENT_TYPE,
123134
headers={
124-
"sent_at": format_timestamp(datetime.now(timezone.utc)),
125-
"trace": dsc,
126-
}
127-
)
128-
129-
envelope.add_item(
130-
Item(
131-
type="span",
132-
content_type="application/vnd.sentry.items.span.v2+json",
133-
headers={
134-
"item_count": end - start,
135-
},
136-
payload=PayloadRef(
137-
json={
138-
"items": [
139-
self._to_transport_format(spans[j])
140-
for j in range(start, end)
141-
]
142-
}
143-
),
144-
)
135+
"item_count": end - start,
136+
},
137+
payload=PayloadRef(
138+
json={
139+
"items": [
140+
self._to_transport_format(spans[j])
141+
for j in range(start, end)
142+
]
143+
}
144+
),
145145
)
146+
)
146147

147-
envelopes.append(envelope)
148+
envelopes.append(envelope)
148149

149-
self._span_buffer.clear()
150-
self._running_size.clear()
150+
for trace_id in flushed_trace_ids:
151+
del self._span_buffer[trace_id]
152+
del self._running_size[trace_id]
151153

152154
for envelope in envelopes:
153155
self._capture_func(envelope)

0 commit comments

Comments
 (0)