Re: [netmod] Adding a pre-existing leaf into a new 'choice' - NBC change?

Andy Bierman <andy@yumaworks.com> Thu, 22 November 2018 16:10 UTC

Return-Path: <andy@yumaworks.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 46648126C7E for <netmod@ietfa.amsl.com>; Thu, 22 Nov 2018 08:10:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.358
X-Spam-Level:
X-Spam-Status: No, score=-3.358 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-1.459, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=yumaworks-com.20150623.gappssmtp.com
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 2GoBJ6RxI0Lc for <netmod@ietfa.amsl.com>; Thu, 22 Nov 2018 08:10:52 -0800 (PST)
Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 224F8124BF6 for <netmod@ietf.org>; Thu, 22 Nov 2018 08:10:52 -0800 (PST)
Received: by mail-lj1-x236.google.com with SMTP id s5-v6so8393617ljd.12 for <netmod@ietf.org>; Thu, 22 Nov 2018 08:10:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=gp5BNDL9Xr2XXMxWjnv8ZouKZQPh/iogRnOMDtQ7tRc=; b=vt50M5GrtdPMO83yEfXI3+nlAz+Lta60USmBkd+PXLujDox/B//ZnJr5rxVB3ygQC4 ngRCvp4KhvkqRI6APvHHZ/gp0V6AckcUF27Yeu5xkhetir/CQL1ggCwKeS/fh0ts+SWj gYcHZJncog7Fp88I/XyIGw8xUFgX7A6L24mzGN7tY1Ur2YnU+Teuk4n6KeH66voeEiwO F2QxlPKhtgMMw+9fU8gl+Twj0D4a/PkPhzwYImnHfSHfbvfh9Op+5aYxRBF1YEZMft5y yW+mkO7nL9dzME5AuCkK5meSInWsz4wpJizAnAd5BitWed30k8mCFR9EjK8zfwAOzM4Y EQyA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=gp5BNDL9Xr2XXMxWjnv8ZouKZQPh/iogRnOMDtQ7tRc=; b=pvx5B41pRmbN4+Mb1R1HY6TnLw8MYuQ2TbBtGCi5HI3tdCeijo95K15Go7QaqU+lEV gtqzD9sAAlme3SApHmXwKIe/hE12STCQ1yzP7mYLZr8E1zZSuk8qtmp01dJNcsUhS6UE NOVqptG3MvYGEqD2xFLhHIB1B48R1NdjWm7oCG8BqM/xiT4iB8kljpO7kYqq3VDfLSGd zeXbawGzoylTvswx15ZEdglFnTD+9MNnRQDZxRWRQIwzkYZTKraLP6RtDCzXhxIE9eB9 s3Zc+d22BMkk2Ptiz/80GgtTykxqfBT2Lh6sQ7NHdXHFRpNzfNli0j5efKbU9YHw1U+e 46Cw==
X-Gm-Message-State: AA+aEWYPxoDuUOv5p5hy0rXAzgjMbAItmh8LjX5TYH1qFT7eyfdisJlb whIj4C9x/fJNgM0oC/8RMYi12NkJMjuAKosRiXsWgg==
X-Google-Smtp-Source: AFSGD/W89hTuEtMSGMaTnmE0N8QFuAnpgm+FS/PscH3axGWX8vE9dpCtx+Zj3ZVB0vOTZtFhdnz8mpbYse6XtGl3vtc=
X-Received: by 2002:a2e:e02:: with SMTP id 2-v6mr6423330ljo.10.1542903050022; Thu, 22 Nov 2018 08:10:50 -0800 (PST)
MIME-Version: 1.0
References: <CABCOCHS18StYKGC4f7cPWFraKNHRsC9cWfrmfZ0j773awdicvQ@mail.gmail.com> <20181122.150027.823800945772964674.mbj@tail-f.com> <adedb81ce97abf16bafa47118349287954d4d410.camel@nic.cz> <20181122.161438.975515366125603770.mbj@tail-f.com> <b9cee54baea59539fe6e4005345049cac8fd6f3a.camel@nic.cz>
In-Reply-To: <b9cee54baea59539fe6e4005345049cac8fd6f3a.camel@nic.cz>
From: Andy Bierman <andy@yumaworks.com>
Date: Thu, 22 Nov 2018 08:10:38 -0800
Message-ID: <CABCOCHRPpPFZ6tb0GgVP=T8kaKeffxAqGX3wvCPHBLZ+vXV2HA@mail.gmail.com>
To: Ladislav Lhotka <lhotka@nic.cz>
Cc: Martin Bjorklund <mbj@tail-f.com>, "Sterne, Jason (Nokia - CA)" <jason.sterne@nokia.com>, NetMod WG <netmod@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000038473b057b431cdf"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/YYAYxSO348i-gJdaHL7Gkf0_Fho>
Subject: Re: [netmod] Adding a pre-existing leaf into a new 'choice' - NBC change?
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: Thu, 22 Nov 2018 16:10:55 -0000

On Thu, Nov 22, 2018 at 7:28 AM Ladislav Lhotka <lhotka@nic.cz> wrote:

