Re: [netmod] backward compatibility requirements in draft-verdt-netmod-yang-versioning-reqs-00

Robert Wilton <> Mon, 23 July 2018 14:32 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 8C4B9130DC0 for <>; Mon, 23 Jul 2018 07:32:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -14.51
X-Spam-Status: No, score=-14.51 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id mbLdalSAo8ub for <>; Mon, 23 Jul 2018 07:32:22 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 93B89130E95 for <>; Mon, 23 Jul 2018 07:32:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;;; l=24075; q=dns/txt; s=iport; t=1532356341; x=1533565941; h=subject:to:cc:references:from:message-id:date: mime-version:in-reply-to; bh=d73BfDYH80go9Atj1Gm8bfTZe1fJdytL8loP7Q4L8Qw=; b=HwH4dpRcnOA0lspast54jIzhAHueY0w93ZtR+rpAQYEjHfD/cyXF14cm MEijk/loMM/1h58OeX3dD9vzHJ059clLL9A+dsYNbjWvVAHhM1BCM+HGM 4UZU/YD24H9/iRptK8m+um56aYHOuBVB9/aJScck9RkJ4WdAuEverCRJ0 M=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DBAgBU5lVb/xbLJq1bGgEBAQEBAgE?= =?us-ascii?q?BAQEIAQEBAYMfgRFtEiiDfohjjTQIJJVRgWYLGAEKgVSCL0YCgz44FAECAQE?= =?us-ascii?q?CAQECbRwMhTcBAQEDAQEhSwsQCQIYFQsHAwICJx8RBg0GAgEBF4MFAYF/D5J?= =?us-ascii?q?Hm0eBLh+EPoVsBYpZP4ERJwyBYH6DGwEBgRstAlWCQoJVAogRhEuFHId0CY8?= =?us-ascii?q?qBogghVKMTIVVgVghJoEsMxoIGxU7gmmBdViISIU/PjCLfSuCHAEB?=
X-IronPort-AV: E=Sophos;i="5.51,393,1526342400"; d="scan'208,217";a="5295943"
Received: from (HELO ([]) by with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Jul 2018 14:32:18 +0000
Received: from [] ( []) by (8.15.2/8.15.2) with ESMTP id w6NEWIHX029051; Mon, 23 Jul 2018 14:32:18 GMT
To: Andy Bierman <>
Cc: Christian Hopps <>, NetMod WG <>
References: <> <> <> <> <> <>
From: Robert Wilton <>
Message-ID: <>
Date: Mon, 23 Jul 2018 15:32:18 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: multipart/alternative; boundary="------------1314DB25D5C13CD6B342F34B"
Content-Language: en-US
Archived-At: <>
Subject: Re: [netmod] backward compatibility requirements in draft-verdt-netmod-yang-versioning-reqs-00
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: NETMOD WG list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 23 Jul 2018 14:32:26 -0000

On 23/07/2018 15:08, Andy Bierman wrote:
> On Mon, Jul 23, 2018 at 6:24 AM, Robert Wilton < 
> <>> wrote:
>     On 23/07/2018 12:54, Andy Bierman wrote:
>>     On Mon, Jul 23, 2018 at 2:50 AM, Robert Wilton <
>>     <>> wrote:
>>         Hi Chris, Andy,
>>         On 21/07/2018 17:00, Christian Hopps wrote:
>>             As I pointed out at the mic @102 this requirement derives
>>             directly from the 1.x requirement of not changing the
>>             name of the module/namespace. If you allow for changing
>>             the namespace/module name for "major" (i.e.,
>>             incompatible) changes (i.e., like today) then this 3.1
>>             requirement goes away.
>>         Not sure that I agree.
>>         I think that you have made an assumption here that the server
>>         will continue to support both old and new major revision
>>         (with different name) of the module at the same time.
>>         However, these is nothing in the existing YANG upgrade rules
>>         that requires that.
>>         Ultimately, there is a choice whether supporting older module
>>         versions is the servers problem or the clients problem, or
>>         perhaps a combination of the two.
>>         The aim of requirement 3.1 is to ensure that there is a
>>         standard mechanism available so that server implementations
>>         that want the flexibility of supporting older client versions
>>         have a standard way of doing so.  My intention is that this
>>         part of the solution would be optional to implement and hence
>>         decided by the market, which is why the text in the
>>         requirement is "to allow servers" rather than "to require
>>         servers".
>>     API versioning is usually done on the message exchanges.
>>     Trying to do the same for datastore contents is not going to work.
>     A YANG schema can be considered an API.  Particularly looking at
>     say the OpenConfig YANG schema.  I doubt all implementations will
>     store all their configuration and operational state in a central
>     place.
>>     You can write the word MUST in all caps as many times as you want,
>>     but that will not change anything.
>     I disagree.  Marking a requirement as a MUST means that
>     requirement has to be met for a solution to be considered viable.
>     I previously had some text in the draft explaining how RFC 2119
>     text translates to evaluating the requirements, but was asked to
>     take it out because it is obvious. Perhaps it should go back in ...
> So you can answer the question how YANG validation works when multiple 
> revisions of a
> module are implemented?

Ok, so the scheme that I was considering is:
  - The device implements only one version of the schema (i.e. probably 
all of the latest modules revisions/versions).

However, the protocols are extended to allow clients to select to use an 
older version set of the modules for that session.  YANG library for 
that session would report the chosen set of modules as "implemented" by 
the server for that session.

The server chooses how many different sets of modules are supported, and 
exactly what module revisions, features are included in each of those 
module sets.  Normally I would expect exact module sets to align with a 
previous software release.  The different module-sets can be exposed via 
YANG library bis.  New RPCs or protocol extensions are required to 
choose which version is being used for the session.

The server then has code to map from the older module set paths to the 
latest version that is "implemented" by the device.  The vast majority 
of the mappings would be trivial mappings of the same value on the same 

This mapping is exactly the same as would have to be done on a client if 
it has to support servers running different revisions.

Not all changes can be mapped, some would have to just fail (perhaps 
could be covered by deviations).

>   I do not doubt that you can find a leaf somewhere that can
> be changed.  Not at all convinced the validation rules can be 
> rewritten to account
> for actual incompatible changes, like changing the type of data node 
> or replacing nodes
> with completely different configuration.
The mapping above will not be perfect in all cases, particularly if keys 
are changes, or support for software is removed, etc.  But they might 
still help.

>   Even less convinced that this complexity is
> worth the cost.

Well the complexity ends up going in the client or the server.  I think 
that this is generally a complex problem to solve.  Operators will 
likely argue that it is better that the complexity goes in the server to 
keep the client simple.  Server vendors will likely argue for the reverse.

Note, that I'm still somewhat open to what the right solution should be 


>     Thanks,
>     Rob
> Andy
>>         Thanks,
>>         Rob
>>     Andy
>>             I think the plan is to reword some of these to get closer
>>             to the intention which I believe is to allow for smoother
>>             transition from one module to the next while making
>>             incompatible but mostly non-impacting changes.
>>             Thanks,
>>             Chris.
>>             Andy Bierman <
>>             <>> writes:
>>                 Hi,
>>                 I strongly object to requirement 3.1:
>>                     3.1  The solution MUST provide a mechanism to
>>                 allow servers to
>>                             support existing clients in a backward
>>                 compatible way.
>>                 This is not what servers do today at all.
>>                 They provide only one version of an implemented
>>                 module, as specified in RFC
>>                 7950.
>>                 It is a vendor and operator decision when to upgrade
>>                 a server such that
>>                 non-backward compatible changes are made. They must
>>                 decide if/when it is ok
>>                 based on the client applications in use.
>>                 This requirement says you cannot make
>>                 backward-incompatible changes
>>                 which completely contradicts requirements 1.1 and 1.2.
>>                 IMO requirement 3.1 should be removed, or change MUST
>>                 to MAY
>>                 Andy
>>                 _______________________________________________
>>                 netmod mailing list
>>        <>
>>                 <>
>>             _______________________________________________
>>             netmod mailing list
>>    <>
>>             <>
>>             .