[2/2] hbase git commit: HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after HBase Master failover (David Pope)

2016-11-11 Thread apurtell
HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after 
HBase Master failover (David Pope)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/dba43b62
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/dba43b62
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/dba43b62

Branch: refs/heads/0.98
Commit: dba43b62823cbaa663cf0c2f7b7e4dcd668bdbce
Parents: 500e0b7
Author: tedyu 
Authored: Sun Oct 16 18:54:59 2016 -0700
Committer: Andrew Purtell 
Committed: Fri Nov 11 18:21:22 2016 -0800

--
 .../hadoop/hbase/master/ServerManager.java  |   2 +-
 .../hbase/zookeeper/DrainingServerTracker.java  |  18 
 .../hbase/master/TestAssignmentListener.java| 101 ++-
 3 files changed, 119 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/dba43b62/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index ca34de5..3c0696a 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -475,7 +475,6 @@ public class ServerManager {
 }
   }
 
-
   public DeadServer getDeadServers() {
 return this.deadservers;
   }
@@ -659,6 +658,7 @@ public class ServerManager {
"Ignoring request to add it again.");
   return false;
 }
+LOG.info("Server " + sn + " added to draining server list.");
 return this.drainingServers.add(sn);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/dba43b62/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
index 5969143..413f226 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.master.ServerListener;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.zookeeper.KeeperException;
 
@@ -68,6 +69,23 @@ public class DrainingServerTracker extends ZooKeeperListener 
{
*/
   public void start() throws KeeperException, IOException {
 watcher.registerListener(this);
+// Add a ServerListener to check if a server is draining when it's added.
+serverManager.registerListener(
+new ServerListener() {
+
+  @Override
+  public void serverAdded(ServerName sn) {
+if (drainingServers.contains(sn)){
+  serverManager.addServerToDrainList(sn);
+}
+  }
+
+  @Override
+  public void serverRemoved(ServerName serverName) {
+// no-op
+  }
+}
+);
 List servers =
   ZKUtil.listChildrenAndWatchThem(watcher, watcher.drainingZNode);
 add(servers);

http://git-wip-us.apache.org/repos/asf/hbase/blob/dba43b62/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
--
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
index 36a8265..bc2a3a6 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
@@ -21,16 +21,22 @@ package org.apache.hadoop.hbase.master;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
 

[21/50] [abbrv] hbase git commit: HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after HBase Master failover (David Pope)

2016-11-01 Thread larsh
HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after 
HBase Master failover (David Pope)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a4cbdede
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a4cbdede
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a4cbdede

Branch: refs/heads/branch-1
Commit: a4cbdede31f97bb988daf944f603f9f25b368044
Parents: b7f283c
Author: tedyu 
Authored: Sun Oct 16 18:54:59 2016 -0700
Committer: tedyu 
Committed: Sun Oct 16 18:54:59 2016 -0700

--
 .../hadoop/hbase/master/ServerManager.java  |   2 +-
 .../hbase/zookeeper/DrainingServerTracker.java  |  18 
 .../hbase/master/TestAssignmentListener.java| 100 +++
 3 files changed, 119 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index bcaa4d0..1817d6e 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -533,7 +533,6 @@ public class ServerManager {
 }
   }
 
-
   public DeadServer getDeadServers() {
 return this.deadservers;
   }
@@ -744,6 +743,7 @@ public class ServerManager {
"Ignoring request to add it again.");
   return false;
 }
+LOG.info("Server " + sn + " added to draining server list.");
 return this.drainingServers.add(sn);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
index 5969143..413f226 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.master.ServerListener;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.zookeeper.KeeperException;
 
@@ -68,6 +69,23 @@ public class DrainingServerTracker extends ZooKeeperListener 
{
*/
   public void start() throws KeeperException, IOException {
 watcher.registerListener(this);
+// Add a ServerListener to check if a server is draining when it's added.
+serverManager.registerListener(
+new ServerListener() {
+
+  @Override
+  public void serverAdded(ServerName sn) {
+if (drainingServers.contains(sn)){
+  serverManager.addServerToDrainList(sn);
+}
+  }
+
+  @Override
+  public void serverRemoved(ServerName serverName) {
+// no-op
+  }
+}
+);
 List servers =
   ZKUtil.listChildrenAndWatchThem(watcher, watcher.drainingZNode);
 add(servers);

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
--
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
index 6257fe5..f171821 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
@@ -21,16 +21,22 @@ package org.apache.hadoop.hbase.master;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
 import 

hbase git commit: HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after HBase Master failover (David Pope)

2016-10-16 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/master 0f384158f -> 109db38b6


HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after 
HBase Master failover (David Pope)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/109db38b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/109db38b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/109db38b

Branch: refs/heads/master
Commit: 109db38b6ad091b23593ee46b1e919136aed7886
Parents: 0f38415
Author: tedyu 
Authored: Sun Oct 16 19:59:38 2016 -0700
Committer: tedyu 
Committed: Sun Oct 16 19:59:38 2016 -0700

--
 .../hadoop/hbase/master/ServerManager.java  |   2 +-
 .../hbase/zookeeper/DrainingServerTracker.java  |  18 
 .../hbase/master/TestAssignmentListener.java| 105 ++-
 3 files changed, 121 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/109db38b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index 8dbf697..437c787 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -524,7 +524,6 @@ public class ServerManager {
 }
   }
 
-
   public DeadServer getDeadServers() {
 return this.deadservers;
   }
@@ -734,6 +733,7 @@ public class ServerManager {
"Ignoring request to add it again.");
   return false;
 }
+LOG.info("Server " + sn + " added to draining server list.");
 return this.drainingServers.add(sn);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/109db38b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
