You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2014/09/16 18:08:57 UTC

git commit: HBASE-11961 Document region state transitions (Jimmy Xiang and Misty Stanley-Jones)

Repository: hbase
Updated Branches:
  refs/heads/master 43a8dea34 -> 4ad3fe1f2


HBASE-11961 Document region state transitions (Jimmy Xiang and Misty Stanley-Jones)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4ad3fe1f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4ad3fe1f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4ad3fe1f

Branch: refs/heads/master
Commit: 4ad3fe1f2e3859d7aa1cbe06e4e94ae3b164a17d
Parents: 43a8dea
Author: Jimmy Xiang <jx...@cloudera.com>
Authored: Fri Sep 12 10:57:57 2014 -0700
Committer: Jimmy Xiang <jx...@cloudera.com>
Committed: Tue Sep 16 09:08:22 2014 -0700

----------------------------------------------------------------------
 src/main/docbkx/book.xml                        | 199 +++++++++++++++++++
 .../site/resources/images/region_states.png     | Bin 0 -> 99146 bytes
 2 files changed, 199 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/4ad3fe1f/src/main/docbkx/book.xml
----------------------------------------------------------------------
diff --git a/src/main/docbkx/book.xml b/src/main/docbkx/book.xml
index 01c6b41..8fc2f7a 100644
--- a/src/main/docbkx/book.xml
+++ b/src/main/docbkx/book.xml
@@ -3042,6 +3042,205 @@ ctime = Sat Jun 23 11:13:40 PDT 2012
           </para>
         </section>
 
