Re: [netmod] Does the YANG "status" statement inherit from its parent node?

Robert Wilton <rwilton@cisco.com> Thu, 22 December 2016 11:24 UTC

Return-Path: <rwilton@cisco.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 DA2BF1294D8 for <netmod@ietfa.amsl.com>; Thu, 22 Dec 2016 03:24:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.622
X-Spam-Level:
X-Spam-Status: No, score=-17.622 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, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-3.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.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 PXUlZE3SzK-3 for <netmod@ietfa.amsl.com>; Thu, 22 Dec 2016 03:24:34 -0800 (PST)
Received: from aer-iport-1.cisco.com (aer-iport-1.cisco.com [173.38.203.51]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7876D129412 for <netmod@ietf.org>; Thu, 22 Dec 2016 03:24:33 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=6125; q=dns/txt; s=iport; t=1482405873; x=1483615473; h=subject:to:references:cc:from:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=2x4+VydjDStCTS/bgpDPT7qi334qCU45uYRy505CLTI=; b=f6NQDtkMXt9dlKBeHcvIgNOCkDorAYCIWKpNc5qRZPmXpf67aByFc8iI gPpfhUj7SqlMXbHnmoHL+70Vp2IgU8sGeanLQHuZ+f2IDUW1XKPZSafLT SeKCZlGxdOfaiksX++gyEL9Jk4AxQDNaoSi4n0JCP7uB7n43u5Heq0yxm A=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0CVAgDOtltY/xbLJq1eGQEBAQEBAQEBAQEBBwEBAQEBgzUBAQEBAYEqWY5DlV6TBoQYgmyDNgKCKhEBAgEBAQEBAQFiKIRoAQEBAwE4QRALDgIIJwdGEQYNBgIBAYhhCKtOiwMBAQEBAQEBAQEBAQEBAQEBAQEghkiCAoJhhBMihXcFmnmROoojhi+KQINmhA81IYEHFg2GDz40hjuCLgEBAQ
X-IronPort-AV: E=Sophos;i="5.33,388,1477958400"; d="scan'208";a="690653855"
Received: from aer-iport-nat.cisco.com (HELO aer-core-1.cisco.com) ([173.38.203.22]) by aer-iport-1.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Dec 2016 11:24:31 +0000
Received: from [10.63.23.74] (dhcp-ensft1-uk-vla370-10-63-23-74.cisco.com [10.63.23.74]) by aer-core-1.cisco.com (8.14.5/8.14.5) with ESMTP id uBMBOVxX021348; Thu, 22 Dec 2016 11:24:31 GMT
To: Martin Bjorklund <mbj@tail-f.com>
References: <8ac64b13-469c-31fe-9d2b-ad0487204d69@cisco.com> <20161222.112242.1766522035191268644.mbj@tail-f.com> <8d2df0d5-b662-23a6-8339-1acf5086ae62@cisco.com> <20161222.114940.1495001277375813904.mbj@tail-f.com>
From: Robert Wilton <rwilton@cisco.com>
Message-ID: <5ab58f5f-25d4-5cf9-f46c-c144da8e5597@cisco.com>
Date: Thu, 22 Dec 2016 11:24:31 +0000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0
MIME-Version: 1.0
In-Reply-To: <20161222.114940.1495001277375813904.mbj@tail-f.com>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/Bw1PzwzmyD40fdkU3a45SmROPFs>
Cc: netmod@ietf.org
Subject: Re: [netmod] Does the YANG "status" statement inherit from its parent node?
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.17
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 Dec 2016 11:24:40 -0000


On 22/12/2016 10:49, Martin Bjorklund wrote:
> Robert Wilton <rwilton@cisco.com> wrote:
>>
>> On 22/12/2016 10:22, Martin Bjorklund wrote:
>>> Robert Wilton <rwilton@cisco.com> wrote:
>>>> On 22/12/2016 10:00, Andy Bierman wrote:
>>>>> On Wed, Dec 21, 2016 at 11:49 PM, Ladislav Lhotka <lhotka@nic.cz
>>>>> <mailto:lhotka@nic.cz>> wrote:
>>>>>
>>>>>
>>>>>       > On 22 Dec 2016, at 07:22, Randy Presuhn
>>>>>       <randy_presuhn@alumni.stanford.edu
>>>>>       <mailto:randy_presuhn@alumni.stanford.edu>> wrote:
>>>>>       >
>>>>>       > Hi -
>>>>>       >
>>>>>       > On 12/21/2016 3:55 PM, Andy Bierman wrote:
>>>>>       >>
>>>>>       >>
>>>>>       >> On Wed, Dec 21, 2016 at 3:41 PM, Juergen Schoenwaelder
>>>>>       >> <j.schoenwaelder@jacobs-university.de
>>>>>       <mailto:j.schoenwaelder@jacobs-university.de>
>>>>>       >> <mailto:j.schoenwaelder@jacobs-university.de
>>>>>       <mailto:j.schoenwaelder@jacobs-university.de>>> wrote:
>>>>>       > ...
>>>>>       >>    Perhaps I am blinded by the way @deprecate or __attribute__
>>>>>       >>    ((deprecated)) or [[deprecated]] work in various programming
>>>>>       >>    languages. All these annotations do not deprecate my code,
>>>>>       they just
>>>>>       >>    cause the generation of warnings so that I get aware of the
>>>>>       issue and
>>>>>       >>    can do my homework.
>>>>>       >>
>>>>>       >>
>>>>>       >> There are no protocols that let you manage orphaned data nodes
>>>>>       >> without any parent.  No way to represent it in XML or JSON either.
>>>>>       >> No way to specify a RESTCONF target resource that leaves out
>>>>>       >> some intermediate data nodes.
>>>>>       >
>>>>>       > Deprecating (or obsoleting) a definition does not orphan data nodes.
>>>>>       > Perhaps I'm blinded by the way SNMP works, but it seems to me that
>>>>>       > a robust client will need to be able to process data corresponding
>>>>>       > to deprecated (or obsolete) definitions.  Likewise, developers
>>>>>       > of server-side software may find themselves in situations where
>>>>>       > supporting obsolete definitions is a commercial necessity.  Things
>>>>>       > certainly played out that way in the SNMP world.  I agree with
>>>>>       Juergen
>>>>>       > that tool-generated warnings seem to be the correct way to go.
>>>>>
>>>>>       I agree that making a node deprecated or obsolete doesn't mean
>>>>>       that its descendants are orphaned, it just means they cannot be
>>>>>       current, and then "current" shouldn't be the default status for
>>>>>       them - also because the descendants may come from other modules
>>>>>       (via groupings and augments) that cannot be changed.
>>>>>
>>>>>       Even if the default status is inherited, tools can still generate
>>>>>       warnings. A data modeller can decide whether and where it makes
>>>>>       sense to have the "status" statement explicitly, but isn't forced
>>>>>       to do it everywhere.
>>>>>
>>>>>
>>>>>
>>>>> NETCONF and RESTCONF have no mechanisms for accessing data other than
>>>>> top-down from the top-level YANG data node to the target node.
>>>>> Removing an ancestor node from the server implementation effectively
>>>>> removes
>>>>> the entire subtree from the implementation.  (The value of the YANG
>>>>> status-stmt
>>>>> of the descendant nodes has nothing to do with it)
>>>> I agree that this certainly seems to be the case if a node is marked
>>>> as obsolete.  It seems that it implicitly forces all child nodes to be
>>>> obsolete as well regardless of which module they were defined in.
>>> No I don't think this is correct.  If module B augment X in module A,
>>> and X is obsolete, it does NOT mean that the augmented nodes in B are
>>> automatically obsolete.  However, in an implementation that doesn't
>>> implement X, the augmented nodes from B are obviously also not
>>> implemented.
>> I can get where you are coming from, but if you had a GUI viewer that
>> was looking at the combined schema tree, I think that you would to see
>> those descendant children nodes marked in some way to indicate that
>> implementations may validly not return them. Reporting them as current
>> when one of their parent nodes was obsolete would seem to be
>> deceptive.
>>
>> Is it that you are trying to differentiate between being explicitly
>> obsolete vs 'implicitly obsolete' through parentage?
> I think that within a module, if a parent is obsolete, then all its
> child should also be obsolete (*).  But I do think that the status
> should be explicitly stated.
OK.  I assume that this statement applies to deprecated as well.  I 
don't feel particularly strongly on this point.  If you mark something 
as obsolete/deprecated, then explicitly having to find and mark all 
references/children doesn't seem like a bad thing because it makes the 
full impact obvious (if pyang is enhanced to check for this).

>
> But marking definition as obsolete in one module cannot automatically
> make definitions in *other* modules obsolete.
I'm not so sure.

It seems to me that in practice, they are directly equivalent as if they 
were marked as obsolete.  I.e. clients cannot rely on them being 
available because the obsolete parent may not be implemented.

If the augmenting module wants to keep those nodes, then their only 
choice seems to be to explicitly mark them as obsolete, and make a copy 
of the nodes augmenting somewhere else in the schema tree.


>
> (*) _maybe_ 7950 can be interpreted in this way when it says:
>
>     If a definition is "current", it MUST NOT reference a "deprecated" or
>     "obsolete" definition within the same module
>
> If you're in a good mood, you could argue that a child always
> "references" its parent.
Would it not be better to add some sort of explicit statement as an 
errata to 7950 (once there is agreement on what it should say)?  Or is 
this beyond the scope of what an errata is allowed to do?

Rob

>
>
> /martin
> .
>