[YANGTOOLS-1336] Improve SchemaInferenceStack diagnostics Created: 29/Sep/21  Updated: 06/Oct/21  Resolved: 29/Sep/21

Status: Resolved
Project: yangtools
Component/s: model-util
Affects Version/s: None
Fix Version/s: 8.0.0, 7.0.9

Type: Improvement Priority: Medium
Reporter: Robert Varga Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: pt
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
relates to NETCONF-822 Discover RPC operation through RESTCO... Resolved

 Description   

When we fail to lookup a data tree child, we provide very little context, as evidenced here:

Caused by: java.lang.IllegalArgumentException: Data tree child (urn:ietf:params:xml:ns:yang:ietf-restconf)operations not present
	at org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.lambda$pushData$5(SchemaInferenceStack.java:799) ~[?:?]
	at java.util.Optional.orElseThrow(Optional.java:408) ~[?:?]
	at org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.pushData(SchemaInferenceStack.java:798) ~[?:?]
	at org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.pushFirstData(SchemaInferenceStack.java:807) ~[?:?]
	at org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.pushData(SchemaInferenceStack.java:787) ~[?:?]
	at org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.enterDataTree(SchemaInferenceStack.java:473) ~[?:?]
	at org.opendaylight.yangtools.yang.data.util.NormalizedNodeStreamWriterStack.enterDataTree(NormalizedNodeStreamWriterStack.java:187) ~[?:?]
	at org.opendaylight.yangtools.yang.data.util.NormalizedNodeStreamWriterStack.startContainerNode(NormalizedNodeStreamWriterStack.java:259) ~[?:?]
	at org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter.startContainerNode(JSONNormalizedNodeStreamWriter.java:305) ~[?:?]
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:204) ~[?:?]
	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:102) ~[?:?]
	at org.opendaylight.netconf.sal.rest.impl.RestconfDelegatingNormalizedNodeWriter.write(RestconfDelegatingNormalizedNodeWriter.java:38) ~[?:?]
	at org.opendaylight.netconf.sal.rest.impl.RestconfDelegatingNormalizedNodeWriter.write(RestconfDelegatingNormalizedNodeWriter.java:19) ~[?:?]
	at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter.writeNormalizedNode(NormalizedNodeJsonBodyWriter.java:149) ~[?:?]
	at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter.writeTo(NormalizedNodeJsonBodyWriter.java:101) ~[?:?]
	at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter.writeTo(NormalizedNodeJsonBodyWriter.java:57) ~[?:?]

This makes it hard to discern where in the statement tree the failure occurred. In this particular case, the problem seems obvious, we are doing a 'pushFirstData', hence we are in the wrong initial context.

Improve error logging by including at least current statement, or perhaps a shorthand (like a new Inference.toString() method) to describe the state we are in.



 Comments   
Comment by Robert Varga [ 29/Sep/21 ]

The fix results in a descriptive parent name like this:

Data tree child (urn:ietf:params:xml:ns:yang:ietf-restconf)operations not present in module (urn:ietf:params:xml:ns:yang:ietf-restconf)ietf-restconf
Generated at Wed Feb 07 20:55:51 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.