Andy Bierman <a...@yumaworks.com> wrote:
> Hi,
> 
> On Thu, Jan 18, 2024 at 12:34 PM Jason Sterne (Nokia) <jason.sterne=
> 40nokia....@dmarc.ietf.org> wrote:
> 
> > Hi Italo,
> >
> >
> >
> > IMO RFC7950 Section 11 makes the second case NBC (and I remember it being
> > confirmed on this list in the past). It may not turn out to be impactful
> > depending on the client design (and if only XML is used) but officially it
> > is NBC. The type of the leaf is changing from whatever foo is, to type
> > ‘union’.   (even changes from uint8 to uint16 are NBC).
> >
> >
> >
> 
> 
> I think RFC 7950 addresses only XML encoding of YANG data.

RFC 7950 defines a "lexical representation" of types.  This is not
encoding-specific.  However, section 9 says:

   The lexical representation of a value of a certain type is used in
   the XML encoding and when specifying default values and numerical
   ranges in YANG modules.


/martin



> CBOR encoding of a union would cause an NBC change only for protocols using
> CBOR.
> 
> I prefer to focus on the backward compatibility at run-time.
> There are "soft" NBC changes that may break compile-time definitions but
> probably not run-time,
> especially if old-client and new-client are not both changing the same
> configuration data structures.
> 
> 
> The following change is not legal:
> 
> V1:
> 
> 
>      container oldway {}
> 
> 
> V2:
> 
>      choice wrapper {
>         container oldway {}
>       }
> 
> 
> The following changes are legal:
> 
> V1:
> 
>      choice wrapper {
>          container oldway {}
>       }
> 
> V2:
> 
>      choice wrapper {
>         container oldway {}
>         container newway {}
>      }
> 
> This allows old clients and new clients to coexist (better than just
> removing 'oldway').
> But adding the choice wrapper changes the schema node path that may be used
> in augments or deviations.
> Creating the choice from the start would clutter YANG modules and add
> complexity.
> IMO this compile-time NBC change is worth it if enough deployment of
> 'oldway' exists.
> 
> The same applies for a simple type changing to a union type.
> It is not always transparent.  In C the order of the member types is
> irrelevant, but not in YANG.
> 
> Safe (except for CBOR):
> 
> V1:
> 
>     leaf foo { type int8; }
> 
> V2:
> 
>    leaf foo {
>       type union {
>            type int8;
>            type declimal64;
>            type string;
>        }
>    }
> 
> Not safe since no member types after 'string' would ever match:
> 
> V1:
> 
>     leaf foo { type string; }
> 
> V2:
> 
>    leaf foo {
>       type union {
>            type string;
>            type declimal64;
>            type binary;
>        }
>    }
> 
> IMO it should be OK to to place the original type anywhere in the member
> types.
> It may not be completely transparent within the implementation or the
> message encoding.
> 
> 
> V1:
> 
>     leaf foo { type string; }
> 
> new V2:
> 
>    leaf foo {
>       type union {
>            type declimal64;
>            type binary;
>            type string;
>        }
>    }
> 
> If old-client reads new values set by new-client then it may cause a
> problem,
> but probably not if it only reads values set by old-client.
> 
> 
> Some of those sections of 7950 are really focussed on XML encoding. But
> > YANG is intended to work with other encodings (and some of those may not
> > encode foo in and out of a union in the same way).
> >
> >
> >
> 
> They only apply to XML.
> Any extrapolation or new rules are post-7950.
> 
> 
> 
> > Jason
> >
> 
> Andy
> 
> 
> >
> >
> >
> >
> > *From:* Italo Busi <italo.b...@huawei.com>
> > *Sent:* Thursday, January 18, 2024 3:19 PM
> > *To:* Jason Sterne (Nokia) <jason.ste...@nokia.com>; Reshad Rahman <
> > res...@yahoo.com>; Jan Lindblad <j...@tail-f.com>
> > *Cc:* netmod@ietf.org
> > *Subject:* RE: [netmod] Is changing the type with union a BC change?
> >
> >
> >
> > Hi Reshad, Jason, Jan,
> >
> >
> >
> > Thanks for your replies
> >
> >
> >
> > I have found these pieces of text in sections 9.12 and 11 which might be
> > interpreted as stating that the changes to the union are BC:
> >
> >
> >
> >    When generating an XML encoding, a value is encoded according to the
> >
> >    rules of the member type to which the value belongs.  When
> >
> >    interpreting an XML encoding, a value is validated consecutively
> >
> >    against each member type, in the order they are specified in the
> >
> >    "type" statement, until a match is found.  The type that matched will
> >
> >    be the type of the value for the node that was validated, and the
> >
> >    encoding is interpreted according to the rules for that type.
> >
> >
> >
> > <…>
> >
> >
> >
> >    The lexical representation of a union is a value that corresponds to
> >
> >    the representation of any one of the member types.
> >
> >
> >
> > <…>
> >
> >
> >
> >    The canonical form of a union value is the same as the canonical form
> >
> >    of the member type of the value.
> >
> >
> >
> > <…>
> >
> >
> >
> >    o  A "type" statement may be replaced with another "type" statement
> >
> >       that does not change the syntax or semantics of the type.  For
> >
> >       example, an inline type definition may be replaced with a typedef,
> >
> >       but an int8 type cannot be replaced by an int16, since the syntax
> >
> >       would change.
> >
> >
> >
> > Given these definitions I am wondering whether having a different encoding
> > between the union and its member types is a valid encoding according to
> > RFC7950
> >
> >
> >
> > If this is the case, my feeling is that both examples can be considered BC
> > changes at least when the base types are the same (e.g., type foo, bar and
> > baz are all strings)
> >
> >
> >
> > Italo
> >
> >
> >
> > *From:* Jason Sterne (Nokia) <jason.ste...@nokia.com>
> > *Sent:* giovedì 18 gennaio 2024 19:33
> > *To:* Reshad Rahman <res...@yahoo.com>; Jan Lindblad <j...@tail-f.com>;
> > Italo Busi <italo.b...@huawei.com>
> > *Cc:* netmod@ietf.org
> > *Subject:* RE: [netmod] Is changing the type with union a BC change?
> >
> >
> >
> > It was subtle and I can’t remember the exact reasoning (or section of
> > RFC7950) but I think Martin pointed it out. Basically: adding another
> > member to a union that already has members of that same type doesn’t change
> > the possible encodings or storage types. But adding a new member with a
> > new/different type (that wasn’t part of the union previously) suddenly
> > introduces the possibility of a new type for that leaf. So it kinda falls
> > under “don’t change the base type(s)”.
> >
> >
> >
> > *From:* Reshad Rahman <reshad=40yahoo....@dmarc.ietf.org>
> > *Sent:* Thursday, January 18, 2024 10:59 AM
> > *To:* Jan Lindblad <j...@tail-f.com>; Italo Busi <italo.b...@huawei.com>;
> > Jason Sterne (Nokia) <jason.ste...@nokia.com>
> > *Cc:* netmod@ietf.org
> > *Subject:* Re: [netmod] Is changing the type with union a BC change?
> >
> >
> >
> > You don't often get email from reshad=40yahoo....@dmarc.ietf.org. Learn
> > why this is important <https://aka.ms/LearnAboutSenderIdentification>
> >
> >
> >
> >
> >
> > *CAUTION:* This is an external email. Please be very careful when
> > clicking links or opening attachments. See the URL nok.it/ext for
> > additional information.
> >
> >
> >
> > Hi Jason,
> >
> >
> >
> > I agree for the second case, and IIRC we did discuss that in the
> > yang-module-versioning context.
> >
> >
> >
> > But the first case, I don't understand why it's NBC if there's a new type.
> > Encodings of the OLD types wouldn't change?
> >
> >
> >
> > Regards,
> >
> > Reshad.
> >
> >
> >
> > On Thursday, January 18, 2024, 09:36:46 AM EST, Jason Sterne (Nokia) <
> > jason.sterne=40nokia....@dmarc.ietf.org> wrote:
> >
> >
> >
> >
> >
> > Hi guys,
> >
> >
> >
> > The second case is NBC. I remember wondering the same thing myself but the
> > type in OLD is foo which the type in NEW is union. That is NBC (and in some
> > encodings outside of XML, sending that leaf with type foo vs type union,
> > member foo would be different).
> >
> >
> >
> > OLD
> >
> > type foo;
> >
> >
> >
> > NEW
> >
> > type union {
> >
> >    type foo;
> >
> >    type bar
> >
> > }
> >
> >
> >
> > The first case is NBC if the addition of the new member adds a new type to
> > the list of members. So it depends on the underlying types of foo, bar and
> > baz.  If they were all strings, for example, then it is BC.  But if foo and
> > bar are “int” and then “baz” is a string, then adding that new member type
> > into the union is NBC.
> >
> >
> >
> > Jason
> >
> >
> >
> > *From:* netmod <netmod-boun...@ietf.org> *On Behalf Of *Jan Lindblad
> > *Sent:* Thursday, January 18, 2024 5:13 AM
> > *To:* Italo Busi <italo.b...@huawei.com>
> > *Cc:* netmod@ietf.org
> > *Subject:* Re: [netmod] Is changing the type with union a BC change?
> >
> >
> >
> >
> >
> > *CAUTION:* This is an external email. Please be very careful when
> > clicking links or opening attachments. See the URL nok.it/ext for
> > additional information.
> >
> >
> >
> > Italo,
> >
> >
> >
> > Yes, this too would be BC according to the rules. There may be some
> > situations where this kind of change might be disruptive in the real world,
> > however, for example if you did this to a list key.
> >
> >
> >
> > Best Regards,
> >
> > /jan
> >
> >
> >
> >
> >
> >
> >
> > Thanks Jan
> >
> >
> >
> > Following the same logic, also the following change can be considered BC:
> >
> >
> >
> > OLD
> >
> > type foo;
> >
> >
> >
> > NEW
> >
> > type union {
> >
> >    type foo;
> >
> >    type bar
> >
> > }
> >
> >
> >
> > Is my understanding correct?
> >
> >
> >
> > Thanks again
> >
> >
> >
> > Italo
> >
> >
> >
> > *From:* Jan Lindblad <j...@tail-f.com>
> > *Sent:* giovedì 18 gennaio 2024 10:33
> > *To:* Italo Busi <italo.b...@huawei.com>
> > *Cc:* netmod@ietf.org
> > *Subject:* Re: [netmod] Is changing the type with union a BC change?
> >
> >
> >
> > Italo,
> >
> >
> >
> > Yes, in my judgement this change should be considered BC according to YANG
> > rules.
> >
> >
> >
> > Note that the BC concept is a sort of *agreement* between client and
> > server implementors that determines what kind of changes a) are allowed +
> > b) have to be tolerated. Even when things are BC, that does not guarantee
> > that things will always keep interoperating properly.
> >
> >
> >
> > Best Regards,
> >
> > /jan
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On 17 Jan 2024, at 23:22, Italo Busi <
> > Italo.Busi=40huawei....@dmarc.ietf.org> wrote:
> >
> >
> >
> > I have some questions/doubts about whether changing a type with union is a
> > BC or NBC change
> >
> >
> >
> > For example, is the following change a BC or NBC change?
> >
> >
> >
> > OLD
> >
> > type union {
> >
> >    type foo;
> >
> >    type bar
> >
> > }
> >
> >
> >
> > NEW
> >
> > type union {
> >
> >    type foo;
> >
> >    type bar;
> >
> >    type baz
> >
> > }
> >
> >
> >
> > Section 11 of RFC7950 is silent on this case although this change is
> > expanding the allowed value space and therefore it looks like a BC change
> >
> >
> >
> > Thanks, Italo
> >
> >
> >
> >
> >
> > _______________________________________________
> > netmod mailing list
> > netmod@ietf.org
> > https://www.ietf.org/mailman/listinfo/netmod
> >
> >
> >
> > _______________________________________________
> > netmod mailing list
> > netmod@ietf.org
> > https://www.ietf.org/mailman/listinfo/netmod
> > _______________________________________________
> > netmod mailing list
> > netmod@ietf.org
> > https://www.ietf.org/mailman/listinfo/netmod
> >
_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to