You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2011/07/06 21:05:31 UTC
svn commit: r1143534 - in /hbase/branches/0.90: CHANGES.txt
src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
Author: tedyu
Date: Wed Jul 6 19:05:31 2011
New Revision: 1143534
URL: http://svn.apache.org/viewvc?rev=1143534&view=rev
Log:
HBASE-4053 Most of the regions were added into AssignmentManager#servers twice
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1143534&r1=1143533&r2=1143534&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Wed Jul 6 19:05:31 2011
@@ -56,6 +56,7 @@ Release 0.90.4 - Unreleased
regions are NOT made online by master
HBASE-3904 HBA.createTable(final HTableDescriptor desc, byte [][] splitKeys)
should be synchronous
+ HBASE-4053 Most of the regions were added into AssignmentManager#servers twice
IMPROVEMENT
HBASE-3882 hbase-config.sh needs to be updated so it can auto-detects the
Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java?rev=1143534&r1=1143533&r2=1143534&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HRegionInfo.java Wed Jul 6 19:05:31 2011
@@ -656,7 +656,15 @@ public class HRegionInfo extends Version
}
// Compare end keys.
- return Bytes.compareTo(this.endKey, o.endKey);
+ result = Bytes.compareTo(this.endKey, o.endKey);
+ if (result != 0) {
+ return result;
+ }
+ if (this.offLine == o.offLine)
+ return 0;
+ if (this.offLine == true) return -1;
+
+ return 1;
}
/**
Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1143534&r1=1143533&r2=1143534&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Wed Jul 6 19:05:31 2011
@@ -35,6 +35,7 @@ import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.logging.Log;
@@ -122,8 +123,8 @@ public class AssignmentManager extends Z
* with the other under a lock on {@link #regions}
* @see #regions
*/
- private final NavigableMap<HServerInfo, List<HRegionInfo>> servers =
- new TreeMap<HServerInfo, List<HRegionInfo>>();
+ private final NavigableMap<HServerInfo, Set<HRegionInfo>> servers =
+ new TreeMap<HServerInfo, Set<HRegionInfo>>();
/**
* Region to server assignment map.
@@ -779,7 +780,7 @@ public class AssignmentManager extends Z
synchronized (this.regions) {
HServerInfo serverInfo = this.regions.remove(regionInfo);
if (serverInfo == null) return;
- List<HRegionInfo> serverRegions = this.servers.get(serverInfo);
+ Set<HRegionInfo> serverRegions = this.servers.get(serverInfo);
if (!serverRegions.remove(regionInfo)) {
LOG.warn("No " + regionInfo + " on " + serverInfo);
}
@@ -1590,12 +1591,12 @@ public class AssignmentManager extends Z
* @param hri
*/
private void addToServers(final HServerInfo hsi, final HRegionInfo hri) {
- List<HRegionInfo> hris = servers.get(hsi);
+ Set<HRegionInfo> hris = servers.get(hsi);
if (hris == null) {
- hris = new ArrayList<HRegionInfo>();
+ hris = new ConcurrentSkipListSet<HRegionInfo>();
servers.put(hsi, hris);
}
- hris.add(hri);
+ if (!hris.contains(hri)) hris.add(hri);
}
/**
@@ -1639,13 +1640,8 @@ public class AssignmentManager extends Z
}
synchronized (this.regions) {
this.regions.remove(hri);
- for (List<HRegionInfo> regions : this.servers.values()) {
- for (int i=0;i<regions.size();i++) {
- if (regions.get(i).equals(hri)) {
- regions.remove(i);
- break;
- }
- }
+ for (Set<HRegionInfo> regions : this.servers.values()) {
+ regions.remove(hri);
}
}
clearRegionPlan(hri);
@@ -1900,7 +1896,7 @@ public class AssignmentManager extends Z
Set<HRegionInfo> deadRegions = null;
List<RegionState> rits = new ArrayList<RegionState>();
synchronized (this.regions) {
- List<HRegionInfo> assignedRegions = this.servers.remove(hsi);
+ Set<HRegionInfo> assignedRegions = this.servers.remove(hsi);
if (assignedRegions == null || assignedRegions.isEmpty()) {
// No regions on this server, we are done, return empty list of RITs
return rits;
@@ -1987,7 +1983,7 @@ public class AssignmentManager extends Z
Map<HServerInfo, List<HRegionInfo>> result = null;
synchronized (this.regions) {
result = new HashMap<HServerInfo, List<HRegionInfo>>(this.servers.size());
- for (Map.Entry<HServerInfo, List<HRegionInfo>> e: this.servers.entrySet()) {
+ for (Map.Entry<HServerInfo, Set<HRegionInfo>> e: this.servers.entrySet()) {
List<HRegionInfo> shallowCopy = new ArrayList<HRegionInfo>(e.getValue());
HServerInfo clone = new HServerInfo(e.getKey());
// Set into server load the number of regions this server is carrying