-
Notifications
You must be signed in to change notification settings - Fork 707
VPP DistributedOwnership
-
1 Proposal: Distributed ownership of VPP plugins
- 1.1 Background
- 1.2 Purpose
-
1.3 Steps for Implementation:
- [[1.3.1 1. Define Plugin Maintainership in the
MAINTAINERSFile|#1.Define_Plugin_Maintainership_in_the.60MAINTAINERS.60_File]] - 1.3.2 2. Create Gerrit Maintainer Groups
- [[1.3.3 3. Modify the Repository’s
project.configFile|#3.Modify_the_Repository.E2.80.99s.60project.config.60_File]]- [[1.3.3.1 Example
project.config:|#Example_.60project.config.60:]] - 1.3.3.2 General permissions (if needed for other parts of the repository)
- [[1.3.3.1 Example
- 1.3.4 4. Test the Configuration
- 1.3.5 5. Gather Feedback
- [[1.3.1 1. Define Plugin Maintainership in the
- 1.4 Conclusion
In the fd.io VPP project a maintainer has mainly a role as a gatekeeper for a particular feature. Unfortunately there is no automation ensuring that a maintainer is involved in reviewing all changes to the component they are responsible for. This can lead to a situation where a maintainer is not aware of changes to their component until after they have been merged.
Many open source project have a distributed ownership model, where the maintainers of a component are responsible for review and upstream merging of code changes.
In VPP this role has been centralized to the project committers. This has worked well for the project, but as the project grows and more plugins are added, it may be beneficial to delegate some of the review and merge responsibilities to the maintainers of the plugins.
This proposal is two fold. Firstly, add tooling so that maintainers are automatically added to the review process for changes to their component. Secondly, to delegate the ability to merge changes to the maintainers of the component.
The intent is that the +1/-1 (review) is added for all components. And that the +2/-2 (merge) is added for the component maintainers initially on a per-request basis. Treat it as an example to learn how well the distributed ownership model works for the VPP project.
To ensure that the quality of the codebase is maintained, the project committers will still have the ability to override the maintainers decisions.
Ensure that the MAINTAINERS file in the VPP repository is properly structured to specify maintainers for each plugin. The MAINTAINERS file should follow a format like:
Plugin - linux-cp
I: linux-cp
M: Neale Ranns <[[email protected]](/cdn-cgi/l/email-protection)>
M: Matthew Smith <[[email protected]](/cdn-cgi/l/email-protection)>
F: src/plugins/linux-cp/
Plugin - SRTP
I: srtp
M: Florin Coras <[[email protected]](/cdn-cgi/l/email-protection)>
F: src/plugins/srtp/
Plugin - bufmon
I: bufmon
M: Benoît Ganne <[[email protected]](/cdn-cgi/l/email-protection)>
F: src/plugins/bufmon/
For each plugin, create a corresponding Gerrit group that contains the maintainers responsible for reviewing and merging code in that plugin's directory.
The synchronisation between Gerrit Groups and the MAINTAINERS file should be handled automatically by a CI job.
-
fdio-vpp-linux-cp-maintainersfor thelinux-cpplugin -
fdio-vpp-srtp-maintainersfor thesrtpplugin -
fdio-vpp-bufmon-maintainersfor thebufmonplugin
Update the project.config for the VPP repository to delegate Code Review and submit permissions to the plugin maintainers for their respective plugin directories.
[access "refs/heads/\*"]
label-Code-Review = -2..+2 group linux-cp-maintainers submit = group linux-cp-maintainers exclusiveGroupPermissions = label-Code-Review submit path = "src/plugins/linux-cp/"
[access "refs/heads/\*"]
label-Code-Review = -2..+2 group srtp-maintainers submit = group srtp-maintainers exclusiveGroupPermissions = label-Code-Review submit path = "src/plugins/srtp/"
[access "refs/heads/\*"]
label-Code-Review = -2..+2 group bufmon-maintainers submit = group bufmon-maintainers exclusiveGroupPermissions = label-Code-Review submit path = "src/plugins/bufmon/"
[access "refs/heads/\*"]
label-Code-Review = -1..+1 group vpp-reviewers submit = group vpp-submitters
This configuration ensures that only the relevant maintainer group can provide +2 Code Review and submit changes for their respective plugin directory.
The project.config file is in the project refs/meta/config branch.
Before rolling out the changes to all users, create a test or sandbox project to verify that the project.config changes work as expected. Perform the following tests:
- Ensure that maintainers of each plugin can review and merge code only in their assigned directories.
- Ensure that other maintainers or users cannot review or merge code outside their areas of responsibility.
- Verify that project committers can still review and merge code across all directories.
This document is a draft proposal. Please provide feedback or suggestions for improving the process. Key areas for consideration include:
- Should additional permissions be granted to non-maintainers for reviewing plugin code?
- How do we handle cases where a patch affects multiple plugins?
The understanding, which needs to be tested, is that for changes affecting multiple plugins, then each plugin maintainer would need to approve the change. This could be a limitation or a feature, depending on the use case.
- Do we need to ensure that commiters can override? E.g., for emergency fixes or style fixes or fixes to the core VPP API?
By delegating review and merge responsibilities to plugin maintainers, we aim to increase the efficiency and accuracy of the code review process. Plugin maintainers have deep knowledge of the code in their area, and allowing them to merge code directly will speed up development without compromising quality.
Please share your feedback on this proposal by [insert deadline].
- VPP 2022 Make Test Use Case Poll
- VPP-AArch64
- VPP-ABF
- VPP Alternative Builds
- VPP API Concepts
- VPP API Versioning
- VPP-ApiChangeProcess
- VPP-ArtifactVersioning
- VPP-BIER
- VPP-Bihash
- VPP-BugReports
- VPP Build System Deep Dive
- VPP Build, Install, And Test Images
- VPP-BuildArtifactRetentionPolicy
- VPP-c2cpel
- VPP Code Walkthrough VoD
- VPP Code Walkthrough VoD Topic Index
- VPP Code Walkthrough VoDs
- VPP-CodeStyleConventions
- VPP-CodingTips
- VPP Command Line Arguments
- VPP Command Line Interface CLI Guide
- VPP-CommitMessages
- VPP-Committers-SMEs
- VPP-CommitterTasks-ApiFreeze
- VPP CommitterTasks Compare API Changes
- VPP-CommitterTasks-CutPointRelease
- VPP-CommitterTasks-CutRelease
- VPP-CommitterTasks-FinalReleaseCandidate
- VPP-CommitterTasks-PullThrottleBranch
- VPP-CommitterTasks-ReleasePlan
- VPP Configuration Tool
- VPP Configure An LW46 MAP E Terminator
- VPP Configure VPP As A Router Between Namespaces
- VPP Configure VPP TAP Interfaces For Container Routing
- VPP-CoreFileMismatch
- VPP-cpel
- VPP-cpeldump
- VPP-CurrentData
- VPP-DHCPKit
- VPP-DHCPv6
- VPP-DistributedOwnership
- VPP-Documentation
- VPP DPOs And Feature Arcs
- VPP EC2 Instance With SRIOV
- VPP-elog
- VPP-FAQ
- VPP Feature Arcs
- VPP-Features
- VPP-Features-IPv6
- VPP-FIB
- VPP-g2
- VPP Getting VPP 16.06
- VPP Getting VPP Release Binaries
- VPP-HA
- VPP-HostStack
- VPP-HostStack-BuiltinEchoClientServer
- VPP-HostStack-EchoClientServer
- VPP-HostStack-ExternalEchoClientServer
- VPP HostStack Hs Test
- VPP-HostStack-LDP-iperf
- VPP-HostStack-LDP-nginx
- VPP-HostStack-LDP-sshd
- VPP-HostStack-nginx
- VPP-HostStack-SessionLayerArchitecture
- VPP-HostStack-TestHttpServer
- VPP-HostStack-TestProxy
- VPP-HostStack-TLS
- VPP-HostStack-VCL
- VPP-HostStack-VclEchoClientServer
- VPP-Hotplug
- VPP How To Add A Tunnel Encapsulation
- VPP How To Build The Sample Plugin
- VPP How To Connect A PCI Interface To VPP
- VPP How To Create A VPP Binary Control Plane API
- VPP How To Deploy VPP In EC2 Instance And Use It To Connect Two Different VPCs
- VPP How To Optimize Performance %28System Tuning%29
- VPP How To Use The API Trace Tools
- VPP How To Use The C API
- VPP How To Use The Packet Generator And Packet Tracer
- VPP-Howtos
- VPP-index
- VPP Installing VPP Binaries From Packages
- VPP Interconnecting vRouters With VPP
- VPP Introduction To IP Adjacency
- VPP Introduction To N Tuple Classifiers
- VPP IP Adjacency Introduction
- VPP-IPFIX
- VPP-IPSec
- VPP IPSec And IKEv2
- VPP IPv6 SR VIRL Topology File
- VPP Java API
- VPP Java API Plugin Support
- VPP Jira Workflow
- VPP-Macswapplugin
- VPP-MakeTestFramework
- VPP-Meeting
- VPP-MFIB
- VPP Missing Prefetches
- VPP Modifying The Packet Processing Directed Graph
- VPP MPLS FIB
- VPP-NAT
- VPP Nataas Test
- VPP-OVN
- VPP Per Feature Notes
- VPP Performance Analysis Tools
- VPP-perftop
- VPP Progressive VPP Tutorial
- VPP Project Meeting Minutes
- VPP Pulling, Building, Running, Hacking And Pushing VPP Code
- VPP Pure L3 Between Namespaces With 32s
- VPP Pure L3 Container Networking
- VPP Pushing And Testing A Tag
- VPP Python API
- VPP-PythonVersionPolicy
- VPP-QuickTrexSetup
- VPP Random Hints And Kinks For KVM Usage
- VPP Release Plans Release Plan 16.09
- VPP Release Plans Release Plan 17.01
- VPP Release Plans Release Plan 17.04
- VPP Release Plans Release Plan 17.07
- VPP Release Plans Release Plan 17.10
- VPP Release Plans Release Plan 18.01
- VPP Release Plans Release Plan 18.04
- VPP Release Plans Release Plan 18.07
- VPP Release Plans Release Plan 18.10
- VPP Release Plans Release Plan 19.01
- VPP Release Plans Release Plan 19.04
- VPP Release Plans Release Plan 19.08
- VPP Release Plans Release Plan 20.01
- VPP Release Plans Release Plan 20.05
- VPP Release Plans Release Plan 20.09
- VPP Release Plans Release Plan 21.01
- VPP Release Plans Release Plan 21.06
- VPP Release Plans Release Plan 21.10
- VPP Release Plans Release Plan 22.02
- VPP Release Plans Release Plan 22.06
- VPP Release Plans Release Plan 22.10
- VPP Release Plans Release Plan 23.02
- VPP Release Plans Release Plan 23.06
- VPP Release Plans Release Plan 23.10
- VPP Release Plans Release Plan 24.02
- VPP Release Plans Release Plan 24.06
- VPP Release Plans Release Plan 24.10
- VPP Release Plans Release Plan 25.02
- VPP Release Plans Release Plan 25.06
- VPP Release Plans Release Plan 25.10
- VPP Release Plans Release Plan 26.02
- VPP Release Plans Release Plan 26.06
- VPP-RM
- VPP-SecurityGroups
- VPP Segment Routing For IPv6
- VPP Segment Routing For MPLS
- VPP Setting Up Your Dev Environment
- VPP-SNAT
- VPP Software Architecture
- VPP STN Testing
- VPP The VPP API
- VPP Training Events
- VPP-Troubleshooting
- VPP-Troubleshooting-BuildIssues
- VPP-Troubleshooting-Vagrant
- VPP Tutorial DPDK And MacSwap
- VPP Tutorial Routing And Switching
- VPP-Tutorials
- VPP Use VPP To Chain VMs Using Vhost User Interface
- VPP Use VPP To Connect VMs Using Vhost User Interface
- VPP Using mTCP User Mode TCP Stack With VPP
- VPP Using VPP As A VXLAN Tunnel Terminator
- VPP Using VPP In A Multi Thread Model
- VPP-VOM
- VPP VPP BFD Nexus
- VPP VPP Home Gateway
- VPP VPP WIKI DEPRECATED CONTENT
- VPP-VPPCommunicationsLibrary
- VPP-VPPConfig
- VPP What Is ODP4VPP
- VPP What Is VPP
- VPP Working Environments
- VPP Working With The 16.06 Throttle Branch