Modified: helix/site-content/0.9.9-docs/tutorial_admin.html
URL: 
http://svn.apache.org/viewvc/helix/site-content/0.9.9-docs/tutorial_admin.html?rev=1900184&r1=1900183&r2=1900184&view=diff
==============================================================================
--- helix/site-content/0.9.9-docs/tutorial_admin.html (original)
+++ helix/site-content/0.9.9-docs/tutorial_admin.html Sat Apr 23 04:22:15 2022
@@ -1,200 +1,722 @@
-
 <!DOCTYPE html>
+
+
 <!--
- Generated by Apache Maven Doxia at 2022-04-23
- Rendered using Maven Reflow Skin 1.0.0 
(http://andriusvelykis.github.com/reflow-maven-skin)
+ | Generated by Apache Maven Doxia Site Renderer 1.11.1 from 
src/site/markdown/tutorial_admin.md at 2022-04-23
+ | Rendered using Apache Maven Fluido Skin 1.11.0-SNAPSHOT
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
+    <title>Apache Helix &#x2013; Tutorial - Admin Operations</title>
+    <link rel="stylesheet" 
href="./css/apache-maven-fluido-1.11.0-SNAPSHOT.min.css" />
+    <link rel="stylesheet" href="./css/site.css" />
+    <link rel="stylesheet" href="./css/print.css" media="print" />
+    <script src="./js/apache-maven-fluido-1.11.0-SNAPSHOT.min.js"></script>
+<script type="text/javascript">
+
+        var _gaq = _gaq || [];
+        _gaq.push(['_setAccount', 'UA-3211522-12']);
+        _gaq.push(['_trackPageview']);
+
+        (function() {
+        var ga = document.createElement('script'); ga.type = 
'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+        })();
+
+      </script>
+  </head>
+  <body class="topBarEnabled">
+    <header id="topbar" class="navbar navbar-fixed-top ">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+        <a data-target=".nav-collapse" data-toggle="collapse" class="btn 
btn-navbar">
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+        </a>
+            <ul class="nav">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Get Helix 
<b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="download.html" title="Download">Download</a></li>
+            <li><a href="Building.html" title="Building">Building</a></li>
+            <li><a href="releasenotes/release-0.9.9.html" title="Release 
Notes">Release Notes</a></li>
+        </ul>
+      </li>
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hands-On <b 
class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="Quickstart.html" title="Quick Start">Quick 
Start</a></li>
+            <li><a href="Tutorial.html" title="Tutorial">Tutorial</a></li>
+            <li><a href="../javadocs/0.9.9" title="Javadocs">Javadocs</a></li>
+        </ul>
+      </li>
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Recipes <b 
class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="recipes/lock_manager.html" title="Distributed lock 
manager">Distributed lock manager</a></li>
+            <li><a href="recipes/rabbitmq_consumer_group.html" title="Rabbit 
MQ consumer group">Rabbit MQ consumer group</a></li>
+            <li><a href="recipes/rsync_replicated_file_store.html" 
title="Rsync replicated file store">Rsync replicated file store</a></li>
+            <li><a href="recipes/service_discovery.html" title="Service 
discovery">Service discovery</a></li>
+            <li><a href="recipes/task_dag_execution.html" title="Distributed 
task DAG execution">Distributed task DAG execution</a></li>
+        </ul>
+      </li>
+            </ul>
+            <ul class="nav pull-right">
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">External Links <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+    <li><a href="index.html" title="Helix 0.9.9">Helix 0.9.9</a></li>
+                </ul>
+              </li>
+            </ul>
+        </div>
+      </div>
+    </header>
+    <div class="container-fluid">
+      <header>
+        <div id="banner">
+          <div class="pull-left"><a href="http://helix.apache.org/"; 
id="bannerLeft"><img src="../images/helix-logo.jpg"  alt=""/></a></div>
+          <div class="pull-right"><a href="http://www.apache.org/"; 
id="bannerRight"><img src="../images/feather_small.gif"  alt=""/></a></div>
+          <div class="clear"><hr/></div>
+        </div>
+
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+      <li class=""><a href="http://helix.apache.org/"; class="externalLink" 
title="Apache Helix">Apache Helix</a><span class="divider">/</span></li>
+      <li class=""><a href="../" title="Apache Helix">Apache Helix</a><span 
class="divider">/</span></li>
+      <li class=""><a href="./" title="Release 0.9.9">Release 0.9.9</a><span 
class="divider">/</span></li>
+    <li class="active ">Tutorial - Admin Operations</li>
+        <li id="publishDate" class="pull-right">Last Published: 2022-04-23</li>
+          </ul>
+        </div>
+      </header>
+      <div class="row-fluid">
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Get Helix</li>
+    <li><a href="download.html" title="Download"><span 
class="none"></span>Download</a></li>
+    <li><a href="Building.html" title="Building"><span 
class="none"></span>Building</a></li>
+    <li><a href="releasenotes/release-0.9.9.html" title="Release Notes"><span 
class="none"></span>Release Notes</a></li>
+   <li class="nav-header">Hands-On</li>
+    <li><a href="Quickstart.html" title="Quick Start"><span 
class="none"></span>Quick Start</a></li>
+    <li><a href="Tutorial.html" title="Tutorial"><span 
class="none"></span>Tutorial</a></li>
+    <li><a href="../javadocs/0.9.9" title="Javadocs"><span 
class="none"></span>Javadocs</a></li>
+   <li class="nav-header">Recipes</li>
+    <li><a href="recipes/lock_manager.html" title="Distributed lock 
manager"><span class="none"></span>Distributed lock manager</a></li>
+    <li><a href="recipes/rabbitmq_consumer_group.html" title="Rabbit MQ 
consumer group"><span class="none"></span>Rabbit MQ consumer group</a></li>
+    <li><a href="recipes/rsync_replicated_file_store.html" title="Rsync 
replicated file store"><span class="none"></span>Rsync replicated file 
store</a></li>
+    <li><a href="recipes/service_discovery.html" title="Service 
discovery"><span class="none"></span>Service discovery</a></li>
+    <li><a href="recipes/task_dag_execution.html" title="Distributed task DAG 
execution"><span class="none"></span>Distributed task DAG execution</a></li>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+<form id="search-form" action="https://www.google.com/search"; method="get" >
+  <input value="helix.apache.org/0.9.9-docs" name="sitesearch" type="hidden"/>
+  <input class="search-query" name="q" id="query" type="text" />
+</form>
+<script>asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+    <div id="twitter" style="border:none; margin-top: 10px">
+    <a href="https://twitter.com/ApacheHelix"; class="twitter-follow-button" 
data-show-count="false" data-align="left" data-size="medium" 
data-show-screen-name="true" data-lang="en">Follow ApacheHelix</a>
+    <script>!function(d,s,id){var 
js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+    </div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/"; title="Built by Maven" 
class="poweredBy"><img class="builtBy" alt="Built by Maven" 
src="./images/logos/maven-feather.png" /></a>
+            </div>
+          </div>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<!---
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
 -->
-<html  xml:lang="en" lang="en">
 
-       <head>
-               <meta charset="UTF-8" />
-               <title>Apache Helix &#x2013; Tutorial - Admin Operations</title>
-               <meta name="viewport" content="width=device-width, 
initial-scale=1.0" />
-               <meta name="description" content="" />
-               <meta http-equiv="content-language" content="en" />
-
-               <link 
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap.min.css";
 rel="stylesheet" />
-               <link 
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-responsive.min.css";
 rel="stylesheet" />
-               <link href="./css/docs.css" rel="stylesheet" />
-               <link href="./css/reflow-skin.css" rel="stylesheet" />
-               
-               
-               <link href="./css/lightbox.css" rel="stylesheet" />
-               
-               <link href="./css/site.css" rel="stylesheet" />
-               <link href="./css/print.css" rel="stylesheet" media="print" />
-               
-               <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-               <!--[if lt IE 9]>
-                       <script 
src="http://html5shim.googlecode.com/svn/trunk/html5.js";></script>
-               <![endif]-->
-               
-       </head>
-
-       <body class="page-$config.fileId project-$config.projectId" 
data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
-
-               <div class="navbar navbar-fixed-top">
-                       <div class="navbar-inner">
-                               <div class="container">
-                                       <a class="btn btn-navbar" 
data-toggle="collapse" data-target=".nav-collapse">
-                                               <span class="icon-bar"></span>
-                                               <span class="icon-bar"></span>
-                                               <span class="icon-bar"></span>
-                                       </a>
-                                       <div class="nav-collapse">
-                                               <ul class="nav pull-right">
-                                                       <li class="active"><a 
href="" title="Helix 0.9.9">Helix 0.9.9 </a></li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Get Helix <b 
class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Download">Download </a></li>
-                                                                       <li 
class="active"><a href="" title="Building">Building </a></li>
-                                                                       <li 
class="active"><a href="" title="Release Notes">Release Notes </a></li>
-                                                               </ul>
-                                                       </li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Hands-On <b 
class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Quick Start">Quick Start </a></li>
-                                                                       <li 
class="active"><a href="" title="Tutorial">Tutorial </a></li>
-                                                                       <li 
class="active"><a href="" title="Javadocs">Javadocs </a></li>
-                                                               </ul>
-                                                       </li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Recipes <b class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Distributed lock manager">Distributed lock 
manager </a></li>
-                                                                       <li 
class="active"><a href="" title="Rabbit MQ consumer group">Rabbit MQ consumer 
group </a></li>
-                                                                       <li 
class="active"><a href="" title="Rsync replicated file store">Rsync replicated 
file store </a></li>
-                                                                       <li 
class="active"><a href="" title="Service discovery">Service discovery </a></li>
-                                                                       <li 
class="active"><a href="" title="Distributed task DAG execution">Distributed 
task DAG execution </a></li>
-                                                               </ul>
-                                                       </li>
-                                               </ul>
-                                       </div><!--/.nav-collapse -->
-                               </div>
-                       </div>
-               </div>
-               
-       <div class="container">
-       
-       <!-- Masthead
-       ================================================== -->
-       <header class="jumbotron subhead">
-               <div class="row" id="banner">
-                       <div class="span12">
-                               <div class="pull-left">
-                                       <a href="" id="bannerLeft"><img src="" 
alt='"''"' /></a>
-                               </div>
-                               <div class="pull-right">
-                                       <a href="http://www.apache.org/"; 
id="bannerRight"><img src="" alt='"''"' /></a>
-                               </div>
-                       </div>
-               </div>
-               <div>
-                       <ul class="breadcrumb">
-                               <li><a href="" title="Apache Helix">Apache 
Helix </a></li>
-                               <li class="divider">/</li>
-                               <li><a href="" title="Release 0.9.9">Release 
0.9.9 </a></li>
-                               <li class="divider">/</li>
-                               <li>Tutorial - Admin Operations</li>
-                               <li class="publishDate version-date 
pull-right">Last Published: 2022-04-23</li>
-                       </ul>
-               </div>
-       </header>
-
-       <div class="main-body">
-       <div class="row">
-               <div class="span12">
-                       <div class="body-content">
-$bodyWithHeader
-                       </div>
-               </div>
-       </div>
-       </div>
-
-       </div><!-- /container -->
-       
-       <!-- Footer
-       ================================================== -->
-       <footer class="well">
-               <div class="container">
-                       <div class="row">
-                               <div class="span9 bottom-nav">
-                                       <ul class="nav nav-list">
-                                               <li class="nav-header">Get 
Helix</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Download">Download </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Building">Building </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Release Notes">Release Notes </a>
-                                               </li>
-                                               <li 
class="nav-header">Hands-On</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Quick Start">Quick Start </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Tutorial">Tutorial </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Javadocs">Javadocs </a>
-                                               </li>
-                                               <li 
class="nav-header">Recipes</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Distributed lock manager">Distributed lock manager </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Rabbit MQ consumer group">Rabbit MQ consumer group </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Rsync replicated file store">Rsync replicated file store </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Service discovery">Service discovery </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Distributed task DAG execution">Distributed task DAG execution </a>
-                                               </li>
-                                       </ul>
-                               </div>
-                       </div>
-               </div>
-       </footer>
-               
-       <div class="container subfooter">
-               <div class="row">
-                       <div class="span12">
-                               <p class="pull-right"><a href="#">Back to 
top</a></p>
-                               <p class="copyright">Copyright &copy;2022 <a 
href="https://www.apache.org/";>The Apache Software Foundation</a>. All Rights 
Reserved.</p>
-                               <p><a 
href="http://github.com/andriusvelykis/reflow-maven-skin"; title="Reflow Maven 
skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt"; 
target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
-                                       </div>
-               </div>
-       </div>
-
-       <!-- Le javascript
-       ================================================== -->
-       <!-- Placed at the end of the document so the pages load faster -->
-
-       <!-- Fallback jQuery loading from Google CDN:
-            
http://stackoverflow.com/questions/1014203/best-way-to-use-googles-hosted-jquery-but-fall-back-to-my-hosted-library-on-go
 -->
-       <script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";></script>
-       <script type="text/javascript">
-               if (typeof jQuery == 'undefined')
-               {
-                       document.write(unescape("%3Cscript 
src='./js/jquery-1.8.3.min.js' type='text/javascript'%3E%3C/script%3E"));
-               }
-       </script>
-       
-       <script 
src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/js/bootstrap.min.js";></script>
-       <script src="./js/lightbox.js"></script>
-       <script src="./js/jquery.smooth-scroll.min.js"></script>
-       <!-- back button support for smooth scroll -->
-       <script src="./js/jquery.ba-bbq.min.js"></script>
-
-       <script src="./js/reflow-skin.js"></script>
-       
-       </body>
+<section>
+<h2><a name="Helix_Tutorial:_Admin_Operations"></a><a 
href="./Tutorial.html">Helix Tutorial</a>: Admin Operations</h2>
+<p>Helix provides a set of admin APIs for cluster management operations. They 
are supported via:</p>
+<ul>
+
+<li>Java API</li>
+<li>Command Line Interface</li>
+<li>REST Interface via helix-admin-webapp</li>
+</ul><section>
+<h3><a name="Java_API"></a>Java API</h3>
+<p>See interface <a class="externalLink" 
href="http://helix.apache.org/javadocs/0.9.9/reference/org/apache/helix/HelixAdmin.html";><i>org.apache.helix.HelixAdmin</i></a></p></section><section>
+<h3><a name="Command_Line_Interface"></a>Command Line Interface</h3>
+<p>The command line tool comes with helix-core package:</p>
+<p>Get the command line tool:</p>
+
+<div class="source"><pre class="prettyprint"><code>git clone 
https://git-wip-us.apache.org/repos/asf/helix.git
+cd helix
+git checkout tags/helix-0.9.9
+./build
+cd helix-core/target/helix-core-pkg/bin
+chmod +x *.sh
+</code></pre></div>
+<p>Get help:</p>
+
+<div class="source"><pre class="prettyprint"><code>./helix-admin.sh --help
+</code></pre></div>
+<p>All other commands have this form:</p>
+
+<div class="source"><pre class="prettyprint"><code>./helix-admin.sh --zkSvr 
&lt;ZookeeperServerAddress&gt; &lt;command&gt; &lt;parameters&gt;
+</code></pre></div><section>
+<h4><a name="Supported_Commands"></a>Supported Commands</h4>
+<table border="0" class="table table-striped">
+<thead>
+
+<tr class="a">
+<th>Command Syntax</th>
+<th>Description</th></tr>
+</thead><tbody>
+
+<tr class="b">
+<td align="left"><i>--activateCluster &lt;clusterName controllerCluster 
true/false&gt;</i></td>
+<td>Enable/disable a cluster in distributed controller mode</td></tr>
+<tr class="a">
+<td align="left"><i>--addCluster &lt;clusterName&gt;</i></td>
+<td>Add a new cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--addIdealState &lt;clusterName resourceName 
fileName.json&gt;</i></td>
+<td>Add an ideal state to a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--addInstanceTag &lt;clusterName instanceName 
tag&gt;</i></td>
+<td>Add a tag to an instance</td></tr>
+<tr class="b">
+<td align="left"><i>--addNode &lt;clusterName instanceId&gt;</i></td>
+<td>Add an instance to a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--addResource &lt;clusterName resourceName partitionNumber 
stateModelName&gt;</i></td>
+<td>Add a new resource to a cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--addResourceProperty &lt;clusterName resourceName 
propertyName propertyValue&gt;</i></td>
+<td>Add a resource property</td></tr>
+<tr class="a">
+<td align="left"><i>--addStateModelDef &lt;clusterName 
fileName.json&gt;</i></td>
+<td>Add a State model definition to a cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--dropCluster &lt;clusterName&gt;</i></td>
+<td>Delete a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--dropNode &lt;clusterName instanceId&gt;</i></td>
+<td>Remove a node from a cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--dropResource &lt;clusterName resourceName&gt;</i></td>
+<td>Remove an existing resource from a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--enableCluster &lt;clusterName true/false&gt;</i></td>
+<td>Enable/disable a cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--enableInstance &lt;clusterName instanceId 
true/false&gt;</i></td>
+<td>Enable/disable an instance</td></tr>
+<tr class="a">
+<td align="left"><i>--enablePartition &lt;true/false clusterName nodeId 
resourceName partitionName&gt;</i></td>
+<td>Enable/disable a partition</td></tr>
+<tr class="b">
+<td align="left"><i>--getConfig &lt;configScope configScopeArgs 
configKeys&gt;</i></td>
+<td>Get user configs</td></tr>
+<tr class="a">
+<td align="left"><i>--getConstraints &lt;clusterName 
constraintType&gt;</i></td>
+<td>Get constraints</td></tr>
+<tr class="b">
+<td align="left"><i>--help</i></td>
+<td>print help information</td></tr>
+<tr class="a">
+<td align="left"><i>--instanceGroupTag &lt;instanceTag&gt;</i></td>
+<td>Specify instance group tag, used with rebalance command</td></tr>
+<tr class="b">
+<td align="left"><i>--listClusterInfo &lt;clusterName&gt;</i></td>
+<td>Show information of a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--listClusters</i></td>
+<td>List all clusters</td></tr>
+<tr class="b">
+<td align="left"><i>--listInstanceInfo &lt;clusterName instanceId&gt;</i></td>
+<td>Show information of an instance</td></tr>
+<tr class="a">
+<td align="left"><i>--listInstances &lt;clusterName&gt;</i></td>
+<td>List all instances in a cluster</td></tr>
+<tr class="b">
+<td align="left"><i>--listPartitionInfo &lt;clusterName resourceName 
partitionName&gt;</i></td>
+<td>Show information of a partition</td></tr>
+<tr class="a">
+<td align="left"><i>--listResourceInfo &lt;clusterName 
resourceName&gt;</i></td>
+<td>Show information of a resource</td></tr>
+<tr class="b">
+<td align="left"><i>--listResources &lt;clusterName&gt;</i></td>
+<td>List all resources in a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--listStateModel &lt;clusterName 
stateModelName&gt;</i></td>
+<td>Show information of a state model</td></tr>
+<tr class="b">
+<td align="left"><i>--listStateModels &lt;clusterName&gt;</i></td>
+<td>List all state models in a cluster</td></tr>
+<tr class="a">
+<td align="left"><i>--maxPartitionsPerNode 
&lt;maxPartitionsPerNode&gt;</i></td>
+<td>Specify the max partitions per instance, used with addResourceGroup 
command</td></tr>
+<tr class="b">
+<td align="left"><i>--rebalance &lt;clusterName resourceName 
replicas&gt;</i></td>
+<td>Rebalance a resource</td></tr>
+<tr class="a">
+<td align="left"><i>--removeConfig &lt;configScope configScopeArgs 
configKeys&gt;</i></td>
+<td>Remove user configs</td></tr>
+<tr class="b">
+<td align="left"><i>--removeConstraint &lt;clusterName constraintType 
constraintId&gt;</i></td>
+<td>Remove a constraint</td></tr>
+<tr class="a">
+<td align="left"><i>--removeInstanceTag &lt;clusterName instanceId 
tag&gt;</i></td>
+<td>Remove a tag from an instance</td></tr>
+<tr class="b">
+<td align="left"><i>--removeResourceProperty &lt;clusterName resourceName 
propertyName&gt;</i></td>
+<td>Remove a resource property</td></tr>
+<tr class="a">
+<td align="left"><i>--resetInstance &lt;clusterName instanceId&gt;</i></td>
+<td>Reset all erroneous partitions on an instance</td></tr>
+<tr class="b">
+<td align="left"><i>--resetPartition &lt;clusterName instanceId resourceName 
partitionName&gt;</i></td>
+<td>Reset an erroneous partition</td></tr>
+<tr class="a">
+<td align="left"><i>--resetResource &lt;clusterName resourceName&gt;</i></td>
+<td>Reset all erroneous partitions of a resource</td></tr>
+<tr class="b">
+<td align="left"><i>--setConfig &lt;configScope configScopeArgs 
configKeyValueMap&gt;</i></td>
+<td>Set user configs</td></tr>
+<tr class="a">
+<td align="left"><i>--setConstraint &lt;clusterName constraintType 
constraintId constraintKeyValueMap&gt;</i></td>
+<td>Set a constraint</td></tr>
+<tr class="b">
+<td align="left"><i>--swapInstance &lt;clusterName oldInstance 
newInstance&gt;</i></td>
+<td>Swap an old instance with a new instance</td></tr>
+<tr class="a">
+<td align="left"><i>--zkSvr &lt;ZookeeperServerAddress&gt;</i></td>
+<td>Provide zookeeper address</td></tr>
+</tbody>
+</table></section></section><section>
+<h3><a name="REST_Interface"></a>REST Interface</h3>
+<p>The REST interface comes wit helix-admin-webapp package:</p>
+
+<div class="source"><pre class="prettyprint"><code>git clone 
https://git-wip-us.apache.org/repos/asf/helix.git
+cd helix
+git checkout tags/helix-0.9.9
+./build
+cd helix-admin-webapp/target/helix-admin-webapp-pkg/bin
+chmod +x *.sh
+./run-rest-admin.sh --zkSvr &lt;zookeeperAddress&gt; --port &lt;port&gt; // 
make sure ZooKeeper is running
+</code></pre></div><section>
+<h4><a name="URL_and_support_methods"></a>URL and support methods</h4>
+<ul>
+
+<li>
+
+<p><i>/clusters</i></p>
+<ul>
+
+<li>List all clusters</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters
+</code></pre></div>
+<ul>
+
+<li>Add a cluster</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;addCluster&quot;,&quot;clusterName&quot;:&quot;MyCluster&quot;}'
 -H &quot;Content-Type: application/json&quot; http://localhost:8100/clusters
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}</i></p>
+<ul>
+
+<li>List cluster information</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster
+</code></pre></div>
+<ul>
+
+<li>Enable/disable a cluster in distributed controller mode</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;activateCluster&quot;,&quot;grandCluster&quot;:&quot;MyControllerCluster&quot;,&quot;enabled&quot;:&quot;true&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster
+</code></pre></div>
+<ul>
+
+<li>Remove a cluster</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -X DELETE 
http://localhost:8100/clusters/MyCluster
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/resourceGroups</i></p>
+<ul>
+
+<li>List all resources in a cluster</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/resourceGroups
+</code></pre></div>
+<ul>
+
+<li>Add a resource to cluster</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;addResource&quot;,&quot;resourceGroupName&quot;:&quot;MyDB&quot;,&quot;partitions&quot;:&quot;8&quot;,&quot;stateModelDefRef&quot;:&quot;MasterSlave&quot;
 }' -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/resourceGroups
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/resourceGroups/{resourceName}</i></p>
+<ul>
+
+<li>List resource information</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB
+</code></pre></div>
+<ul>
+
+<li>Drop a resource</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -X DELETE 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB
+</code></pre></div>
+<ul>
+
+<li>Reset all erroneous partitions of a resource</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;resetResource&quot;}' -H 
&quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/resourceGroups/{resourceName}/idealState</i></p>
+<ul>
+
+<li>Rebalance a resource</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;rebalance&quot;,&quot;replicas&quot;:&quot;3&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB/idealState
+</code></pre></div>
+<ul>
+
+<li>Add an ideal state</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>echo jsonParameters={
+&quot;command&quot;:&quot;addIdealState&quot;
+   }&amp;newIdealState={
+  &quot;id&quot; : &quot;MyDB&quot;,
+  &quot;simpleFields&quot; : {
+    &quot;IDEAL_STATE_MODE&quot; : &quot;AUTO&quot;,
+    &quot;NUM_PARTITIONS&quot; : &quot;8&quot;,
+    &quot;REBALANCE_MODE&quot; : &quot;SEMI_AUTO&quot;,
+    &quot;REPLICAS&quot; : &quot;0&quot;,
+    &quot;STATE_MODEL_DEF_REF&quot; : &quot;MasterSlave&quot;,
+    &quot;STATE_MODEL_FACTORY_NAME&quot; : &quot;DEFAULT&quot;
+  },
+  &quot;listFields&quot; : {
+  },
+  &quot;mapFields&quot; : {
+    &quot;MyDB_0&quot; : {
+      &quot;localhost_1001&quot; : &quot;MASTER&quot;,
+      &quot;localhost_1002&quot; : &quot;SLAVE&quot;
+    }
+  }
+}
+&gt; newIdealState.json
+curl -d @'./newIdealState.json' -H 'Content-Type: application/json' 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB/idealState
+</code></pre></div>
+<ul>
+
+<li>Add resource property</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;addResourceProperty&quot;,&quot;REBALANCE_TIMER_PERIOD&quot;:&quot;500&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB/idealState
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/resourceGroups/{resourceName}/externalView</i></p>
+<ul>
+
+<li>Show resource external view</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/resourceGroups/MyDB/externalView
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/instances</i></p>
+<ul>
+
+<li>List all instances</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/instances
+</code></pre></div>
+<ul>
+
+<li>Add an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;addInstance&quot;,&quot;instanceNames&quot;:&quot;localhost_1001&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/instances
+</code></pre></div>
+<ul>
+
+<li>Swap an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;swapInstance&quot;,&quot;oldInstance&quot;:&quot;localhost_1001&quot;,
 &quot;newInstance&quot;:&quot;localhost_1002&quot;}' -H &quot;Content-Type: 
application/json&quot; http://localhost:8100/clusters/MyCluster/instances
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/instances/{instanceName}</i></p>
+<ul>
+
+<li>Show instance information</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Enable/disable an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;enableInstance&quot;,&quot;enabled&quot;:&quot;false&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Drop an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -X DELETE 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Disable/enable partitions on an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;enablePartition&quot;,&quot;resource&quot;:
 &quot;MyDB&quot;,&quot;partition&quot;:&quot;MyDB_0&quot;,  
&quot;enabled&quot; : &quot;false&quot;}' -H &quot;Content-Type: 
application/json&quot; 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Reset an erroneous partition on an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;resetPartition&quot;,&quot;resource&quot;:
 &quot;MyDB&quot;,&quot;partition&quot;:&quot;MyDB_0&quot;}' -H 
&quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Reset all erroneous partitions on an instance</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;resetInstance&quot;}' -H 
&quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/instances/localhost_1001
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/configs</i></p>
+<ul>
+
+<li>Get user cluster level config</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/configs/cluster
+</code></pre></div>
+<ul>
+
+<li>Set user cluster level config</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;setConfig&quot;,&quot;configs&quot;:&quot;key1=value1,key2=value2&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/configs/cluster
+</code></pre></div>
+<ul>
+
+<li>Remove user cluster level config</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;removeConfig&quot;,&quot;configs&quot;:&quot;key1,key2&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/configs/cluster
+</code></pre></div>
+<ul>
+
+<li>Get/set/remove user participant level config</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;setConfig&quot;,&quot;configs&quot;:&quot;key1=value1,key2=value2&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/configs/participant/localhost_1001
+</code></pre></div>
+<ul>
+
+<li>Get/set/remove resource level config</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;setConfig&quot;,&quot;configs&quot;:&quot;key1=value1,key2=value2&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/configs/resource/MyDB
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/controller</i></p>
+<ul>
+
+<li>Show controller information</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/Controller
+</code></pre></div>
+<ul>
+
+<li>Enable/disable cluster</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;command&quot;:&quot;enableCluster&quot;,&quot;enabled&quot;:&quot;false&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/Controller
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/zkPath/{path}</i></p>
+<ul>
+
+<li>Get information for zookeeper path</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/zkPath/MyCluster
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/StateModelDefs</i></p>
+<ul>
+
+<li>Show all state model definitions</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/StateModelDefs
+</code></pre></div>
+<ul>
+
+<li>Add a state mdoel definition</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>echo jsonParameters={
+  &quot;command&quot;:&quot;addStateModelDef&quot;
+}&amp;newStateModelDef={
+  &quot;id&quot; : &quot;OnlineOffline&quot;,
+  &quot;simpleFields&quot; : {
+    &quot;INITIAL_STATE&quot; : &quot;OFFLINE&quot;
+  },
+  &quot;listFields&quot; : {
+    &quot;STATE_PRIORITY_LIST&quot; : [ &quot;ONLINE&quot;, 
&quot;OFFLINE&quot;, &quot;DROPPED&quot; ],
+    &quot;STATE_TRANSITION_PRIORITYLIST&quot; : [ &quot;OFFLINE-ONLINE&quot;, 
&quot;ONLINE-OFFLINE&quot;, &quot;OFFLINE-DROPPED&quot; ]
+  },
+  &quot;mapFields&quot; : {
+    &quot;DROPPED.meta&quot; : {
+      &quot;count&quot; : &quot;-1&quot;
+    },
+    &quot;OFFLINE.meta&quot; : {
+      &quot;count&quot; : &quot;-1&quot;
+    },
+    &quot;OFFLINE.next&quot; : {
+      &quot;DROPPED&quot; : &quot;DROPPED&quot;,
+      &quot;ONLINE&quot; : &quot;ONLINE&quot;
+    },
+    &quot;ONLINE.meta&quot; : {
+      &quot;count&quot; : &quot;R&quot;
+    },
+    &quot;ONLINE.next&quot; : {
+      &quot;DROPPED&quot; : &quot;OFFLINE&quot;,
+      &quot;OFFLINE&quot; : &quot;OFFLINE&quot;
+    }
+  }
+}
+&gt; newStateModelDef.json
+curl -d @'./untitled.txt' -H 'Content-Type: application/json' 
http://localhost:8100/clusters/MyCluster/StateModelDefs
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/StateModelDefs/{stateModelDefName}</i></p>
+<ul>
+
+<li>Show a state model definition</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/StateModelDefs/OnlineOffline
+</code></pre></div>
+</li>
+<li>
+
+<p><i>/clusters/{clusterName}/constraints/{constraintType}</i></p>
+<ul>
+
+<li>Show all contraints</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl 
http://localhost:8100/clusters/MyCluster/constraints/MESSAGE_CONSTRAINT
+</code></pre></div>
+<ul>
+
+<li>Set a contraint</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -d 
'jsonParameters={&quot;constraintAttributes&quot;:&quot;RESOURCE=MyDB,CONSTRAINT_VALUE=1&quot;}'
 -H &quot;Content-Type: application/json&quot; 
