Repository: hbase
Updated Branches:
  refs/heads/branch-1 f763b5d2c -> 8ec86932b


HBASE-12671 HBASE-12652 broke branch-1 builds (TestAssignmentManager fails)


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

Branch: refs/heads/branch-1
Commit: 8ec86932b1bdb5625a7f4a99ca0e2107006e20e6
Parents: f763b5d
Author: stack <[email protected]>
Authored: Wed Dec 10 11:58:22 2014 -0800
Committer: stack <[email protected]>
Committed: Wed Dec 10 11:58:22 2014 -0800

----------------------------------------------------------------------
 .../hbase/master/TestAssignmentManager.java     | 116 ++++++++++++-------
 1 file changed, 77 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/8ec86932/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
index 98f89fa..65dc2ab 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
@@ -40,7 +40,7 @@ import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.testclassification.MediumTests;
+import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.RegionException;
 import org.apache.hadoop.hbase.RegionTransition;
 import org.apache.hadoop.hbase.Server;
@@ -48,14 +48,12 @@ import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.client.ClusterConnection;
-import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
 import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.OpenRegionCoordination;
+import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.ZkOpenRegionCoordination;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.executor.EventType;
@@ -74,9 +72,10 @@ import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
-import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.Table;
 import 
org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;
+import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.Table;
 import org.apache.hadoop.hbase.regionserver.RegionOpeningState;
