Re: [yang-doctors] guideline for enum and value?

Jan Lindblad <janl@tail-f.com> Wed, 14 February 2018 16:28 UTC

Return-Path: <janl@tail-f.com>
X-Original-To: yang-doctors@ietfa.amsl.com
Delivered-To: yang-doctors@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ECCC9129BBF for <yang-doctors@ietfa.amsl.com>; Wed, 14 Feb 2018 08:28:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.91
X-Spam-Level:
X-Spam-Status: No, score=-1.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] 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 ptsZ7LEBQFJV for <yang-doctors@ietfa.amsl.com>; Wed, 14 Feb 2018 08:28:12 -0800 (PST)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 6F2041270FC for <yang-doctors@ietf.org>; Wed, 14 Feb 2018 08:28:12 -0800 (PST)
Received: from [10.147.40.137] (unknown [173.38.220.42]) by mail.tail-f.com (Postfix) with ESMTPSA id 6D1F01AE0383; Wed, 14 Feb 2018 17:28:10 +0100 (CET)
From: Jan Lindblad <janl@tail-f.com>
Message-Id: <3140698B-B876-43AE-A9A8-7D0A076FA93A@tail-f.com>
Content-Type: multipart/alternative; boundary="Apple-Mail=_A6B0938E-0E93-455F-99AE-701B3B6F2EE6"
Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
Date: Wed, 14 Feb 2018 17:28:09 +0100
In-Reply-To: <748E69BA-6AF6-405D-BAEC-CBB3DF58F70D@cisco.com>
Cc: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>, "yang-doctors@ietf.org" <yang-doctors@ietf.org>
To: "Einar Nilsen-Nygaard (einarnn)" <einarnn@cisco.com>
References: <20180125.095921.224499312159563778.mbj@tail-f.com> <20180125091118.tjn5eiv2hzmc7k23@elstar.local> <dfb94426-c408-e215-e23b-539e127050a2@cisco.com> <20180125.120804.68412726225731762.mbj@tail-f.com> <0db2c4d1-ac4d-dcc6-b2b9-c580427a6a84@cisco.com> <20180214154740.l375k2kmodgvzvdx@elstar.local> <20180214155951.eqaskkjs67bt6zjc@elstar.local> <748E69BA-6AF6-405D-BAEC-CBB3DF58F70D@cisco.com>
X-Mailer: Apple Mail (2.3445.5.20)
Archived-At: <https://mailarchive.ietf.org/arch/msg/yang-doctors/L6lx3K60MFZnl2LeDn9f6B093yA>
Subject: Re: [yang-doctors] guideline for enum and value?
X-BeenThere: yang-doctors@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Email list of the yang-doctors directorate <yang-doctors.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/yang-doctors>, <mailto:yang-doctors-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/yang-doctors/>
List-Post: <mailto:yang-doctors@ietf.org>
List-Help: <mailto:yang-doctors-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/yang-doctors>, <mailto:yang-doctors-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 14 Feb 2018 16:28:15 -0000

Einar,

FWIW, the ConfD NETCONF server implementation has a *programming API* which is stable against enum order changes in the YANG as described below. I.e. that can still be an implementation decision. I agree, though, that depending on implicit order is risky, and that's exactly why we avoid this in the APIs.

/jan

> On 14 Feb 2018, at 17:19, Einar Nilsen-Nygaard (einarnn) <einarnn@cisco.com> wrote:
> 
> For me it's about who the values of the enums are for, and the impact on model evolution in different places. The enum values are explicitly intended as for model implementers to use, and have no real meaning to model consumers as the canonical representation is the string identifier. However, once a value is assigned via a "value", that value may never change. I have seen developers naively assign explicit values from other sources (e.g. system header files on the OS) and then inadvertently see problems when they implement the model on top of a new OS, where the value matching the symbol is not the same, and so the developers just (illegally) changed the value in the value clause. This still has zero impact on the end consumer of the model, as they deal with the string, but is a backwards compatibility violation that need not have happened.
> 
> In general, I think embedding values that are primarily targeted to implementers of a model in what is also the external format is just not all that helpful.
> 
> Not a huge deal, but reduces coupling, reduces opportunity for inadvertent backwards-compatibility breakage, and encourages better implementation code/model hygiene as all parties will be encouraged to utilize symbols rather than flawed values. I would like to see both consumers and implementers of models get to the point where:
> 
> type enumeration { enum foo; enum bar; }
> 
> and
> 
> type enumeration { enum bar; enum foo; }
> 
> ...are ultimately treated the same and such that reordering of symbols doesn't break things. I've seen enough broken code based on order-dependent integer value assignments combined with people using the values instead of symbols to last several lifetimes, and anything we can do to remove opportunities for mistakes seems like a good thing.
> 
> Cheers,
> 
> Einar
> 
>> On Feb 14, 2018, at 3:59 PM, Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de <mailto:j.schoenwaelder@jacobs-university.de>> wrote:
>> 
>> On Wed, Feb 14, 2018 at 04:47:40PM +0100, Juergen Schoenwaelder wrote:
>> 
>>>> And:
>>>> 
>>>>  Do not use explicit 'value' statements, except if:
>>>>     o the enum corresponds to some standard integer value, or
>>>>     o you update the set of enums by inserting new enums in the middle of
>>>> the list
>>> 
>>> I am not sure why we would recommend this.
>>> 
>> 
>> More specifically, I do not see why
>> 
>>  type enumeration { enum foo { value 0; }; enum bar { value 1; }; }
>> 
>> is to be avoided in favor of
>> 
>>  type enumeration { enum foo; enum bar; }
>> 
>> given that they mean the same and the first one is explicit and robust
>> to changes while the second one must be handled with care (only append
>> enums, never reorder enums). Yes, clueful YANG authors can handle the
>> later fine as they will understand that if order changes are needed,
>> you have to move to explicit value assignments. My fear is that not
>> all YANG authors will be aware of this (but then many of those authors
>> likely also do not read guidelines).
>> 
>> /js
>> 
>> -- 
>> 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/ <https://www.jacobs-university.de/>>
> 
> _______________________________________________
> yang-doctors mailing list
> yang-doctors@ietf.org
> https://www.ietf.org/mailman/listinfo/yang-doctors