On 5/16/20, Dave Barach (dbarach) <dbar...@cisco.com> wrote: > API messages in network byte order made sense 10 years ago when I worked > with a mixed x86_64 / ppc32 system. As Damjan points out, API > interoperability between big-endian and little-endian systems is a boutique > use-case these days. > > Timing is key. We won’t be able to cherry-pick API message handler fixes > across an endian-order flag-day. If we decide to switch to native byte > order, we’d better switch right before we pull our next LTS release.
Do I understand it right that the idea here would be to flip the endianness right before pulling stable/2009 branch ? --a > > FWIW... Dave > > From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Damjan Marion > via lists.fd.io > Sent: Saturday, May 16, 2020 7:23 AM > To: Andrew Yourtchenko <ayour...@gmail.com> > Cc: Christian Hopps <cho...@chopps.org>; Ole Troan <otr...@employees.org>; > vpp-dev <vpp-dev@lists.fd.io>; Jerome Tollet (jtollet) <jtol...@cisco.com> > Subject: Re: (Q about fixing endianness bugs in handlers) Re: [vpp-dev] > Proposal for VPP binary API stability > > > Knowing that even hard-core big-endian systems like PowerPC decided to > switch to Little endian and that situation where binary api will be > exchanged between BE and LE systems is extremely small, maybe we should > consider removing endian conversion from APIs and simply represent data > in the native form. Looks like this is fertile ground for new bugs… > > Thoughts? > > — > Damjan > > >> On 15 May 2020, at 16:20, Andrew Yourtchenko >> <ayour...@gmail.com<mailto:ayour...@gmail.com>> wrote: >> >> There's a very interesting couple of gerrit changes that just came in >> today that is worth discussing, >> and they are a perfect case study to further clarify the process - so >> I tweaked the subject accordingly.. >> The API message itself is relatively minor, but regardless of what is >> agreed that makes a good case study. >> >> Backstory: >> >> Once upon a time on Aug 20 2019, commit 053204ab changed >> sw_interface_set_rx_mode.mode from u8 to an enum, but an htonl >> conversion >> function didn't make it there (enums are u32 by default as far as I can >> see). >> >> This was after the 19.08 branch pull, and it wasn't ever tackled, so >> this (buggy) behavior ended being in 20.01, 20.01.1, and in the >> current 20.05-rc1. >> >> Fast forward a bit, today I was pinged about the two changes - one for >> master, one for stable/2001: >> >> https://gerrit.fd.io/r/c/vpp/+/26879 - in master - forces the enum to be a >> u8 >> >> https://gerrit.fd.io/r/c/vpp/+/26915 - in stable/2001 - adds the >> htonl() call and changes the existing ("buggy") >> behavior in the 20.01.2 - thus would silently break any API consumers >> that coded against the previous "buggy" behavior. >> >> And then we have a question open about stable/2005, which "by the >> letter" can potentially accept only the second approach, since it is >> past the API freeze. >> >> Additional bit: this API is not touched in make test, so this bug had >> slipped through. >> >> So there are the following options: >> >> 1) Merge both patches, and treat the 20.05 similar to 20.01, thus >> making a "silent change" in both, but making the master look closer to >> a 19.08 format. >> >> 2) Leave the 20.05 and 20.01 alone with the "buggy" behavior, and >> merge the master patch that shrinks the enum down to 1 byte >> >> 3) Merge the 20.01 and cherry-pick it to master and 2005 - fixing the >> endianness of the u32 enum everywhere, but making an effective "silent >> change" in 20.01&20.05 >> >> 4) merge the patch in master that shrinks the enum down to one byte, >> and cherry-pick it to 20.01 and 20.05 - thus breaking the contract of >> "no api changes" but at least this gets to be explicitly visible early >> on. >> >> 5) under the current proposal, if the API message is defined as >> "production" then there would need to be a new "in-progress" message >> in master with either of the two fixes, the buggy message would need >> to be marked as "deprecated". And under the current proposal by the >> 20.09 the "in-progress" message would become "production", the current >> message would be shown as "deprecated", to be deleted in 21.01. >> >> So, the feedback that I would appreciate on the above: >> >> 1) the least worst course of action "right now", for this particular >> issue. I discussed this with Ole and we have different opinions, so I >> would like the actual API users to chime in. Please tell me which is >> the least worst option from your point of view :-) >> >> 2) What is the best course of action in the future. Note, this is also >> the simpler case in that there is a way to trigger a CRC-affecting >> change by forcing the enum to be a u8. What would have been the best >> course of action if it was simply a missing ntohl() for a field that >> noone complained about for 1.5 releases. Can we assume that no-one >> used that API and "fix the representation" ? >> >> 3) would there be an interest in having a sort of registry of "who >> wants to know about things related to each API" - so that if a bug >> like this arises that requires a behavior change to fix, I could poll >> the affected folks and maybe be able to get away with (1) or (3) from >> above ? >> >> And a tweak to the process (and potentially tooling) with regards to >> going to "production API status": >> >> An API that is not touched during a "make test" can not be moved >> beyond the "in-progress" status. Adding the unit test implies the >> commitment from the API contributor to follow the option (5) above >> even for "trivial endianness bugs". >> >> Thoughts ? >> >> --a >> >> >> >> >> On 5/14/20, Christian Hopps <cho...@chopps.org<mailto:cho...@chopps.org>> >> wrote: >>> API stability is borderline critical for a project like VPP I think. Yes, >>> it >>> can be used stand-alone, but real value is added by building products on >>> top >>> of it. >>> >>> Also important is having an API framework that allows for >>> backward-compatible changes to the API for making improvements. >>> >>> I'm not sure if VPP has the latter, but if there's too much pain with >>> your >>> proposed rules I think the latter should addressed rather than >>> sacrificing >>> the former. So I support your rules. >>> >>> Thanks, >>> Chris. >>> >>>> On May 14, 2020, at 8:28 AM, Ole Troan >>>> <otr...@employees.org<mailto:otr...@employees.org>> wrote: >>>> >>>> Andrew and I have discussed a process around API changes with the goal >>>> to >>>> limit the impact on VPP consumers. >>>> One big painpoint in tracking VPP releases for users of the VPP binary >>>> has >>>> been API changes. >>>> >>>> We want to ensure: >>>> - A production API never changes. >>>> >>>> - A production API can be deprecated with one release notice. >>>> E.g. show_version_2 is introduced in 20.01 and show_version_1 is marked >>>> as >>>> deprecated. >>>> show_version_1 is marked with "option delete_by = "v20.05"; >>>> >>>> - APIs marked as experimental / not released can change with no notice. >>>> Added support for option status = "in_progress"; >>>> >>>> This patch: >>>> https://gerrit.fd.io/r/c/vpp/+/26881 >>>> >>>> has a tool "crcchecker" that we intend to run as part of the verify >>>> job. >>>> It will block modifications to existing production APIs. >>>> make checkstyle-api >>>> It also supports dumping API manifests and make API comparisions across >>>> releases/revisions/commits. >>>> >>>> A production API is defined by having .api semantic major version > 0. >>>> New messages can override that by setting status="in_progress". >>>> >>>> The consequence of this is that developers must maintain two (or more) >>>> versions of an API for some time. >>>> This is obviously painful, but at least it aligns cost and benefit >>>> better >>>> than when we forced the API users to do it. >>>> >>>> Looking back from 17.01 onwards, it looks like we on average have done >>>> about 50 backwards incompatible changes per release. >>>> That's ignoring the work on API typing, which have resulted in >>>> significantly more changes. >>>> >>>> The hope is that we can start v20.09 development with this process in >>>> place. >>>> >>>> What do people think? >>>> >>>> Best regards, >>>> Ole >>> >>> >> > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#16428): https://lists.fd.io/g/vpp-dev/message/16428 Mute This Topic: https://lists.fd.io/mt/74228149/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-