http://git-wip-us.apache.org/repos/asf/hbase-site/blob/27555316/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
index 809f66f..9b60dd0 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
@@ -765,146 +765,145 @@
 <span class="sourceLineNo">757</span>        found.set(true);<a 
name="line.757"></a>
 <span class="sourceLineNo">758</span>        try {<a name="line.758"></a>
 <span class="sourceLineNo">759</span>          boolean rootMetaFound =<a 
name="line.759"></a>
-<span class="sourceLineNo">760</span>              
masterServices.getMetaTableLocator().verifyMetaRegionLocation(<a 
name="line.760"></a>
-<span class="sourceLineNo">761</span>                  conn, 
masterServices.getZooKeeper(), 1);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>          if (rootMetaFound) {<a 
name="line.762"></a>
-<span class="sourceLineNo">763</span>            MetaTableAccessor.Visitor 
visitor = new DefaultVisitorBase() {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              @Override<a 
name="line.764"></a>
-<span class="sourceLineNo">765</span>              public boolean 
visitInternal(Result row) throws IOException {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                RegionInfo info = 
MetaTableAccessor.getRegionInfo(row);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>                if (info != null) {<a 
name="line.767"></a>
-<span class="sourceLineNo">768</span>                  Cell serverCell =<a 
name="line.768"></a>
-<span class="sourceLineNo">769</span>                      
row.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>                          
HConstants.SERVER_QUALIFIER);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>                  if 
(RSGROUP_TABLE_NAME.equals(info.getTable()) &amp;&amp; serverCell != null) {<a 
name="line.771"></a>
-<span class="sourceLineNo">772</span>                    ServerName sn =<a 
name="line.772"></a>
-<span class="sourceLineNo">773</span>                        
ServerName.parseVersionedServerName(CellUtil.cloneValue(serverCell));<a 
name="line.773"></a>
-<span class="sourceLineNo">774</span>                    if (sn == null) {<a 
name="line.774"></a>
-<span class="sourceLineNo">775</span>                      found.set(false);<a 
name="line.775"></a>
-<span class="sourceLineNo">776</span>                    } else if 
(tsm.isTableState(RSGROUP_TABLE_NAME, TableState.State.ENABLED)) {<a 
name="line.776"></a>
-<span class="sourceLineNo">777</span>                      try {<a 
name="line.777"></a>
-<span class="sourceLineNo">778</span>                        
ClientProtos.ClientService.BlockingInterface rs = conn.getClient(sn);<a 
name="line.778"></a>
-<span class="sourceLineNo">779</span>                        
ClientProtos.GetRequest request =<a name="line.779"></a>
-<span class="sourceLineNo">780</span>                            
RequestConverter.buildGetRequest(info.getRegionName(),<a name="line.780"></a>
-<span class="sourceLineNo">781</span>                                new 
Get(ROW_KEY));<a name="line.781"></a>
-<span class="sourceLineNo">782</span>                        rs.get(null, 
request);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                        
assignedRegions.add(info);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                      } catch(Exception 
ex) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>                        LOG.debug("Caught 
exception while verifying group region", ex);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>                      }<a 
name="line.786"></a>
-<span class="sourceLineNo">787</span>                    }<a 
name="line.787"></a>
-<span class="sourceLineNo">788</span>                    
foundRegions.add(info);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                  }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                return true;<a 
name="line.791"></a>
-<span class="sourceLineNo">792</span>              }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            };<a name="line.793"></a>
-<span class="sourceLineNo">794</span>            
MetaTableAccessor.fullScanRegions(conn, visitor);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            // if no regions in meta then 
we have to create the table<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            if (foundRegions.size() &lt; 
1 &amp;&amp; rootMetaFound &amp;&amp; !createSent) {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              createRSGroupTable();<a 
name="line.797"></a>
-<span class="sourceLineNo">798</span>              createSent = true;<a 
name="line.798"></a>
-<span class="sourceLineNo">799</span>            }<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            LOG.info("RSGroup table=" + 
RSGROUP_TABLE_NAME + " isOnline=" + found.get()<a name="line.800"></a>
-<span class="sourceLineNo">801</span>                + ", regionCount=" + 
foundRegions.size() + ", assignCount="<a name="line.801"></a>
-<span class="sourceLineNo">802</span>                + assignedRegions.size() 
+ ", rootMetaFound=" + rootMetaFound);<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            found.set(found.get() 
&amp;&amp; assignedRegions.size() == foundRegions.size()<a name="line.803"></a>
-<span class="sourceLineNo">804</span>                &amp;&amp; 
foundRegions.size() &gt; 0);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          } else {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            LOG.info("Waiting for catalog 
tables to come online");<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            found.set(false);<a 
name="line.807"></a>
-<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          if (found.get()) {<a 
name="line.809"></a>
-<span class="sourceLineNo">810</span>            LOG.debug("With group table 
online, refreshing cached information.");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            
RSGroupInfoManagerImpl.this.refresh(true);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            online = true;<a 
name="line.812"></a>
-<span class="sourceLineNo">813</span>            //flush any inconsistencies 
between ZK and HTable<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            
RSGroupInfoManagerImpl.this.flushConfig();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (RuntimeException e) {<a 
name="line.816"></a>
-<span class="sourceLineNo">817</span>          throw e;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        } catch(Exception e) {<a 
name="line.818"></a>
-<span class="sourceLineNo">819</span>          found.set(false);<a 
name="line.819"></a>
-<span class="sourceLineNo">820</span>          LOG.warn("Failed to perform 
check", e);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          Thread.sleep(100);<a 
name="line.823"></a>
-<span class="sourceLineNo">824</span>        } catch (InterruptedException e) 
{<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          LOG.info("Sleep interrupted", 
e);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>        }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      return found.get();<a 
name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    private void createRSGroupTable() 
throws IOException {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      Long procId = 
masterServices.createSystemTable(RSGROUP_TABLE_DESC);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      // wait for region to be online<a 
name="line.833"></a>
-<span class="sourceLineNo">834</span>      int tries = 600;<a 
name="line.834"></a>
-<span class="sourceLineNo">835</span>      while 
(!(masterServices.getMasterProcedureExecutor().isFinished(procId))<a 
name="line.835"></a>
-<span class="sourceLineNo">836</span>          &amp;&amp; 
masterServices.getMasterProcedureExecutor().isRunning()<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          &amp;&amp; tries &gt; 0) {<a 
name="line.837"></a>
-<span class="sourceLineNo">838</span>        try {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          Thread.sleep(100);<a 
name="line.839"></a>
-<span class="sourceLineNo">840</span>        } catch (InterruptedException e) 
{<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          throw new IOException("Wait 
interrupted ", e);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>        tries--;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      if(tries &lt;= 0) {<a 
name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new IOException("Failed to 
create group table in a given time.");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      } else {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        Procedure&lt;?&gt; result = 
masterServices.getMasterProcedureExecutor().getResult(procId);<a 
name="line.848"></a>
-<span class="sourceLineNo">849</span>        if (result != null &amp;&amp; 
result.isFailed()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>          throw new IOException("Failed 
to create group table. " +<a name="line.850"></a>
-<span class="sourceLineNo">851</span>              
MasterProcedureUtil.unwrapRemoteIOException(result));<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        }<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>    public boolean isOnline() {<a 
name="line.856"></a>
-<span class="sourceLineNo">857</span>      return online;<a 
name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  private static boolean 
isMasterRunning(MasterServices masterServices) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return !masterServices.isAborted() 
&amp;&amp; !masterServices.isStopped();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  private void 
multiMutate(List&lt;Mutation&gt; mutations) throws IOException {<a 
name="line.865"></a>
-<span class="sourceLineNo">866</span>    CoprocessorRpcChannel channel = 
rsGroupTable.coprocessorService(ROW_KEY);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    
MultiRowMutationProtos.MutateRowsRequest.Builder mmrBuilder<a 
name="line.867"></a>
-<span class="sourceLineNo">868</span>      = 
MultiRowMutationProtos.MutateRowsRequest.newBuilder();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (Mutation mutation : mutations) 
{<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      if (mutation instanceof Put) {<a 
name="line.870"></a>
-<span class="sourceLineNo">871</span>        
mmrBuilder.addMutationRequest(org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a
 name="line.871"></a>
-<span class="sourceLineNo">872</span>            
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType.PUT,<a
 name="line.872"></a>
-<span class="sourceLineNo">873</span>            mutation));<a 
name="line.873"></a>
-<span class="sourceLineNo">874</span>      } else if (mutation instanceof 
Delete) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        mmrBuilder.addMutationRequest(<a 
name="line.875"></a>
-<span class="sourceLineNo">876</span>            
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.<a 
name="line.877"></a>
-<span class="sourceLineNo">878</span>                  MutationType.DELETE, 
mutation));<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      } else {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        throw new 
DoNotRetryIOException("multiMutate doesn't support "<a name="line.880"></a>
-<span class="sourceLineNo">881</span>          + 
mutation.getClass().getName());<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>    
MultiRowMutationProtos.MultiRowMutationService.BlockingInterface service =<a 
name="line.885"></a>
-<span class="sourceLineNo">886</span>      
MultiRowMutationProtos.MultiRowMutationService.newBlockingStub(channel);<a 
name="line.886"></a>
-<span class="sourceLineNo">887</span>    try {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      service.mutateRows(null, 
mmrBuilder.build());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    } catch (ServiceException ex) {<a 
name="line.889"></a>
-<span class="sourceLineNo">890</span>      ProtobufUtil.toIOException(ex);<a 
name="line.890"></a>
-<span class="sourceLineNo">891</span>    }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  private void checkGroupName(String 
groupName) throws ConstraintException {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    if 
(!groupName.matches("[a-zA-Z0-9_]+")) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      throw new 
ConstraintException("RSGroup name should only contain alphanumeric 
characters");<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    }<a name="line.897"></a>
-<span class="sourceLineNo">898</span>  }<a name="line.898"></a>
-<span class="sourceLineNo">899</span>}<a name="line.899"></a>
+<span class="sourceLineNo">760</span>            
Utility.verifyMetaRegionLocation(conn, masterServices.getZooKeeper(), 1);<a 
name="line.760"></a>
+<span class="sourceLineNo">761</span>          if (rootMetaFound) {<a 
name="line.761"></a>
+<span class="sourceLineNo">762</span>            MetaTableAccessor.Visitor 
visitor = new DefaultVisitorBase() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>              @Override<a 
name="line.763"></a>
+<span class="sourceLineNo">764</span>              public boolean 
visitInternal(Result row) throws IOException {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>                RegionInfo info = 
MetaTableAccessor.getRegionInfo(row);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>                if (info != null) {<a 
name="line.766"></a>
+<span class="sourceLineNo">767</span>                  Cell serverCell =<a 
name="line.767"></a>
+<span class="sourceLineNo">768</span>                      
row.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>                          
HConstants.SERVER_QUALIFIER);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>                  if 
(RSGROUP_TABLE_NAME.equals(info.getTable()) &amp;&amp; serverCell != null) {<a 
name="line.770"></a>
+<span class="sourceLineNo">771</span>                    ServerName sn =<a 
name="line.771"></a>
+<span class="sourceLineNo">772</span>                        
ServerName.parseVersionedServerName(CellUtil.cloneValue(serverCell));<a 
name="line.772"></a>
+<span class="sourceLineNo">773</span>                    if (sn == null) {<a 
name="line.773"></a>
+<span class="sourceLineNo">774</span>                      found.set(false);<a 
name="line.774"></a>
+<span class="sourceLineNo">775</span>                    } else if 
(tsm.isTableState(RSGROUP_TABLE_NAME, TableState.State.ENABLED)) {<a 
name="line.775"></a>
+<span class="sourceLineNo">776</span>                      try {<a 
name="line.776"></a>
+<span class="sourceLineNo">777</span>                        
ClientProtos.ClientService.BlockingInterface rs = conn.getClient(sn);<a 
name="line.777"></a>
+<span class="sourceLineNo">778</span>                        
ClientProtos.GetRequest request =<a name="line.778"></a>
+<span class="sourceLineNo">779</span>                            
RequestConverter.buildGetRequest(info.getRegionName(),<a name="line.779"></a>
+<span class="sourceLineNo">780</span>                                new 
Get(ROW_KEY));<a name="line.780"></a>
+<span class="sourceLineNo">781</span>                        rs.get(null, 
request);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>                        
assignedRegions.add(info);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>                      } catch(Exception 
ex) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>                        LOG.debug("Caught 
exception while verifying group region", ex);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>                      }<a 
name="line.785"></a>
+<span class="sourceLineNo">786</span>                    }<a 
name="line.786"></a>
+<span class="sourceLineNo">787</span>                    
foundRegions.add(info);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>                  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>                }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>                return true;<a 
name="line.790"></a>
+<span class="sourceLineNo">791</span>              }<a name="line.791"></a>
+<span class="sourceLineNo">792</span>            };<a name="line.792"></a>
+<span class="sourceLineNo">793</span>            
MetaTableAccessor.fullScanRegions(conn, visitor);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>            // if no regions in meta then 
we have to create the table<a name="line.794"></a>
+<span class="sourceLineNo">795</span>            if (foundRegions.size() &lt; 
1 &amp;&amp; rootMetaFound &amp;&amp; !createSent) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>              createRSGroupTable();<a 
name="line.796"></a>
+<span class="sourceLineNo">797</span>              createSent = true;<a 
name="line.797"></a>
+<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>            LOG.info("RSGroup table=" + 
RSGROUP_TABLE_NAME + " isOnline=" + found.get()<a name="line.799"></a>
+<span class="sourceLineNo">800</span>                + ", regionCount=" + 
foundRegions.size() + ", assignCount="<a name="line.800"></a>
+<span class="sourceLineNo">801</span>                + assignedRegions.size() 
+ ", rootMetaFound=" + rootMetaFound);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>            found.set(found.get() 
&amp;&amp; assignedRegions.size() == foundRegions.size()<a name="line.802"></a>
+<span class="sourceLineNo">803</span>                &amp;&amp; 
foundRegions.size() &gt; 0);<a name="line.803"></a>
+<span class="sourceLineNo">804</span>          } else {<a name="line.804"></a>
+<span class="sourceLineNo">805</span>            LOG.info("Waiting for catalog 
tables to come online");<a name="line.805"></a>
+<span class="sourceLineNo">806</span>            found.set(false);<a 
name="line.806"></a>
+<span class="sourceLineNo">807</span>          }<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          if (found.get()) {<a 
name="line.808"></a>
+<span class="sourceLineNo">809</span>            LOG.debug("With group table 
online, refreshing cached information.");<a name="line.809"></a>
+<span class="sourceLineNo">810</span>            
RSGroupInfoManagerImpl.this.refresh(true);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>            online = true;<a 
name="line.811"></a>
+<span class="sourceLineNo">812</span>            //flush any inconsistencies 
between ZK and HTable<a name="line.812"></a>
+<span class="sourceLineNo">813</span>            
RSGroupInfoManagerImpl.this.flushConfig();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>          }<a name="line.814"></a>
+<span class="sourceLineNo">815</span>        } catch (RuntimeException e) {<a 
name="line.815"></a>
+<span class="sourceLineNo">816</span>          throw e;<a name="line.816"></a>
+<span class="sourceLineNo">817</span>        } catch(Exception e) {<a 
name="line.817"></a>
+<span class="sourceLineNo">818</span>          found.set(false);<a 
name="line.818"></a>
+<span class="sourceLineNo">819</span>          LOG.warn("Failed to perform 
check", e);<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>        try {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>          Thread.sleep(100);<a 
name="line.822"></a>
+<span class="sourceLineNo">823</span>        } catch (InterruptedException e) 
{<a name="line.823"></a>
+<span class="sourceLineNo">824</span>          LOG.info("Sleep interrupted", 
e);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>        }<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      }<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      return found.get();<a 
name="line.827"></a>
+<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
+<span class="sourceLineNo">829</span><a name="line.829"></a>
+<span class="sourceLineNo">830</span>    private void createRSGroupTable() 
throws IOException {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      Long procId = 
masterServices.createSystemTable(RSGROUP_TABLE_DESC);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      // wait for region to be online<a 
name="line.832"></a>
+<span class="sourceLineNo">833</span>      int tries = 600;<a 
name="line.833"></a>
+<span class="sourceLineNo">834</span>      while 
(!(masterServices.getMasterProcedureExecutor().isFinished(procId))<a 
name="line.834"></a>
+<span class="sourceLineNo">835</span>          &amp;&amp; 
masterServices.getMasterProcedureExecutor().isRunning()<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          &amp;&amp; tries &gt; 0) {<a 
name="line.836"></a>
+<span class="sourceLineNo">837</span>        try {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          Thread.sleep(100);<a 
name="line.838"></a>
+<span class="sourceLineNo">839</span>        } catch (InterruptedException e) 
{<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          throw new IOException("Wait 
interrupted ", e);<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        }<a name="line.841"></a>
+<span class="sourceLineNo">842</span>        tries--;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>      }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      if(tries &lt;= 0) {<a 
name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new IOException("Failed to 
create group table in a given time.");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      } else {<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        Procedure&lt;?&gt; result = 
masterServices.getMasterProcedureExecutor().getResult(procId);<a 
name="line.847"></a>
+<span class="sourceLineNo">848</span>        if (result != null &amp;&amp; 
result.isFailed()) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          throw new IOException("Failed 
to create group table. " +<a name="line.849"></a>
+<span class="sourceLineNo">850</span>              
MasterProcedureUtil.unwrapRemoteIOException(result));<a name="line.850"></a>
+<span class="sourceLineNo">851</span>        }<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      }<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
+<span class="sourceLineNo">854</span><a name="line.854"></a>
+<span class="sourceLineNo">855</span>    public boolean isOnline() {<a 
name="line.855"></a>
+<span class="sourceLineNo">856</span>      return online;<a 
name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  private static boolean 
isMasterRunning(MasterServices masterServices) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    return !masterServices.isAborted() 
&amp;&amp; !masterServices.isStopped();<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>  private void 
multiMutate(List&lt;Mutation&gt; mutations) throws IOException {<a 
name="line.864"></a>
+<span class="sourceLineNo">865</span>    CoprocessorRpcChannel channel = 
rsGroupTable.coprocessorService(ROW_KEY);<a name="line.865"></a>
+<span class="sourceLineNo">866</span>    
MultiRowMutationProtos.MutateRowsRequest.Builder mmrBuilder<a 
name="line.866"></a>
+<span class="sourceLineNo">867</span>      = 
MultiRowMutationProtos.MutateRowsRequest.newBuilder();<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    for (Mutation mutation : mutations) 
{<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      if (mutation instanceof Put) {<a 
name="line.869"></a>
+<span class="sourceLineNo">870</span>        
mmrBuilder.addMutationRequest(org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a
 name="line.870"></a>
+<span class="sourceLineNo">871</span>            
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType.PUT,<a
 name="line.871"></a>
+<span class="sourceLineNo">872</span>            mutation));<a 
name="line.872"></a>
+<span class="sourceLineNo">873</span>      } else if (mutation instanceof 
Delete) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        mmrBuilder.addMutationRequest(<a 
name="line.874"></a>
+<span class="sourceLineNo">875</span>            
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a name="line.875"></a>
+<span class="sourceLineNo">876</span>                
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.<a 
name="line.876"></a>
+<span class="sourceLineNo">877</span>                  MutationType.DELETE, 
mutation));<a name="line.877"></a>
+<span class="sourceLineNo">878</span>      } else {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>        throw new 
DoNotRetryIOException("multiMutate doesn't support "<a name="line.879"></a>
+<span class="sourceLineNo">880</span>          + 
mutation.getClass().getName());<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      }<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>    
MultiRowMutationProtos.MultiRowMutationService.BlockingInterface service =<a 
name="line.884"></a>
+<span class="sourceLineNo">885</span>      
MultiRowMutationProtos.MultiRowMutationService.newBlockingStub(channel);<a 
name="line.885"></a>
+<span class="sourceLineNo">886</span>    try {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>      service.mutateRows(null, 
mmrBuilder.build());<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    } catch (ServiceException ex) {<a 
name="line.888"></a>
+<span class="sourceLineNo">889</span>      ProtobufUtil.toIOException(ex);<a 
name="line.889"></a>
+<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
+<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
+<span class="sourceLineNo">892</span><a name="line.892"></a>
+<span class="sourceLineNo">893</span>  private void checkGroupName(String 
groupName) throws ConstraintException {<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    if 
(!groupName.matches("[a-zA-Z0-9_]+")) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      throw new 
ConstraintException("RSGroup name should only contain alphanumeric 
characters");<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>  }<a name="line.897"></a>
+<span class="sourceLineNo">898</span>}<a name="line.898"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/27555316/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
index 809f66f..9b60dd0 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
@@ -765,146 +765,145 @@
 <span class="sourceLineNo">757</span>        found.set(true);<a 
name="line.757"></a>
 <span class="sourceLineNo">758</span>        try {<a name="line.758"></a>
 <span class="sourceLineNo">759</span>          boolean rootMetaFound =<a 
name="line.759"></a>
-<span class="sourceLineNo">760</span>              
masterServices.getMetaTableLocator().verifyMetaRegionLocation(<a 
name="line.760"></a>
-<span class="sourceLineNo">761</span>                  conn, 
masterServices.getZooKeeper(), 1);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>          if (rootMetaFound) {<a 
name="line.762"></a>
-<span class="sourceLineNo">763</span>            MetaTableAccessor.Visitor 
visitor = new DefaultVisitorBase() {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              @Override<a 
name="line.764"></a>
-<span class="sourceLineNo">765</span>              public boolean 
visitInternal(Result row) throws IOException {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>                RegionInfo info = 
MetaTableAccessor.getRegionInfo(row);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>                if (info != null) {<a 
name="line.767"></a>
-<span class="sourceLineNo">768</span>                  Cell serverCell =<a 
name="line.768"></a>
-<span class="sourceLineNo">769</span>                      
row.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>                          
HConstants.SERVER_QUALIFIER);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>                  if 
(RSGROUP_TABLE_NAME.equals(info.getTable()) &amp;&amp; serverCell != null) {<a 
name="line.771"></a>
-<span class="sourceLineNo">772</span>                    ServerName sn =<a 
name="line.772"></a>
-<span class="sourceLineNo">773</span>                        
ServerName.parseVersionedServerName(CellUtil.cloneValue(serverCell));<a 
name="line.773"></a>
-<span class="sourceLineNo">774</span>                    if (sn == null) {<a 
name="line.774"></a>
-<span class="sourceLineNo">775</span>                      found.set(false);<a 
name="line.775"></a>
-<span class="sourceLineNo">776</span>                    } else if 
(tsm.isTableState(RSGROUP_TABLE_NAME, TableState.State.ENABLED)) {<a 
name="line.776"></a>
-<span class="sourceLineNo">777</span>                      try {<a 
name="line.777"></a>
-<span class="sourceLineNo">778</span>                        
ClientProtos.ClientService.BlockingInterface rs = conn.getClient(sn);<a 
name="line.778"></a>
-<span class="sourceLineNo">779</span>                        
ClientProtos.GetRequest request =<a name="line.779"></a>
-<span class="sourceLineNo">780</span>                            
RequestConverter.buildGetRequest(info.getRegionName(),<a name="line.780"></a>
-<span class="sourceLineNo">781</span>                                new 
Get(ROW_KEY));<a name="line.781"></a>
-<span class="sourceLineNo">782</span>                        rs.get(null, 
request);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                        
assignedRegions.add(info);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                      } catch(Exception 
ex) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>                        LOG.debug("Caught 
exception while verifying group region", ex);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>                      }<a 
name="line.786"></a>
-<span class="sourceLineNo">787</span>                    }<a 
name="line.787"></a>
-<span class="sourceLineNo">788</span>                    
foundRegions.add(info);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>                  }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>                }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>                return true;<a 
name="line.791"></a>
-<span class="sourceLineNo">792</span>              }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            };<a name="line.793"></a>
-<span class="sourceLineNo">794</span>            
MetaTableAccessor.fullScanRegions(conn, visitor);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            // if no regions in meta then 
we have to create the table<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            if (foundRegions.size() &lt; 
1 &amp;&amp; rootMetaFound &amp;&amp; !createSent) {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              createRSGroupTable();<a 
name="line.797"></a>
-<span class="sourceLineNo">798</span>              createSent = true;<a 
name="line.798"></a>
-<span class="sourceLineNo">799</span>            }<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            LOG.info("RSGroup table=" + 
RSGROUP_TABLE_NAME + " isOnline=" + found.get()<a name="line.800"></a>
-<span class="sourceLineNo">801</span>                + ", regionCount=" + 
foundRegions.size() + ", assignCount="<a name="line.801"></a>
-<span class="sourceLineNo">802</span>                + assignedRegions.size() 
+ ", rootMetaFound=" + rootMetaFound);<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            found.set(found.get() 
&amp;&amp; assignedRegions.size() == foundRegions.size()<a name="line.803"></a>
-<span class="sourceLineNo">804</span>                &amp;&amp; 
foundRegions.size() &gt; 0);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          } else {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            LOG.info("Waiting for catalog 
tables to come online");<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            found.set(false);<a 
name="line.807"></a>
-<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          if (found.get()) {<a 
name="line.809"></a>
-<span class="sourceLineNo">810</span>            LOG.debug("With group table 
online, refreshing cached information.");<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            
RSGroupInfoManagerImpl.this.refresh(true);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            online = true;<a 
name="line.812"></a>
-<span class="sourceLineNo">813</span>            //flush any inconsistencies 
between ZK and HTable<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            
RSGroupInfoManagerImpl.this.flushConfig();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        } catch (RuntimeException e) {<a 
name="line.816"></a>
-<span class="sourceLineNo">817</span>          throw e;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        } catch(Exception e) {<a 
name="line.818"></a>
-<span class="sourceLineNo">819</span>          found.set(false);<a 
name="line.819"></a>
-<span class="sourceLineNo">820</span>          LOG.warn("Failed to perform 
check", e);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          Thread.sleep(100);<a 
name="line.823"></a>
-<span class="sourceLineNo">824</span>        } catch (InterruptedException e) 
{<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          LOG.info("Sleep interrupted", 
e);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>        }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      return found.get();<a 
name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>    private void createRSGroupTable() 
throws IOException {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      Long procId = 
masterServices.createSystemTable(RSGROUP_TABLE_DESC);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      // wait for region to be online<a 
name="line.833"></a>
-<span class="sourceLineNo">834</span>      int tries = 600;<a 
name="line.834"></a>
-<span class="sourceLineNo">835</span>      while 
(!(masterServices.getMasterProcedureExecutor().isFinished(procId))<a 
name="line.835"></a>
-<span class="sourceLineNo">836</span>          &amp;&amp; 
masterServices.getMasterProcedureExecutor().isRunning()<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          &amp;&amp; tries &gt; 0) {<a 
name="line.837"></a>
-<span class="sourceLineNo">838</span>        try {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          Thread.sleep(100);<a 
name="line.839"></a>
-<span class="sourceLineNo">840</span>        } catch (InterruptedException e) 
{<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          throw new IOException("Wait 
interrupted ", e);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>        tries--;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      if(tries &lt;= 0) {<a 
name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new IOException("Failed to 
create group table in a given time.");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      } else {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        Procedure&lt;?&gt; result = 
masterServices.getMasterProcedureExecutor().getResult(procId);<a 
name="line.848"></a>
-<span class="sourceLineNo">849</span>        if (result != null &amp;&amp; 
result.isFailed()) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>          throw new IOException("Failed 
to create group table. " +<a name="line.850"></a>
-<span class="sourceLineNo">851</span>              
MasterProcedureUtil.unwrapRemoteIOException(result));<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        }<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>    public boolean isOnline() {<a 
name="line.856"></a>
-<span class="sourceLineNo">857</span>      return online;<a 
name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  private static boolean 
isMasterRunning(MasterServices masterServices) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return !masterServices.isAborted() 
&amp;&amp; !masterServices.isStopped();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  private void 
multiMutate(List&lt;Mutation&gt; mutations) throws IOException {<a 
name="line.865"></a>
-<span class="sourceLineNo">866</span>    CoprocessorRpcChannel channel = 
rsGroupTable.coprocessorService(ROW_KEY);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    
MultiRowMutationProtos.MutateRowsRequest.Builder mmrBuilder<a 
name="line.867"></a>
-<span class="sourceLineNo">868</span>      = 
MultiRowMutationProtos.MutateRowsRequest.newBuilder();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    for (Mutation mutation : mutations) 
{<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      if (mutation instanceof Put) {<a 
name="line.870"></a>
-<span class="sourceLineNo">871</span>        
mmrBuilder.addMutationRequest(org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a
 name="line.871"></a>
-<span class="sourceLineNo">872</span>            
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType.PUT,<a
 name="line.872"></a>
-<span class="sourceLineNo">873</span>            mutation));<a 
name="line.873"></a>
-<span class="sourceLineNo">874</span>      } else if (mutation instanceof 
Delete) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        mmrBuilder.addMutationRequest(<a 
name="line.875"></a>
-<span class="sourceLineNo">876</span>            
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.<a 
name="line.877"></a>
-<span class="sourceLineNo">878</span>                  MutationType.DELETE, 
mutation));<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      } else {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        throw new 
DoNotRetryIOException("multiMutate doesn't support "<a name="line.880"></a>
-<span class="sourceLineNo">881</span>          + 
mutation.getClass().getName());<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>    
MultiRowMutationProtos.MultiRowMutationService.BlockingInterface service =<a 
name="line.885"></a>
-<span class="sourceLineNo">886</span>      
MultiRowMutationProtos.MultiRowMutationService.newBlockingStub(channel);<a 
name="line.886"></a>
-<span class="sourceLineNo">887</span>    try {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      service.mutateRows(null, 
mmrBuilder.build());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    } catch (ServiceException ex) {<a 
name="line.889"></a>
-<span class="sourceLineNo">890</span>      ProtobufUtil.toIOException(ex);<a 
name="line.890"></a>
-<span class="sourceLineNo">891</span>    }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  private void checkGroupName(String 
groupName) throws ConstraintException {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    if 
(!groupName.matches("[a-zA-Z0-9_]+")) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      throw new 
ConstraintException("RSGroup name should only contain alphanumeric 
characters");<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    }<a name="line.897"></a>
-<span class="sourceLineNo">898</span>  }<a name="line.898"></a>
-<span class="sourceLineNo">899</span>}<a name="line.899"></a>
+<span class="sourceLineNo">760</span>            
Utility.verifyMetaRegionLocation(conn, masterServices.getZooKeeper(), 1);<a 
name="line.760"></a>
+<span class="sourceLineNo">761</span>          if (rootMetaFound) {<a 
name="line.761"></a>
+<span class="sourceLineNo">762</span>            MetaTableAccessor.Visitor 
visitor = new DefaultVisitorBase() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>              @Override<a 
name="line.763"></a>
+<span class="sourceLineNo">764</span>              public boolean 
visitInternal(Result row) throws IOException {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>                RegionInfo info = 
MetaTableAccessor.getRegionInfo(row);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>                if (info != null) {<a 
name="line.766"></a>
+<span class="sourceLineNo">767</span>                  Cell serverCell =<a 
name="line.767"></a>
+<span class="sourceLineNo">768</span>                      
row.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>                          
HConstants.SERVER_QUALIFIER);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>                  if 
(RSGROUP_TABLE_NAME.equals(info.getTable()) &amp;&amp; serverCell != null) {<a 
name="line.770"></a>
+<span class="sourceLineNo">771</span>                    ServerName sn =<a 
name="line.771"></a>
+<span class="sourceLineNo">772</span>                        
ServerName.parseVersionedServerName(CellUtil.cloneValue(serverCell));<a 
name="line.772"></a>
+<span class="sourceLineNo">773</span>                    if (sn == null) {<a 
name="line.773"></a>
+<span class="sourceLineNo">774</span>                      found.set(false);<a 
name="line.774"></a>
+<span class="sourceLineNo">775</span>                    } else if 
(tsm.isTableState(RSGROUP_TABLE_NAME, TableState.State.ENABLED)) {<a 
name="line.775"></a>
+<span class="sourceLineNo">776</span>                      try {<a 
name="line.776"></a>
+<span class="sourceLineNo">777</span>                        
ClientProtos.ClientService.BlockingInterface rs = conn.getClient(sn);<a 
name="line.777"></a>
+<span class="sourceLineNo">778</span>                        
ClientProtos.GetRequest request =<a name="line.778"></a>
+<span class="sourceLineNo">779</span>                            
RequestConverter.buildGetRequest(info.getRegionName(),<a name="line.779"></a>
+<span class="sourceLineNo">780</span>                                new 
Get(ROW_KEY));<a name="line.780"></a>
+<span class="sourceLineNo">781</span>                        rs.get(null, 
request);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>                        
assignedRegions.add(info);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>                      } catch(Exception 
ex) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>                        LOG.debug("Caught 
exception while verifying group region", ex);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>                      }<a 
name="line.785"></a>
+<span class="sourceLineNo">786</span>                    }<a 
name="line.786"></a>
+<span class="sourceLineNo">787</span>                    
foundRegions.add(info);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>                  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>                }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>                return true;<a 
name="line.790"></a>
+<span class="sourceLineNo">791</span>              }<a name="line.791"></a>
+<span class="sourceLineNo">792</span>            };<a name="line.792"></a>
+<span class="sourceLineNo">793</span>            
MetaTableAccessor.fullScanRegions(conn, visitor);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>            // if no regions in meta then 
we have to create the table<a name="line.794"></a>
+<span class="sourceLineNo">795</span>            if (foundRegions.size() &lt; 
1 &amp;&amp; rootMetaFound &amp;&amp; !createSent) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>              createRSGroupTable();<a 
name="line.796"></a>
+<span class="sourceLineNo">797</span>              createSent = true;<a 
name="line.797"></a>
+<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>            LOG.info("RSGroup table=" + 
RSGROUP_TABLE_NAME + " isOnline=" + found.get()<a name="line.799"></a>
+<span class="sourceLineNo">800</span>                + ", regionCount=" + 
foundRegions.size() + ", assignCount="<a name="line.800"></a>
+<span class="sourceLineNo">801</span>                + assignedRegions.size() 
+ ", rootMetaFound=" + rootMetaFound);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>            found.set(found.get() 
&amp;&amp; assignedRegions.size() == foundRegions.size()<a name="line.802"></a>
+<span class="sourceLineNo">803</span>                &amp;&amp; 
foundRegions.size() &gt; 0);<a name="line.803"></a>
+<span class="sourceLineNo">804</span>          } else {<a name="line.804"></a>
+<span class="sourceLineNo">805</span>            LOG.info("Waiting for catalog 
tables to come online");<a name="line.805"></a>
+<span class="sourceLineNo">806</span>            found.set(false);<a 
name="line.806"></a>
+<span class="sourceLineNo">807</span>          }<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          if (found.get()) {<a 
name="line.808"></a>
+<span class="sourceLineNo">809</span>            LOG.debug("With group table 
online, refreshing cached information.");<a name="line.809"></a>
+<span class="sourceLineNo">810</span>            
RSGroupInfoManagerImpl.this.refresh(true);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>            online = true;<a 
name="line.811"></a>
+<span class="sourceLineNo">812</span>            //flush any inconsistencies 
between ZK and HTable<a name="line.812"></a>
+<span class="sourceLineNo">813</span>            
RSGroupInfoManagerImpl.this.flushConfig();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>          }<a name="line.814"></a>
+<span class="sourceLineNo">815</span>        } catch (RuntimeException e) {<a 
name="line.815"></a>
+<span class="sourceLineNo">816</span>          throw e;<a name="line.816"></a>
+<span class="sourceLineNo">817</span>        } catch(Exception e) {<a 
name="line.817"></a>
+<span class="sourceLineNo">818</span>          found.set(false);<a 
name="line.818"></a>
+<span class="sourceLineNo">819</span>          LOG.warn("Failed to perform 
check", e);<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>        try {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>          Thread.sleep(100);<a 
name="line.822"></a>
+<span class="sourceLineNo">823</span>        } catch (InterruptedException e) 
{<a name="line.823"></a>
+<span class="sourceLineNo">824</span>          LOG.info("Sleep interrupted", 
e);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>        }<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      }<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      return found.get();<a 
name="line.827"></a>
+<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
+<span class="sourceLineNo">829</span><a name="line.829"></a>
+<span class="sourceLineNo">830</span>    private void createRSGroupTable() 
throws IOException {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      Long procId = 
masterServices.createSystemTable(RSGROUP_TABLE_DESC);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      // wait for region to be online<a 
name="line.832"></a>
+<span class="sourceLineNo">833</span>      int tries = 600;<a 
name="line.833"></a>
+<span class="sourceLineNo">834</span>      while 
(!(masterServices.getMasterProcedureExecutor().isFinished(procId))<a 
name="line.834"></a>
+<span class="sourceLineNo">835</span>          &amp;&amp; 
masterServices.getMasterProcedureExecutor().isRunning()<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          &amp;&amp; tries &gt; 0) {<a 
name="line.836"></a>
+<span class="sourceLineNo">837</span>        try {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          Thread.sleep(100);<a 
name="line.838"></a>
+<span class="sourceLineNo">839</span>        } catch (InterruptedException e) 
{<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          throw new IOException("Wait 
interrupted ", e);<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        }<a name="line.841"></a>
+<span class="sourceLineNo">842</span>        tries--;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>      }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      if(tries &lt;= 0) {<a 
name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new IOException("Failed to 
create group table in a given time.");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      } else {<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        Procedure&lt;?&gt; result = 
masterServices.getMasterProcedureExecutor().getResult(procId);<a 
name="line.847"></a>
+<span class="sourceLineNo">848</span>        if (result != null &amp;&amp; 
result.isFailed()) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          throw new IOException("Failed 
to create group table. " +<a name="line.849"></a>
+<span class="sourceLineNo">850</span>              
MasterProcedureUtil.unwrapRemoteIOException(result));<a name="line.850"></a>
+<span class="sourceLineNo">851</span>        }<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      }<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
+<span class="sourceLineNo">854</span><a name="line.854"></a>
+<span class="sourceLineNo">855</span>    public boolean isOnline() {<a 
name="line.855"></a>
+<span class="sourceLineNo">856</span>      return online;<a 
name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  private static boolean 
isMasterRunning(MasterServices masterServices) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    return !masterServices.isAborted() 
&amp;&amp; !masterServices.isStopped();<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>  private void 
multiMutate(List&lt;Mutation&gt; mutations) throws IOException {<a 
name="line.864"></a>
+<span class="sourceLineNo">865</span>    CoprocessorRpcChannel channel = 
rsGroupTable.coprocessorService(ROW_KEY);<a name="line.865"></a>
+<span class="sourceLineNo">866</span>    
MultiRowMutationProtos.MutateRowsRequest.Builder mmrBuilder<a 
name="line.866"></a>
+<span class="sourceLineNo">867</span>      = 
MultiRowMutationProtos.MutateRowsRequest.newBuilder();<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    for (Mutation mutation : mutations) 
{<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      if (mutation instanceof Put) {<a 
name="line.869"></a>
+<span class="sourceLineNo">870</span>        
mmrBuilder.addMutationRequest(org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a
 name="line.870"></a>
+<span class="sourceLineNo">871</span>            
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType.PUT,<a
 name="line.871"></a>
+<span class="sourceLineNo">872</span>            mutation));<a 
name="line.872"></a>
+<span class="sourceLineNo">873</span>      } else if (mutation instanceof 
Delete) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        mmrBuilder.addMutationRequest(<a 
name="line.874"></a>
+<span class="sourceLineNo">875</span>            
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toMutation(<a name="line.875"></a>
+<span class="sourceLineNo">876</span>                
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.<a 
name="line.876"></a>
+<span class="sourceLineNo">877</span>                  MutationType.DELETE, 
mutation));<a name="line.877"></a>
+<span class="sourceLineNo">878</span>      } else {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>        throw new 
DoNotRetryIOException("multiMutate doesn't support "<a name="line.879"></a>
+<span class="sourceLineNo">880</span>          + 
mutation.getClass().getName());<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      }<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>    
MultiRowMutationProtos.MultiRowMutationService.BlockingInterface service =<a 
name="line.884"></a>
+<span class="sourceLineNo">885</span>      
MultiRowMutationProtos.MultiRowMutationService.newBlockingStub(channel);<a 
name="line.885"></a>
+<span class="sourceLineNo">886</span>    try {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>      service.mutateRows(null, 
mmrBuilder.build());<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    } catch (ServiceException ex) {<a 
name="line.888"></a>
+<span class="sourceLineNo">889</span>      ProtobufUtil.toIOException(ex);<a 
name="line.889"></a>
+<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
+<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
+<span class="sourceLineNo">892</span><a name="line.892"></a>
+<span class="sourceLineNo">893</span>  private void checkGroupName(String 
groupName) throws ConstraintException {<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    if 
(!groupName.matches("[a-zA-Z0-9_]+")) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      throw new 
ConstraintException("RSGroup name should only contain alphanumeric 
characters");<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>  }<a name="line.897"></a>
+<span class="sourceLineNo">898</span>}<a name="line.898"></a>
 
 
 

Reply via email to