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

Ladislav Lhotka <lhotka@nic.cz> Thu, 22 November 2018 15:28 UTC

Return-Path: <lhotka@nic.cz>
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 DACCD129533 for <netmod@ietfa.amsl.com>; Thu, 22 Nov 2018 07:28:05 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.999
X-Spam-Level:
X-Spam-Status: No, score=-6.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_HI=-5, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nic.cz
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 232mKguQBTa0 for <netmod@ietfa.amsl.com>; Thu, 22 Nov 2018 07:28:04 -0800 (PST)
Received: from mail.nic.cz (mail.nic.cz [217.31.204.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AEAA31292AD for <netmod@ietf.org>; Thu, 22 Nov 2018 07:28:03 -0800 (PST)
Received: from birdie (unknown [IPv6:2001:718:1a02:1::380]) by mail.nic.cz (Postfix) with ESMTPSA id 1CB9564311; Thu, 22 Nov 2018 16:28:02 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1542900482; bh=JflCC8+YdCqMxEV01U6vEcnqDGD+OSVU9QiGnEzqhCk=; h=From:To:Date; b=Kjmz0V4vTSDwawXtcJB4KppgPUStgqNRHJyPWeMbxrcEpWo+Q2Qxac0MUF1Wf3Hev JapY9jYRMao5egaxVwXiqOIP+Wp4fkqeZ5sSifxPYHIGudeu6EIK6F0o2EA0i9f7ta X/7TlFcY2kgyT47wOljfR/dlglp0A6NNcNZOQnWw=
Message-ID: <b9cee54baea59539fe6e4005345049cac8fd6f3a.camel@nic.cz>
From: Ladislav Lhotka <lhotka@nic.cz>
To: Martin Bjorklund <mbj@tail-f.com>
Cc: andy@yumaworks.com, jason.sterne@nokia.com, netmod@ietf.org
Date: Thu, 22 Nov 2018 16:28:01 +0100
In-Reply-To: <20181122.161438.975515366125603770.mbj@tail-f.com>
References: <CABCOCHS18StYKGC4f7cPWFraKNHRsC9cWfrmfZ0j773awdicvQ@mail.gmail.com> <20181122.150027.823800945772964674.mbj@tail-f.com> <adedb81ce97abf16bafa47118349287954d4d410.camel@nic.cz> <20181122.161438.975515366125603770.mbj@tail-f.com>
Organization: CZ.NIC
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.30.2
Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: clamav-milter 0.99.2 at mail
X-Virus-Status: Clean
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/0NA0kQBwdkEfbYzykEE2eX7X5RE>
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 15:28:06 -0000

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.

Lada

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