http://localhost:8100/clusters/MyCluster/constraints/MESSAGE_CONSTRAINT/MyConstraint
+</code></pre></div>
+<ul>
+
+<li>Remove a constraint</li>
+</ul>
+
+<div class="source"><pre class="prettyprint"><code>curl -X DELETE 
http://localhost:8100/clusters/MyCluster/constraints/MESSAGE_CONSTRAINT/MyConstraint
+</code></pre></div>
+</li>
+</ul></section></section></section>
+        </main>
+      </div>
+    </div>
+    <hr/>
+    <footer>
+      <div class="container-fluid">
+        <div class="row-fluid">
+<div class="row span16"><div>Apache Helix, Apache, the Apache feather logo, 
and the Apache Helix project logos are trademarks of The Apache Software 
Foundation.
+        All other marks mentioned may be trademarks or registered trademarks 
of their respective owners.</div>
+        <a 
href="https://helix.apache.org/0.9.9-docs/privacy-policy.html";>Privacy 
Policy</a>
+      </div>
+        </div>
+      </div>
+    </footer>
+<script>
+       if(anchors) {
+         anchors.add();
+       }
+</script>
+  </body>
 </html>
\ No newline at end of file

Modified: helix/site-content/0.9.9-docs/tutorial_agent.html
URL: 
http://svn.apache.org/viewvc/helix/site-content/0.9.9-docs/tutorial_agent.html?rev=1900184&r1=1900183&r2=1900184&view=diff
==============================================================================
--- helix/site-content/0.9.9-docs/tutorial_agent.html (original)
+++ helix/site-content/0.9.9-docs/tutorial_agent.html Sat Apr 23 04:22:15 2022
@@ -1,200 +1,295 @@
-
 <!DOCTYPE html>
