You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/03/22 01:22:04 UTC
svn commit: r1084038 - in /hbase/trunk: ./
src/main/java/org/apache/hadoop/hbase/regionserver/
Author: stack
Date: Tue Mar 22 00:22:04 2011
New Revision: 1084038
URL: http://svn.apache.org/viewvc?rev=1084038&view=rev
Log:
HBASE-3532 HRegion#equals is broken
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1084038&r1=1084037&r2=1084038&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Tue Mar 22 00:22:04 2011
@@ -43,6 +43,7 @@ Release 0.91.0 - Unreleased
creating scanner
HBASE-3641 LruBlockCache.CacheStats.getHitCount() is not using the
correct variable
+ HBASE-3532 HRegion#equals is broken (Ted Yu via Stack)
IMPROVEMENTS
HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack)
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1084038&r1=1084037&r2=1084038&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java Tue Mar 22 00:22:04 2011
@@ -2357,7 +2357,7 @@ public class HRegion implements HeapSize
if (!(o instanceof HRegion)) {
return false;
}
- return this.hashCode() == ((HRegion)o).hashCode();
+ return Bytes.equals(this.regionInfo.getRegionName(), ((HRegion)o).regionInfo.getRegionName());
}
@Override
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1084038&r1=1084037&r2=1084038&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Tue Mar 22 00:22:04 2011
@@ -2410,31 +2410,6 @@ public class HRegionServer implements HR
}
}
- /**
- * @return Returns list of non-closed regions hosted on this server. If no
- * regions to check, returns an empty list.
- */
- protected Set<HRegion> getRegionsToCheck() {
- HashSet<HRegion> regionsToCheck = new HashSet<HRegion>();
- // TODO: is this locking necessary?
- lock.readLock().lock();
- try {
- synchronized (this.onlineRegions) {
- regionsToCheck.addAll(this.onlineRegions.values());
- }
- } finally {
- lock.readLock().unlock();
- }
- // Purge closed regions.
- for (final Iterator<HRegion> i = regionsToCheck.iterator(); i.hasNext();) {
- HRegion r = i.next();
- if (r.isClosed()) {
- i.remove();
- }
- }
- return regionsToCheck;
- }
-
@Override
@QosPriority(priority=HIGH_QOS)
public long getProtocolVersion(final String protocol, final long clientVersion)
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java?rev=1084038&r1=1084037&r2=1084038&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java Tue Mar 22 00:22:04 2011
@@ -19,21 +19,9 @@
*/
package org.apache.hadoop.hbase.regionserver;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.DroppedSnapshotException;
-import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.RemoteExceptionHandler;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.util.StringUtils;
-
-import com.google.common.base.Preconditions;
-
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.ConcurrentModificationException;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -47,6 +35,17 @@ import java.util.concurrent.atomic.Atomi
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.DroppedSnapshotException;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.RemoteExceptionHandler;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.util.StringUtils;
+
+import com.google.common.base.Preconditions;
+
/**
* Thread that flushes cache on request
*
@@ -152,19 +151,17 @@ class MemStoreFlusher extends Thread imp
SortedMap<Long, HRegion> regionsBySize =
server.getCopyOfOnlineRegionsSortedBySize();
- // TODO: HBASE-3532 - we can't use Set<HRegion> here because it doesn't
- // implement equals correctly. So, set of region names.
- Set<byte[]> excludedRegionNames = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
+ Set<HRegion> excludedRegions = new TreeSet<HRegion>();
boolean flushedOne = false;
while (!flushedOne) {
// Find the biggest region that doesn't have too many storefiles
// (might be null!)
HRegion bestFlushableRegion = getBiggestMemstoreRegion(
- regionsBySize, excludedRegionNames, true);
+ regionsBySize, excludedRegions, true);
// Find the biggest region, total, even if it might have too many flushes.
HRegion bestAnyRegion = getBiggestMemstoreRegion(
- regionsBySize, excludedRegionNames, false);
+ regionsBySize, excludedRegions, false);
if (bestAnyRegion == null) {
LOG.error("Above memory mark but there are no flushable regions!");
@@ -201,7 +198,7 @@ class MemStoreFlusher extends Thread imp
if (!flushedOne) {
LOG.info("Excluding unflushable region " + regionToFlush +
" - trying to find a different region to flush.");
- excludedRegionNames.add(regionToFlush.getRegionName());
+ excludedRegions.add(regionToFlush);
}
}
return true;
@@ -272,11 +269,11 @@ class MemStoreFlusher extends Thread imp
private HRegion getBiggestMemstoreRegion(
SortedMap<Long, HRegion> regionsBySize,
- Set<byte[]> excludedRegionNames,
+ Set<HRegion> excludedRegions,
boolean checkStoreFileCount) {
synchronized (regionsInQueue) {
for (HRegion region : regionsBySize.values()) {
- if (excludedRegionNames.contains(region.getRegionName())) {
+ if (excludedRegions.contains(region)) {
continue;
}