+import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.Threads;
@@ -127,6 +126,7 @@ public class TestAssignmentManager {
   private MetaTableLocator mtl;
   private LoadBalancer balancer;
   private HMaster master;
+  private ClusterConnection connection;
 
   @BeforeClass
   public static void beforeClass() throws Exception {
@@ -166,7 +166,7 @@ public class TestAssignmentManager {
     Mockito.when(server.getMetaTableLocator()).thenReturn(mtl);
 
     // Get a connection w/ mocked up common methods.
-    ClusterConnection connection =
+    this.connection =
       
(ClusterConnection)HConnectionTestingUtility.getMockedConnection(HTU.getConfiguration());
 
     // Make it so we can get a catalogtracker from servermanager.. .needed
@@ -205,14 +205,14 @@ public class TestAssignmentManager {
     Mockito.when(this.master.getServerManager()).thenReturn(serverManager);
   }
 
-  @After
-    public void after() throws KeeperException {
+  @After public void after() throws KeeperException, IOException {
     if (this.watcher != null) {
       // Clean up all znodes
       ZKAssign.deleteAllNodes(this.watcher);
       this.watcher.close();
       this.cp.stop();
     }
+    if (this.connection != null) this.connection.close();
   }
 
   /**
@@ -658,29 +658,39 @@ public class TestAssignmentManager {
     ClusterConnection connection =
       
HConnectionTestingUtility.getMockedConnectionAndDecorate(HTU.getConfiguration(),
         null, implementation, SERVERNAME_B, REGIONINFO);
-
-    // Make it so we can get a catalogtracker from servermanager.. .needed
-    // down in guts of server shutdown handler.
-    Mockito.when(this.server.getConnection()).thenReturn(connection);
-
-    // Now make a server shutdown handler instance and invoke process.
-    // Have it that SERVERNAME_A died.
-    DeadServer deadServers = new DeadServer();
-    deadServers.add(SERVERNAME_A);
-    // I need a services instance that will return the AM
-    MasterFileSystem fs = Mockito.mock(MasterFileSystem.class);
-    Mockito.doNothing().when(fs).setLogRecoveryMode();
-    Mockito.when(fs.getLogRecoveryMode()).thenReturn(RecoveryMode.LOG_REPLAY);
-    MasterServices services = Mockito.mock(MasterServices.class);
-    Mockito.when(services.getAssignmentManager()).thenReturn(am);
-    Mockito.when(services.getServerManager()).thenReturn(this.serverManager);
-    Mockito.when(services.getZooKeeper()).thenReturn(this.watcher);
-    Mockito.when(services.getMasterFileSystem()).thenReturn(fs);
-    ServerShutdownHandler handler = new ServerShutdownHandler(this.server,
-      services, deadServers, SERVERNAME_A, false);
-    am.failoverCleanupDone.set(true);
-    handler.process();
-    // The region in r will have been assigned.  It'll be up in zk as 
unassigned.
+    // These mocks were done up when all connections were managed.  World is 
different now we
+    // moved to unmanaged connections.  It messes up the intercepts done in 
these tests.
+    // Just mark connections as marked and then down in MetaTableAccessor, it 
will go the path
+    // that picks up the above mocked up 'implementation' so 'scans' of meta 
return the expected
+    // result.  Redo in new realm of unmanaged connections.
+    Mockito.when(connection.isManaged()).thenReturn(true);
+    try {
+      // Make it so we can get a catalogtracker from servermanager.. .needed
+      // down in guts of server shutdown handler.
+      Mockito.when(this.server.getConnection()).thenReturn(connection);
+
+      // Now make a server shutdown handler instance and invoke process.
+      // Have it that SERVERNAME_A died.
+      DeadServer deadServers = new DeadServer();
+      deadServers.add(SERVERNAME_A);
+      // I need a services instance that will return the AM
+      MasterFileSystem fs = Mockito.mock(MasterFileSystem.class);
+      Mockito.doNothing().when(fs).setLogRecoveryMode();
+      
Mockito.when(fs.getLogRecoveryMode()).thenReturn(RecoveryMode.LOG_REPLAY);
+      MasterServices services = Mockito.mock(MasterServices.class);
+      Mockito.when(services.getAssignmentManager()).thenReturn(am);
+      Mockito.when(services.getServerManager()).thenReturn(this.serverManager);
+      Mockito.when(services.getZooKeeper()).thenReturn(this.watcher);
+      Mockito.when(services.getMasterFileSystem()).thenReturn(fs);
+      Mockito.when(services.getConnection()).thenReturn(connection);
+      ServerShutdownHandler handler = new ServerShutdownHandler(this.server,
+          services, deadServers, SERVERNAME_A, false);
+      am.failoverCleanupDone.set(true);
+      handler.process();
+      // The region in r will have been assigned.  It'll be up in zk as 
unassigned.
+    } finally {
+      if (connection != null) connection.close();
+    }
   }
 
   /**
@@ -769,6 +779,8 @@ public class TestAssignmentManager {
       fail("Should not throw NPE");
     } catch (RuntimeException e) {
       assertEquals("Aborted", e.getLocalizedMessage());
+    } finally {
+      am.shutdown();
     }
   }
   /**
@@ -909,6 +921,7 @@ public class TestAssignmentManager {
     }
     assertTrue("The region should be assigned immediately.", null != 
am.regionPlans.get(REGIONINFO
         .getEncodedName()));
+    am.shutdown();
   }
 
   /**
@@ -1057,6 +1070,7 @@ public class TestAssignmentManager {
       assertFalse("Table should not be present in zookeeper.",
         am.getTableStateManager().isTablePresent(tableName));
     } finally {
+      am.shutdown();
     }
   }
   /**
@@ -1088,6 +1102,7 @@ public class TestAssignmentManager {
     } finally {
       
am.getRegionStates().regionsInTransition.remove(REGIONINFO.getEncodedName());
       am.regionPlans.remove(REGIONINFO.getEncodedName());
+      am.shutdown();
     }
   }
 
@@ -1106,13 +1121,17 @@ public class TestAssignmentManager {
     AssignmentManagerWithExtrasForTesting am =
         setUpMockedAssignmentManager(this.server, this.serverManager);
     ZKAssign.createNodeClosing(this.watcher, REGIONINFO, SERVERNAME_A);
-    am.getRegionStates().createRegionState(REGIONINFO);
+    try {
+      am.getRegionStates().createRegionState(REGIONINFO);
 
-    assertFalse( am.getRegionStates().isRegionsInTransition() );
+      assertFalse( am.getRegionStates().isRegionsInTransition() );
 
-    am.processRegionInTransition(REGIONINFO.getEncodedName(), REGIONINFO);
+      am.processRegionInTransition(REGIONINFO.getEncodedName(), REGIONINFO);
 
-    assertTrue( am.getRegionStates().isRegionsInTransition() );
+      assertTrue( am.getRegionStates().isRegionsInTransition() );
+    } finally {
+      am.shutdown();
+    }
   }
 
   /**
@@ -1216,9 +1235,15 @@ public class TestAssignmentManager {
     Mockito.when(ri.get((RpcController)Mockito.any(), (GetRequest) 
Mockito.any())).
       thenReturn(getBuilder.build());
     // Get a connection w/ mocked up common methods.
-    HConnection connection = HConnectionTestingUtility.
+    ClusterConnection connection = 
(ClusterConnection)HConnectionTestingUtility.
       getMockedConnectionAndDecorate(HTU.getConfiguration(), null,
         ri, SERVERNAME_B, REGIONINFO);
+    // These mocks were done up when all connections were managed.  World is 
different now we
+    // moved to unmanaged connections.  It messes up the intercepts done in 
these tests.
+    // Just mark connections as marked and then down in MetaTableAccessor, it 
will go the path
+    // that picks up the above mocked up 'implementation' so 'scans' of meta 
return the expected
+    // result.  Redo in new realm of unmanaged connections.
+    Mockito.when(connection.isManaged()).thenReturn(true);
     // Make it so we can get the connection from our mocked catalogtracker
     // Create and startup an executor. Used by AM handling zk callbacks.
     ExecutorService executor = startupMasterExecutor("mockedAMExecutor");
@@ -1237,10 +1262,10 @@ public class TestAssignmentManager {
     boolean processRITInvoked = false;
     boolean assignInvoked = false;
     AtomicBoolean gate = new AtomicBoolean(true);
-    private HConnection connection;
+    private ClusterConnection connection;
 
     public AssignmentManagerWithExtrasForTesting(
-        final Server master, HConnection connection, final ServerManager 
serverManager,
+        final Server master, ClusterConnection connection, final ServerManager 
serverManager,
         final LoadBalancer balancer,
         final ExecutorService service, final TableLockManager tableLockManager)
             throws KeeperException, IOException, CoordinatedStateException {
@@ -1303,9 +1328,20 @@ public class TestAssignmentManager {
     /*
      * Convenient method to retrieve mocked up connection
      */
-    HConnection getConnection() {
+    ClusterConnection getConnection() {
       return this.connection;
     }
+
+    @Override
+    public void shutdown() {
+      super.shutdown();
+      if (this.connection != null)
+        try {
+          this.connection.close();
+        } catch (IOException e) {
+          fail("Failed to close connection");
+        }
+    }
   }
 
   /**
@@ -1442,6 +1478,7 @@ public class TestAssignmentManager {
     am.balance(plan);
     assertFalse("The region should not in transition",
       regionStates.isRegionInTransition(hri));
+    am.shutdown();
   }
 
   /**
@@ -1471,6 +1508,7 @@ public class TestAssignmentManager {
       am.assign(hri, true, false);
     } finally {
       assertEquals(SERVERNAME_A, 
regionStates.getRegionState(REGIONINFO).getServerName());
+      am.shutdown();
     }
   }
 }

Reply via email to