Best Practices and Pitfalls for Building Products out of OpenDaylight Colin Dixon,TSC Chair, OpenDaylight Principal Software Engineer, Brocade Devin Avery,Sr.

Slides:



Advertisements
Similar presentations
Upgrading Software CIT 1100 Chapter4.
Advertisements

Software Configuration Management Donna Albino LIS489, December 3, 2014.
OpenDaylight Architecture ONF Member Work Day February 12 th, 2015 Colin TSC Chair, OpenDaylight Principal Engineer, Brocade.
Concepts of Version Control A Technology-Independent View.
Remote Unit Testing Brian Pruitt-Goddard Alex Riordan.
CS 501 : An Introduction to SCM & GForge An Introduction to SCM & GForge Lin Guo
Chapter Thirteen Maintaining and Upgrading a Network.
Source Code Management Or Configuration Management: How I learned to Stop Worrying and Hate My Co-workers Less.
Your Open Source strategy sucks! (well,… probably mine stinks)
1 CMPT 275 Software Engineering Revision Control.
Prof. Aiken CS 169 Lecture 71 Version Control CS169 Lecture 7.
Version Control with git. Version Control Version control is a system that records changes to a file or set of files over time so that you can recall.
Operational Java for Technical Committee.
How WebMD Maintains Operational Flexibility with NoSQL Rajeev Borborah, Sr. Director, Engineering Matt Wilson – Director, Production Engineering – Consumer.
Version Control with Subversion. What is Version Control Good For? Maintaining project/file history - so you don’t have to worry about it Managing collaboration.
Craig Berntson Chief Software Gardener Mojo Software Worx Branches and Merges are Bears, Oh My!
Eurostat D.1 SdmxSource SDMX RI User Group Luxembourg, September 2013.
Programming and Application Packages
Introduction to Version Control
Version Control with Subversion Quick Reference of Subversion.
Platform Upgrades As A Service Raj Nagarajan, Robert Enyedi.
CMS Security Justin Klein Keane CMS Working Group March 3, 2010.
1 Lecture 19 Configuration Management Software Engineering.
Show me the money Succeeding with the recurring revenue model Mark Emanuelson Atlantic Technologies.
Git – versioning and managing your software L. Grewe.
GIT An introduction to GIT Source Control. What is GIT (1 of 2) ▪ “Git is a free and open source distributed version control system designed to handle.
Cloud Computing Characteristics A service provided by large internet-based specialised data centres that offers storage, processing and computer resources.
Branching. Version Control - Branching A way to write code without affecting the rest of your team Merge branches to integrate your changes.
Version control Using Git Version control, using Git1.
Steve Huey Aluria Software an EarthLink Company Vice President & General Manager UpDate Strategy: Key to Increased Sales, Lower Costs, and Greater Customer.
SWEN 302: AGILE METHODS Roma Klapaukh & Alex Potanin.
Version Control.
Chapter 14 Part II: Architectural Adaptation BY: AARON MCKAY.
Component Technology. Challenges Facing the Software Industry Today’s applications are large & complex – time consuming to develop, difficult and costly.
Copyright © IBM Corp., All rights reserved. From SWT to RCP: Experiences implementing RSSOwl 2.0 with RCP Benjamin Pasero.
Cloud Computing Project By:Jessica, Fadiah, and Bill.
Created by Jan Medved Integration & Test Strategy for Lithium.
© 2015 BROCADE COMMUNICATIONS SYSTEMS, INC. Brocade SDxCentral SDN Controller Report.
11 Version Control Systems Mauro Jaskelioff (originally by Gail Hopkins)
Software from Requirements Brent Haines April 12, 2007 Why Methodology Doesn’t Really Matter.
Confidential Continuous Integration Framework (CIF) 5/18/2004.
Proprietary vs. Free/Open Source Software
Anubha Gupta | Software Engineer Visual Studio Online Microsoft Corp. Visual Studio Enterprise Leveraging modern tools to streamline Build and Release.
P51UST: Unix and SoftwareTools Unix and Software Tools (P51UST) Version Control Systems Ruibin Bai (Room AB326) Division of Computer Science The University.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 21 Slide 1 Software evolution.
SPI NIGHTLIES Alex Hodgkins. SPI nightlies  Build and test various software projects each night  Provide a nightlies summary page that displays all.
CERN IT Department CH-1211 Genève 23 Switzerland t Migration from ELFMs to Agile Infrastructure CERN, IT Department.
SECTION 1: CODE REASONING + VERSION CONTROL slides borrowed and adapted from Alex Mariakis and CSE 390a Justin Bare & Deric Pang.
TEAM FOUNDATION VERSION CONTROL AN OVERVIEW AND WALKTHROUGH By: Michael Mallar.
Clustering in OpenDaylight
Founded by Big Five Consulting ex-employees Oracle Gold Partner Focus on PeopleSoft 15 years of PeopleSoft experience Worked in both technical and functional.
XNAT 1.7: Getting Started 6 June, Introduction In this presentation we’ll discuss:  Features and functions in XNAT 1.7  Requirements  Installing.
ALM Deployment Pipeline Implementation. Create a Repeatable, Reliable Process for Releasing Software. Automate Almost Everything Keep Everything in Version.
Updating FreeBSD Unix System Administration. Objectives At the end of this session you should be able to: 1. Understand the differences between the CURRENT.
Open-O Integration Project Introduction
Introducing OpenLMIS 13 December 2016.
Build Automation with Gradle
Version Control with Subversion
LECTURE 2: Software Configuration Management
Version Control.
Docker Birthday #3.
Chapter 18 Maintaining Information Systems
Brian Leonard ブライアン レオナルド
Intent (Thanks to Jim Fawcett for the slides)
Software Testing and Maintenance Maintenance and Evolution Overview
Discussing an OVS/OVN Split
Keeping your SQL Code safe
Putting Together a DevOps Pipeline Leveraging Technology, Process, and People 1 May 2019 Mr. Patrick Bush.
Session Abstract This session will provide an overview of the latest improvements and enhancements made to the Ed-Fi ODS/API in 2016, as well as a preview.
Interoperability Testing
Presentation transcript:

