Re: [netmod] two options for removing /foo-state trees?

Martin Bjorklund <mbj@tail-f.com> Wed, 06 September 2017 18:02 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 2C67D132705 for <netmod@ietfa.amsl.com>; Wed, 6 Sep 2017 11:02:36 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, 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 m-WdgmwIoAqj for <netmod@ietfa.amsl.com>; Wed, 6 Sep 2017 11:02:29 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id A3637132055 for <netmod@ietf.org>; Wed, 6 Sep 2017 11:02:29 -0700 (PDT)
Received: from localhost (h-40-225.A165.priv.bahnhof.se [94.254.40.225]) by mail.tail-f.com (Postfix) with ESMTPSA id 8EB341AE0352; Wed, 6 Sep 2017 20:02:28 +0200 (CEST)
Date: Wed, 06 Sep 2017 20:05:45 +0200
Message-Id: <20170906.200545.1646568136744118938.mbj@tail-f.com>
To: kwatsen@juniper.net
Cc: netmod@ietf.org, acee@cisco.com
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <D94B3E90-8676-4790-A186-84CB7DC18B49@juniper.net>
References: <D94B3E90-8676-4790-A186-84CB7DC18B49@juniper.net>
X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="utf-8"
Content-Transfer-Encoding: base64
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/9xiIdNThmi2JdhwEKcKIvXwcQOc>
Subject: Re: [netmod] two options for removing /foo-state trees?
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
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: Wed, 06 Sep 2017 18:02:37 -0000

Kent Watsen <kwatsen@juniper.net> wrote:
> [changing subject line, was "upcoming adoptions"]
> 
> We've been primarily focused on updating modules by
> deprecating the /foo-state tree in situ.  This is what the
> nmda-guidelines draft said to do and is much of what the 
> "status statement needed on every node" thread regards.
> 
> However, the RTG YANG DT put forward an alternate approach.
> The idea is simply, rather than deprecate the /foo-state 
> tree, create a new module that leaves it out altogether.  
> I'm assuming that rfc8022bis-00 reusing the same module 
> name was an oversite, as it otherwise breaks YANG module 
> update rules.  And, to be complete about it, I'm assuming
> that rfc8022bis-00 should also republish the old module 
> with *all* nodes marked deprecated, so that there's no 
> confusion like that seen with the SMIv2 update.
> 
> PROs:
>  1) the new module is more readable, as it doesn't have to 
>     carry-forward the deprecated (and later obsoleted) nodes
>     forever.  [rant: I don't understand why obsolete nodes
>     can't be dropped after some amount of time - how does
>     some future use of an old node name matter?].  Yes, the
>     deprecated /foo-state tree could be put into a submodule,
>     but that doesn't change the readability much, and actually
>     might make readability worse, because the reader then has
>     to chase down the submodule when trying to understand the
>     'include' statement.

Well, the module with the include will be exactly as readable as a new
module, with the addition of one line:

  include ietf-deprecated-routing-definitions;

You can even add a comment to further explain teh deprecation.

> CONs:
>  1) a new module name may confuse those who have grown accustom
>     to the old name.  To help with this, the new name could 
>     follow some convention (e.g. *-2 or *-ex), but such
>     conventions always seem hokey to me.
>  2) a new module name forces an update to other modules that
>     importing it (e.g., to resolve XPaths), that otherwise may
>     not need to be updated.

This is a major drawback!


>  3) the approach doesn't follow what draft-dsdt-nmda-guidelines
>     says in guideline (c), but this seems to be a minor point.
>  4) republishing the old module with all nodes deprecated seems
>     off, but 7950 doesn't list 'status' as a substatement to
>     the 'module' statement, so what else can we do?
> 
> Any other pros or cons?
> 
> 
> Another question is if all the modules have to be updated the
> same way

In general I'd say no.  An entirely new module might be the right
approach in some cases, but in the majority of cases not.

For the routing modules, I don't think a new name is worth it.


/martin


> (which could block adoption of these drafts until we
> settled on an approach), or do we let each module update in a 
> way that suites it best base on, e.g., how deployed it is, how
> often it's been imported by other drafts, etc.  Thoughts?
> 
> 
> Kent  // contributor
> 
> 
> 
> >>>> Kent writes:
> >>>> 3. https://tools.ietf.org/html/draft-acee-netmod-rfc8022bis-00
> >>>
> >>> Martin writes:
> >>>  o  All the old -state definitions are removed, rather than being
> >>>     marked as "deprecated".
> >>
> >> Acee writes:
> >> I’m glad you brought this up. We discussed this in the Routing 
> >> YANG Design Team and were planning to discuss it on a wide scale.
> >> One of the advantages of the NMDA is that it makes the models 
> >> easier to read and consume. This is somewhat negated if we have
> >> to retain all these data nodes in the associated modules and mark
> >> them as “deprecated”. What is the consequence of not including 
> >> them? They are available in the previous version of the model 
> >> if they are need for compatibility.
> >
> > It is fairly common that instead of removing functions from a
> > published API, you mark them as deprecated for some time, and then,
> > later, remove them (*).
> >
> > Note that since a server cannot implement two versions of a given
> > module, it has to decide which version to implement.  There might be
> > other modules that use / augment the -state tree; if the server
> > implements the latest version w/o the -state tree, it cannot at the
> > same time implement these augmenting modules.
> >
> > (*) YANG inherits the deprecation model from SMIv2.  We actually have
> > three states: current -> deprecated -> obsolete.  And even when
> > something is obsolete, it is not removed.  I guess in SMIv2 this was
> > necessary b/c of OID assignments; maybe this could be revisited for
> > YANG.  But this would require an update to RFC 7950.
> >
> > If we think that a module becomes cluttered with all the deprecated
> > definitions, we can actually move them all to a separate submodule.
> 
> 
>