<!DOCTYPE html>
  
  
  
  
   <html class="no-js"> 

  <head lang="en-us">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=10" />
    <title>Rollout Management - Eclipse hawkBit</title>
    <meta name="generator" content="Hugo 0.56.0" />

    
    <meta name="description" content="IoT. Update. Device.">
    
    <link rel="canonical" href="https://www.eclipse.org/hawkbit/concepts/rollout-management/">
    
    <meta name="author" content="The Eclipse hawkBit Project">
    

    <meta property="og:url" content="https://www.eclipse.org/hawkbit/concepts/rollout-management/">
    <meta property="og:title" content="Eclipse hawkBit">
    <meta property="og:image" content="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png">
    <meta name="apple-mobile-web-app-title" content="Eclipse hawkBit">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

    

    <link rel="shortcut icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico">
    <link rel="icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico">

    <style>
      @font-face {
        font-family: 'Icon';
        src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot');
        src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot')
               format('embedded-opentype'),
             url('https://www.eclipse.org/hawkbit/fonts/icon.woff')
               format('woff'),
             url('https://www.eclipse.org/hawkbit/fonts/icon.ttf')
               format('truetype'),
             url('https://www.eclipse.org/hawkbit/fonts/icon.svg')
               format('svg');
        font-weight: normal;
        font-style: normal;
      }
    </style>

    <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/application.css">
    <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/temporary.css">
    <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/palettes.css">
    <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/highlight/highlight.css">

    
    
    
    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Ubuntu:400,700|Ubuntu&#43;Mono">
    <style>
      body, input {
        font-family: 'Ubuntu', Helvetica, Arial, sans-serif;
      }
      pre, code {
        font-family: 'Ubuntu Mono', 'Courier New', 'Courier', monospace;
      }
    </style>

    
    <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/css/hawkbit.css">
    
    <link rel="stylesheet" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css">
    
    <script src="https://www.eclipse.org/hawkbit/javascripts/modernizr.js"></script>
    <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>

    

    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  </head>
  <body class="palette-primary-deep-purple palette-accent-light-green">



	
	


<div class="backdrop">
	<div class="backdrop-paper"></div>
</div>

<input class="toggle" type="checkbox" id="toggle-drawer">
<input class="toggle" type="checkbox" id="toggle-search">
<label class="toggle-button overlay" for="toggle-drawer"></label>

<header class="header">
	<nav aria-label="Header">
  <div class="bar default">
    <div class="button button-menu" role="button" aria-label="Menu">
      <label class="toggle-button icon icon-menu" for="toggle-drawer">
        <span></span>
      </label>
    </div>
    <div class="stretch">
      <div class="title">
        Rollout Management
      </div>
    </div>

    

    
    <div class="button button-github" role="button" aria-label="GitHub">
      <a href="https://github.com/eclipse/hawkbit" title="@eclipse/hawkbit on GitHub" target="_blank" class="toggle-button icon icon-github"></a>
    </div>
    

    
    <div class="button button-github" role="button" aria-label="Gitter">
      <a href="https://gitter.im/eclipse/hawkbit" title="@eclipse/hawkbit on Gitter" target="_blank" class="toggle-button icon fab fa-gitter"></a>
    </div>
    

    
    <div class="button button-github" role="button" aria-label="Docker">
      <a href="https://hub.docker.com/u/hawkbit" title="hawkbit on Docker Hub" target="_blank" class="toggle-button icon fab fa-docker"></a>
    </div>
    
    
        
  </div>
  <div class="bar search">
    <div class="button button-close" role="button" aria-label="Close">
      <label class="toggle-button icon icon-back" for="toggle-search"></label>
    </div>
    <div class="stretch">
      <div class="field">
        <input class="query" type="text" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck>
      </div>
    </div>
    <div class="button button-reset" role="button" aria-label="Search">
      <button class="toggle-button icon icon-close" id="reset-search"></button>
    </div>
  </div>
</nav>
</header>

<main class="main">
	<div class="drawer">
		<nav aria-label="Navigation">
  <a href="https://www.eclipse.org/hawkbit/" class="project">
    <div class="banner">
      
        <div class="logo">
          <img src="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png">
        </div>
      
      <div class="name">
        <strong>Eclipse hawkBit&trade; </strong>
        
          <br>
          eclipse/hawkbit
        
      </div>
    </div>
  </a>

  <div class="scrollable">
    <div class="wrapper">
      
        <ul class="repo">
          <li class="repo-download">
            <a href="https://hawkbit.eclipse.org" target="_blank" title="hawkBit Sandbox" data-action="sandbox">
              <i class="fas fa-desktop"></i> &nbsp; Sandbox
            </a>
          </li>
          <li class="repo-stars">
            <a href="https://github.com/eclipse/hawkbit/stargazers" target="_blank" title="Stargazers" data-action="star">
              <i class="icon icon-star"></i> Stars
              <span class="count">&ndash;</span>
            </a>
          </li>
        </ul>
        <hr>
      

      <div class="toc">
        
        <ul>
          




<li>
  
    



<a  title="What is hawkBit" href="/hawkbit/whatishawkbit/">
	
	What is hawkBit