index 684fdec..e6d3b7f 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.master.ServerListener;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.zookeeper.KeeperException;
 
@@ -68,6 +69,23 @@ public class DrainingServerTracker extends ZooKeeperListener 
{
*/
   public void start() throws KeeperException, IOException {
 watcher.registerListener(this);
+// Add a ServerListener to check if a server is draining when it's added.
+serverManager.registerListener(
+new ServerListener() {
+
+  @Override
+  public void serverAdded(ServerName sn) {
+if (drainingServers.contains(sn)){
+  serverManager.addServerToDrainList(sn);
+}
+  }
+
+  @Override
+  public void serverRemoved(ServerName serverName) {
+// no-op
+  }
+}
+);
 List servers =
   ZKUtil.listChildrenAndWatchThem(watcher, 
watcher.znodePaths.drainingZNode);
 add(servers);

http://git-wip-us.apache.org/repos/asf/hbase/blob/109db38b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
--
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
index 6ad2c5d..9a52c70 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
@@ -21,29 +21,41 @@ package org.apache.hadoop.hbase.master;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import 

hbase git commit: HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after HBase Master failover (David Pope)

2016-10-16 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1 b7f283c6f -> a4cbdede3


HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after 
HBase Master failover (David Pope)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a4cbdede
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a4cbdede
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a4cbdede

Branch: refs/heads/branch-1
Commit: a4cbdede31f97bb988daf944f603f9f25b368044
Parents: b7f283c
Author: tedyu 
Authored: Sun Oct 16 18:54:59 2016 -0700
Committer: tedyu 
Committed: Sun Oct 16 18:54:59 2016 -0700

--
 .../hadoop/hbase/master/ServerManager.java  |   2 +-
 .../hbase/zookeeper/DrainingServerTracker.java  |  18 
 .../hbase/master/TestAssignmentListener.java| 100 +++
 3 files changed, 119 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index bcaa4d0..1817d6e 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -533,7 +533,6 @@ public class ServerManager {
 }
   }
 
-
   public DeadServer getDeadServers() {
 return this.deadservers;
   }
@@ -744,6 +743,7 @@ public class ServerManager {
"Ignoring request to add it again.");
   return false;
 }
+LOG.info("Server " + sn + " added to draining server list.");
 return this.drainingServers.add(sn);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
index 5969143..413f226 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.master.ServerListener;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.zookeeper.KeeperException;
 
@@ -68,6 +69,23 @@ public class DrainingServerTracker extends ZooKeeperListener 
{
*/
   public void start() throws KeeperException, IOException {
 watcher.registerListener(this);
+// Add a ServerListener to check if a server is draining when it's added.
+serverManager.registerListener(
+new ServerListener() {
+
+  @Override
+  public void serverAdded(ServerName sn) {
+if (drainingServers.contains(sn)){
+  serverManager.addServerToDrainList(sn);
+}
+  }
+
+  @Override
+  public void serverRemoved(ServerName serverName) {
+// no-op
+  }
+}
+);
 List servers =
   ZKUtil.listChildrenAndWatchThem(watcher, watcher.drainingZNode);
 add(servers);

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4cbdede/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
--
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
index 6257fe5..f171821 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
@@ -21,16 +21,22 @@ package org.apache.hadoop.hbase.master;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import 

hbase git commit: HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after HBase Master failover (David Pope)

2016-10-16 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1.3 e834d46e3 -> d38310aa4


HBASE-16853 Regions are assigned to Region Servers in /hbase/draining after 
HBase Master failover (David Pope)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d38310aa
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d38310aa
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d38310aa

Branch: refs/heads/branch-1.3
Commit: d38310aa4d97c0be0e2d1f5113630510a02f7ade
Parents: e834d46
Author: tedyu 
Authored: Sun Oct 16 18:52:41 2016 -0700
Committer: tedyu 
Committed: Sun Oct 16 18:52:41 2016 -0700

--
 .../hadoop/hbase/master/ServerManager.java  |   2 +-
 .../hbase/zookeeper/DrainingServerTracker.java  |  18 
 .../hbase/master/TestAssignmentListener.java| 100 +++
 3 files changed, 119 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/d38310aa/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index 305687f..df1cea0 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -527,7 +527,6 @@ public class ServerManager {
 }
   }
 
-
   public DeadServer getDeadServers() {
 return this.deadservers;
   }
@@ -738,6 +737,7 @@ public class ServerManager {
"Ignoring request to add it again.");
   return false;
 }
+LOG.info("Server " + sn + " added to draining server list.");
 return this.drainingServers.add(sn);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/d38310aa/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
--
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
index 5969143..413f226 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.master.ServerListener;
 import org.apache.hadoop.hbase.master.ServerManager;
 import org.apache.zookeeper.KeeperException;
 
@@ -68,6 +69,23 @@ public class DrainingServerTracker extends ZooKeeperListener 
{
*/
   public void start() throws KeeperException, IOException {
 watcher.registerListener(this);
+// Add a ServerListener to check if a server is draining when it's added.
+serverManager.registerListener(
+new ServerListener() {
+
+  @Override
+  public void serverAdded(ServerName sn) {
+if (drainingServers.contains(sn)){
+  serverManager.addServerToDrainList(sn);
+}
+  }
+
+  @Override
+  public void serverRemoved(ServerName serverName) {
+// no-op
+  }
+}
+);
 List servers =
   ZKUtil.listChildrenAndWatchThem(watcher, watcher.drainingZNode);
 add(servers);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d38310aa/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
--
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
index 6257fe5..f171821 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java
@@ -21,16 +21,22 @@ package org.apache.hadoop.hbase.master;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import