-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Labels
RegressionSomething, which was working, does not anymoreSomething, which was working, does not anymorearea: LWM2MbugThe issue is a bug, or the PR is fixing a bugThe issue is a bug, or the PR is fixing a bugpriority: highHigh impact/importance bugHigh impact/importance bug
Description
Describe the bug
Reading /3 with leshan-server-demo using SenML CBOR generate a leshan parse error and decoding the received SenML show an issue with encording multi-instance resource:
I try to read /3 using leshan demo server on zephyr lwm2m client:
2025-11-07 15:21:22,263 ClientServlet [WARN] Invalid response
org.eclipse.leshan.core.request.exception.InvalidResponseException: Unable to decode response payload of request [ReadRequest [path=/3 format=SENML_CBOR(112)]] from client [native_sim]
at org.eclipse.leshan.transport.californium.server.request.LwM2mResponseBuilder.handleCodecException(LwM2mResponseBuilder.java:438)
at org.eclipse.leshan.transport.californium.server.request.LwM2mResponseBuilder.decodeCoapTimestampedResponse(LwM2mResponseBuilder.java:418)
at org.eclipse.leshan.transport.californium.server.request.LwM2mResponseBuilder.visit(LwM2mResponseBuilder.java:121)
at org.eclipse.leshan.core.request.ReadRequest.accept(ReadRequest.java:195)
at org.eclipse.leshan.transport.californium.server.endpoint.ServerCoapMessageTranslator.createLwM2mResponse(ServerCoapMessageTranslator.java:75)
at org.eclipse.leshan.transport.californium.server.endpoint.CaliforniumServerEndpoint$1.buildResponse(CaliforniumServerEndpoint.java:117)
at org.eclipse.leshan.transport.californium.SyncRequestObserver.waitForResponse(SyncRequestObserver.java:55)
at org.eclipse.leshan.transport.californium.server.endpoint.CaliforniumServerEndpoint.send(CaliforniumServerEndpoint.java:143)
at org.eclipse.leshan.server.request.DefaultDownlinkRequestSender.send(DefaultDownlinkRequestSender.java:96)
at org.eclipse.leshan.server.queue.QueueModeLwM2mRequestSender.send(QueueModeLwM2mRequestSender.java:60)
at org.eclipse.leshan.server.LeshanServer.send(LeshanServer.java:489)
at org.eclipse.leshan.server.LeshanServer.send(LeshanServer.java:462)
at org.eclipse.leshan.demo.server.servlet.queuemode.QueueHandler.send(QueueHandler.java:112)
at org.eclipse.leshan.demo.server.servlet.ClientServlet.sendRequestAndWriteResponse(ClientServlet.java:686)
at org.eclipse.leshan.demo.server.servlet.ClientServlet.lambda$sendReadRequest$0(ClientServlet.java:209)
at org.eclipse.leshan.demo.servers.json.servlet.LeshanDemoServlet.executeSafely(LeshanDemoServlet.java:40)
at org.eclipse.leshan.demo.server.servlet.ClientServlet.sendReadRequest(ClientServlet.java:199)
at org.eclipse.leshan.demo.server.servlet.ClientServlet.doGet(ClientServlet.java:194)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)
at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614)
at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547)
at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:824)
at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)
at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464)
at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)
at org.eclipse.jetty.server.Server.handle(Server.java:182)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:414)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.eclipse.leshan.core.node.codec.CodecException: Unable to decode node[path:/3] : 96a321652f332f302f00613003665a6570687972a2006131037142617365204c774d324d20436c69656e74a2006132036430303031a20061330363312e30a20063362f300201a10205a20063372f3002190ed8a102191388a20063382f3002187da102190384a200613902185fa200623130020fa2006431312f300200a200623133021826a2006231340360a2006231350360a200623136036155a200623137036a6e61746976655f73696da2006231380363312e30a2006231390360a2006232300201a200623231021819
at org.eclipse.leshan.core.node.codec.senml.LwM2mNodeSenMLDecoder.decodeTimestampedData(LwM2mNodeSenMLDecoder.java:221)
at org.eclipse.leshan.core.node.codec.DefaultLwM2mDecoder.decodeTimestampedData(DefaultLwM2mDecoder.java:202)
at org.eclipse.leshan.transport.californium.server.request.LwM2mResponseBuilder.decodeCoapTimestampedResponse(LwM2mResponseBuilder.java:409)
... 41 common frames omitted
Caused by: org.eclipse.leshan.senml.SenMLException: Unable to resolve record, invalid path
at org.eclipse.leshan.core.node.codec.senml.LwM2mSenMLResolver.createResolvedRecord(LwM2mSenMLResolver.java:49)
at org.eclipse.leshan.core.node.codec.senml.LwM2mSenMLResolver.createResolvedRecord(LwM2mSenMLResolver.java:30)
at org.eclipse.leshan.senml.SenMLResolver.resolve(SenMLResolver.java:64)
at org.eclipse.leshan.core.node.codec.senml.LwM2mNodeSenMLDecoder.groupRecordByTimestamp(LwM2mNodeSenMLDecoder.java:502)
at org.eclipse.leshan.core.node.codec.senml.LwM2mNodeSenMLDecoder.decodeTimestampedData(LwM2mNodeSenMLDecoder.java:206)
... 43 common frames omitted
Caused by: org.eclipse.leshan.core.node.InvalidLwM2mPathException: Unable to parse LWM2M path [/3/0/] : Unexpected charaters '/' after '/3/0'
at org.eclipse.leshan.core.node.PrefixedLwM2mPathParser$1.raiseException(PrefixedLwM2mPathParser.java:45)
at org.eclipse.leshan.core.parser.StringParser.raiseException(StringParser.java:426)
at org.eclipse.leshan.core.parser.StringParser.raiseException(StringParser.java:416)
at org.eclipse.leshan.core.node.PrefixedLwM2mPathParser.parsePrefixedPath(PrefixedLwM2mPathParser.java:52)
at org.eclipse.leshan.core.node.codec.senml.LwM2mSenMLResolver.createResolvedRecord(LwM2mSenMLResolver.java:46)
... 47 common frames omitted
decoded SenML+CBOR:
[
{-2: "/3/0/", 0: "0", 3: "Zephyr"},
{0: "1", 3: "Base LwM2M Client"},
{0: "2", 3: "0001"},
{0: "3", 3: "1.0"},
{0: "6/0", 2: 1},
{2: 5},
{0: "7/0", 2: 3800},
{2: 5000},
{0: "8/0", 2: 125},
{2: 900},
{0: "9", 2: 95},
{0: "10", 2: 15},
{0: "11/0", 2: 0},
{0: "13", 2: 38},
{0: "14", 3: ""},
{0: "15", 3: ""},
{0: "16", 3: "U"},
{0: "17", 3: "native_sim"},
{0: "18", 3: "1.0"},
{0: "19", 3: ""},
{0: "20", 2: 1},
{0: "21", 2: 25}
]
but it works on other objects (like /5 with no multi-instance resource):
parsed response:
86a321652f352f302f0061310360a20061330200a20061350200a20061360360a20061370360a20061390202
[
{-2: "/5/0/", 0: "1", 3: ""},
{0: "3", 2: 0},
{0: "5", 2: 0},
{0: "6", 3: ""},
{0: "7", 3: ""},
{0: "9", 2: 2}]
Was working a few week ago, I suspect it's a regression introduced here: #98328 (to be confirmed)
Regression
- This is a regression.
Steps to reproduce
Build the LWM2M sample using native_sim and enabled 1.1 and senml cbor in KConfig
Relevant log output
Impact
Major – Severely degrades functionality; workaround is difficult or unavailable.
Environment
No response
Additional Context
No response
Metadata
Metadata
Assignees
Labels
RegressionSomething, which was working, does not anymoreSomething, which was working, does not anymorearea: LWM2MbugThe issue is a bug, or the PR is fixing a bugThe issue is a bug, or the PR is fixing a bugpriority: highHigh impact/importance bugHigh impact/importance bug