</a>


  
</li>



<li>
  
    



<a  title="Getting started" href="/hawkbit/gettingstarted/">
	
	Getting started
</a>


  
</li>



<li>
  
    



<a  title="Guides" href="/hawkbit/guides/">
	
	Guides
</a>


  
</li>



<li>
  
    



<a  title="Features" href="/hawkbit/features/">
	
	Features
</a>


  
</li>



<li>
  
    



<a  title="Concepts" href="/hawkbit/concepts/">
	
	Concepts
</a>


  
</li>



<li>
  
    



<a  title="Architecture" href="/hawkbit/architecture/">
	
	Architecture
</a>


  
</li>



<li>
  
    



<a  title="Management UI" href="/hawkbit/ui/">
	
	Management UI
</a>


  
</li>



<li>
  
    



<a  title="APIs" href="/hawkbit/apis/">
	
	APIs
</a>


  
</li>



<li>
  
    



<a  title="Community" href="/hawkbit/community/">
	
	Community
</a>


  
</li>



<li>
  
    



<a  title="Release notes" href="/hawkbit/release-notes/">
	
	Release notes
</a>


  
</li>


        </ul>
        

        
        <hr>

        <ul>
          <li>
            <a href="https://gitter.im/eclipse/hawkbit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" title="Chat on Gitter" target="_blank">
              <img src="https://badges.gitter.im/eclipse/hawkbit.svg" />
            </a>
          </li>
          <li>
            <a href="https://circleci.com/gh/eclipse/hawkbit" title="Circle CI Status" target="_blank">
              <img src="https://circleci.com/gh/eclipse/hawkbit.svg?style=shield" />
            </a>
          </li>
          <li>
            <a href="https://sonar.ops.bosch-iot-rollouts.com" title="SonarQube Status" target="_blank">
              <img src="https://sonar.ops.bosch-iot-rollouts.com/api/badges/gate?key=org.eclipse.hawkbit:hawkbit-parent" />
            </a>
          </li>
          <li>
            <a href="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent" title="Maven Central Status" target="_blank">
              <img src="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent/badge.svg" />
            </a>
          </li>
        </ul>
        
      </div>
    </div>
  </div>
</nav>

	</div>

	<article class="article">
		<div class="wrapper">
			<h1>Rollout Management </h1>

			<p>Software update operations in large scale IoT scenarios with hundreds of thousands of devices require special handling.</p>

<p>That includes:
- <em>Technical Scalability</em> by means of horizontal scale of the hawkBit server cluster in the cloud.
- <em>Global</em> artifact <em>content delivery</em> capacities.
- <em>Functional Scalability</em> by means of:
  - Secure handling of large volumes of devices at rollout creation time.
  - Monitoring of the rollout progress.
  - Emergency rollout shutdown in case of problems on to many devices.</p>

<ul>
<li>Reporting capabilities for a complete understanding of the rollout progress at each point in time.</li>
</ul>

<p>Eclipse hawkBit sees these capabilities under the term Rollout Management.</p>

<p>The following capabilities are currently supported by the <em>Rollout Management</em>:
- Create, update and start of rollouts.
  - Selection of targets as input for the rollout based on <em>target filter</em> functionality.
  - Selection of a <em>DistributionSet</em>.
  - Auto-splitting of the input target list into a defined number deployment groups.
- Approval workflow
  - Has to be enabled explicitly in configuration.
  - Enables a workflow that requires a user with adequate permissions to review any new or updated rollout before it
  can be started.
  - Allows integration with 3rd party workflow engines.</p>

<ul>
<li>Cascading start of the deployment groups based on installation status of the previous group.</li>
<li>Emergency shutdown of the rollout in case a group exceeds the defined error threshold.</li>
<li>Rollout progress monitoring for the entire rollout and the individual groups.</li>
</ul>

<h2 id="cascading-deployment-group-execution">Cascading Deployment Group Execution</h2>

<p>The cascading execution of the deployment groups is based on two thresholds that can be defined by the rollout creator.
- success condition by means of percentage of successfully installed targets in the current groups triggers.
- error condition by means of absolute or percentage of failed installations which triggers an emergency shutdown of the entire rollout.</p>

<h2 id="rollout-state-machine">Rollout state machine</h2>

<h3 id="state-machine-on-rollout">State Machine on Rollout</h3>

<p><img src="../../images/rolloutstatediagram.png" alt="" /></p>

<h3 id="state-machine-on-rollout-deployment-group">State Machine on Rollout Deployment Group</h3>

<p><img src="../../images/rolloutgroupstatediagram.png" alt="" /></p>

<h2 id="multi-assignments-beta">Multi-Assignments (beta)</h2>

<p>One of the main paradigms of Eclipse hawkBit is, that a Distribution Set represents the currently installed software of a device. Hence, a device can have only one Distribution Set assigned/installed at a time. With <em>Multi-Assignments</em> enabled, this paradigm shifts. Multi-Assignments allows to assign multiple Distribution Sets to a device simultaneously, without cancelling each other. As a consequence, an operator can trigger multiple campaigns addressing the same devices in parallel.</p>

