Details
-
Bug
-
Status: Resolved
-
Resolution: Cannot Reproduce
-
None
-
None
-
None
-
Operating System: All
Platform: All
-
7067
-
Normal
Description
Before doing any NETCONF change seems like the current implementation of "BrokerFacade.checkItemDoesNotExists()" is always called to verify, if the corresponding object does or does not exist.
Seems like in the current implementation, OpenDaylight expect the router to return an empty <data/> element. For example:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="m-83" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data/>
</rpc-reply>
Some vendors do not return this empty <data/> node, but will return with <rpc-error/>.
According to the IETF RFC 6241 it is NOT defined, what should be returned when xpath/subtree filtering does no find any matching element. Therefore we must assume, that all of these approaches are okay: sending empty <data/> node or returning <rpc-error>.
The current implementation is quite bad, as in ODL Boron this is causing a timeout because OpenDaylight is not evaluating the <rpc-error> properly and matching it back to the original request (using message-id). So it basically waits for the configured rpc timeout. After this, the method runs into a NullPointerException.
Beside of fixing the behavior in ODL, it might be considered to approach IETF with this limitation, and to ask that the next updated version of RFC6241 is more specific on how to check if or not an object exists. Surely the more preferred variant would be, to have a new dedicated rpc like "check_config_exists" for this.