You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by br...@apache.org on 2008/02/28 23:08:36 UTC
svn commit: r632131 - in /hadoop/hbase/trunk: ./
src/java/org/apache/hadoop/hbase/master/
Author: bryanduxbury
Date: Thu Feb 28 14:08:35 2008
New Revision: 632131
URL: http://svn.apache.org/viewvc?rev=632131&view=rev
Log:
HBASE-473 When a table is deleted, master sends multiple close messages to the region server
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Thu Feb 28 14:08:35 2008
@@ -26,6 +26,8 @@
that reach the client even after retries
HBASE-460 TestMigrate broken when HBase moved to subproject
HBASE-462 Update migration tool
+ HBASE-473 When a table is deleted, master sends multiple close messages to
+ the region server
IMPROVEMENTS
HBASE-415 Rewrite leases to use DelayedBlockingQueue instead of polling
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java Thu Feb 28 14:08:35 2008
@@ -358,7 +358,7 @@
boolean deadServer = false;
if (serverName.length() != 0) {
- if (regionManager.isMarkedClosedNoReopen(serverName, info.getRegionName())) {
+ if (regionManager.isMarkedToClose(serverName, info.getRegionName())) {
// Skip if region is on kill list
if(LOG.isDebugEnabled()) {
LOG.debug("not assigning region (on kill list): " +
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java Thu Feb 28 14:08:35 2008
@@ -121,7 +121,7 @@
new HashMap<Text, HRegionInfo>();
Map<Text, HRegionInfo> killedRegions =
- master.regionManager.getMarkedClosedNoReopen(serverName);
+ master.regionManager.getMarkedToClose(serverName);
if (killedRegions != null) {
localKillList.putAll(killedRegions);
}
@@ -138,7 +138,7 @@
LOG.debug("inserted local kill list into kill list for server " +
serverName);
}
- master.regionManager.markClosedNoReopenBulk(serverName, localKillList);
+ master.regionManager.markToCloseBulk(serverName, localKillList);
}
}
servedRegions.clear();
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java Thu Feb 28 14:08:35 2008
@@ -158,8 +158,8 @@
ToDoEntry todo = new ToDoEntry(row, info);
toDoList.add(todo);
- if (master.regionManager.isMarkedClosedNoReopen(deadServerName, info.getRegionName())) {
- master.regionManager.noLongerMarkedClosedNoReopen(deadServerName, info.getRegionName());
+ if (master.regionManager.isMarkedToClose(deadServerName, info.getRegionName())) {
+ master.regionManager.noLongerMarkedToClose(deadServerName, info.getRegionName());
master.regionManager.noLongerUnassigned(info);
if (master.regionManager.isMarkedForDeletion(info.getRegionName())) {
// Delete this region
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java Thu Feb 28 14:08:35 2008
@@ -95,14 +95,17 @@
Collections.synchronizedSet(new HashSet<Text>());
/**
- * The 'killList' is a list of regions that are going to be closed, but not
- * reopened.
+ * List of regions that are going to be closed.
*/
- private final Map<String, Map<Text, HRegionInfo>> killList =
+ private final Map<String, Map<Text, HRegionInfo>> regionsToClose =
new ConcurrentHashMap<String, Map<Text, HRegionInfo>>();
- /** 'killedRegions' contains regions that are in the process of being closed */
- private final Set<Text> killedRegions =
+ /** Regions that are in the process of being closed */
+ private final Set<Text> closingRegions =
+ Collections.synchronizedSet(new HashSet<Text>());
+
+ /** Regions that are being reassigned for load balancing. */
+ private final Set<Text> regionsBeingReassigned =
Collections.synchronizedSet(new HashSet<Text>());
/**
@@ -498,66 +501,65 @@
unassignedRegions.remove(info);
}
- /** Mark a region to be closed and not reopened */
- public void markClosedNoReopen(String serverName, HRegionInfo info) {
- synchronized (killList) {
- Map<Text, HRegionInfo> serverKillList = killList.get(serverName);
- if (serverKillList != null) {
- serverKillList.put(info.getRegionName(), info);
+ /** Mark a region to be closed */
+ public void markToClose(String serverName, HRegionInfo info) {
+ synchronized (regionsToClose) {
+ Map<Text, HRegionInfo> serverToClose = regionsToClose.get(serverName);
+ if (serverToClose != null) {
+ serverToClose.put(info.getRegionName(), info);
}
}
}
/** Mark a bunch of regions as closed not reopen at once for a server */
- public void markClosedNoReopenBulk(String serverName,
+ public void markToCloseBulk(String serverName,
Map<Text, HRegionInfo> map) {
- killList.put(serverName, map);
+ regionsToClose.put(serverName, map);
}
/**
* Get a map of region names to region infos waiting to be offlined for a
* given server
*/
- public Map<Text, HRegionInfo> getMarkedClosedNoReopen(String serverName) {
- return killList.get(serverName);
+ public Map<Text, HRegionInfo> getMarkedToClose(String serverName) {
+ return regionsToClose.get(serverName);
}
/**
* Check if a region is marked as closed not reopen.
*/
- public boolean isMarkedClosedNoReopen(String serverName, Text regionName) {
- synchronized (killList) {
- Map<Text, HRegionInfo> regionsToKill =
- killList.get(serverName);
- return (regionsToKill != null && regionsToKill.containsKey(regionName));
+ public boolean isMarkedToClose(String serverName, Text regionName) {
+ synchronized (regionsToClose) {
+ Map<Text, HRegionInfo> serverToClose = regionsToClose.get(serverName);
+ return (serverToClose != null && serverToClose.containsKey(regionName));
}
}
/**
* Mark a region as no longer waiting to be closed and not reopened.
*/
- public void noLongerMarkedClosedNoReopen(String serverName, Text regionName) {
- synchronized (killList) {
- Map<Text, HRegionInfo> serverKillList = killList.get(serverName);
- if (serverKillList != null) {
- serverKillList.remove(regionName);
+ public void noLongerMarkedToClose(String serverName, Text regionName) {
+ synchronized (regionsToClose) {
+ Map<Text, HRegionInfo> serverToClose = regionsToClose.get(serverName);
+ if (serverToClose != null) {
+ serverToClose.remove(regionName);
}
}
}
/** Check if a region is closing */
public boolean isClosing(Text regionName) {
- return killedRegions.contains(regionName);
+ return closingRegions.contains(regionName);
}
/** Set a region as no longer closing (closed?) */
public void noLongerClosing(Text regionName) {
- killedRegions.remove(regionName);
+ closingRegions.remove(regionName);
}
/** mark a region as closing */
public void setClosing(Text regionName) {
- killedRegions.add(regionName);
+ closingRegions.add(regionName);
}
/**
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=632131&r1=632130&r2=632131&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java Thu Feb 28 14:08:35 2008
@@ -279,7 +279,7 @@
throws IOException {
ArrayList<HMsg> returnMsgs = new ArrayList<HMsg>();
Map<Text, HRegionInfo> regionsToKill =
- master.regionManager.getMarkedClosedNoReopen(serverName);
+ master.regionManager.getMarkedToClose(serverName);
// Get reports on what the RegionServer did.
for (int i = 0; i < incomingMsgs.length; i++) {
@@ -361,12 +361,13 @@
}
}
- // Process the kill list
-
+ // Tell the region server to close regions that we have marked for closing.
if (regionsToKill != null) {
for (HRegionInfo i: regionsToKill.values()) {
returnMsgs.add(new HMsg(HMsg.MSG_REGION_CLOSE, i));
+ // Transition the region from toClose to closing state
master.regionManager.setClosing(i.getRegionName());
+ master.regionManager.noLongerMarkedToClose(serverName, i.getRegionName());
}
}