<h3 id="consequences">Consequences</h3>

<p>While this feature provides more flexibility to the user and enables new use-cases, there are also some consequences one should be aware of:</p>

<p><strong>Critical</strong></p>

<ul>
<li>This feature is in beta and may change unannounced.</li>
<li>For now, this feature is <strong>opt-in only</strong>. Once activated, it cannot be deactivated.</li>
<li>Currently, there is no mechanism to hint devices to process the actions in a certain order.</li>
</ul>

<p><strong>Minor</strong></p>

<ul>
<li>While on DMF-API a MULTI_ACTION request is sent, DDI-API only exposes the oldest open action.</li>
<li>All information regarding the currently assigned or installed Distribution Set does only respect the last assignment, as well as the last successfully installed Distribution set. This also affects:

<ul>
<li>Pinning a target or Distribution Set in Deployment View.</li>
<li>Statistics about installed or assigned Distribution Sets.</li>
</ul></li>
<li>Auto close running actions, when a new Distribution Set is assigned (<code>repository.actions.autoclose.enabled</code>) is deactivated.</li>
<li>Marking a Distribution Set to be a <em>Required Migration Step</em> is deactivated.</li>
</ul>

			<aside class="copyright" role="note">
  <div class="logo">
    <a href="https://www.eclipse.org" target="_blank">
      <img src="/hawkbit/images/eclipse_foundation_logo.png" />
    </a>
  </div>
  <p class="notice">
    
    &copy; 2019 The Eclipse hawkBit Project &ndash;
    
    Documentation built with
    <a href="https://www.gohugo.io" target="_blank">Hugo</a>
    using the
    <a href="http://github.com/digitalcraftsman/hugo-material-docs" target="_blank">Material</a> theme.
  </p>
  <p class="quickLinks">
    <a href="http://www.eclipse.org/legal/privacy.php" target="_blank">
      &gt; Privacy Policy
    </a>
    <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">
      &gt; Terms of Use
    </a>
    <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">
      &gt; Copyright Agent
    </a>
    <a href="http://www.eclipse.org/legal" target="_blank">
      &gt; Legal
    </a>
    <a href="https://www.eclipse.org/org/documents/epl-v10.php" target="_blank">
      &gt; License
    </a>
  </p>
</aside>


			<footer class="footer">
				

<nav class="pagination" aria-label="Footer">
  <div class="previous">
  
      <a href="https://www.eclipse.org/hawkbit/concepts/targetstate/" title="Target State Machine">
        <span class="direction">
          Previous
        </span>
        <div class="page">
          <div class="button button-previous" role="button" aria-label="Previous">
            <i class="icon icon-back"></i>
          </div>
          <div class="stretch">
            <div class="title">
              Target State Machine
            </div>
          </div>
        </div>
      </a>
  
  </div>

  <div class="next">
  
      <a href="https://www.eclipse.org/hawkbit/concepts/datamodel/" title="Data Model">
        <span class="direction">
          Next
        </span>
        <div class="page">
          <div class="stretch">
            <div class="title">
              Data Model
            </div>
          </div>
          <div class="button button-next" role="button" aria-label="Next">
            <i class="icon icon-forward"></i>
          </div>
        </div>
      </a>
  
  </div>
</nav>





			</footer>
		</div>
	</article>

	<div class="results" role="status" aria-live="polite">
		<div class="scrollable">
			<div class="wrapper">
				<div class="meta"></div>
				<div class="list"></div>
			</div>
		</div>
	</div>
</main>

    <script>
    
      var base_url = 'https:\/\/www.eclipse.org\/hawkbit\/';
      var repo_id  = 'eclipse\/hawkbit';
    
    </script>

    <script src="https://www.eclipse.org/hawkbit/javascripts/application.js"></script>
    

    <script>
      /* Add headers to scrollspy */
      var headers   = document.getElementsByTagName("h2");
      var scrollspy = document.getElementById('scrollspy');

      if(scrollspy) {
          if(headers.length > 0) {
              for(var i = 0; i < headers.length; i++) {
                  var li = document.createElement("li");
                  li.setAttribute("class", "anchor");

                  var a  = document.createElement("a");
                  if(!headers[i].id)
                      a.setAttribute("href", headers[i].parentNode.href);
                  else
                      a.setAttribute("href", "#" + headers[i].id);
                  a.setAttribute("title", headers[i].innerHTML);
                  a.innerHTML = headers[i].innerHTML;

                  li.appendChild(a);
                  scrollspy.appendChild(li);
              }
          } else {
              scrollspy.parentElement.removeChild(scrollspy)
          }


        /* Add permanent link next to the headers */
          var headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6");

        for(var i = 0; i < headers.length; i++) {
            var a = document.createElement("a");
            a.setAttribute("class", "headerlink");
            a.setAttribute("href", "#" + headers[i].id);
            a.setAttribute("title", "Permanent link");
            a.innerHTML = "#";
            headers[i].appendChild(a);
        }
      }
    </script>

    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/highlight.min.js"></script>
    <script>hljs.initHighlightingOnLoad();</script>
  </body>
</html>