> On Thu, 2018-11-22 at 16:14 +0100, Martin Bjorklund wrote:
> > Ladislav Lhotka <lhotka@nic.cz> wrote:
> > > On Thu, 2018-11-22 at 15:00 +0100, Martin Bjorklund wrote:
> > > > Andy Bierman <andy@yumaworks.com> wrote:
> > > > > On Thu, Nov 22, 2018 at 5:39 AM Martin Bjorklund <mbj@tail-f.com>
> wrote:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > Ladislav Lhotka <lhotka@nic.cz> wrote:
> > > > > > > Andy Bierman <andy@yumaworks.com> writes:
> > > > > > >
> > > > > > > > On Mon, Nov 19, 2018 at 12:32 PM Sterne, Jason (Nokia -
> CA/Ottawa)
> > <
> > > > > > > > jason.sterne@nokia.com> wrote:
> > > > > > > >
> > > > > > > >> Hi all,
> > > > > > > >>
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> If we have a YANG model with a leaf:
> > > > > > > >>
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> MODEL VERSION 1:
> > > > > > > >>
> > > > > > > >> container my-model {
> > > > > > > >>
> > > > > > > >>     leaf a { type string; }
> > > > > > > >>
> > > > > > > >> }
> > > > > > > >>
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> And then later we produce another version of the model
> where that
> > > > > > leaf is
> > > > > > > >> placed into a choice construct:
> > > > > > > >>
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> MODEL VERSION 2:
> > > > > > > >>
> > > > > > > >> container my-model {
> > > > > > > >>
> > > > > > > >>     choice some-choice {
> > > > > > > >>
> > > > > > > >>         case x {
> > > > > > > >>
> > > > > > > >>             leaf a { type string; }
> > > > > > > >>
> > > > > > > >>         }
> > > > > > > >>
> > > > > > > >>     }
> > > > > > > >>
> > > > > > > >> }
> > > > > > > >>
> > > > > > > >>
> > > > > > > >>
> > > > > > > >> Is that considered a non-backwards-compatible change?
> > > > > > > >>
> > > > > > > >
> > > > > > > >
> > > > > > > > yes -- even though the data node /my-model/x did not change,
> > > > > > > > the schema node /my-model/a changed to
> /my-model/some-choice/x/a.
> > > > > > > > Any leafref path pointing at this leaf will break.
> > > > > > >
> > > > > > > This is not correct. A leafref path is a special XPath, and as
> such
> > > > > > > includes only data nodes, i.e. NOT choice and case nodes.
> > > > > > >
> > > > > > > What does change are schema node identifier. This could be
> > significant
> > > > > > > in an augment statement, but not ini this example because a
> leaf
> > cannot
> > > > > > > be augmented anyway.
> > > > > > >
> > > > > > > I don't see anything else that could break, so Jason's change
> seems
> > > > > > > backward compatible to me.
> > > > > >
> > > > > > Since it does change the schema tree, this is not legal
> according to
> > > > > > 7950.  So in that sense it is not backwards compatible.  The
> rules in
> > > > > > 7950 protect both clients and other modules that import the
> module.
> > > > > >
> > > > > >
> > > > > This text is confusing wrt/ schema tree vs data tree:
> > > > >
> > > > >
> > > > > 9.9 <https://tools.ietf.org/html/rfc7950#section-9.9>;;.  The
> leafref
> > > > > Built-In Type
> > > > >
> > > > >    The leafref built-in type is restricted to the value space of
> some
> > > > >    leaf or leaf-list node in the schema tree and optionally further
> > > > >    restricted by corresponding instance nodes in the data tree.
> The
> > > > >    "path" substatement (Section 9.9.2
> > > > > <https://tools.ietf.org/html/rfc7950#section-9.9.2>;;) is used to
> > > > > identify the referred
> > > > >    leaf or leaf-list node in the schema tree.  The value space of
> the
> > > > >    referring node is the value space of the referred node.
> > > >
> > > > Yes, it should be "data tree" in both occurrences.
> > >
> > > I tend to disagree. The values of a leafref are first restricted
> according
> > to
> > > the *schema*, i.e. even before any leaf instance exists in the data
> tree
> > that
> > > the leafref can point to. Consider this example:
> > >
> > > list map {
> > >   key name;
> > >   leaf name {
> > >     type string;
> > >   }
> > >   leaf value {
> > >     type uint8;
> > >   }
> > > }
> > > leaf link {
> > >   type leafref {
> > >     path "../map[name='quux']/value";
> > >     default "foo";
> > >   }
> > > }
> > >
> > > We had a long discussion about this, maybe I could find it, and the
> > conclusion
> > > was that a YANG parser should flag the default "foo" value as
> incorrect even
> > > before any instance data are in sight.
> >
> > Yes, this is correct.  The quoted text needs to be rewritten to make
> > this more clear.  Altough the path refers to a (potential) node in the
> > data tree, that node obviously has a node in the schema tree, and its
> > value space restricts the value space of the leafref node.
> >
> > > I wasn't exactly happy with this conclusion because it assumes that we
> can
> > use
> > > the XPath from the argument of "path" to locate the *schema node* and
> check
> > its
> > > type. Although it looks appealing (everybody sees what the type of
> "value"
> > is,
> > > right?), I think this is just another unfortunate example of mixing up
> the
> > > schema and data instances.
> > >
> > > Let me ask: can we expect a newcomer to understand what's going on if
> even
> > > seasoned YANG doctors get confused?
> >
> > Yes.
> >
> > I've been told that people don't read documentation or specifications
> > and just look at examples.
>
> The problem with examples is that they have to stay at a trivial level
> where
> everything looks obvious and nobody has to care about subtle details such
> as the
> difference between XPath and schema node identifiers. Those who had to
> implement
> the above logic for a general case will confirm that it is pretty tricky.
>
>
I seemed to have known path-stmt was the data tree when I wrote my code ;-)
Our compiler (and pyang) complains if the choice and case nodes are given.

Because of the rule that choice and case names cannot clash with the first
real children
the schema tree expression will always identify the same node as the data
tree
(so including choice and case names is more verbose but otherwise correct)


Lada
>

Andy


>
> >
> >
> >
> > /martin
> --
> Ladislav Lhotka
> Head, CZ.NIC Labs
> PGP Key ID: 0xB8F92B08A9F76C67
>
>