1
0
mirror of https://github.com/gluster/glusterdocs.git synced 2026-02-06 09:46:46 +01:00
Files
2024-03-07 13:07:38 +00:00

5239 lines
104 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Project documentation for Gluster Filesystem">
<link rel="canonical" href="http://docs.gluster.org/Developer-guide/Development-Workflow/">
<link rel="prev" href="../compiling-rpms/">
<link rel="next" href="../Building-GlusterFS/">
<link rel="icon" href="../../images/favicon.ico">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
<title>Development-Workflow - Gluster Docs</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.558e4712.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.2505c338.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../css/custom.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#development-workflow-of-gluster" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Gluster Docs" class="md-header__button md-logo" aria-label="Gluster Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Gluster Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Development-Workflow
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="" data-md-color-accent="" aria-label="Bring back the sunshine" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Bring back the sunshine" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="" aria-label="Turn off the lights" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Turn off the lights" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/gluster/glusterdocs/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Gluster Docs" class="md-nav__button md-logo" aria-label="Gluster Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Gluster Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/gluster/glusterdocs/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" tabindex="0" aria-expanded="false">
Getting started with GlusterFS
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Getting started with GlusterFS" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Getting started with GlusterFS
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-Introduction/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../../Quick-Start-Guide/Quickstart/" class="md-nav__link">
Quick Start Guide
</a>
</li>
<li class="md-nav__item">
<a href="../../Quick-Start-Guide/Architecture/" class="md-nav__link">
Architecture
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" tabindex="0" aria-expanded="false">
Install Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Install Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Install Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Install-Guide/Overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Common-criteria/" class="md-nav__link">
Common Criteria
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Setup-virt/" class="md-nav__link">
Setting up in virtual machines
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Setup-Bare-metal/" class="md-nav__link">
Setting up on physical servers
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Setup-aws/" class="md-nav__link">
Deploying in AWS
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Install/" class="md-nav__link">
Install
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Configure/" class="md-nav__link">
Configure
</a>
</li>
<li class="md-nav__item">
<a href="../../Install-Guide/Community-Packages/" class="md-nav__link">
Community Packages
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" tabindex="0" aria-expanded="false">
Administration Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Administration Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Administration Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Administrator-Guide/overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Start-Stop-Daemon/" class="md-nav__link">
Managing the Gluster Service
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Storage-Pools/" class="md-nav__link">
Managing Trusted Storage Pools
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_4_5" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_5" tabindex="0" aria-expanded="false">
Setting Up Storage
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Setting Up Storage" data-md-level="2">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Setting Up Storage
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Administrator-Guide/setting-up-storage/" class="md-nav__link">
Setting Up Storage
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Brick-Naming-Conventions/" class="md-nav__link">
Brick Naming Conventions
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/formatting-and-mounting-bricks/" class="md-nav__link">
Formatting and Mounting Bricks
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Access-Control-Lists/" class="md-nav__link">
Access Control Lists
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Handling-of-users-with-many-groups/" class="md-nav__link">
Handling of users that belong to many groups
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Setting-Up-Volumes/" class="md-nav__link">
Setting Up Volumes
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Setting-Up-Clients/" class="md-nav__link">
Setting Up Clients
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Managing-Volumes/" class="md-nav__link">
Managing Volumes
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Building-QEMU-With-gfapi-For-Debian-Based-Systems/" class="md-nav__link">
Building QEMU with gfapi For Debian Based Systems
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-Filter/" class="md-nav__link">
GlusterFS Filter
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Logging/" class="md-nav__link">
Logging
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_4_13" type="checkbox" id="__nav_4_13" >
<label class="md-nav__link" for="__nav_4_13" tabindex="0" aria-expanded="false">
Features
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Features" data-md-level="2">
<label class="md-nav__title" for="__nav_4_13">
<span class="md-nav__icon md-icon"></span>
Features
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Administrator-Guide/setting-up-storage/" class="md-nav__link">
Setting Up Storage
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Automatic-File-Replication/" class="md-nav__link">
Replication
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Geo-Replication/" class="md-nav__link">
Geo Replication
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Directory-Quota/" class="md-nav__link">
Quotas
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Managing-Snapshots/" class="md-nav__link">
Snapshots
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Trash/" class="md-nav__link">
Trash
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/io_uring/" class="md-nav__link">
io_uring
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Monitoring-Workload/" class="md-nav__link">
Monitoring Workload
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Object-Storage/" class="md-nav__link">
Object Storage
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-Cinder/" class="md-nav__link">
GlusterFS Cinder
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-Keystone-Quickstart/" class="md-nav__link">
GlusterFS Keystone Quickstart
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Gluster-On-ZFS/" class="md-nav__link">
Gluster On ZFS
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Bareos/" class="md-nav__link">
Configuring Bareos to store backups on Gluster
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/SSL/" class="md-nav__link">
SSL
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Puppet/" class="md-nav__link">
Puppet Gluster
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/RDMA-Transport/" class="md-nav__link">
RDMA Transport
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-iSCSI/" class="md-nav__link">
GlusterFS iSCSI
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/NFS-Ganesha-GlusterFS-Integration/" class="md-nav__link">
Configuring NFS-Ganesha server
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Linux-Kernel-Tuning/" class="md-nav__link">
Linux Kernel Tuning
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Network-Configurations-Techniques/" class="md-nav__link">
Network Configuration Techniques
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Performance-Testing/" class="md-nav__link">
Performance Testing
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Performance-Tuning/" class="md-nav__link">
Performance Tuning
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Export-And-Netgroup-Authentication/" class="md-nav__link">
Export and Netgroup Authentication
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Consul/" class="md-nav__link">
Consul integration
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Split-brain-and-ways-to-deal-with-it/" class="md-nav__link">
Split brain and ways to deal with it
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/arbiter-volumes-and-quorum/" class="md-nav__link">
Arbiter volumes and quorum options
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Thin-Arbiter-Volumes/" class="md-nav__link">
Thin Arbiter volumes
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Trash/" class="md-nav__link">
Trash for GlusterFS
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Tuning-Volume-Options/" class="md-nav__link">
Tuning Volume Options
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Mandatory-Locks/" class="md-nav__link">
Mandatory Locks
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/GlusterFS-Coreutils/" class="md-nav__link">
GlusterFS coreutilities
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Events-APIs/" class="md-nav__link">
Events APIs
</a>
</li>
<li class="md-nav__item">
<a href="../../Administrator-Guide/Hook-scripts/" class="md-nav__link">
Managing GlusterFS Volume Life-Cycle Extensions with Hook Scripts
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" tabindex="0" aria-expanded="false">
CLI Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="CLI Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
CLI Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../CLI-Reference/cli-main/" class="md-nav__link">
Overview
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../presentations/" class="md-nav__link">
Presentations
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_7" type="checkbox" id="__nav_7" checked>
<label class="md-nav__link" for="__nav_7" tabindex="0" aria-expanded="true">
Developers Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Developers Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Developers Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../Developers-Index/" class="md-nav__link">
Developers Home
</a>
</li>
<li class="md-nav__item">
<a href="../Simplified-Development-Workflow/" class="md-nav__link">
Simplified Development Workflow
</a>
</li>
<li class="md-nav__item">
<a href="../compiling-rpms/" class="md-nav__link">
Compiling RPMS
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Development-Workflow
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Development-Workflow
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#basics" class="md-nav__link">
Basics
</a>
<nav class="md-nav" aria-label="Basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#git-and-github" class="md-nav__link">
Git and Github
</a>
</li>
<li class="md-nav__item">
<a href="#jenkins" class="md-nav__link">
Jenkins
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#preparatory-setup" class="md-nav__link">
Preparatory Setup
</a>
<nav class="md-nav" aria-label="Preparatory Setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fork-repository" class="md-nav__link">
Fork Repository
</a>
</li>
<li class="md-nav__item">
<a href="#clone-a-working-tree" class="md-nav__link">
Clone a working tree
</a>
</li>
<li class="md-nav__item">
<a href="#preferred-email-and-set-username" class="md-nav__link">
Preferred email and set username
</a>
</li>
<li class="md-nav__item">
<a href="#watch-glusterfs" class="md-nav__link">
Watch glusterfs
</a>
</li>
<li class="md-nav__item">
<a href="#email-filters" class="md-nav__link">
Email filters
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#development-other-flows" class="md-nav__link">
Development &amp; Other flows
</a>
<nav class="md-nav" aria-label="Development &amp; Other flows">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#issue" class="md-nav__link">
Issue
</a>
</li>
<li class="md-nav__item">
<a href="#code" class="md-nav__link">
Code
</a>
</li>
<li class="md-nav__item">
<a href="#keep-up-to-date" class="md-nav__link">
Keep up-to-date
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#branching-policy" class="md-nav__link">
Branching policy
</a>
<nav class="md-nav" aria-label="Branching policy">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#develrelease-branches" class="md-nav__link">
Devel/release branches
</a>
</li>
<li class="md-nav__item">
<a href="#personal-per-task-branches" class="md-nav__link">
Personal per-task branches
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#building" class="md-nav__link">
Building
</a>
<nav class="md-nav" aria-label="Building">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#environment-setup" class="md-nav__link">
Environment Setup
</a>
</li>
<li class="md-nav__item">
<a href="#creating-build-environment" class="md-nav__link">
Creating build environment
</a>
</li>
<li class="md-nav__item">
<a href="#build-and-install" class="md-nav__link">
Build and install
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#commit-policy-pr-description" class="md-nav__link">
Commit policy / PR description
</a>
</li>
<li class="md-nav__item">
<a href="#push-the-change" class="md-nav__link">
Push the change
</a>
</li>
<li class="md-nav__item">
<a href="#test-cases-and-verification" class="md-nav__link">
Test cases and Verification
</a>
<nav class="md-nav" aria-label="Test cases and Verification">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#auto-triggered-tests" class="md-nav__link">
Auto-triggered tests
</a>
</li>
<li class="md-nav__item">
<a href="#glusto-test-framework" class="md-nav__link">
Glusto test framework
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#reviewing-commenting" class="md-nav__link">
Reviewing / Commenting
</a>
</li>
<li class="md-nav__item">
<a href="#incorporate-rfcsh-reverify" class="md-nav__link">
Incorporate, rfc.sh, Reverify
</a>
</li>
<li class="md-nav__item">
<a href="#submission-qualifiers" class="md-nav__link">
Submission Qualifiers
</a>
</li>
<li class="md-nav__item">
<a href="#submission-disqualifiers" class="md-nav__link">
Submission Disqualifiers
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../Building-GlusterFS/" class="md-nav__link">
Build and Install GlusterFS
</a>
</li>
<li class="md-nav__item">
<a href="../Projects/" class="md-nav__link">
Project Ideas
</a>
</li>
<li class="md-nav__item">
<a href="../Easy-Fix-Bugs/" class="md-nav__link">
EasyFix bugs
</a>
</li>
<li class="md-nav__item">
<a href="../Fixing-issues-reported-by-tools-for-static-code-analysis/" class="md-nav__link">
Fixing issues reported by tools for static code analysis
</a>
</li>
<li class="md-nav__item">
<a href="../Backport-Guidelines/" class="md-nav__link">
Backport Guidelines
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_8" type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8" tabindex="0" aria-expanded="false">
Contributors Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Contributors Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Contributors Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Contributors-Guide/Index/" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../../Contributors-Guide/Bug-Reporting-Guidelines/" class="md-nav__link">
Bug reporting guidelines
</a>
</li>
<li class="md-nav__item">
<a href="../../Contributors-Guide/Bug-Triage/" class="md-nav__link">
Bug Triage
</a>
</li>
<li class="md-nav__item">
<a href="../../Contributors-Guide/GlusterFS-Release-process/" class="md-nav__link">
GlusterFS Release process
</a>
</li>
<li class="md-nav__item">
<a href="../../Contributors-Guide/Guidelines-For-Maintainers/" class="md-nav__link">
Guidelines For Maintainers
</a>
</li>
<li class="md-nav__item">
<a href="../../Contributors-Guide/Adding-your-blog/" class="md-nav__link">
Adding your gluster blog
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_9" type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" tabindex="0" aria-expanded="false">
Ops Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Ops Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Ops Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Ops-Guide/Overview/" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item">
<a href="../../Ops-Guide/Tools/" class="md-nav__link">
Tools
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_10" type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10" tabindex="0" aria-expanded="false">
Upgrade-Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Upgrade-Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
Upgrade-Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/" class="md-nav__link">
Upgrade-Guide Index
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/op-version/" class="md-nav__link">
Op-version
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/generic-upgrade-procedure/" class="md-nav__link">
Generic upgrade procedure
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-11/" class="md-nav__link">
Upgrade to 11
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-10/" class="md-nav__link">
Upgrade to 10
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-9/" class="md-nav__link">
Upgrade to 9
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-8/" class="md-nav__link">
Upgrade to 8
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-7/" class="md-nav__link">
Upgrade to 7
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-6/" class="md-nav__link">
Upgrade to 6
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-5/" class="md-nav__link">
Upgrade to 5
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-4.1/" class="md-nav__link">
Upgrade to 4.1
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-4.0/" class="md-nav__link">
Upgrade to 4.0
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.13/" class="md-nav__link">
Upgrade to 3.13
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.12/" class="md-nav__link">
Upgrade to 3.12
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.11/" class="md-nav__link">
Upgrade to 3.11
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.10/" class="md-nav__link">
Upgrade to 3.10
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.9/" class="md-nav__link">
Upgrade to 3.9
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.8/" class="md-nav__link">
Upgrade to 3.8
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.7/" class="md-nav__link">
Upgrade to 3.7
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.6/" class="md-nav__link">
Upgrade to 3.6
</a>
</li>
<li class="md-nav__item">
<a href="../../Upgrade-Guide/upgrade-to-3.5/" class="md-nav__link">
Upgrade to 3.5
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11" type="checkbox" id="__nav_11" >
<label class="md-nav__link" for="__nav_11" tabindex="0" aria-expanded="false">
Release Notes
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Release Notes" data-md-level="1">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
Release Notes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/" class="md-nav__link">
index
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_2" type="checkbox" id="__nav_11_2" >
<label class="md-nav__link" for="__nav_11_2" tabindex="0" aria-expanded="false">
RELEASE 11.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 11.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_2">
<span class="md-nav__icon md-icon"></span>
RELEASE 11.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/11.0/" class="md-nav__link">
11.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/11.1/" class="md-nav__link">
11.1
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_3" type="checkbox" id="__nav_11_3" >
<label class="md-nav__link" for="__nav_11_3" tabindex="0" aria-expanded="false">
RELEASE 10.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 10.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_3">
<span class="md-nav__icon md-icon"></span>
RELEASE 10.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/10.5/" class="md-nav__link">
10.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/10.4/" class="md-nav__link">
10.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/10.3/" class="md-nav__link">
10.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/10.2/" class="md-nav__link">
10.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/10.1/" class="md-nav__link">
10.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/10.0/" class="md-nav__link">
10.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_4" type="checkbox" id="__nav_11_4" >
<label class="md-nav__link" for="__nav_11_4" tabindex="0" aria-expanded="false">
RELEASE 9.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 9.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_4">
<span class="md-nav__icon md-icon"></span>
RELEASE 9.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/9.6/" class="md-nav__link">
9.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.5/" class="md-nav__link">
9.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.4/" class="md-nav__link">
9.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.3/" class="md-nav__link">
9.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.2/" class="md-nav__link">
9.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.1/" class="md-nav__link">
9.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/9.0/" class="md-nav__link">
9.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_5" type="checkbox" id="__nav_11_5" >
<label class="md-nav__link" for="__nav_11_5" tabindex="0" aria-expanded="false">
RELEASE 8.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 8.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_5">
<span class="md-nav__icon md-icon"></span>
RELEASE 8.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/8.6/" class="md-nav__link">
8.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.5/" class="md-nav__link">
8.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.4/" class="md-nav__link">
8.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.3/" class="md-nav__link">
8.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.2/" class="md-nav__link">
8.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.1/" class="md-nav__link">
8.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/8.0/" class="md-nav__link">
8.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_6" type="checkbox" id="__nav_11_6" >
<label class="md-nav__link" for="__nav_11_6" tabindex="0" aria-expanded="false">
RELEASE 7.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 7.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_6">
<span class="md-nav__icon md-icon"></span>
RELEASE 7.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/7.9/" class="md-nav__link">
7.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.8/" class="md-nav__link">
7.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.7/" class="md-nav__link">
7.7
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.6/" class="md-nav__link">
7.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.5/" class="md-nav__link">
7.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.4/" class="md-nav__link">
7.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.3/" class="md-nav__link">
7.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.2/" class="md-nav__link">
7.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.1/" class="md-nav__link">
7.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/7.0/" class="md-nav__link">
7.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_7" type="checkbox" id="__nav_11_7" >
<label class="md-nav__link" for="__nav_11_7" tabindex="0" aria-expanded="false">
RELEASE 6.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 6.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_7">
<span class="md-nav__icon md-icon"></span>
RELEASE 6.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/6.10/" class="md-nav__link">
6.10.
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.9/" class="md-nav__link">
6.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.8/" class="md-nav__link">
6.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.7/" class="md-nav__link">
6.7
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.6/" class="md-nav__link">
6.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.5/" class="md-nav__link">
6.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.4/" class="md-nav__link">
6.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.3/" class="md-nav__link">
6.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.2/" class="md-nav__link">
6.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.1/" class="md-nav__link">
6.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/6.0/" class="md-nav__link">
6.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_8" type="checkbox" id="__nav_11_8" >
<label class="md-nav__link" for="__nav_11_8" tabindex="0" aria-expanded="false">
RELEASE 5.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 5.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_8">
<span class="md-nav__icon md-icon"></span>
RELEASE 5.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/5.13/" class="md-nav__link">
5.13
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.12/" class="md-nav__link">
5.12
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.11/" class="md-nav__link">
5.11
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.10/" class="md-nav__link">
5.10.
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.9/" class="md-nav__link">
5.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.8/" class="md-nav__link">
5.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.6/" class="md-nav__link">
5.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.5/" class="md-nav__link">
5.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.3/" class="md-nav__link">
5.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.2/" class="md-nav__link">
5.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.1/" class="md-nav__link">
5.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/5.0/" class="md-nav__link">
5.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_9" type="checkbox" id="__nav_11_9" >
<label class="md-nav__link" for="__nav_11_9" tabindex="0" aria-expanded="false">
RELEASE 4.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 4.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_9">
<span class="md-nav__icon md-icon"></span>
RELEASE 4.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/4.1.10/" class="md-nav__link">
4.1.10
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.9/" class="md-nav__link">
4.1.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.8/" class="md-nav__link">
4.1.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.7/" class="md-nav__link">
4.1.7
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.6/" class="md-nav__link">
4.1.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.5/" class="md-nav__link">
4.1.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.4/" class="md-nav__link">
4.1.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.3/" class="md-nav__link">
4.1.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.2/" class="md-nav__link">
4.1.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.1/" class="md-nav__link">
4.1.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.1.0/" class="md-nav__link">
4.1.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.0.2/" class="md-nav__link">
4.0.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.0.1/" class="md-nav__link">
4.0.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/4.0.0/" class="md-nav__link">
4.0.0
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_11_10" type="checkbox" id="__nav_11_10" >
<label class="md-nav__link" for="__nav_11_10" tabindex="0" aria-expanded="false">
RELEASE 3.x
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="RELEASE 3.x" data-md-level="2">
<label class="md-nav__title" for="__nav_11_10">
<span class="md-nav__icon md-icon"></span>
RELEASE 3.x
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../release-notes/3.13.2/" class="md-nav__link">
3.13.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.13.1/" class="md-nav__link">
3.13.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.13.0/" class="md-nav__link">
3.13.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.15/" class="md-nav__link">
3.12.15
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.14/" class="md-nav__link">
3.12.14
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.13/" class="md-nav__link">
3.12.13
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.12/" class="md-nav__link">
3.12.12
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.11/" class="md-nav__link">
3.12.11
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.10/" class="md-nav__link">
3.12.10
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.9/" class="md-nav__link">
3.12.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.8/" class="md-nav__link">
3.12.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.7/" class="md-nav__link">
3.12.7
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.6/" class="md-nav__link">
3.12.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.5/" class="md-nav__link">
3.12.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.4/" class="md-nav__link">
3.12.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.3/" class="md-nav__link">
3.12.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.2/" class="md-nav__link">
3.12.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.1/" class="md-nav__link">
3.12.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.12.0/" class="md-nav__link">
3.12.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.11.3/" class="md-nav__link">
3.11.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.11.2/" class="md-nav__link">
3.11.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.11.1/" class="md-nav__link">
3.11.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.11.0/" class="md-nav__link">
3.11.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.12/" class="md-nav__link">
3.10.12
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.11/" class="md-nav__link">
3.10.11
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.10/" class="md-nav__link">
3.10.10
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.9/" class="md-nav__link">
3.10.9
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.8/" class="md-nav__link">
3.10.8
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.7/" class="md-nav__link">
3.10.7
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.6/" class="md-nav__link">
3.10.6
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.5/" class="md-nav__link">
3.10.5
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.4/" class="md-nav__link">
3.10.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.3/" class="md-nav__link">
3.10.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.2/" class="md-nav__link">
3.10.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.1/" class="md-nav__link">
3.10.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.10.0/" class="md-nav__link">
3.10.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.9.0/" class="md-nav__link">
3.9.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.7.1/" class="md-nav__link">
3.7.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.7.0/" class="md-nav__link">
3.7.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.6.3/" class="md-nav__link">
3.6.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.6.0/" class="md-nav__link">
3.6.0
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.5.4/" class="md-nav__link">
3.5.4
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.5.3/" class="md-nav__link">
3.5.3
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.5.2/" class="md-nav__link">
3.5.2
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.5.1/" class="md-nav__link">
3.5.1
</a>
</li>
<li class="md-nav__item">
<a href="../../release-notes/3.5.0/" class="md-nav__link">
3.5.0
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_12" type="checkbox" id="__nav_12" >
<label class="md-nav__link" for="__nav_12" tabindex="0" aria-expanded="false">
GlusterFS Tools
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="GlusterFS Tools" data-md-level="1">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
GlusterFS Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../GlusterFS-Tools/" class="md-nav__link">
GlusterFS Tools List
</a>
</li>
<li class="md-nav__item">
<a href="../../GlusterFS-Tools/glusterfind/" class="md-nav__link">
glusterfind
</a>
</li>
<li class="md-nav__item">
<a href="../../GlusterFS-Tools/gfind-missing-files/" class="md-nav__link">
gfind missing files
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_13" type="checkbox" id="__nav_13" >
<label class="md-nav__link" for="__nav_13" tabindex="0" aria-expanded="false">
Troubleshooting Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Troubleshooting Guide" data-md-level="1">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon"></span>
Troubleshooting Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Troubleshooting/" class="md-nav__link">
Index
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_13_2" type="checkbox" id="__nav_13_2" >
<label class="md-nav__link" for="__nav_13_2" tabindex="0" aria-expanded="false">
Components
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Components" data-md-level="2">
<label class="md-nav__title" for="__nav_13_2">
<span class="md-nav__icon md-icon"></span>
Components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-glusterd/" class="md-nav__link">
Troubleshooting CLI and glusterd
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-georep/" class="md-nav__link">
Troubleshooting Geo-replication
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-gnfs/" class="md-nav__link">
Troubleshooting gNFS
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-afr/" class="md-nav__link">
Troubleshooting Self-heal
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/resolving-splitbrain/" class="md-nav__link">
Troubleshooting Split-Brains
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-filelocks/" class="md-nav__link">
Troubleshooting File Locks
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_13_3" type="checkbox" id="__nav_13_3" >
<label class="md-nav__link" for="__nav_13_3" tabindex="0" aria-expanded="false">
Issues
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Issues" data-md-level="2">
<label class="md-nav__title" for="__nav_13_3">
<span class="md-nav__icon md-icon"></span>
Issues
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Troubleshooting/troubleshooting-memory/" class="md-nav__link">
Debugging Memory Leaks
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/gluster-crash/" class="md-nav__link">
Crashes
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " data-md-toggle="__nav_13_4" type="checkbox" id="__nav_13_4" >
<label class="md-nav__link" for="__nav_13_4" tabindex="0" aria-expanded="false">
Tools
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Tools" data-md-level="2">
<label class="md-nav__title" for="__nav_13_4">
<span class="md-nav__icon md-icon"></span>
Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Troubleshooting/statedump/" class="md-nav__link">
Statedump
</a>
</li>
<li class="md-nav__item">
<a href="../../Troubleshooting/gfid-to-path/" class="md-nav__link">
gfid to path
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../glossary/" class="md-nav__link">
Glossary
</a>
</li>
<li class="md-nav__item">
<a href="../../google64817fdc11b2f6b6.html" class="md-nav__link">
Google Site Verification
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#basics" class="md-nav__link">
Basics
</a>
<nav class="md-nav" aria-label="Basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#git-and-github" class="md-nav__link">
Git and Github
</a>
</li>
<li class="md-nav__item">
<a href="#jenkins" class="md-nav__link">
Jenkins
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#preparatory-setup" class="md-nav__link">
Preparatory Setup
</a>
<nav class="md-nav" aria-label="Preparatory Setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fork-repository" class="md-nav__link">
Fork Repository
</a>
</li>
<li class="md-nav__item">
<a href="#clone-a-working-tree" class="md-nav__link">
Clone a working tree
</a>
</li>
<li class="md-nav__item">
<a href="#preferred-email-and-set-username" class="md-nav__link">
Preferred email and set username
</a>
</li>
<li class="md-nav__item">
<a href="#watch-glusterfs" class="md-nav__link">
Watch glusterfs
</a>
</li>
<li class="md-nav__item">
<a href="#email-filters" class="md-nav__link">
Email filters
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#development-other-flows" class="md-nav__link">
Development &amp; Other flows
</a>
<nav class="md-nav" aria-label="Development &amp; Other flows">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#issue" class="md-nav__link">
Issue
</a>
</li>
<li class="md-nav__item">
<a href="#code" class="md-nav__link">
Code
</a>
</li>
<li class="md-nav__item">
<a href="#keep-up-to-date" class="md-nav__link">
Keep up-to-date
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#branching-policy" class="md-nav__link">
Branching policy
</a>
<nav class="md-nav" aria-label="Branching policy">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#develrelease-branches" class="md-nav__link">
Devel/release branches
</a>
</li>
<li class="md-nav__item">
<a href="#personal-per-task-branches" class="md-nav__link">
Personal per-task branches
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#building" class="md-nav__link">
Building
</a>
<nav class="md-nav" aria-label="Building">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#environment-setup" class="md-nav__link">
Environment Setup
</a>
</li>
<li class="md-nav__item">
<a href="#creating-build-environment" class="md-nav__link">
Creating build environment
</a>
</li>
<li class="md-nav__item">
<a href="#build-and-install" class="md-nav__link">
Build and install
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#commit-policy-pr-description" class="md-nav__link">
Commit policy / PR description
</a>
</li>
<li class="md-nav__item">
<a href="#push-the-change" class="md-nav__link">
Push the change
</a>
</li>
<li class="md-nav__item">
<a href="#test-cases-and-verification" class="md-nav__link">
Test cases and Verification
</a>
<nav class="md-nav" aria-label="Test cases and Verification">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#auto-triggered-tests" class="md-nav__link">
Auto-triggered tests
</a>
</li>
<li class="md-nav__item">
<a href="#glusto-test-framework" class="md-nav__link">
Glusto test framework
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#reviewing-commenting" class="md-nav__link">
Reviewing / Commenting
</a>
</li>
<li class="md-nav__item">
<a href="#incorporate-rfcsh-reverify" class="md-nav__link">
Incorporate, rfc.sh, Reverify
</a>
</li>
<li class="md-nav__item">
<a href="#submission-qualifiers" class="md-nav__link">
Submission Qualifiers
</a>
</li>
<li class="md-nav__item">
<a href="#submission-disqualifiers" class="md-nav__link">
Submission Disqualifiers
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="development-workflow-of-gluster">Development workflow of Gluster</h1>
<p>This document provides a detailed overview of the development model
followed by the GlusterFS project. For a simpler overview visit
<a href="../Simplified-Development-Workflow/">Simplified development workflow</a>.</p>
<h2 id="basics">Basics</h2>
<p>The GlusterFS development model largely revolves around the features and
functionality provided by Git version control system, Github and Jenkins
continuous integration system. It is a primer for a contributor to the project.</p>
<h3 id="git-and-github">Git and Github</h3>
<p>Git is an extremely flexible, distributed version control system.
GlusterFS's main repository is at <a href="http://git.gluster.org">Git</a> and at
<a href="https://github.com/gluster/glusterfs">GitHub</a>.
A good introduction to Git can be found at
<a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/">http://www-cs-students.stanford.edu/~blynn/gitmagic/</a>.</p>
<h3 id="jenkins">Jenkins</h3>
<p>Jenkins is a Continuous Integration build system. Jenkins is hosted at
<a href="http://build.gluster.org">http://build.gluster.org</a>. Jenkins is configured to work with Github by
setting up hooks. Every "Change" which is pushed to Github is
automatically picked up by Jenkins, built and smoke tested. The output of
all builds and tests can be viewed at
<a href="http://build.gluster.org/job/smoke/">http://build.gluster.org/job/smoke/</a>. Jenkins is also set up with a
'regression' job which is designed to execute test scripts provided as
part of the code change.</p>
<h2 id="preparatory-setup">Preparatory Setup</h2>
<p>Here is a list of initial one-time steps before you can start hacking on
code.</p>
<h3 id="fork-repository">Fork Repository</h3>
<p>Fork <a href="https://github.com/gluster/glusterfs/fork">GlusterFS repository</a></p>
<h3 id="clone-a-working-tree">Clone a working tree</h3>
<p>Get yourself a working tree by cloning the development repository from</p>
<pre><code class="language-console">git clone git@github.com:${username}/glusterfs.git
cd glusterfs/
git remote add upstream git@github.com:gluster/glusterfs.git
</code></pre>
<h3 id="preferred-email-and-set-username">Preferred email and set username</h3>
<p>On the first login, add your git/work email to your identity. You will have
to click on the URL which is sent to your email and set up a proper Full
Name. Select yourself a username. Make sure you set your git/work email
as your preferred email. This should be the email address from which all your
code commits are associated.</p>
<h3 id="watch-glusterfs">Watch glusterfs</h3>
<p>In Github, watch the 'glusterfs' repository. Tick on suitable
(All activity, Ignore, participating, or custom) type of notifications to
get alerts.</p>
<h3 id="email-filters">Email filters</h3>
<p>Set up a filter rule in your mail client to tag or classify emails with
the header</p>
<pre><code class="language-text">list: &lt;glusterfs.gluster.github.com&gt;
</code></pre>
<p>as mails originating from the github system.</p>
<h2 id="development-other-flows">Development &amp; Other flows</h2>
<h3 id="issue">Issue</h3>
<ul>
<li>Make sure there is an issue filed for the task you are working on.</li>
<li>If it is not filed, open the issue with all the description.</li>
<li>If it is a bug fix, add label "Type:Bug".</li>
<li>If it is an RFC, provide all the documentation, and request for "DocApproved", and "SpecApproved" label.</li>
</ul>
<h3 id="code">Code</h3>
<ul>
<li>Start coding</li>
<li>Make sure clang-format is installed and is run on the patch.</li>
</ul>
<h3 id="keep-up-to-date">Keep up-to-date</h3>
<ul>
<li>GlusterFS is a large project with many developers, so there would be one or the other patch everyday.</li>
<li>It is critical for developer to be up-to-date with devel repo to be Conflict-Free when PR is opened.</li>
<li>Git provides many options to keep up-to-date, below is one of them</li>
</ul>
<pre><code class="language-console">git fetch upstream
git rebase upstream/devel
</code></pre>
<h2 id="branching-policy">Branching policy</h2>
<p>This section describes both, the branching policies on the public repo
as well as the suggested best-practice for local branching</p>
<h3 id="develrelease-branches">Devel/release branches</h3>
<p>In glusterfs, the 'devel' branch is the forward development branch.
This is where new features come in first. In fact this is where almost
every change (commit) comes in first. The devel branch is always kept
in a buildable state and smoke tests pass.</p>
<p>Release trains (3.1.z, 3.2.z,..., 8.y, 9.y) each have a branch originating from
devel. Code freeze of each new release train is marked by the creation
of the <code>release-x.y</code> branch. At this point, no new features are added to
the release-x.y branch. All fixes and commits first get into devel.
From there, only bug fixes get backported to the relevant release
branches. From the release-x.y branch, actual release code snapshots
(e.g. glusterfs-3.2.2 etc.) are tagged (git annotated tag with 'git tag
-a') shipped as a tarball.</p>
<h3 id="personal-per-task-branches">Personal per-task branches</h3>
<p>As a best practice, it is recommended you perform all code changes for a
task in a local branch in your working tree. The local branch should be
created from the upstream branch to which you intend to submit the
change. The name of the branch on your personal fork can start with issueNNNN,
followed by anything of your choice. If you are submitting changes to the devel
branch, first create a local task branch like this -</p>
<pre class="no-copy"><code class="language-console"># git checkout -b issueNNNN upstream/main
... &lt;hack, commit&gt;
</code></pre>
<h2 id="building">Building</h2>
<h3 id="environment-setup">Environment Setup</h3>
<p>For details about the required packages for the build environment
refer : <a href="../Building-GlusterFS/">Building GlusterFS</a></p>
<h3 id="creating-build-environment">Creating build environment</h3>
<p>Once the required packages are installed for your appropiate system,
generate the build configuration:</p>
<pre><code class="language-console">./autogen.sh
./configure --enable-fusermount
</code></pre>
<h3 id="build-and-install">Build and install</h3>
<pre><code class="language-console">make &amp;&amp; make install
</code></pre>
<h2 id="commit-policy-pr-description">Commit policy / PR description</h2>
<p>Typically you would have a local branch per task. You will need to
sign-off your commit (git commit -s) before sending the
patch for review. By signing off your patch, you agree to the terms
listed under the "Developer's Certificate of Origin" section in the
CONTRIBUTING file available in the repository root.</p>
<p>Provide a meaningful commit message. Your commit message should be in
the following format</p>
<ul>
<li>A short one-line title of format 'component: title', describing what the patch accomplishes</li>
<li>An empty line following the subject</li>
<li>Situation necessitating the patch</li>
<li>Description of the code changes</li>
<li>Reason for doing it this way (compared to others)</li>
<li>Description of test cases</li>
<li>When you open a PR, having a reference Issue for the commit is mandatory in GlusterFS.</li>
<li>Commit message can have, either Fixes: #NNNN or Updates: #NNNN in a separate line in the commit message.
Here, NNNN is the Issue ID in glusterfs repository.</li>
<li>Each commit needs the author to have the 'Signed-off-by: Name <email>' line.
Can do this by -s option for git commit.</li>
<li>If the PR is not ready for review, apply the label work-in-progress.
Check the availability of "Draft PR" is present for you, if yes, use that instead.</li>
</ul>
<h2 id="push-the-change">Push the change</h2>
<p>After doing the local commit, it is time to submit the code for review.
There is a script available inside glusterfs.git called rfc.sh. It is
recommended you keep pushing to your repo every day, so you don't loose
any work. You can submit your changes for review by simply executing</p>
<pre><code class="language-console">./rfc.sh
</code></pre>
<p>or</p>
<pre><code class="language-console">git push origin HEAD:issueNNN
</code></pre>
<p>This script rfc.sh does the following:</p>
<ul>
<li>The first time it is executed, it downloads a git hook from
<a href="http://review.gluster.org/tools/hooks/commit-msg">http://review.gluster.org/tools/hooks/commit-msg</a> and sets it up
locally to generate a Change-Id: tag in your commit message (if it
was not already generated.)</li>
<li>Rebase your commit against the latest upstream HEAD. This rebase
also causes your commits to undergo massaging from the just
downloaded commit-msg hook.</li>
<li>Prompt for a Reference Id for each commit (if it was not already provided)
and include it as a "fixes: #n" tag in the commit log. You can just hit
<enter> at this prompt if your submission is purely for review
purposes.</li>
<li>Push the changes for review. On a successful push, you will see a URL pointing to
the change in <a href="https://github.com/gluster/glusterfs/pulls">Pull requests</a> section.</li>
</ul>
<h2 id="test-cases-and-verification">Test cases and Verification</h2>
<hr />
<h3 id="auto-triggered-tests">Auto-triggered tests</h3>
<p>The integration between Jenkins and Github triggers an event in Jenkins
on every push of changes, to pick up the change and run build and smoke
test on it.
Part of the workflow is to aggregate and execute pre-commit test cases
that accompany patches, cumulatively for every new patch. This
guarantees that tests that are working till the present are not broken
with the new patch. This is so that code changes and accompanying test
cases are reviewed together. Once you upload the patch -</p>
<ol>
<li>
<p>All the required smoke tests would be auto-triggered. You can retrigger
the smoke tests using "/recheck smoke" as comment. Passing the automated
smoke test is a necessary condition but not sufficient.</p>
</li>
<li>
<p>The regression tests would be triggered by a comment "/run regression"
from developers in the @gluster organization once smoke test is passed.</p>
</li>
</ol>
<p>If smoke/regression fails, it is a good reason to skip code review till
a fixed change is pushed later. You can click on the build URL
automatically to inspect the reason for auto verification failure.
In the Jenkins job page, you can click on the 'Console Output' link to
see the exact point of failure.</p>
<p>All code changes which are not trivial (typo fixes, code comment
changes) must be accompanied with either a new test case script or
extend/modify an existing test case script. It is important to review
the test case in conjunction with the code change to analyze whether the
code change is actually verified by the test case.</p>
<p>Regression tests (i.e, execution of all test cases accumulated with
every commit) is not automatically triggered as the test cases can be
extensive and is quite expensive to execute for every change submission
in the review/resubmit cycle. Passing the regression test is a
necessary condition for merge along with code review points.</p>
<p>To check and run all regression tests locally, run the below script
from glusterfs root directory.</p>
<pre><code class="language-console">./run-tests.sh
</code></pre>
<p>To run a single regression test locally, run the below command.</p>
<pre><code class="language-console">prove -vf &lt;path_to_the_file&gt;
</code></pre>
<p><strong>NOTE:</strong> The testing framework needs perl-Test-Harness package to be installed.
Ask for help as comment in PR if you have any questions about the process!</p>
<p>It is important to note that Jenkins verification is only a generic
verification of high-level tests. More concentrated testing effort for
the patch is necessary with manual verification.</p>
<h3 id="glusto-test-framework">Glusto test framework</h3>
<p>For any new feature that is posted for review, there should be
accompanying set of tests in
<a href="https://github.com/gluster/glusto-tests">glusto-tests</a>. These
tests will be run nightly and/or before release to determine the health
of the feature. Please go through glusto-tests project to understand
more information on how to write and execute the tests in glusto.</p>
<ol>
<li>
<p>Extend/Modify old test cases in existing scripts - This is typically
when present behavior (default values etc.) of code is changed.</p>
</li>
<li>
<p>No test cases - This is typically when a code change is trivial
(e.g. fixing typos in output strings, code comments).</p>
</li>
<li>
<p>Only test case and no code change - This is typically when we are
adding test cases to old code (already existing before this regression
test policy was enforced). More details on how to work with test case
scripts can be found in tests/README.</p>
</li>
</ol>
<h2 id="reviewing-commenting">Reviewing / Commenting</h2>
<p>Code review with Github is relatively easy compared to other available
tools. Each change is presented as multiple files and each file can be
reviewed in Side-by-Side mode. While reviewing it is possible to comment
on each line by clicking on '+' icon and writing in your comments in
the text box. Such in-line comments are saved as drafts, till you
finally publish them by Starting a Review.</p>
<h2 id="incorporate-rfcsh-reverify">Incorporate, rfc.sh, Reverify</h2>
<p>Code review comments are notified via email. After incorporating the
changes in code, you can mark each of the inline comments as 'done'
(optional). After all the changes to your local files, create new
commits in the same branch with -</p>
<pre><code class="language-console">git commit -a -s
</code></pre>
<p>Push the commit by executing rfc.sh. If your previous push was an "rfc"
push (i.e, without a Issue Id) you will be prompted for a Issue Id
again. You can re-push an rfc change without any other code change too
by giving a Issue Id.</p>
<p>On the new push, Jenkins will re-verify the new change (independent of
what the verification result was for the previous push).</p>
<p>It is the Change-Id line in the commit log (which does not change) that
associates the new push as an update for the old push (even though they
had different commit ids) under the same Change.</p>
<p>If further changes are found necessary, changes can be requested or
comments can be made on the new patch as well, and the same cycle repeats.</p>
<p>If no further changes are necessary, the reviewer can approve the patch.</p>
<h2 id="submission-qualifiers">Submission Qualifiers</h2>
<p>GlusterFS project follows 'Squash and Merge' method.</p>
<ul>
<li>This is mainly to preserve the historic Gerrit method of one patch in git log for one URL link.</li>
<li>This also makes every merge a complete patch, which has passed all tests.</li>
</ul>
<p>For a change to get merged, there are two qualifiers that are enforced
by the Github system. They are -</p>
<ol>
<li>A change should have at approver flag from Reviewers</li>
<li>A change should have passed smoke and regression tests.</li>
</ol>
<p>The project maintainer will merge the changes once a patch
meets these qualifiers. If you feel there is delay, feel free
to add a comment, discuss the same in Slack channel, or send email.</p>
<h2 id="submission-disqualifiers">Submission Disqualifiers</h2>
<ul>
<li>+2 : is equivalent to "Approve" from the people in the maintainer's group.</li>
<li>+1 : can be given by a maintainer/reviewer by explicitly stating that in the comment.</li>
<li>-1 : provide details on required changes and pick "Request Changes" while submitting your review.</li>
<li>-2 : done by adding the DO-NOT-MERGE label.</li>
</ul>
<p>Any further discussions can happen as comments in the PR.</p>
</article>
</div>
</div>
<a href="#" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
Back to top
</a>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.top", "navigation.instant", "navigation.tracking"], "search": "../../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="../../js/custom-features.js"></script>
</body>
</html>