-
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 anymoreRelease BlockerUse this label for justified release blockersUse this label for justified release blockersarea: 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 anymoreRelease BlockerUse this label for justified release blockersUse this label for justified release blockersarea: 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