Best Practices and Pitfalls for Building Products out of OpenDaylight Colin Dixon,TSC Chair, OpenDaylight Principal Software Engineer, Brocade Devin Avery,Sr Staff Software Engineer, Brocade #ODSummit

Agenda Agenda / Introduction Common Pitfalls Best Practices Future Considerations Questions #ODSummit

Our experience productizing OpenDaylight Brocade has released multiple versions of a controller for Brocade So far, based on Helium-SR1, Helium-SR2, and Helium-SR3 Rapidly approaching first Lithium-based release Running in production with real customers We’ve been successful in doing this even when incorporating upstream changes Share our experiences -- pitfalls and successes #ODSummit

Common Pitfalls #ODSummit

One way to build a release based on OpenDaylight Clone the OpenDaylight code (its public after all!) Modify the code to customize / brand Add new code into the existing projects for your proprietary logic Run the build Test, Ship and Sell it! Great, that was easy… This is the first thing nearly everyone does #ODSummit wrong

How (not) to build a custom fabric app and host tracker MyFabric App Flow Programming …… Host Tracking + MyFabric Δs ……Topology…… #ODSummit

This doesn’t work! By cloning OpenDaylight code you have essentially forked the code! Synchronizing code with upstream can be difficult Your changes may not be accepted upstream (and you may not want them upstream) Pulling changes from upstream is likely to result in constant merge conflicts To avoid this pain, sync with upstream less often => increases pain => even less often Results in lower interaction in community since code base is out of sync Don’t get bug fixes, security patches, etc. OpenDaylight source code is licensed under EPL – may put your proprietary changes at risk* *Note: we are not lawyers. Be sure to discuss any legal / licensing issues with your legal team #ODSummit merely

#ODSummit In Practice, this “forking” results in permanent divergence from upstream OpenDaylight That is, you no longer have an OpenDaylight-based product in most of the ways you and your customers care about.

Best Practices #ODSummit

Treat OpenDaylight as a Third-party Don’t Download the OpenDaylight Source Code! Treat OpenDaylight as a collection read-only third-party artifacts Reference ODL artifacts, don’t build them Leverage maven to access, maintain and manage your third-party dependencies for you For example: We don’t recompile the basic java.util.ArrayList Java class, we reference/use it We certainly don’t modify the java.util.ArrayList source code locally and build it #ODSummit

But OpenDaylight might not be a Third-party If you have modify OpenDaylight source code Push the changes upstream Wait for the next release—major or stability Fold the changes in when bump your upstream versions What about critical bugfixes/patches? Push the change upstream cherry-pick the patches into a locally-created clone of the upstream repo Build and “release” your own version of the relevant bundle(s) Note: this is complex and has risk, avoid it when possible. #ODSummit

Make changes to OpenDaylight upstream! We need OpenDaylight’s core functionality to succeed Otherwise our extensions, apps, etc. don’t matter You should Provide bug fixes Discuss new requirements Share implementations, interfaces, extension points, etc. You will benefit from working more closely with upstream Get patches/fixes faster More likely have to have core OpenDaylight meet your needs faster #ODSummit Dave Neary on Swimming Upstream: upstream upstream

Keep your proprietary code isolated to your own repositories, bundles, and Karaf features Leverage OSGi/Karaf/Maven to combine your code with OpenDaylight Leverage YANG/MD-SAL/Config system modularity to load proprietary implementations into the modeling system OSGi is generally friendly with the EPL license* Karaf Leverage ODL Modularity / Isolate Proprietary Code #ODSummit Existing OpenDaylight Bundles *Note: we are not lawyers. Be sure to discuss any legal / licensing issues with your legal team MyFabric

Extension Example: Apps MyFabric App Flow Programming ……Host Tracking……Topology…… #ODSummit OpenDaylight Code/Bundles Your Proprietary Code/Bundles

