File tree Expand file tree Collapse file tree
main/java/dev/braintrust/trace
test/java/dev/braintrust/trace Expand file tree Collapse file tree Original file line number Diff line number Diff line change 44import 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 */
1210interface BraintrustSampler {
1311 /** Returns {@code true} if the span should be exported, {@code false} to discard it. */
Original file line number Diff line number Diff 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 );
Original file line number Diff line number Diff 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 ());
You can’t perform that action at this time.
0 commit comments