Skip to content

Commit 198e3f2

Browse files
committed
fixup: onEnding
1 parent 3b49f80 commit 198e3f2

3 files changed

Lines changed: 14 additions & 14 deletions

File tree

‎braintrust-sdk/src/main/java/dev/braintrust/trace/BraintrustSampler.java‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
import java.util.List;
55

66
/**
7-
* A filter that decides whether a span should be enriched and exported. Samplers are evaluated in
8-
* {@link BraintrustSpanProcessor#onEnding} before enrichment and again in {@link
9-
* BraintrustSpanProcessor#onEnd} before export, so implementations must be deterministic and
10-
* side-effect-free.
7+
* A filter that decides whether a finalized span should be exported. Samplers are evaluated in
8+
* {@link BraintrustSpanProcessor#onEnd} after enrichment and all ending hooks have completed.
119
*/
1210
interface BraintrustSampler {
1311
/** Returns {@code true} if the span should be exported, {@code false} to discard it. */

‎braintrust-sdk/src/main/java/dev/braintrust/trace/BraintrustSpanProcessor.java‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,6 @@ public boolean isStartRequired() {
159159

160160
@Override
161161
public void onEnding(ReadWriteSpan span) {
162-
for (var sampler : samplers) {
163-
if (!sampler.sample(span)) {
164-
return;
165-
}
166-
}
167-
168162
try {
169163
var inputJson = span.getAttribute(INPUT_JSON);
170164
var newInputJson = attachmentProcessor.processAndUpload(inputJson);

‎braintrust-sdk/src/test/java/dev/braintrust/trace/BraintrustTracingTest.java‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,14 +232,15 @@ public boolean isStartRequired() {
232232

233233
@Override
234234
public void onEnding(ReadWriteSpan span) {
235-
assertEquals("accepted", span.getName());
236235
var context =
237236
BraintrustJsonMapper.fromJson(
238237
span.getAttribute(BraintrustSpanProcessor.CONTEXT_JSON),
239238
Map.class);
240-
assertEquals(
241-
"late-attribute",
242-
((Map<?, ?>) context.get("metadata")).get("source"));
239+
if (span.getName().equals("accepted")) {
240+
assertEquals(
241+
"late-attribute",
242+
((Map<?, ?>) context.get("metadata")).get("source"));
243+
}
243244
assertEquals(
244245
"braintrust.sdk.java",
245246
((Map<?, ?>) context.get("span_origin")).get("name"));
@@ -282,6 +283,13 @@ public boolean isEndRequired() {
282283
var rejected = tracer.spanBuilder("rejected").startSpan();
283284
rejected.setAttribute("http.method", "GET");
284285
rejected.end();
286+
assertNotNull(
287+
((ReadableSpan) rejected).getAttribute(BraintrustSpanProcessor.CONTEXT_JSON),
288+
"Rejected spans are enriched before filtering");
289+
assertEquals(
290+
Boolean.TRUE,
291+
((ReadableSpan) rejected).getAttribute(AttributeKey.booleanKey("smoke.ending")),
292+
"Ending hooks run even for spans rejected at export");
285293

286294
var spans = exporter.getFinishedSpanItems();
287295
assertEquals(1, spans.size());

0 commit comments

Comments
 (0)