+        <section xml:id="regions.arch.states">
+          <title>Region State Transition</title>
+          <para> HBase maintains a state for each region and persists the state in META. The state
+            of the META region itself is persisted in ZooKeeper. You can see the states of regions
+            in transition in the Master web UI. Following is the list of possible region
+            states.</para>
+
+          <itemizedlist>
+            <title>Possible Region States</title>
+            <listitem>
+              <para>OFFLINE: the region is offline and not opening</para>
+            </listitem>
+            <listitem>
+              <para>OPENING: the region is in the process of being opened</para>
+            </listitem>
+            <listitem>
+              <para>OPEN: the region is open and the region server has notified the master</para>
+            </listitem>
+            <listitem>
+              <para>FAILED_OPEN: the region server failed to open the region</para>
+            </listitem>
+            <listitem>
+              <para>CLOSING: the region is in the process of being closed</para>
+            </listitem>
+            <listitem>
+              <para>CLOSED: the region server has closed the region and notified the master</para>
+            </listitem>
+            <listitem>
+              <para>FAILED_CLOSE: the region server failed to close the region</para>
+            </listitem>
+            <listitem>
+              <para>SPLITTING: the region server notified the master that the region is
+                splitting</para>
+            </listitem>
+            <listitem>
+              <para>SPLIT: the region server notified the master that the region has finished
+                splitting</para>
+            </listitem>
+            <listitem>
+              <para>SPLITTING_NEW: this region is being created by a split which is in
+                progress</para>
+            </listitem>
+            <listitem>
+              <para>MERGING: the region server notified the master that this region is being merged
+                with another region</para>
+            </listitem>
+            <listitem>
+              <para>MERGED: the region server notified the master that this region has been
+                merged</para>
+            </listitem>
+            <listitem>
+              <para>MERGING_NEW: this region is being created by a merge of two regions</para>
+            </listitem>
+          </itemizedlist>
+
+          <figure>
+            <title>Region State Transitions</title>
+            <mediaobject>
+              <imageobject>
+                <imagedata align="center" valign="middle" fileref="region_states.png"/>
+              </imageobject>
+              <caption>
+                <para>This graph shows all allowed transitions a region can undergo. In the graph,
+                  each node is a state. A node has a color based on the state type, for readability.
+                  A directed line in the graph is a possible state transition.</para>
+              </caption>
+            </mediaobject>
+          </figure>
+
+          <itemizedlist>
+            <title>Graph Legend</title>
+             <listitem>
+              <para>Brown: Offline state, a special state that can be transient (after closed before
+                opening), terminal (regions of disabled tables), or initial (regions of newly
+                created tables)</para></listitem>
+             <listitem>
+              <para>Palegreen: Online state that regions can serve requests</para></listitem>
+             <listitem>
+              <para>Lightblue: Transient states</para></listitem>
+             <listitem>
+              <para>Red: Failure states that need OPS attention</para></listitem>
+             <listitem>
+              <para>Gold: Terminal states of regions split/merged</para></listitem>
+             <listitem>
+              <para>Grey: Initial states of regions created through split/merge</para></listitem>
+          </itemizedlist>
+
+          <orderedlist>
+            <title>Region State Transitions Explained</title>
+             <listitem>
+              <para>The master moves a region from <literal>OFFLINE</literal> to
+                  <literal>OPENING</literal> state and tries to assign the region to a region
+                server. The region server may or may not have received the open region request. The
+                master retries sending the open region request to the region server until the RPC
+                goes through or the master runs out of retries. After the region server receives the
+                open region request, the region server begins opening the region.</para>
+             </listitem>
+             <listitem>
+              <para>If the master is running out of retries, the master prevents the region server
+                from opening the region by moving the region to <literal>CLOSING</literal> state and
+                trying to close it, even if the region server is starting to open the region.</para>
+             </listitem>
+             <listitem>
+              <para>After the region server opens the region, it continues to try to notify the
+                master until the master moves the region to <literal>OPEN</literal> state and
+                notifies the region server. The region is now open.</para>
+             </listitem>
+             <listitem>
+              <para>If the region server cannot open the region, it notifies the master. The master
+                moves the region to <literal>CLOSED</literal> state and tries to open the region on
+                a different region server.</para>
+             </listitem>
+             <listitem>
+              <para>If the master cannot open the region on any of a certain number of regions, it
+                moves the region to <literal>FAILED_OPEN</literal> state, and takes no further
+                action until an operator intervenes from the HBase shell, or the server is
+                dead.</para>
+             </listitem>
+             <listitem>
+              <para>The master moves a region from <literal>OPEN</literal> to
+                  <literal>CLOSING</literal> state. The region server holding the region may or may
+                not have received the close region request. The master retries sending the close
+                request to the server until the RPC goes through or the master runs out of
+                retries.</para>
+             </listitem>
+             <listitem>
+              <para>If the region server is not online, or throws
+                  <code>NotServingRegionException</code>, the master moves the region to
+                  <literal>OFFLINE</literal> state and re-assigns it to a different region
+                server.</para>
+             </listitem>
+             <listitem>
+              <para>If the region server is online, but not reachable after the master runs out of
+                retries, the master moves the region to <literal>FAILED_CLOSE</literal> state and
+                takes no further action until an operator intervenes from the HBase shell, or the
+                server is dead.</para>
+             </listitem>
+             <listitem>
+              <para>If the region server gets the close region request, it closes the region and
+                notifies the master. The master moves the region to <literal>CLOSED</literal> state
+                and re-assigns it to a different region server.</para>
+             </listitem>
+             <listitem>
+              <para>Before assigning a region, the master moves the region to
+                  <literal>OFFLINE</literal> state automatically if it is in
+                  <literal>CLOSED</literal> state.</para>
+             </listitem>
+             <listitem>
+              <para>When a region server is about to split a region, it notifies the master. The
+                master moves the region to be split from <literal>OPEN</literal> to
+                  <literal>SPLITTING</literal> state and add the two new regions to be created to
+                the region server. These two regions are in <literal>SPLITING_NEW</literal> state
+                initially.</para>
+             </listitem>
+             <listitem>
+              <para>After notifying the master, the region server starts to split the region. Once
+                past the point of no return, the region server notifies the master again so the
+                master can update the META. However, the master does not update the region states
+                until it is notified by the server that the split is done. If the split is
+                successful, the splitting region is moved from <literal>SPLITTING</literal> to
+                  <literal>SPLIT</literal> state and the two new regions are moved from
+                  <literal>SPLITTING_NEW</literal> to <literal>OPEN</literal> state.</para>
+             </listitem>
+             <listitem>
+              <para>If the split fails, the splitting region is moved from
+                  <literal>SPLITTING</literal> back to <literal>OPEN</literal> state, and the two
+                new regions which were created are moved from <literal>SPLITTING_NEW</literal> to
+                  <literal>OFFLINE</literal> state.</para>
+             </listitem>
+             <listitem>
+              <para>When a region server is about to merge two regions, it notifies the master
+                first. The master moves the two regions to be merged from <literal>OPEN</literal> to
+                  <literal>MERGING</literal>state, and adds the new region which will hold the
+                contents of the merged regions region to the region server. The new region is in
+                  <literal>MERGING_NEW</literal> state initially.</para>
+             </listitem>
+             <listitem>
+              <para>After notifying the master, the region server starts to merge the two regions.
+                Once past the point of no return, the region server notifies the master again so the
+                master can update the META. However, the master does not update the region states
+                until it is notified by the region server that the merge has completed. If the merge
+                is successful, the two merging regions are moved from <literal>MERGING</literal> to
+                  <literal>MERGED</literal> state and the new region is moved from
+                  <literal>MERGING_NEW</literal> to <literal>OPEN</literal> state.</para>
+             </listitem>
+             <listitem>
+              <para>If the merge fails, the two merging regions are moved from
+                  <literal>MERGING</literal> back to <literal>OPEN</literal> state, and the new
+                region which was created to hold the contents of the merged regions is moved from
+                  <literal>MERGING_NEW</literal> to <literal>OFFLINE</literal> state.</para>
+             </listitem>
+             <listitem>
+              <para>For regions in <literal>FAILED_OPEN</literal> or <literal>FAILED_CLOSE</literal>
+                states , the master tries to close them again when they are reassigned by an
+                operator via HBase Shell. </para>
+             </listitem>
+          </orderedlist>
+        </section>
+
       </section>  <!--  assignment -->
 
       <section xml:id="regions.arch.locality">

http://git-wip-us.apache.org/repos/asf/hbase/blob/4ad3fe1f/src/main/site/resources/images/region_states.png
----------------------------------------------------------------------
diff --git a/src/main/site/resources/images/region_states.png b/src/main/site/resources/images/region_states.png
new file mode 100644
index 0000000..ba69e97
Binary files /dev/null and b/src/main/site/resources/images/region_states.png differ