vexdev / amarr

aMule Torrent connector for Servarr
MIT License
26 stars 0 forks source link

Crash in amarr #9

Closed vexdev closed 9 months ago

vexdev commented 10 months ago

Happened randomly, not sure what caused it, restarting amarr solved the issue:

amarr  | jamule.exception.CommunicationException: Unable to get download queue
amarr  |    at jamule.AmuleClient.getDownloadQueue-d1pmJ48(AmuleClient.kt:152)
amarr  |    at amarr.torrent.TorrentService.getTorrentInfo(TorrentService.kt:22)
amarr  |    at amarr.torrent.TorrentApiKt$torrentApi$1$7.invokeSuspend(TorrentApi.kt:58)
amarr  |    at amarr.torrent.TorrentApiKt$torrentApi$1$7.invoke(TorrentApi.kt)
amarr  |    at amarr.torrent.TorrentApiKt$torrentApi$1$7.invoke(TorrentApi.kt)
amarr  |    at io.ktor.server.routing.Route$buildPipeline$1$1.invokeSuspend(Route.kt:116)
amarr  |    at io.ktor.server.routing.Route$buildPipeline$1$1.invoke(Route.kt)
amarr  |    at io.ktor.server.routing.Route$buildPipeline$1$1.invoke(Route.kt)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:120)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:78)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:98)
amarr  |    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:77)
amarr  |    at io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invokeSuspend(Pipeline.kt:478)
amarr  |    at io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.util.debug.ContextUtilsKt.initContextInDebugMode(ContextUtils.kt:17)
amarr  |    at io.ktor.server.routing.Routing.executeResult(Routing.kt:190)
amarr  |    at io.ktor.server.routing.Routing.interceptor(Routing.kt:64)
amarr  |    at io.ktor.server.routing.Routing$Plugin$install$1.invokeSuspend(Routing.kt:140)
amarr  |    at io.ktor.server.routing.Routing$Plugin$install$1.invoke(Routing.kt)
amarr  |    at io.ktor.server.routing.Routing$Plugin$install$1.invoke(Routing.kt)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:120)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:78)
amarr  |    at io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invokeSuspend(BaseApplicationEngine.kt:124)
amarr  |    at io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invoke(BaseApplicationEngine.kt)
amarr  |    at io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invoke(BaseApplicationEngine.kt)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:120)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:78)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:98)
amarr  |    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:77)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invokeSuspend(Pipeline.kt:478)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.util.debug.ContextUtilsKt.initContextInDebugMode(ContextUtils.kt:17)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invokeSuspend(DefaultEnginePipeline.kt:123)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invoke(DefaultEnginePipeline.kt)
amarr  |    at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invoke(DefaultEnginePipeline.kt)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:120)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:78)
amarr  |    at io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:98)
amarr  |    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:77)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invokeSuspend(Pipeline.kt:478)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt)
amarr  |    at io.ktor.util.debug.ContextUtilsKt.initContextInDebugMode(ContextUtils.kt:17)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invokeSuspend(NettyApplicationCallHandler.kt:119)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt)
amarr  |    at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:44)
amarr  |    at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
amarr  |    at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
amarr  |    at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
amarr  |    at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler.handleRequest(NettyApplicationCallHandler.kt:37)
amarr  |    at io.ktor.server.netty.NettyApplicationCallHandler.channelRead(NettyApplicationCallHandler.kt:29)
amarr  |    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
amarr  |    at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61)
amarr  |    at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:425)
amarr  |    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
amarr  |    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
amarr  |    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
amarr  |    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
amarr  |    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
amarr  |    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
amarr  |    at io.ktor.server.netty.EventLoopGroupProxy$Companion.create$lambda$1$lambda$0(NettyApplicationEngine.kt:296)
amarr  |    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
amarr  |    at java.base/java.lang.Thread.run(Thread.java:833)
vexdev commented 10 months ago

TCP Dump seems to be parsed correctly from jAmule, increasing logs to see what is the actual response parsed.

vexdev commented 10 months ago

Added logging, waiting to reproduce.

vexdev commented 10 months ago

Seems like a concurrency issue, specifically because the EC protocol is purely synchronous, and we are are allowing asynchronous communication through jAmule. Will adjust...