{"record":{"id":"9abb1bd4a7f47232","repo":"quarkusio/quarkus","slug":"dummy2","errorCode":null,"errorMessage":"dummy2","messagePattern":"dummy2","errorType":"exception","errorClass":"NoStackTraceException","httpStatus":500,"severity":"info","filePath":"integration-tests/opentelemetry-reactive/src/main/java/io/quarkus/it/opentelemetry/reactive/ReactiveResource.java","lineNumber":104,"sourceCode":"\n    @POST\n    public Uni<String> helloPost(String body) {\n        Span span = tracer.spanBuilder(\"helloPost\").startSpan();\n        return Uni.createFrom().item(\"Hello \" + body).onItem().delayIt().by(Duration.ofMillis(MILLISECONDS_DELAY))\n                .eventually((Runnable) span::end);\n    }\n\n    @Path(\"blockingException\")\n    @GET\n    public String blockingException() {\n        throw new NoStackTraceException(\"dummy\");\n    }\n\n    @Path(\"reactiveException\")\n    @GET\n    public Uni<String> reactiveException() {\n        return Uni.createFrom().item(() -> {\n            throw new NoStackTraceException(\"dummy2\");\n        });\n    }\n}\n","sourceCodeStart":86,"sourceCodeEnd":108,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/integration-tests/opentelemetry-reactive/src/main/java/io/quarkus/it/opentelemetry/reactive/ReactiveResource.java#L86-L108","documentation":"A NoStackTraceException with message 'dummy2' is thrown inside a Uni produced by the reactiveException endpoint of the ReactiveResource OpenTelemetry test. It simulates a failure occurring inside a reactive pipeline so tests can assert the exception is attached to the OTel span even when raised on a Mutiny subscription thread rather than the request thread.","triggerScenarios":"GET .../reactiveException is called; the returned Uni is subscribed to and the item supplier throws NoStackTraceException('dummy2'), failing the reactive pipeline with a 500 response.","commonSituations":"Seen when running the opentelemetry-reactive integration tests or hitting the endpoint manually; distinguishes reactive-pipeline exceptions from blocking ones (errorIndex 4054).","solutions":["This is intentional — confirm the test asserts the exception appears on the span recorded via the OTel collector.","Do not treat the 500 response as a regression for this endpoint.","For manual exploration, call a non-exception endpoint of the same resource.","When reusing the pattern in tests, keep NoStackTraceException to keep logs clean."],"exampleFix":"// before\n@Path(\"reactiveException\")\n@GET\npublic Uni<String> reactiveException() {\n    return Uni.createFrom().item(() -> { throw new NoStackTraceException(\"dummy2\"); });\n}\n// after (non-throwing variant for manual use)\n@Path(\"reactiveException\")\n@GET\npublic Uni<String> reactiveException() {\n    return Uni.createFrom().item(\"ok\");\n}","handlingStrategy":"try-catch","validationCode":"if (path.endsWith(\"reactiveException\")) {\n    // Uni fails by design; expect 500 and assert span exception on the reactive pipeline\n}","typeGuard":null,"tryCatchPattern":"try {\n    response = given().get(\"/reactiveException\");\n} catch (Exception e) {\n    // expected: Uni fails with NoStackTraceException(\"dummy2\") -> 500\n}\n// then assert the OTel span has an exception event with message 'dummy2'","preventionTips":["Treat the 500 from this endpoint as the test signal, not a regression.","Verify the exception is recorded even though it is raised on a Mutiny thread.","Keep NoStackTraceException for synthetic failures to keep logs clean.","Use this endpoint to validate reactive-pipeline span propagation when updating OTel instrumentation."],"tags":["opentelemetry","mutiny","reactive","test-endpoint"],"backgroundTag":"intentional-test-exception","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}