Extension Example: Replacing a Service OtherFabric App Flow Programming ……MyHostTracker……Topology…… #ODSummit Write an OSGi bundle that populates the Host Tracker YANG model Existing apps/services (either ODL or proprietary) will use the new implementation

Extension Example: Modifying an Existing Service OtherFabric App Flow Programming ……Host Tracking…Topology… #ODSummit OFVendorExt YANG OFVendorExt Java Augment existing YANG models with new information Provide Java code to extend behavior Requires Java extension points This is possible, but complex, needs thought and work Slides from ONS talk: content/uploads/2014/05/YANG-good-bad-ugly-ONS pdfhttp://colindixon.com/wp- content/uploads/2014/05/YANG-good-bad-ugly-ONS pdf

Stabilize Development Environment – No to Snapshots! Don’t build using OpenDaylight snapshots! We don’t compile against beta versions of the JRE, we compile against released versions! Snapshots are volatile, and change constantly. Harder to determine if failures are related to your code, or snapshot change Customers want “stable” artifacts (won’t run on snapshots) If you use snapshots, then your release is tied directly to OpenDaylight release If you have time, you can compile dev versions of your code against dev versions of OpenDaylight to “scope out” potential issues #ODSummit

Stabilize Development Environment – No to Snapshots! #ODSummit He-1He-2He-3He C-2 C-3 C-5 C-1 T = 0T = 1T = 2T = 3T = 4 He- 2Dev He-3 Dev He-4 Dev He-1 Dev Your Company’s Artifacts Released OpenDaylight Artifacts (Stable) Active OpenDaylight Development (Volatile) C-4 Ex: Multiple Proprietary Releases He-4 He-5 Dev

The Result A product which references OpenDaylight artifacts Proprietary code is isolated, and can be updated without affecting OpenDaylight code Also potentially avoid legal/licensing pain (ASK YOUR LAWYERS!) Changing versions of OpenDaylight code is just an update to a version in a pom file …and some testing Allows for a stable OpenDaylight controller on which to build proprietary implementations #ODSummit

Future Considerations #ODSummit

Focus more on our users #ODSummit Core DeveloperApp/Bus Log DevREST API DevAdministratorOperator User Interface ✔✔✔✔✔ REST API ✔✔✔✔✔✔✔ App/Business Logic ✔✔✔✔✔✔ MD-SAL/YANG ✔✔✔✔ South Bound Business Logic ✔✔✔✔✔ Meta-tasks, e.g., install & upgrade ✔✔✔✔✔

Core DeveloperApp/Bus Log DevREST API DevAdministratorOperator User Interface ✔✔✔✔✔ REST API ✔✔✔✔✔✔✔ App/Business Logic ✔✔✔✔✔✔ MD-SAL/YANG ✔✔✔✔ South Bound Business Logic ✔✔✔✔✔ Meta-tasks, e.g., install & upgrade ✔✔✔✔✔ Focus more on our users #ODSummit

Example: Easy Upgrades for Users Upgrades are a MUST! Customers will not accept a “reinstall/reconfigure” story Upgrades in OpenDaylight are an afterthought Upgrades need to be a requirement No testing in OpenDaylight today! Some problem areas / considerations Configuration & Implementation stored together We have configuration options and implementations (classes, etc) defined in the same file. Out-of-the-box and customer configurations stored together If customer change behavior then we can no longer safely upgrade (replace) the file. Need to merge  “expensive” Upgrades not always backwards compatible with previous version #ODSummit

Example: Minimizing risk of updates Currently everything needs to stay in one major monolithic release Helium-SR1 vs Helium-SR2 – Interoperability / co-existence is not tested We find security vulnerability in OpenFlow Patch OpenFlow Rebuild everything Release Helium-SR2 with the fix We’ve also pulled in potentially changes to everything else and changed all versions #ODSummit Karaf (All SR1) Existing OpenDaylight Bundles (He-SR1) MyFabric w/He-SR1 OF (He- SR1) MD-SAL (He- SR1) Karaf (All SR2) Existing OpenDaylight Bundles (He-SR2) MyFabric w/He-SR2 OF (He- SR2) MD-SAL (He- SR2)

Example: Minimizing risk of updates We would like to to be able to upgrade only what changed Fix the OF vulnerability, release it, don’t have to worry about changes in everything This would allow Faster delivery of fixes and features Lower risk to adopting fixes and features Some complexity in testing, compatibility matrices, avoiding huge versions skew, etc. #ODSummit Karaf (All SR1) MyFabric w/He-SR1 Karaf (SR1 + OF fix) MyFabric w/He-SR1 OF (He- SR1+fix) MD-SAL (He- SR1) This is all that changed!! OF (He- SR1) MD-SAL (He- SR1)

#ODSummit Conclusions Treat OpenDaylight as a third-party (don’t fork it!) Leverage Karaf, Maven, OSGi, YANG, Config system for modularity We still need to do better at user focus Where user is core developer, app developer, REST API developer, operator, administrator, etc. Easy upgrades, more modularity, version compatibility, etc.