You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When running a Leshan demo a server with a RegistrationListener from Wiki and using Leshan Client (or another LwM2M client) with CoAP+TCP server address, the server timeouts and throws the error from the "relevant output" section.
It works fine when using plain CoAP provider (just coap:// scheme)
Run the Leshan server: java -jar ./leshan-demo-server/target/leshan-demo-server-*-SNAPSHOT-jar-with-dependencies.jar -vvv
Run the Leshan client with CoAP+TCP scheme (in a separate terminal session): java -jar leshan-demo-client/target/leshan-demo-client-*-SNAPSHOT-jar-with-dependencies.jar -u coap+tcp://localhost:5683 -n tcp-device-1
Wait for some time, the server will not get a response from client
After around 2-3 minutes, the server terminal will show the error from "relevant output"
Relevant Output
2024-11-19 15:32:51,172 LeshanServerDemo [ERROR] Unexpected error while reading device time
java.lang.NullPointerException: Cannot invoke "org.eclipse.leshan.core.response.ReadResponse.isSuccess()" because "response" is null
at org.eclipse.leshan.demo.server.LeshanServerDemo$1.registered(LeshanServerDemo.java:150)
at org.eclipse.leshan.server.registration.RegistrationServiceImpl.fireRegistered(RegistrationServiceImpl.java:74)
at org.eclipse.leshan.server.registration.RegistrationHandler$1.run(RegistrationHandler.java:126)
at org.eclipse.leshan.core.response.SendableResponse.sent(SendableResponse.java:47)
at org.eclipse.leshan.transport.javacoap.server.resource.RegistrationResource.handleRegister(RegistrationResource.java:171)
at org.eclipse.leshan.transport.javacoap.server.resource.RegistrationResource.handlePOST(RegistrationResource.java:89)
at org.eclipse.leshan.transport.javacoap.resource.LwM2mCoapResource.handleRequest(LwM2mCoapResource.java:78)
at org.eclipse.leshan.transport.javacoap.resource.LwM2mCoapResource.apply(LwM2mCoapResource.java:63)
at org.eclipse.leshan.transport.javacoap.resource.LwM2mCoapResource.apply(LwM2mCoapResource.java:42)
at com.mbed.coap.server.RouterService.apply(RouterService.java:68)
at com.mbed.coap.server.RouterService.apply(RouterService.java:33)
at com.mbed.coap.utils.Filter$1.apply(Filter.java:69)
at com.mbed.coap.utils.Filter.lambda$null$0(Filter.java:33)
at com.mbed.coap.server.block.BlockWiseIncomingFilter.apply(BlockWiseIncomingFilter.java:55)
at com.mbed.coap.server.block.BlockWiseIncomingFilter.apply(BlockWiseIncomingFilter.java:38)
at com.mbed.coap.utils.Filter.lambda$null$0(Filter.java:33)
at com.mbed.coap.server.CriticalOptionVerifier.apply(CriticalOptionVerifier.java:34)
at com.mbed.coap.server.CriticalOptionVerifier.apply(CriticalOptionVerifier.java:27)
at com.mbed.coap.utils.Filter.lambda$null$0(Filter.java:33)
at com.mbed.coap.server.RescueFilter.apply(RescueFilter.java:35)
at com.mbed.coap.server.RescueFilter.apply(RescueFilter.java:29)
at com.mbed.coap.utils.Filter.lambda$andThen$1(Filter.java:34)
at com.mbed.coap.utils.Filter.lambda$andThen$1(Filter.java:34)
at com.mbed.coap.utils.Filter.lambda$andThen$1(Filter.java:34)
at com.mbed.coap.utils.Filter.lambda$then$3(Filter.java:53)
at com.mbed.coap.server.messaging.CoapTcpDispatcher.handle(CoapTcpDispatcher.java:73)
at com.mbed.coap.server.CoapServer.handle(CoapServer.java:76)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
at org.eclipse.leshan.transport.javacoap.server.coaptcp.transport.NettyCoapTcpTransport$DispatchHandler.channelRead(NettyCoapTcpTransport.java:167)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:289)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:840)
The text was updated successfully, but these errors were encountered:
Glad to see that you are testing coap+tcp experimental feature.
I will try to look at this but maybe not today 😬
Some remarks waiting I take time to look at this deeper :
"org.eclipse.leshan.core.response.ReadResponse.isSuccess()" because "response" is null
a null response with synchronous send API means that the request timeout.
Why it times-out ? I don't know for now.
ReadResponse response = lwm2mServer.send(registration, new ReadRequest(3, 0, 13));
I see you are using synchronous send API in registered event.
This is not advised, see javadoc :
/** * Listen for client registration events. * <p> * Those methods are called by the protocol stage thread pool, this means that execution MUST be done in a short delay, * if you need to do long time processing use a dedicated thread pool. */
Thank you! I will try that sometime later. Instead of doing CoAP over TCP, for now I've decided to try if WebSocket proxy would work, as defined in Section 4 of RFC 8323.
Version(s)
2.0.0-M16
Which components
leshan-lwm2m-server
Tested With
Leshan Client Demo, Anjay Demo
What happened
When running a Leshan demo a server with a RegistrationListener from Wiki and using Leshan Client (or another LwM2M client) with CoAP+TCP server address, the server timeouts and throws the error from the "relevant output" section.
It works fine when using plain CoAP provider (just
coap://
scheme)How to reproduce
mvn clean install
java -jar ./leshan-demo-server/target/leshan-demo-server-*-SNAPSHOT-jar-with-dependencies.jar -vvv
java -jar leshan-demo-client/target/leshan-demo-client-*-SNAPSHOT-jar-with-dependencies.jar -u coap+tcp://localhost:5683 -n tcp-device-1
Relevant Output
The text was updated successfully, but these errors were encountered: