On Sat, Jul 21, 2018 at 05:47:45PM -0400, Christian Hopps wrote: > There are actual instances where small perhaps non-disruptive but > incompatible changes are required. The example given to me for this > type of change was when the original specification had an obvious > bug (e.g., a range was incorrectly specified).
I strongly believe that fixing bugs is not a reason to change the current versioning rules. Bugs come essentially in three flavors: - A definition is messed up (i.e., a range, a pattern, a must expression) but the original intention of the definition is clear from the context (description clauses, references, ...). In this case, implementors will likely have done the right thing (or when they observed the problem they will likely have done the right thing). - A definition is messed up but it is not clear from the context what the original intention of the definition was. In this case, there is a true ambiguity and implementors can rightfully have come to different conclusions how to deal with the conflict in the definition. In the first case, I believe there is no issue with simply fixing the messed up definition. I believe this kind of bug fixes is not constrained by the YANG update rules. In the second case, there is true ambiguity what implementations may do and hence the safest approach is to deprecate the messed up definition and to create a replacement. Of course, in reality, things are often not so clear cut and hence it takes some informed judgement what is the reasonable way to deal with things. (A type two bug caught very early may be different from a type two bug caught after several months of implementation and deployment.) Sometimes we also have situations where a definition that was originally OK turs out over time to be problematic as technology has evolved. So after some time, the original definition starts to look like a bug but it actually is not. The safe path forward is again to create new definitions and to deprecate the old ones. Now, for those in favour of moving from (module, path) to (module, path, version), you loose the deprecated definition. So if you wan't to allow for a transition period, there is a need to allow an old client to work with the old definition and a new client to work with the new definition. In the current naming scheme, this is not a problem, with a (module, path, version) naming scheme this requires some extra complexity. /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/> _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
