Skip to content

Commit c08111b

Browse files
authored
Avoid expensive call to Span.fromContextOrNull(null) (#89135)
Workaround for #89107
1 parent 8f08c7b commit c08111b

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

modules/apm/src/main/java/org/elasticsearch/tracing/apm/APMTracer.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -286,47 +286,47 @@ private void setSpanAttributes(ThreadContext threadContext, @Nullable Map<String
286286

287287
@Override
288288
public void addError(String spanId, Throwable throwable) {
289-
final var span = Span.fromContextOrNull(spans.get(spanId));
289+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
290290
if (span != null) {
291291
span.recordException(throwable);
292292
}
293293
}
294294

295295
@Override
296296
public void setAttribute(String spanId, String key, boolean value) {
297-
final var span = Span.fromContextOrNull(spans.get(spanId));
297+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
298298
if (span != null) {
299299
span.setAttribute(key, value);
300300
}
301301
}
302302

303303
@Override
304304
public void setAttribute(String spanId, String key, double value) {
305-
final var span = Span.fromContextOrNull(spans.get(spanId));
305+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
306306
if (span != null) {
307307
span.setAttribute(key, value);
308308
}
309309
}
310310

311311
@Override
312312
public void setAttribute(String spanId, String key, long value) {
313-
final var span = Span.fromContextOrNull(spans.get(spanId));
313+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
314314
if (span != null) {
315315
span.setAttribute(key, value);
316316
}
317317
}
318318

319319
@Override
320320
public void setAttribute(String spanId, String key, String value) {
321-
final var span = Span.fromContextOrNull(spans.get(spanId));
321+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
322322
if (span != null) {
323323
span.setAttribute(key, value);
324324
}
325325
}
326326

327327
@Override
328328
public void stopTrace(String spanId) {
329-
final var span = Span.fromContextOrNull(spans.remove(spanId));
329+
final var span = spanFromContextOrNullWithoutLogging(spans.remove(spanId));
330330
if (span != null) {
331331
logger.trace("Finishing trace [{}]", spanId);
332332
span.end();
@@ -335,12 +335,18 @@ public void stopTrace(String spanId) {
335335

336336
@Override
337337
public void addEvent(String spanId, String eventName) {
338-
final var span = Span.fromContextOrNull(spans.get(spanId));
338+
final var span = spanFromContextOrNullWithoutLogging(spans.get(spanId));
339339
if (span != null) {
340340
span.addEvent(eventName);
341341
}
342342
}
343343

344+
private static Span spanFromContextOrNullWithoutLogging(Context context) {
345+
// Span.fromContextOrNull(null) is super-expensive today, see https://github.com/elastic/elasticsearch/issues/89107
346+
// and https://github.com/open-telemetry/opentelemetry-java/pull/4663
347+
return context == null ? null : Span.fromContextOrNull(context);
348+
}
349+
344350
private static class MapKeyGetter implements TextMapGetter<Map<String, String>> {
345351

346352
@Override

0 commit comments

Comments
 (0)