Re: [netmod] New Version Notification for draft-verdt-netmod-yang-versioning-reqs-01.txt

Andy Bierman <andy@yumaworks.com> Sat, 27 October 2018 13:51 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 3DB67127333 for <netmod@ietfa.amsl.com>; Sat, 27 Oct 2018 06:51:06 -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, DKIMWL_WL_MED=-0.001, 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 fss9_YeK_ClB for <netmod@ietfa.amsl.com>; Sat, 27 Oct 2018 06:51:03 -0700 (PDT)
Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) (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 A81CC124D68 for <netmod@ietf.org>; Sat, 27 Oct 2018 06:51:02 -0700 (PDT)
Received: by mail-lf1-x129.google.com with SMTP id h192so2958617lfg.3 for <netmod@ietf.org>; Sat, 27 Oct 2018 06:51:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=Kp80oZyL/D7Xv6L4U2qNOWbcrYRQLIMow6yvyQ24iJ0=; b=SQr6MMO+ofJ03lMSu1IWK9R/RWPFen6HnLbI7paHXbP8M4Y4U+QRgeQfF/7rS3/ELH K0v36jR1kco0iUgkiwc5/x4ldms60EnUpuLhCxF8ytrnGJ0w+u3ecScxxjc5p0n9iyQs 6A9fCe7FBy7AAtiPK/h2u//4666VPcjKYchXcmK99nWVTqiw1W6zje3hkqZs/u7ZVyFX bNR5/Sv/uiU6PpDn/JfW66Hbbk6evvHKiVNsyfntRLSVjNw3EzbEJVXZSbFBmXCZYPEL XPFueGu9eLSQ56RKGnIrAUqqyj0o+cJ4Yt+wV3b8eqCmT0KJtpRAX4buN1CIgKEVaQRc 84mw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Kp80oZyL/D7Xv6L4U2qNOWbcrYRQLIMow6yvyQ24iJ0=; b=BrrPWE8XU6plQ7/xadXBUFfOWs/gozgWNi8taHYYQqKROkjr5Qzj3/AWJJberA8S/9 5dpnNN7AQOEnnCdDkXDXmbqcc97G/5Hbs1sjMcz7pp2XE856qA9MRUUYWOiOZtqWrRL9 Bhztixl3MkFsrJoU+Z+fHc8D7Ejf8f3quA9VAurxCs4X4TF3xX6272QUja3MQ49AUald cWaQ1FV/ouFkJGm/viRr5I9ll017acwXr+FRHVZiiFtBGz8Oic8BaKd95iooWsvXfnxS t0SD0FosFdiqY0GE7x41T5B2ZikOLogKzuTE3J9Ni7vdiPFnIYEwcoWw6VugV5nBP9hK VeoA==
X-Gm-Message-State: AGRZ1gJDQ9NNUZVQpOswu6srSteYBDJW8rEXB4iBnVznpNLRT3kHbXgZ 8oa5d8nyh15D9UpdSc3jOZjpyI/2l+cq4ZycxycnPA==
X-Google-Smtp-Source: AJdET5e74L6KyFvuDGMsYKk6q/P0T3MEXhnqF6fPaiAWlLoMff0u4HnfP+1PZK5JKpU+dScpWoMe83FUgjGSkvh7MOY=
X-Received: by 2002:a19:750a:: with SMTP id y10mr4376277lfe.43.1540648260632; Sat, 27 Oct 2018 06:51:00 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:a19:1f87:0:0:0:0:0 with HTTP; Sat, 27 Oct 2018 06:50:58 -0700 (PDT)
In-Reply-To: <20181027083628.tgymddbje3yp2lhy@anna.jacobs.jacobs-university.de>
References: <154005782323.13611.776830839788125372.idtracker@ietfa.amsl.com> <37f05b48-5fe7-82b4-ae32-9b856596e6a2@cisco.com> <1485DDD0-EB56-422D-A216-4A20F9B63A17@chopps.org> <a0392622-4405-8286-374b-effd652114cd@cisco.com> <sa636st2a97.fsf@chopps.org> <01d5056d-7645-cb1d-6e88-fbdbeb8ebca4@cisco.com> <20181026093347.3yomg5bhwilassvf@anna.jacobs.jacobs-university.de> <CABCOCHS6Vp6=HS6HPztDqojh=U84LuwbAJGB73HA01S9ukjfZg@mail.gmail.com> <20181026230148.xnv7kxgqd43abb7g@anna.jacobs.jacobs-university.de> <CABCOCHQUwFvLVz-kHPofNc6n4TG=+6Vj3dK87LqLrH=vtzVQcQ@mail.gmail.com> <20181027083628.tgymddbje3yp2lhy@anna.jacobs.jacobs-university.de>
From: Andy Bierman <andy@yumaworks.com>
Date: Sat, 27 Oct 2018 06:50:58 -0700
Message-ID: <CABCOCHRmcqpffXYcOOeZA7hy=NRhK8RAF8KcJYpht+Mp9g8qkQ@mail.gmail.com>
To: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>, Andy Bierman <andy@yumaworks.com>, "netmod@ietf.org" <netmod@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000004c9ec705793620fd"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/VCVH5y_5jWdZMEtpIfOqTAf2FGI>
Subject: Re: [netmod] New Version Notification for draft-verdt-netmod-yang-versioning-reqs-01.txt
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: Sat, 27 Oct 2018 13:51:06 -0000

On Sat, Oct 27, 2018 at 1:36 AM, Juergen Schoenwaelder <
j.schoenwaelder@jacobs-university.de> wrote:

> On Fri, Oct 26, 2018 at 04:36:26PM -0700, Andy Bierman wrote:
> > On Fri, Oct 26, 2018 at 4:01 PM, Juergen Schoenwaelder <
> > j.schoenwaelder@jacobs-university.de> wrote:
> >
> > > On Fri, Oct 26, 2018 at 09:35:39AM -0700, Andy Bierman wrote:
> > > >
> > > > IMO requirements 3.1 and 3.2 are the most  important and have the
> most
> > > > impact
> > > > on the solution space. I do not agree with either of these
> requirements.
> > > >
> > > > Implementing multiple non-compatible revisions of a module on a
> server
> > > > sounds hard,
> > > > not to mention that it breaks RFC 7950 rules. The current protocols
> do
> > > not
> > > > support the
> > > > ability to specify different versions of the same QName. This change
> > > makes
> > > > YANG validation
> > > > much to difficult to specify and implement (as that has to be
> rewritten
> > > as
> > > > well).
> > > >
> > > > It is one thing to deploy rapidly changing, buggy YANG modules in
> order
> > > to
> > > > gain experience quickly.  It is quite another to complicate YANG and
> the
> > > > protocols
> > > > to preserve these interim mistakes, and bake into the standards the
> > > notion
> > > > that this
> > > > is good engineering.
> > > >
> > >
> > > So how do you think this conflict between more agility and client
> > > stability should be handled? It seems you can't easily have both at
> > > the same time. Are you saying that backwards compatibility to support
> > > existing clients is not important?
> > >
> > >
> > It depends on the data model and how broken it is in the replaced
> version.
> > YANG validation is slow and complicated enough without pretending there
> > are 8 or 10 separate schema trees within a datastore. It might be
> impossible
> > for all constraints to be true in all schema trees at once.  It is a
> burden
> > on operators
> > and client developers to understand and properly manage multiple
> > incompatible revisions
> > of the same module
> >
> > yang-library is a good example of a clean break.
> > The /yang-library tree completely replaces the /modules-state tree.
> > A server can easily support both subtrees.
> > No new YANG or protocol features are needed at all.
> > This was not a bugfix, just the normal instability in the IETF.
> >
> > Even with this clean break, there could be external modules that have
> > leafref
> > or must/when that point at the /modules-state subtree.  They have to be
> > rewritten
> > to use /yang-library instead. But this can happen as needed since the old
> > tree is unchanged.
> >
> > For truly broken changes (e.g. change a node from a container to a list;
> > change a leaf from type boolean to an enumerated type w/ 6 enums;
> > remove or rename lots of existing nodes) the cross-references from
> external
> > modules can easily be incorrect if used with the new version.
> >
> > The NETMOD WG chose to add a new /yang-library tree instead of
> > mangling the existing nodes. One design choice makes req. 3.1 easy and
> 3.2
> > not needed.
> >
>
>        3.1  The solution MUST provide a mechanism to allow servers to
>             support existing clients in a backwards-compatible way.
>
> I believe 3.1 is exactly what we have today. If it is necessary to
> make incompatible changes, you create new definitions. This allows
> servers to support existing clients in a backwards-compatible way (as
> long as the old and new definitions are not conflicting.)
>


This is what we have today only if modules are updated in legal ways.
The 3.1 requirement says this backward compatibility is maintained even
if the module is updated in violation of the module update rules.

How would 3.1 be met if the WG decided to just add a new 'datastore' key
leaf
to the /modules-state/module list?

IMO the current "deprecate and start over" is actually the easiest and most
robust
solution path, and it requires no changes to YANG or the protocols.




>        3.2  The solution MUST provide a mechanism to allow servers to
>             simultaneously support clients using different revisions of
>             modules.  A client's choice of particular revision of one or
>             more modules may restrict the particular revision of other
>             modules that may be used in the same request or session.
>
> Today, the version number is effectively an (implicit) part of the
> module name (plus the revision date for backwards compatible changes).
> Hence, my understanding is that today's model does satisfy 3.2 as
> well.
>
>

This is not what we have at all. RFC 7950 says a server can only implement
one revision of a module.



> If we want to increase 'agility' in an attempt to make it easier to
> deliver early designs and to fix them on the go, the costs will go up
> somewhere. The extreme cases are:
>
> 1) The server can make changes to YANG modules in arbitrary ways and
>    the clients have to adapt, i.e., clients have to pay the bill.
>
> 2) The server has to provide strict backwards compatibility in order
>    to not break clients, i.e., servers have to pay the bill.
>
>
This is not correct. Implementing multiple incompatible revisions of a
module
(e.g, "module" list keyed 2 different ways) is a huge bill to pay for the
server developer.


The question is whether there is a solution somewhere in the middle
> that balances the costs and eases the process of adapting clients to
> servers and vice versa. It might very well be that there is no sweet
> point.
>
> Unless we go for option 1) above, I believe 3.1 and 3.2 are valid and
> important requirements.
>


I do not agree with the premise that non-compatible data model updates are
required.
3.1 can be achieved without such changes. 3.2 violates RFC 7950, requiring
a new(much more complicated) version of YANG



>
> /js
>
>
Andy



> --
> Juergen Schoenwaelder           Jacobs University Bremen gGmbH
> Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
> Fax:   +49 421 200 3103         <https://www.jacobs-university.de/>
>