You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/12/28 20:37:22 UTC
svn commit: r1225312 - in
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase:
HConstants.java master/BaseScanner.java
master/PreferredAssignmentManager.java
Author: nspiegelberg
Date: Wed Dec 28 19:37:21 2011
New Revision: 1225312
URL: http://svn.apache.org/viewvc?rev=1225312&view=rev
Log:
BaseScanner looks for favorednodes hints in META
Summary:
** 89 master only **
The favored nodes used for explicit placement of regions are persisted
as a column in the .META. table. This change reads those columns in the
base scanner and updates the persistent preferred assignments in the
RegionManager as necessary.
Test Plan:
manually enter hints into META and verify that they are passed to the
region manager by inspecting log output
Reviewers: kranganathan, kannan
Reviewed By: kranganathan
CC: hbase-eng@lists, kranganathan
Differential Revision: 375699
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/PreferredAssignmentManager.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java?rev=1225312&r1=1225311&r2=1225312&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java Wed Dec 28 19:37:21 2011
@@ -255,6 +255,9 @@ public final class HConstants {
/** The upper-half split region column qualifier */
public static final byte [] SPLITB_QUALIFIER = Bytes.toBytes("splitB");
+ /** The favored nodes column qualifier*/
+ public static final byte [] FAVOREDNODES_QUALIFIER = Bytes.toBytes("favorednodes");
+
// Other constants
/**
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java?rev=1225312&r1=1225311&r2=1225312&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java Wed Dec 28 19:37:21 2011
@@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.Chore;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.hbase.RemoteExceptionHandler;
import org.apache.hadoop.hbase.UnknownScannerException;
@@ -197,6 +198,20 @@ abstract class BaseScanner extends Chore
splitParents.put(info, values);
}
rows += 1;
+
+ byte[] favoredNodes = values.getValue(HConstants.CATALOG_FAMILY,
+ HConstants.FAVOREDNODES_QUALIFIER);
+ if (favoredNodes != null) {
+ List<HServerAddress> addresses = new ArrayList<HServerAddress>();
+ for (String address : new String(favoredNodes).split(",")) {
+ addresses.add(new HServerAddress(address));
+ }
+ this.master.getRegionManager().assignmentManager
+ .addPersistentAssignment(info, addresses);
+ } else {
+ this.master.getRegionManager().assignmentManager
+ .removePersistentAssignment(info);
+ }
}
if (rootRegion) {
this.master.getRegionManager().setNumMetaRegions(rows);
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/PreferredAssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/PreferredAssignmentManager.java?rev=1225312&r1=1225311&r2=1225312&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/PreferredAssignmentManager.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/PreferredAssignmentManager.java Wed Dec 28 19:37:21 2011
@@ -95,11 +95,33 @@ public class PreferredAssignmentManager
persistentAssignments.put(region, servers);
if (servers != null && !servers.equals(oldServers)) {
putTransientFromPersistent(region);
+ if (LOG.isDebugEnabled()) {
+ StringBuffer sb = new StringBuffer();
+ for (HServerAddress server : servers) {
+ sb.append(server.getHostname() + ":" + server.getPort() + ",");
+ if (master.getServerManager().getHServerInfo(server) == null) {
+ LOG.info("Found persistent assignment for region " +
+ region.getRegionNameAsString() + " to unknown server " +
+ server);
+ }
+ }
+ LOG.debug("Added persistent assignment for region " +
+ region.getRegionNameAsString() + " to " + sb.toString());
+ }
}
}
public List<HServerAddress> removePersistentAssignment(HRegionInfo region) {
- return persistentAssignments.remove(region);
+ List<HServerAddress> servers = persistentAssignments.remove(region);
+ if (LOG.isDebugEnabled() && servers != null) {
+ StringBuffer sb = new StringBuffer();
+ for (HServerAddress server : servers) {
+ sb.append(server.getHostname() + ":" + server.getPort() + ",");
+ }
+ LOG.debug("Removed persistent assignment for region " +
+ region.getRegionNameAsString() + " to " + sb.toString());
+ }
+ return servers;
}
public void addTransientAssignment(HServerAddress server,