Close spans in the exceptional path

Closes #41469

Signed-off-by: Alexander Schwartz <aschwart@redhat.com>
This commit is contained in:
Alexander Schwartz
2025-07-29 14:49:16 +02:00
committed by GitHub
parent ff4d4233f4
commit 8634cdaa4a
2 changed files with 8 additions and 2 deletions

View File

@@ -47,6 +47,7 @@ import io.quarkus.hibernate.orm.deployment.spi.AdditionalJpaModelBuildItem;
import io.quarkus.narayana.jta.runtime.TransactionManagerBuildTimeConfig;
import io.quarkus.narayana.jta.runtime.TransactionManagerBuildTimeConfig.UnsafeMultipleLastResourcesMode;
import io.quarkus.resteasy.reactive.server.spi.MethodScannerBuildItem;
import io.quarkus.resteasy.reactive.server.spi.PreExceptionMapperHandlerBuildItem;
import io.quarkus.runtime.configuration.ConfigurationException;
import io.quarkus.vertx.http.deployment.HttpRootPathBuildItem;
import io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem;
@@ -654,7 +655,8 @@ class KeycloakProcessor {
@BuildStep
void configureResteasy(CombinedIndexBuildItem index,
BuildProducer<BuildTimeConditionBuildItem> buildTimeConditionBuildItemBuildProducer,
BuildProducer<MethodScannerBuildItem> scanner) {
BuildProducer<MethodScannerBuildItem> scanner,
BuildProducer<PreExceptionMapperHandlerBuildItem> preExceptionMapperHandlerBuildItemBuildProducer) {
if (!Profile.isFeatureEnabled(Profile.Feature.ADMIN_API)) {
buildTimeConditionBuildItemBuildProducer.produce(new BuildTimeConditionBuildItem(index.getIndex().getClassByName(DotName.createSimple(
AdminRoot.class.getName())), false));
@@ -671,6 +673,10 @@ class KeycloakProcessor {
if (Configuration.isTrue(TracingOptions.TRACING_ENABLED)) {
chainCustomizers.add(new KeycloakTracingCustomizer());
// Exception handler is necessary to handle exceptions that are thrown by the bean methods,
// otherwise the spans will not be closed.
preExceptionMapperHandlerBuildItemBuildProducer
.produce(new PreExceptionMapperHandlerBuildItem(new KeycloakTracingCustomizer.EndHandler()));
}
scanner.produce(new MethodScannerBuildItem(new MethodScanner() {

View File

@@ -65,7 +65,7 @@ public final class KeycloakTracingCustomizer implements HandlerChainCustomizer {
}
}
private static class EndHandler implements ServerRestHandler {
public static class EndHandler implements ServerRestHandler {
@Override
public void handle(ResteasyReactiveRequestContext requestContext) {
Scope scope = (Scope) requestContext.getProperty("scope");