ryanbreaker
10/21/2025, 4:24 PMwithMdc function was removed from Kairo in v6, or was it just moved somewhere else?
https://github.com/hudson155/kairo/blob/v5.15.1/kairo-mdc/src/main/kotlin/kairo/mdc/withMdc.ktSangeeta
10/26/2025, 10:28 AM./gradlew buildOpenApi. I noticed a couple of things:
1. The @description annotation in KDoc (as documented here) does not appear in the generated OpenAPI output. It seems the description is ignored, while the first line of the KDoc becomes the summary.
2. The OpenAPI spec currently includes internal endpoints (e.g., /json/kotlinx-serialization). Is there a way/annotation to exclude such endpoints from the generated spec?
3. Is there any support or recommended approach for nested tags? Currently, only flat tag grouping is supported.
Thanks in advance for the guidance!Anders
10/28/2025, 9:36 AMFlorian
10/30/2025, 7:09 PMGET /users/{id}, PUT /users/{id}, GET /users/ ?Hong Phuc
11/02/2025, 7:26 AMNov 02 06:53:48 backend-server java[675013]: Routing resolve result:
Nov 02 06:53:48 backend-server java[675013]: SUCCESS @ /api/posts/(method:POST)
Nov 02 06:53:48 backend-server java[675013]: This is session null
Nov 02 06:53:48 backend-server java[675013]: 2025-11-02 06:53:48.248 [eventLoopGroupProxy-4-2] TRACE i.k.server.engine.DefaultTransform - Transformed class io.ktor.utils.io.ByteChannel to class io.ktor.http.cio.CIOMultipartDataBase for /api/pos>
Nov 02 06:53:48 backend-server java[675013]: 2025-11-02 06:53:48.249 [eventLoopGroupProxy-4-2] ERROR Application - Unhandled: POST - /api/posts
Nov 02 06:53:48 backend-server java[675013]: java.lang.NullPointerException: null
Nov 02 06:53:48 backend-server java[675013]: at com.yourart.RoutingKt$configureRouting$1$5.invokeSuspend(Routing.kt:155)
Nov 02 06:53:48 backend-server java[675013]: at com.yourart.RoutingKt$configureRouting$1$5.invoke(Routing.kt)
Nov 02 06:53:48 backend-server java[675013]: at com.yourart.RoutingKt$configureRouting$1$5.invoke(Routing.kt)
Nov 02 06:53:48 backend-server java[675013]: at io.ktor.server.routing.RoutingNode$buildPipeline$1$1.invokeSuspend(RoutingNode.kt:126)
Nov 02 06:53:48 backend-server java[675013]: at io.ktor.server.routing.RoutingNode$buildPipeline$1$1.invoke(RoutingNode.kt)
This is when I'm running the code locally via Intellij:
Routing resolve result:
SUCCESS @ /api/posts/(method:POST)
This is session null
2025-11-02 18:29:27.989 [ktor-jetty-8000-1] TRACE i.k.server.engine.DefaultTransform - Transformed class io.ktor.utils.io.ByteChannel to class io.ktor.http.cio.CIOMultipartDataBase for /api/posts
2025-11-02 18:29:28.026 [ktor-jetty-8000-3] TRACE a.s.k.r.h.operation.OperationHandler - operation started
2025-11-02 18:29:28.053 [ktor-jetty-8000-4] DEBUG a.s.k.r.a.c.ProfileCredentialsProvider - Loading credentials from profile `default`
2025-11-02 18:29:28.062 [ktor-jetty-8000-4] DEBUG a.s.k.r.a.c.ProfileCredentialsProvider - Resolving credentials from static credentials
Does anyone know why this is the case? Thanks in advanceHong Phuc
11/02/2025, 7:42 AMConcurrent read attempts mean? I'm trying to read a file in this function where this error happened.
2025-11-02 07:39:59.407 [eventLoopGroupProxy-4-3] ERROR Application - Unhandled exception caught for CoroutineName(call-handler)
Nov 02 07:39:59 backend-server java[675297]: io.ktor.utils.io.ConcurrentIOException: Concurrent read attempts
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.utils.io.ByteChannel.awaitContent(ByteChannel.kt:272)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.utils.io.ByteReadChannel$DefaultImpls.awaitContent$default(ByteReadChannel.kt:30)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.utils.io.ByteReadChannelOperationsKt.discard(ByteReadChannelOperations.kt:349)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.utils.io.ByteReadChannelOperationsKt.discard$default(ByteReadChannelOperations.kt:344)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invokeSuspend(DefaultEnginePipeline.kt:42)
Nov 02 07:39:59 backend-server java[675297]: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
Nov 02 07:39:59 backend-server java[675297]: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:99)
Nov 02 07:39:59 backend-server java[675297]: at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:65)
Nov 02 07:39:59 backend-server java[675297]: at kotlinx.coroutines.internal.DispatchedContinuation.resumeWith(DispatchedContinuation.kt:327)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:149)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:134)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:89)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:109)
Nov 02 07:39:59 backend-server java[675297]: at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:86)
Nov 02 07:39:59 backend-server java[675297]: atZyle Moore
11/02/2025, 10:41 PMval serializerModule = SerializersModule {
polymorphic(Person::class) {
subclass(SerializablePerson::class)
}
}suresh
11/04/2025, 12:37 AMJetty engine. Calling call.request.servletRequestAttributes from the call interceptor throws the following error. Any idea why it’s not set for the Jetty engine?Horatio Thomas
11/05/2025, 6:49 AMHoratio Thomas
11/05/2025, 9:11 AMsuresh
11/06/2025, 2:40 AMAlina Dolgikh [JB]
Ryan Woodcock
11/06/2025, 7:15 PMsuresh
11/07/2025, 12:14 AMArjan van Wieringen
11/07/2025, 6:56 AMfun Application.module(myService: MyService) {
subscribe(topic = "my-topic", autoOffsetReset = Latest) {
on<UserRegistered> { event ->
myService.userHasRegistered(event.user)
}
}
}
No need for HTTP (although I use it for liveness and readyness probe) but I use al the Ktor app featureschrisjenx
11/07/2025, 9:04 PMVivek Modi
11/08/2025, 7:47 AMHristijan
11/09/2025, 12:48 PMHoratio Thomas
11/11/2025, 9:05 AMAndrej Kovar
11/11/2025, 10:32 PMHoratio Thomas
11/12/2025, 7:16 AMHristijan
11/12/2025, 9:10 AMAlexander Zhirkevich
11/12/2025, 1:27 PMMax
11/13/2025, 8:12 PMMrPowerGamerBR
11/14/2025, 11:48 PMsuspend fun main() {
val http = HttpClient(Java) {
this.expectSuccess = false
this.followRedirects = false
install(SSE)
}
val sseSession = http.sseSession("<http://127.0.0.1:13004/sse>") {}
sseSession.cancel()
delay(100_000)
}
The SSE session does NOT close on the backend, this bug does not happen when using the CIO engine (will create a proper bug report later)toneerav
11/17/2025, 5:04 PMresponse.body (or bodyAsText()) consumes it so downstream code can’t receive it anymore.
• The usual auth callback flow only triggers on network/HTTP 401 — here the HTTP status is 200 so that doesn’t help. eg. refreshToken from auth provider
Usecase
• Server sometimes returns HTTP 200 but the JSON body contains a "code" field. If "code" == 401" I need to call the refresh-token API, update the auth token, then replay the original request with the new token. So even in HTTPStatus code 200 I need check response and validate about 401 case.
So how to intercept response, call the required api in between based on response and Replay the request. ?
can anyone please suggest better approach or any document or link ?Tak Wai Wang
11/20/2025, 11:19 AMNiclas Kron
11/20/2025, 1:46 PMJsonConvertException and not a ResponseException with the HttpResponse that I can parse into a different structure..Hristijan
11/20/2025, 3:27 PMLG
11/20/2025, 11:40 PM