Rob Wilton (presenting)

Slides:



Advertisements
Similar presentations
XCAP Tutorial Jonathan Rosenberg.
Advertisements

© 3GPP 2009 Mobile World Congress, Barcelona, 19 th February 2009© 3GPP GPP The Training Course / Module 10 1 All you always wanted to know about.
Alternative Software Life Cycle Models By Edward R. Corner vol. 2, chapter 8, pp Presented by: Gleyner Garden EEL6883 Software Engineering II.
Achieving Distributed Extensibility and Versioning in XML Dave Orchard W3C Lead BEA Systems.
(Quickly) Testing the Tester via Path Coverage Alex Groce Oregon State University (formerly NASA/JPL Laboratory for Reliable Software)
Prof. Aiken CS 169 Lecture 71 Version Control CS169 Lecture 7.
1 A Common API for Transparent Hybrid Multicast (draft-waehlisch-sam-common-api-04) Matthias Wählisch, Thomas C. Schmidt Stig Venaas {waehlisch,
Software Engineering Modern Approaches
Platform Upgrades As A Service Raj Nagarajan, Robert Enyedi.
Abstract Processes in BPEL4WS Tony Andrews Software Architect Microsoft.
Improving Design #1 Reduce complexity - narrow-down the project scope - optimize underlying process - eliminate unneeded parts # 2 Find and eliminate redundancies.
David Orchard W3C Lead BEA Systems Web service and XML Extensibility and Versioning.
Magnus Westerlund 1 The RTSP Core specification draft-ietf-mmusic-rfc2326bis-06.txt Magnus Westerlund Aravind Narasimhan Rob Lanphier Anup Rao Henning.
Real-Time Streaming Protocol draft-ietf-mmusic-rfc2326bis-01.txt Magnus Westerlund.
May 2015 New version numbering proposal. Where this proposal started from… Odd / even scheme doesn’t seem to be working well  Most users only using even.
Version Control and SVN ECE 297. Why Do We Need Version Control?
ECC Design Team: Initial Report Brian Minard, Tolga Acar, Tim Polk November 8, 2006.
Netconf Schema Query Mark Scott IETF 70 Vancouver December 2007
Trust Anchor Update Requirements for DNSSEC Russ Mundy for the editors Steve Crocker, Howard Eland, Russ Mundy.
CSE403 Software Engineering Autumn 2001 Gary Kimura Lecture #2 October 3, 2001.
Chapter 25 – Configuration Management 1Chapter 25 Configuration management.
Use Cases Discuss the what and how of use cases: Basics Examples Benefits Parts Stages Guidelines.
SIP wg Items Jonathan Rosenberg dynamicsoft Caller Preferences: Changes Discussion of Redirects –Previous draft only proxy –Nothing different for redirect.
Open source development model and methodologies.
Top 10 Entity Framework Features Every Developer Should Know
Introduction to CAST Technical Support
YANG Hackathon Achievements
Custom Profile Options
Use Cases Discuss the what and how of use cases: Basics Benefits
Interface extensions YANG & VLAN sub-interface YANG Status update
ALTO Protocol draft-ietf-alto-protocol-14
CS 5150 Software Engineering
Gaudi software release procedures
Smart Testing and Recycling Testing
LTAP protocol presentation
draft-clacla-netmod-yang-model-update-02
Life Cycle Models PPT By :Dr. R. Mall.
Template library tool and Kestrel training
Modernizing web service standards: The next version of WFS
Introduction to CAST Technical Support
Balazs Lengyel, Ericsson
IETF 103 NETMOD BBF YANG Update
Joe Clarke (presenting)
TFS from on-prem to the cloud with Azure DevOps Services
Tord Glad Nordahl Program Manager - Microsoft
Interface extensions YANG & VLAN sub-interface YANG Status update
Microsoft Virtual Academy
CHAPTER 4 PROPOSAL.
CHAPTER 4 PROPOSAL.
NMDA Q & A draft-dsdt-nmda-guidelines &
Chapter 25 – Configuration Management
Moving from Studio to Atelier
Post WG LC NMDA datastore architecture draft
CSE 303 Concepts and Tools for Software Development
Version Control CS169 Lecture 7 Prof. Aiken CS 169 Lecture 7.
Training 01: Project Lifecycle & Business Technology Analysis
Data Annotation for On-Change Notifications
Some feedback from editor
Desktop App Assure Service Microsoft Representative Name June 7, 2019
Proposal on TSC policy for ONAP release Maintenance
YANG Instance Data for Documenting Server Capabilities
Handling YANG Revisions – Discussion Kickoff
NETMOD Versioning Design Team Update
Joe Clarke (presenting)
LTP Port and Spec enhancements for “2.0” Preparing to make the change
Task 62 Scope – Config / Operational State
Lecture-Hashing.
NETMOD Versioning Design Team Update
Interface extensions YANG & VLAN sub-interface YANG Status update
Schema version selection Reshad Rahman (presenting), Rob Wilton
Presentation transcript:

Rob Wilton (presenting) draft-verdt-netmod-yang-solutions-00 Netmod WG November 8, 2018 Netmod YANG Version Design Team Rob Wilton (presenting)

Agenda Interesting questions for solutions to consider 5 potential solutions and comparison Modified semver in more detail Other work in solution space (only if time permitting): Data node lifecycle (proposed changes to status) Revision dates Import by version Client backwards compatibility (e.g. version selection)

Solution space Easy for clients Hard for servers/authors We are trying to find a solution somewhere in the middle Hard for clients Easy for servers/authors

Q. What level of change in YANG modules should be allowed Q. What level of change in YANG modules should be allowed? For new development: @dev head @ older dev branch/revision None Only BC changes NBC changes None Only BC Changes NBC changes

Q. What level of change in YANG modules should be allowed Q. What level of change in YANG modules should be allowed? For bug fixes: @dev head @ older dev branch/revision None Only BC fixes NBC fixes None Only BC fixes NBC fixes Open questions: What is the definition of a bug fix? Can a bug fix include NBC changes? And does NBC mean strict RFC 7950 module update rules or something softer? Should we even differentiate bug fixes vs enhancements?

Q. Linear or branched module evolution? Strict linear History (e.g. RFC 7950 rules today) Limited Branching (e.g. perhaps for bug fixes, and/or minor enhancements) Unlimited branching (e.g. like git)

Solutions Five solutions considered in the draft: Semver (as per semver.org, also used by OpenConfig) Modified semver Release semver Schema comparison tool RFC 7950 module update rules

1. Semver Version number is MAJOR.MINOR.PATCH Specified on semver.org Update version number based on change: NBC change => Increment major (reset minor, patch) BC change => Increment minor (reset patch) Editorial/Implementation change => Increment patch 0.x.y => pre-release, don’t have to follow rules Expectation is most development is broadly linear 1.0.0 1.1.0 2.0.0 1.0.1, 1.0.2

1. Semver – pros/cons Benefits: Compare two versions => BC, NBC, editorial change Widely known/used (e.g. used by OpenConfig) Disadvantages: Very limited support for branching: Doesn’t facilitate bug fixes to released versions Doesn’t facilitate enhancements to released versions 1.0.0 1.1.0 2.0.0 1.0.1, 1.0.2

2. Modified semver Version number is MAJOR.MINOR.PATCH(m|M) Update version number based on change: NBC change => Increment major or “patch + (M)” BC change => Increment minor or “patch + (m)” Editorial/Implementation change => Increment patch 0.x.y => pre-release, don’t have to follow rules (m|M) is sticky for a given “major.minor” Follow semver rules where possible (e.g. @dev head, and where possible for fixes/enhancements) But allows fixes/enhancements to shipped modules With great power comes great responsibility 1.1.0 1.0.0 1.1.1(M) 2.0.0 2.0.1(m) 2.0.2(m) 2.1.0 2.1.1 2.2.0

2. Modified semver – pros/cons Benefits: Like semver but allows limited branching and backwards compatibility without too much extra complexity Allows fixes (and enhancements) to released modules Backwards compatible with semver scheme. Disadvantages: Cannot always semantically compare branches, e.g. 2.0.1(m) to 2.1.0 may be nbc. Different to semver and slightly higher complexity 1.1.0 1.0.0 1.1.1(M) 2.0.0 2.0.1(m) 2.0.2(m) 2.1.0 2.1.1 2.2.0

3. Release semver Version number is RELEASE.MAJOR.MINOR.PATCH Release is updated for each major release Major.minor.patch reset to 1.0.0 Module author defines major releases Within a release: Normal semver rules are followed 1.1.0.0 Semver within a release 2.1.0.0 2.2.0.0 2.3.0.0 2.2.1.0, 2.2.1.1 3.1.0.0

3. Release semver – pros/cons Benefits: Allows more branching, e.g. fixes/enhancements within a major release Disadvantages: Loses key semver comparison (e.g. 1.2.3.4 to 2.1.0.0 may have no changes) Less familiar numbering scheme What defines a major release? 1.1.0.0 Semver within a release 2.1.0.0 2.2.0.0 2.3.0.0 2.2.1.0, 2.2.1.1 3.1.0.0

4. Schema comparison tool Idea: Use tooling to perform node by node comparison of full schema trees between two releases using rules like RFC 7950 module update rules. Refinements: Also take features and deviations into consideration Restrict comparison to subset of modules that are used Probably requires extension to tag schema nodes that cannot be automatically compared by tooling (e.g. description, pattern, xpath changes)

4. Schema comparison tool – pros/cons Benefits: Full solution - any two schema trees are comparable. Can take more considerations into account, can give a more accurate answer. Disadvantages: Have to run tool, can’t just look at a number. Will require annotations in schema for cases where the tooling cannot figure it out, could be noisy depending on quality. Requires a way to document instance data usage. Probably not a solution on its own. Best used in conjunction with a versioning number scheme.

5. RFC 7950 module update rules Specified in RFC 7950 chapter 11: All changes are backwards compatible Introduce new nodes (or modules) for nbc changes Deprecate, then obsolete, old nodes Strictly linear history, all updates to latest revision Assumptions (not in RFC 7950): Deprecated nodes must be implemented If versioned by a new module, then old module is also supported (for a while) 2001-01-01 2010-01-01 2061-01-01

5. RFC 7950 module update rules– pros/cons Benefits: Already defined Fully backwards compatible for clients Disadvantages: Not sufficient (or we wouldn’t be here) Doesn’t allow bug fixes to older releases New module breaks all existing paths Two paths to one underlying property synchronization issues 2001-01-01 2010-01-01 2061-01-01

Solution comparison table (Not intended to be a beauty contest) Branching BC fixes NBC fixes BC dev NBC dev Semver Semver: Maj.Min.Patch Very limited Only guaranteed at head At head only Yes Modified Semver: Maj.Min.Patch(M|m) Limited Recommended at head. Allowed on branch Recommended at head, allowed on branch Yes, except changes on (m|M) versions. Release Semver: Rel.Maj.Min.Patch Yes, if release number updated Yes, within a release Within a release only Schema compare tool Supported Anywhere Yes, offline RFC 6020/7950 module update rules Linear Limited/ Disallowed Disallowed Implied (always backwards compatible)

Modified semver – current front runner There is no perfect technical solution Modified semver seems to strike a pragmatic balance, hence DT front runner. Vendors should decouple versioning of modules (API) from the versioning software artifact (API implementation) The scheme allows some things that are undesirable, hence need to provide a set of sensible usage guidelines. Open issue: Is updating major and minor version number strict? Or can they be incremented without a major/minor version change?

Modified semver – example guidelines Churn is painful for clients, try to ship high quality modules and keep them stable Minimize nbc updates - particularly on released code “m|M” should be used as a tool of last resort, use normal semver where possible Version modules independently from releases If a fix is made on an older branch then port it to all newer branches at the same time. Deprecating nodes is a bc change, obsoleting is nbc.

Other work in solution space … … only if time permitting: Data node lifecycle (proposed changes to status) Revision dates Import by version Client backwards compatibility (e.g. version selection)

Data node lifecycle - YANG status changes We want the YANG versioning solution to refine: “status deprecated” to mean that a server MUST implement (or deviate) “status obsolete” to mean that a server MUST NOT implement Adding “status deprecated” to a module is a BC change Adding “status obsolete” to a module is an NBC change Allow “description” under “status” statement Provide two global leaves in YANG library: “Implements deprecated nodes” - if set, the server always implements, otherwise behavior is unspecified “No obsolete nodes“- if set, the server never implements, otherwise, behavior is unspecified

Revision dates Currently assumed to chronologically ordered, but branching breaks this. Two choices: Ditch revision dates => Respin YANG library, hello messages, etc to use version number Retain revision date => Lose chronological ordering guarantee But retain uniqueness, i.e. (module name, rev-date) uniquely identifies a module Design team is leaning towards 2.

Import by version Not been discussed by the DT in any great detail yet, but: We want to extend YANG import to allow import by version Perhaps also want to recommend that import by revision is not used. Normally will be: a set of compatible version compatible, with some sort of wildcard support, or version X or later. If we go with modified semver, need to consider bc/nbc updates to patch number.

Client backwards compatibility If we go with modified semver … … also not been discussed by the DT in any great detail yet, but: This is a hard/expensive problem to solve Probably requires clients selecting a particular module set via YANG library and protocol additions and the server maps request data between older versions to latest. Mapping to latest will be hard, impossible in some cases. Could be done in server, controller, or client What version does the client get if it doesn’t choose (earliest, or latest)?

Next Steps Incorporate feedback from the WG Converge on a solution within the DT Hopefully have initial solution draft(s) ready for IETF 104 We may split the solution into multiple drafts, e.g. Core solution - module version number Extension – version selection Extension – schema tree comparison