You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/04/02 23:11:01 UTC
svn commit: r1584192 - in
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master:
AssignmentDomain.java HMaster.java RegionPlacement.java
Author: liyin
Date: Wed Apr 2 21:11:01 2014
New Revision: 1584192
URL: http://svn.apache.org/r1584192
Log:
[HBASE-10425] Hook RegionPlacement up to stored HTableDesciptor serverSet.
Author: elliott
Summary: RegionPlacement runs will now take HTD server set into account when assigning regions.
Test Plan:
Deployed to HBASEDEV038-ASH3. Created a table pinned on three different servers. Ran RegionPlacement several times. The pinned table stayed on the three chosen servers.
Then I created 5 new tables and saw that creation was still successful and they weren't pinned to any servers. Then I ran RegionPlacement again and saw that the pinned tables were still on the selected servers.
Reviewers: adela, liyintang
Reviewed By: adela
CC: hbase-eng@
Differential Revision: https://phabricator.fb.com/D1250475
Task ID: 4039274
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/AssignmentDomain.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionPlacement.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/AssignmentDomain.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/AssignmentDomain.java?rev=1584192&r1=1584191&r2=1584192&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/AssignmentDomain.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/AssignmentDomain.java Wed Apr 2 21:11:01 2014
@@ -21,17 +21,22 @@ package org.apache.hadoop.hbase.master;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
+import com.google.common.collect.Lists;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HServerAddress;
+import org.apache.hadoop.hbase.HTableDescriptor;
public class AssignmentDomain {
protected static final Log LOG =
@@ -49,6 +54,27 @@ public class AssignmentDomain {
rackManager = new RackManager(conf);
random = new Random();
}
+
+ public AssignmentDomain(Configuration conf, HTableDescriptor htd,
+ Collection<HServerAddress> liveServers) {
+ this(conf);
+
+ List<HServerAddress> servers = null;
+ // If the table is pinned to servers then respect that.
+ if (htd.getServers() != null) {
+ Set<HServerAddress> hServerAddresses = new HashSet<>(htd.getServers());
+ hServerAddresses.retainAll(liveServers);
+ servers = Lists.newArrayList(hServerAddresses);
+ } else {
+ // Otherwise use all of the live servers
+ servers = Lists.newArrayList(liveServers);
+ }
+
+ // Shuffle the server list based on the tableName
+ Random random = new Random(htd.getNameAsString().hashCode());
+ Collections.shuffle(servers, random);
+ this.addServers(servers);
+ }
/**
* Set the random seed
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1584192&r1=1584191&r2=1584192&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Wed Apr 2 21:11:01 2014
@@ -1581,24 +1581,7 @@ public class HMaster extends HasThread i
* @return the assignment domain for the table.
*/
private AssignmentDomain getAssignmentDomain(HTableDescriptor htd) {
- // Get all the online region servers
- List<HServerAddress> servers = null;
-
- if (htd.getServers() == null) {
- servers = this.serverManager.getOnlineRegionServerList();
- } else {
- Set<HServerAddress> hServerAddresses = new HashSet<>(htd.getServers());
- hServerAddresses.retainAll(this.serverManager.getOnlineRegionServerList());
- servers = Lists.newArrayList(hServerAddresses);
- }
-
- // Shuffle the server list based on the tableName
- Random random = new Random(htd.getNameAsString().hashCode());
- Collections.shuffle(servers, random);
- // Add the shuffled server list into the assignment domain
- AssignmentDomain domain = new AssignmentDomain(this.conf);
- domain.addServers(servers);
- return domain;
+ return new AssignmentDomain(this.conf, htd, this.serverManager.getOnlineRegionServerList());
}
@Override
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionPlacement.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionPlacement.java?rev=1584192&r1=1584191&r2=1584192&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionPlacement.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionPlacement.java Wed Apr 2 21:11:01 2014
@@ -50,6 +50,7 @@ import org.apache.hadoop.hbase.HBaseConf
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HServerAddress;
+import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HTable;
@@ -795,6 +796,8 @@ public class RegionPlacement implements
// Get the all the regions for the current table
List<HRegionInfo> regions =
assignmentSnapshot.getTableToRegionMap().get(tableName);
+
+ HTableDescriptor tableDescriptor = regions.get(0).getTableDesc();
int numRegions = regions.size();
// Get the current assignment map
@@ -802,7 +805,8 @@ public class RegionPlacement implements
assignmentSnapshot.getRegionToRegionServerMap();
// Get the assignment domain
- AssignmentDomain domain = assignmentSnapshot.getGlobalAssignmentDomain();
+ AssignmentDomain domain = new AssignmentDomain(conf, tableDescriptor,
+ assignmentSnapshot.getGlobalAssignmentDomain().getAllServers());
// Get the all the region servers
List<HServerAddress> servers = new ArrayList<HServerAddress>();