Re: [netmod] RFC8526 and 'derived-from-or-self(datastore, "ds:operational")'
Martin Bjorklund <mbj@tail-f.com> Tue, 13 August 2019 09:47 UTC
Return-Path: <mbj@tail-f.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 802B512008F for <netmod@ietfa.amsl.com>; Tue, 13 Aug 2019 02:47:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Hb7WgnEtes_y for <netmod@ietfa.amsl.com>; Tue, 13 Aug 2019 02:47:32 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 86F7F1200F1 for <netmod@ietf.org>; Tue, 13 Aug 2019 02:47:32 -0700 (PDT)
Received: from localhost (h-46-233.A165.priv.bahnhof.se [46.59.46.233]) by mail.tail-f.com (Postfix) with ESMTPSA id C27DE1AE0983; Tue, 13 Aug 2019 11:47:29 +0200 (CEST)
Date: Tue, 13 Aug 2019 11:47:28 +0200
Message-Id: <20190813.114728.2262411490998285952.mbj@tail-f.com>
To: jernej.tuljak@mg-soft.si
Cc: netmod@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <8e19f280-5b63-c2d4-003b-e5e5370e9ea1@mg-soft.si>
References: <8e19f280-5b63-c2d4-003b-e5e5370e9ea1@mg-soft.si>
X-Mailer: Mew version 6.7 on Emacs 25.2 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/55MglgTICObxD_e089woAtlcSXA>
Subject: Re: [netmod] RFC8526 and 'derived-from-or-self(datastore, "ds:operational")'
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 13 Aug 2019 09:47:35 -0000
Hi, Jernej Tuljak <jernej.tuljak@mg-soft.si> wrote: > Hi, > > I'm trying to determine who is at fault, our YANG validator > implementation or the module ietf-netconf-nmda in RFC8526 . > > There is a "when" expression at line 193 within this module > > when 'derived-from-or-self(datastore, "ds:operational") '; > > which is under this pseudo-branch within the module: / get-data > ("rpc") / input ("input") / origin-filters ("choice"). > > Our implementation claims that the initial context node of the > expression does not contain a "datastore" child, resulting in a > warning for this expression, which seemed like an obvious bug at > first, but does not anymore. > > The accessible tree for this expression is built using the following > bullet in Section 6.4.1: > > o If the XPath expression is defined in a substatement to an "input" > statement in an "rpc" or "action" statement, the accessible tree > is the RPC or action operation instance, all state data in the > server, and the running configuration datastore. The root node > has top-level data nodes in all modules as children. > Additionally, for an RPC, the root node also has the node > representing the RPC operation being defined as a child. The node > representing the operation being defined has the operation's input > parameters as children. > > > "origin-filters" for which the "when" expression is defined is clearly > a substatement to an "input" statement in an "rpc" statement. Pseudo- > accessible tree below (matches what our implementation does). > > <root> > +- get-data > +- datastore > +- // other data node siblings of datastore > +- // top-level data nodes of all modules > > The initial context node is determined by using the following bullet > in Section 7.21.5: > > o If the "when" statement is a child of a "uses", "choice", or > "case" statement, then the context node is the closest ancestor > node to the node with the "when" statement that is also a data > node. If no such node exists, the context node is the root node. > The accessible tree is tentatively altered during the processing > of the XPath expression by removing all instances (if any) of the > nodes added by the "uses", "choice", or "case" statement. > > > The "when" statement in question is clearly a child of a "choice" > statement without a data node ancestor. Neither "input" nor "rpc" > represent data nodes, as per Terminology section: > > o data node: A node in the schema tree that can be instantiated in a > data tree. One of container, leaf, leaf-list, list, anydata, and > anyxml. > > > To our implementation this means that the initial context node is the > root node of the accessible tree, not the node that represents the > "rpc". Therefore the expression is attempting to refer to a node that > is undefined. It is expecting > > when 'derived-from-or-self(get-data/datastore, "ds:operational") '; > > or something along those lines instead. > > Either way, something doesn't add up between RFC7950 and RFC8526. > > There is a suspicious verified RFC7950 errata > (https://www.rfc-editor.org/errata/eid4794) dealing with initial > context nodes under augments, but there's nothing for the UCC ("uses", > "choice", "case") corner case. Perhaps there should be? Should Section > 7.21.5 say > > NEW: > > o If the "when" statement is a child of a "uses", "choice", or > "case" statement, then the context node is the closest ancestor > node to the node with the "when" statement that is also a data > node, rpc, action or notification. If no such node exists, the > context node is the root node. The accessible tree is tentatively > altered during the processing of the XPath expression by removing > all instances (if any) of the nodes added by the "uses", > "choice", or "case" statement. > > OLD: > > o If the "when" statement is a child of a "uses", "choice", or > "case" statement, then the context node is the closest ancestor > node to the node with the "when" statement that is also a data > node. If no such node exists, the context node is the root node. > The accessible tree is tentatively altered during the processing > of the XPath expression by removing all instances (if any) of the > nodes added by the "uses", "choice", or "case" statement. > > ? I think this matches the intent. As you note above, since the accessible tree is: <root> +- get-data +- datastore +- // other data node siblings of datastore +- // top-level data nodes of all modules the context node for the "when" statement in the "choice" is supposed to be "get-data". This also makes it consistent with augment: augment /get-data/input { choice origin-filters { when 'derived-from-or-self(datastore, "ds:operational")'; ... } } /martin
- [netmod] RFC8526 and 'derived-from-or-self(datast… Jernej Tuljak
- Re: [netmod] RFC8526 and 'derived-from-or-self(da… Martin Bjorklund
- Re: [netmod] RFC8526 and 'derived-from-or-self(da… Ladislav Lhotka