+
+
 <!--
- Generated by Apache Maven Doxia at 2022-04-23
- Rendered using Maven Reflow Skin 1.0.0 
(http://andriusvelykis.github.com/reflow-maven-skin)
+ | Generated by Apache Maven Doxia Site Renderer 1.11.1 from 
src/site/markdown/tutorial_agent.md at 2022-04-23
+ | Rendered using Apache Maven Fluido Skin 1.11.0-SNAPSHOT
 -->
-<html  xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
+    <title>Apache Helix &#x2013; Tutorial - Helix Agent</title>
+    <link rel="stylesheet" 
href="./css/apache-maven-fluido-1.11.0-SNAPSHOT.min.css" />
+    <link rel="stylesheet" href="./css/site.css" />
+    <link rel="stylesheet" href="./css/print.css" media="print" />
+    <script src="./js/apache-maven-fluido-1.11.0-SNAPSHOT.min.js"></script>
+<script type="text/javascript">
+
+        var _gaq = _gaq || [];
+        _gaq.push(['_setAccount', 'UA-3211522-12']);
+        _gaq.push(['_trackPageview']);
+
+        (function() {
+        var ga = document.createElement('script'); ga.type = 
'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+        })();
+
+      </script>
+  </head>
+  <body class="topBarEnabled">
+    <header id="topbar" class="navbar navbar-fixed-top ">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+        <a data-target=".nav-collapse" data-toggle="collapse" class="btn 
btn-navbar">
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+        </a>
+            <ul class="nav">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Get Helix 
<b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="download.html" title="Download">Download</a></li>
+            <li><a href="Building.html" title="Building">Building</a></li>
+            <li><a href="releasenotes/release-0.9.9.html" title="Release 
Notes">Release Notes</a></li>
+        </ul>
+      </li>
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hands-On <b 
class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="Quickstart.html" title="Quick Start">Quick 
Start</a></li>
+            <li><a href="Tutorial.html" title="Tutorial">Tutorial</a></li>
+            <li><a href="../javadocs/0.9.9" title="Javadocs">Javadocs</a></li>
+        </ul>
+      </li>
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Recipes <b 
class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="recipes/lock_manager.html" title="Distributed lock 
manager">Distributed lock manager</a></li>
+            <li><a href="recipes/rabbitmq_consumer_group.html" title="Rabbit 
MQ consumer group">Rabbit MQ consumer group</a></li>
+            <li><a href="recipes/rsync_replicated_file_store.html" 
title="Rsync replicated file store">Rsync replicated file store</a></li>
+            <li><a href="recipes/service_discovery.html" title="Service 
discovery">Service discovery</a></li>
+            <li><a href="recipes/task_dag_execution.html" title="Distributed 
task DAG execution">Distributed task DAG execution</a></li>
+        </ul>
+      </li>
+            </ul>
+            <ul class="nav pull-right">
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">External Links <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+    <li><a href="index.html" title="Helix 0.9.9">Helix 0.9.9</a></li>
+                </ul>
+              </li>
+            </ul>
+        </div>
+      </div>
+    </header>
+    <div class="container-fluid">
+      <header>
+        <div id="banner">
+          <div class="pull-left"><a href="http://helix.apache.org/"; 
id="bannerLeft"><img src="../images/helix-logo.jpg"  alt=""/></a></div>
+          <div class="pull-right"><a href="http://www.apache.org/"; 
id="bannerRight"><img src="../images/feather_small.gif"  alt=""/></a></div>
+          <div class="clear"><hr/></div>
+        </div>
+
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+      <li class=""><a href="http://helix.apache.org/"; class="externalLink" 
title="Apache Helix">Apache Helix</a><span class="divider">/</span></li>
+      <li class=""><a href="../" title="Apache Helix">Apache Helix</a><span 
class="divider">/</span></li>
+      <li class=""><a href="./" title="Release 0.9.9">Release 0.9.9</a><span 
class="divider">/</span></li>
+    <li class="active ">Tutorial - Helix Agent</li>
+        <li id="publishDate" class="pull-right">Last Published: 2022-04-23</li>
+          </ul>
+        </div>
+      </header>
+      <div class="row-fluid">
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Get Helix</li>
+    <li><a href="download.html" title="Download"><span 
class="none"></span>Download</a></li>
+    <li><a href="Building.html" title="Building"><span 
class="none"></span>Building</a></li>
+    <li><a href="releasenotes/release-0.9.9.html" title="Release Notes"><span 
class="none"></span>Release Notes</a></li>
+   <li class="nav-header">Hands-On</li>
+    <li><a href="Quickstart.html" title="Quick Start"><span 
class="none"></span>Quick Start</a></li>
+    <li><a href="Tutorial.html" title="Tutorial"><span 
class="none"></span>Tutorial</a></li>
+    <li><a href="../javadocs/0.9.9" title="Javadocs"><span 
class="none"></span>Javadocs</a></li>
+   <li class="nav-header">Recipes</li>
+    <li><a href="recipes/lock_manager.html" title="Distributed lock 
manager"><span class="none"></span>Distributed lock manager</a></li>
+    <li><a href="recipes/rabbitmq_consumer_group.html" title="Rabbit MQ 
consumer group"><span class="none"></span>Rabbit MQ consumer group</a></li>
+    <li><a href="recipes/rsync_replicated_file_store.html" title="Rsync 
replicated file store"><span class="none"></span>Rsync replicated file 
store</a></li>
+    <li><a href="recipes/service_discovery.html" title="Service 
discovery"><span class="none"></span>Service discovery</a></li>
+    <li><a href="recipes/task_dag_execution.html" title="Distributed task DAG 
execution"><span class="none"></span>Distributed task DAG execution</a></li>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+<form id="search-form" action="https://www.google.com/search"; method="get" >
+  <input value="helix.apache.org/0.9.9-docs" name="sitesearch" type="hidden"/>
+  <input class="search-query" name="q" id="query" type="text" />
+</form>
+<script>asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+    <div id="twitter" style="border:none; margin-top: 10px">
+    <a href="https://twitter.com/ApacheHelix"; class="twitter-follow-button" 
data-show-count="false" data-align="left" data-size="medium" 
data-show-screen-name="true" data-lang="en">Follow ApacheHelix</a>
+    <script>!function(d,s,id){var 
js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+    </div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/"; title="Built by Maven" 
class="poweredBy"><img class="builtBy" alt="Built by Maven" 
src="./images/logos/maven-feather.png" /></a>
+            </div>
+          </div>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<!---
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<section>
+<h2><a name="Helix_Tutorial:_Helix_Agent_.28for_non-JVM_systems.29"></a><a 
href="./Tutorial.html">Helix Tutorial</a>: Helix Agent (for non-JVM 
systems)</h2>
+<p>Not every distributed system is written on the JVM, but many systems would 
benefit from the cluster management features that Helix provides. To make a 
non-JVM system work with Helix, you can use the Helix Agent module.</p><section>
+<h3><a name="What_is_Helix_Agent.3F"></a>What is Helix Agent?</h3>
+<p>Helix is built on the following assumption: if your distributed resource is 
modeled by a finite state machine, then Helix can tell participants when they 
should transition between states. In the Java API, this means implementing 
transition callbacks. In the Helix agent API, this means providing commands 
than can run for each transition.</p>
+<p>These commands could do anything behind the scenes; Helix only requires 
that they exit once the state transition is complete.</p></section><section>
+<h3><a name="Configuring_Transition_Commands"></a>Configuring Transition 
Commands</h3>
+<p>Here's how to tell Helix which commands to run on state 
transitions:</p><section>
+<h4><a name="Java"></a>Java</h4>
+<p>Using the Java API, first get a configuration scope (the Helix agent 
supports both cluster and resource scopes, picking resource first if it is 
available):</p>
+
+<div class="source"><pre class="prettyprint"><code>// Cluster scope
+HelixConfigScope scope =
+    new 
HelixConfigScopeBuilder(ConfigScopeProperty.CLUSTER).forCluster(clusterName).build();
+
+// Resource scope
+HelixConfigScope scope =
+    new 
HelixConfigScopeBuilder(ConfigScopeProperty.RESOURCE).forCluster(clusterName).forResource(resourceName).build();
+</code></pre></div>
+<p>Then, specify the command to run for each state transition:</p>
+
+<div class="source"><pre class="prettyprint"><code>// Get the configuration 
accessor
+ConfigAccessor configAccessor = new ConfigAccessor(_gZkClient);
+
+// Specify the script for OFFLINE --&gt; ONLINE
+CommandConfig.Builder builder = new CommandConfig.Builder();
+CommandConfig cmdConfig =
+    builder.setTransition(&quot;OFFLINE&quot;, 
&quot;ONLINE&quot;).setCommand(&quot;simpleHttpClient.py OFFLINE-ONLINE&quot;)
+        .setCommandWorkingDir(workingDir)
+        .setCommandTimeout(&quot;5000L&quot;) // optional: ms to wait before 
failing
+        .setPidFile(pidFile) // optional: for daemon-like systems that will 
write the process id to a file
+        .build();
+configAccessor.set(scope, cmdConfig.toKeyValueMap());
+
+// Specify the script for ONLINE --&gt; OFFLINE
+builder = new CommandConfig.Builder();
+cmdConfig =
+    builder.setTransition(&quot;ONLINE&quot;, 
&quot;OFFLINE&quot;).setCommand(&quot;simpleHttpClient.py ONLINE-OFFLINE&quot;)
+        .setCommandWorkingDir(workingDir)
+        .build();
+configAccessor.set(scope, cmdConfig.toKeyValueMap());
+
+// Specify NOP for OFFLINE --&gt; DROPPED
+builder = new CommandConfig.Builder();
+cmdConfig =
+    builder.setTransition(&quot;OFFLINE&quot;, &quot;DROPPED&quot;)
+        .setCommand(CommandAttribute.NOP.getName())
+        .build();
+configAccessor.set(scope, cmdConfig.toKeyValueMap());
+</code></pre></div>
+<p>In this example, we have a program called simpleHttpClient.py that we call 
for all transitions, only changing the arguments that are passed in. However, 
there is no requirement that each transition invoke the same program; this API 
allows running arbitrary commands in arbitrary directories with arbitrary 
arguments.</p>
+<p>Notice that that for the OFFLINE --&gt; DROPPED transition, we do not run 
any command (specifically, we specify the NOP command). This just tells Helix 
that the system doesn't care about when things are dropped, and it can consider 
the transition already done.</p></section><section>
+<h4><a name="Command_Line"></a>Command Line</h4>
+<p>It is also possible to configure everything directly from the command line. 
Here's how that would look for cluster-wide configuration:</p>
+
+<div class="source"><pre class="prettyprint"><code># Specify the script for 
OFFLINE --&gt; ONLINE
+/helix-admin.sh --zkSvr localhost:2181 --setConfig CLUSTER clusterName 
OFFLINE-ONLINE.command=&quot;simpleHttpClient.py 
OFFLINE-ONLINE&quot;,OFFLINE-ONLINE.workingDir=&quot;/path/to/script&quot;, 
OFFLINE-ONLINE.command.pidfile=&quot;/path/to/pidfile&quot;
+
+# Specify the script for ONLINE --&gt; OFFLINE
+/helix-admin.sh --zkSvr localhost:2181 --setConfig CLUSTER clusterName 
ONLINE-OFFLINE.command=&quot;simpleHttpClient.py 
ONLINE-OFFLINE&quot;,ONLINE-OFFLINE.workingDir=&quot;/path/to/script&quot;, 
OFFLINE-ONLINE.command.pidfile=&quot;/path/to/pidfile&quot;
+
+# Specify NOP for OFFLINE --&gt; DROPPED
+/helix-admin.sh --zkSvr localhost:2181 --setConfig CLUSTER clusterName 
ONLINE-OFFLINE.command=&quot;nop&quot;
+</code></pre></div>
+<p>Like in the Java configuration, it is also possible to specify a resource 
scope instead of a cluster scope:</p>
+
+<div class="source"><pre class="prettyprint"><code># Specify the script for 
OFFLINE --&gt; ONLINE
+/helix-admin.sh --zkSvr localhost:2181 --setConfig RESOURCE 
clusterName,resourceName OFFLINE-ONLINE.command=&quot;simpleHttpClient.py 
OFFLINE-ONLINE&quot;,OFFLINE-ONLINE.workingDir=&quot;/path/to/script&quot;, 
OFFLINE-ONLINE.command.pidfile=&quot;/path/to/pidfile&quot;
+</code></pre></div></section></section><section>
+<h3><a name="Starting_the_Agent"></a>Starting the Agent</h3>
+<p>There should be an agent running for every participant you have running. 
Ideally, its lifecycle should match that of the participant. Here, we have a 
simple long-running participant called simpleHttpServer.py. Its only purpose is 
to record state transitions.</p>
+<p>Here are some ways that you can start the Helix agent:</p><section>
+<h4><a name="Java"></a>Java</h4>
+
+<div class="source"><pre class="prettyprint"><code>// Start your application 
process
+ExternalCommand serverCmd = ExternalCommand.start(workingDir + 
&quot;/simpleHttpServer.py&quot;);
+
+// Start the agent
+Thread agentThread = new Thread() {
+  @Override
+  public void run() {
+    while(!isInterrupted()) {
+      try {
+        HelixAgentMain.main(new String[] {
+            &quot;--zkSvr&quot;, zkAddr, &quot;--cluster&quot;, clusterName, 
&quot;--instanceName&quot;, instanceName,
+            &quot;--stateModel&quot;, &quot;OnlineOffline&quot;
+        });
+      } catch (InterruptedException e) {
+        LOG.info(&quot;Agent thread interrupted&quot;, e);
+        interrupt();
+      } catch (Exception e) {
+        LOG.error(&quot;Exception start helix-agent&quot;, e);
+      }
+    }
+  }
+};
+agentThread.start();
+
+// Wait for the process to terminate (either intentionally or unintentionally)
+serverCmd.waitFor();
+
+// Kill the agent
+agentThread.interrupt();
+</code></pre></div></section><section>
+<h4><a name="Command_Line"></a>Command Line</h4>
+
+<div class="source"><pre class="prettyprint"><code># Build Helix and start the 
agent
+mvn clean install -DskipTests
+chmod +x helix-agent/target/helix-agent-pkg/bin/*
+helix-agent/target/helix-agent-pkg/bin/start-helix-agent.sh --zkSvr 
zkAddr1,zkAddr2 --cluster clusterName --instanceName instanceName --stateModel 
OnlineOffline
 
-       <head>
-               <meta charset="UTF-8" />
-               <title>Apache Helix &#x2013; Tutorial - Helix Agent</title>
-               <meta name="viewport" content="width=device-width, 
initial-scale=1.0" />
-               <meta name="description" content="" />
-               <meta http-equiv="content-language" content="en" />
-
-               <link 
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap.min.css";
 rel="stylesheet" />
-               <link 
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-responsive.min.css";
 rel="stylesheet" />
-               <link href="./css/docs.css" rel="stylesheet" />
-               <link href="./css/reflow-skin.css" rel="stylesheet" />
-               
-               
-               <link href="./css/lightbox.css" rel="stylesheet" />
-               
-               <link href="./css/site.css" rel="stylesheet" />
-               <link href="./css/print.css" rel="stylesheet" media="print" />
-               
-               <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-               <!--[if lt IE 9]>
-                       <script 
src="http://html5shim.googlecode.com/svn/trunk/html5.js";></script>
-               <![endif]-->
-               
-       </head>
-
-       <body class="page-$config.fileId project-$config.projectId" 
data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
-
-               <div class="navbar navbar-fixed-top">
-                       <div class="navbar-inner">
-                               <div class="container">
-                                       <a class="btn btn-navbar" 
data-toggle="collapse" data-target=".nav-collapse">
-                                               <span class="icon-bar"></span>
-                                               <span class="icon-bar"></span>
-                                               <span class="icon-bar"></span>
-                                       </a>
-                                       <div class="nav-collapse">
-                                               <ul class="nav pull-right">
-                                                       <li class="active"><a 
href="" title="Helix 0.9.9">Helix 0.9.9 </a></li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Get Helix <b 
class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Download">Download </a></li>
-                                                                       <li 
class="active"><a href="" title="Building">Building </a></li>
-                                                                       <li 
class="active"><a href="" title="Release Notes">Release Notes </a></li>
-                                                               </ul>
-                                                       </li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Hands-On <b 
class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Quick Start">Quick Start </a></li>
-                                                                       <li 
class="active"><a href="" title="Tutorial">Tutorial </a></li>
-                                                                       <li 
class="active"><a href="" title="Javadocs">Javadocs </a></li>
-                                                               </ul>
-                                                       </li>
-                                                       <li class="dropdown 
active">
-                                                               <a href="#" 
class="dropdown-toggle" data-toggle="dropdown">Recipes <b class="caret"></b></a>
-                                                               <ul 
class="dropdown-menu">
-                                                                       <li 
class="active"><a href="" title="Distributed lock manager">Distributed lock 
manager </a></li>
-                                                                       <li 
class="active"><a href="" title="Rabbit MQ consumer group">Rabbit MQ consumer 
group </a></li>
-                                                                       <li 
class="active"><a href="" title="Rsync replicated file store">Rsync replicated 
file store </a></li>
-                                                                       <li 
class="active"><a href="" title="Service discovery">Service discovery </a></li>
-                                                                       <li 
class="active"><a href="" title="Distributed task DAG execution">Distributed 
task DAG execution </a></li>
-                                                               </ul>
-                                                       </li>
-                                               </ul>
-                                       </div><!--/.nav-collapse -->
-                               </div>
-                       </div>
-               </div>
-               
-       <div class="container">
-       
-       <!-- Masthead
-       ================================================== -->
-       <header class="jumbotron subhead">
-               <div class="row" id="banner">
-                       <div class="span12">
-                               <div class="pull-left">
-                                       <a href="" id="bannerLeft"><img src="" 
alt='"''"' /></a>
-                               </div>
-                               <div class="pull-right">
-                                       <a href="http://www.apache.org/"; 
id="bannerRight"><img src="" alt='"''"' /></a>
-                               </div>
-                       </div>
-               </div>
-               <div>
-                       <ul class="breadcrumb">
-                               <li><a href="" title="Apache Helix">Apache 
Helix </a></li>
-                               <li class="divider">/</li>
-                               <li><a href="" title="Release 0.9.9">Release 
0.9.9 </a></li>
-                               <li class="divider">/</li>
-                               <li>Tutorial - Helix Agent</li>
-                               <li class="publishDate version-date 
pull-right">Last Published: 2022-04-23</li>
-                       </ul>
-               </div>
-       </header>
-
-       <div class="main-body">
-       <div class="row">
-               <div class="span12">
-                       <div class="body-content">
-$bodyWithHeader
-                       </div>
-               </div>
-       </div>
-       </div>
-
-       </div><!-- /container -->
-       
-       <!-- Footer
-       ================================================== -->
-       <footer class="well">
-               <div class="container">
-                       <div class="row">
-                               <div class="span9 bottom-nav">
-                                       <ul class="nav nav-list">
-                                               <li class="nav-header">Get 
Helix</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Download">Download </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Building">Building </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Release Notes">Release Notes </a>
-                                               </li>
-                                               <li 
class="nav-header">Hands-On</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Quick Start">Quick Start </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Tutorial">Tutorial </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Javadocs">Javadocs </a>
-                                               </li>
-                                               <li 
class="nav-header">Recipes</li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Distributed lock manager">Distributed lock manager </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Rabbit MQ consumer group">Rabbit MQ consumer group </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Rsync replicated file store">Rsync replicated file store </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Service discovery">Service discovery </a>
-                                               </li>
-                                               <li class="active">
-                                                       <a href="#" 
title="Distributed task DAG execution">Distributed task DAG execution </a>
-                                               </li>
-                                       </ul>
-                               </div>
-                       </div>
-               </div>
-       </footer>
-               
-       <div class="container subfooter">
-               <div class="row">
-                       <div class="span12">
-                               <p class="pull-right"><a href="#">Back to 
top</a></p>
-                               <p class="copyright">Copyright &copy;2022 <a 
href="https://www.apache.org/";>The Apache Software Foundation</a>. All Rights 
Reserved.</p>
-                               <p><a 
href="http://github.com/andriusvelykis/reflow-maven-skin"; title="Reflow Maven 
skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt"; 
target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
-                                       </div>
-               </div>
-       </div>
-
-       <!-- Le javascript
-       ================================================== -->
-       <!-- Placed at the end of the document so the pages load faster -->
-
-       <!-- Fallback jQuery loading from Google CDN:
-            
http://stackoverflow.com/questions/1014203/best-way-to-use-googles-hosted-jquery-but-fall-back-to-my-hosted-library-on-go
 -->
-       <script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";></script>
-       <script type="text/javascript">
-               if (typeof jQuery == 'undefined')
-               {
-                       document.write(unescape("%3Cscript 
src='./js/jquery-1.8.3.min.js' type='text/javascript'%3E%3C/script%3E"));
-               }
-       </script>
-       
-       <script 
src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/js/bootstrap.min.js";></script>
-       <script src="./js/lightbox.js"></script>
-       <script src="./js/jquery.smooth-scroll.min.js"></script>
-       <!-- back button support for smooth scroll -->
-       <script src="./js/jquery.ba-bbq.min.js"></script>
-
-       <script src="./js/reflow-skin.js"></script>
-       
-       </body>
+# Here, you can define your own logic to terminate this agent when your 
process terminates
+...
+</code></pre></div></section></section><section>
+<h3><a name="Example"></a>Example</h3>
+<p><a class="externalLink" 
href="https://git-wip-us.apache.org/repos/asf?p=helix.git;a=blob;f=helix-agent/src/test/java/org/apache/helix/agent/TestHelixAgent.java;h=ccf64ce5544207c7e48261682ea69945b71da7f1;hb=refs/heads/master";>Here</a>
 is a basic system that uses the Helix agent package.</p></section><section>
+<h3><a name="Notes"></a>Notes</h3>
+<p>As you may have noticed from the examples, the participant program and the 
state transition program are two different programs. The former is a 
<i>long-running</i> process that is directly tied to the Helix agent. The 
latter is a process that only exists while a state transition is underway. 
Despite this, these two processes should be intertwined. The transition command 
will need to communicate to the participant to actually complete the state 
transition and the participant will need to communicate whether or not this was 
successful. The implementation of this protocol is the responsibility of the 
system.</p></section></section>
+        </main>
+      </div>
+    </div>
+    <hr/>
+    <footer>
+      <div class="container-fluid">
+        <div class="row-fluid">
+<div class="row span16"><div>Apache Helix, Apache, the Apache feather logo, 
and the Apache Helix project logos are trademarks of The Apache Software 
Foundation.
+        All other marks mentioned may be trademarks or registered trademarks 
of their respective owners.</div>
+        <a 
href="https://helix.apache.org/0.9.9-docs/privacy-policy.html";>Privacy 
Policy</a>
+      </div>
+        </div>
+      </div>
+    </footer>
+<script>
+       if(anchors) {
+         anchors.add();
+       }
+</script>
+  </body>
 </html>
\ No newline at end of file


Reply via email to