This is an automated email from the ASF dual-hosted git repository.

stoty pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new 837cf4f  PHOENIX-5779 SplitSystemCatalogIT tests fail with Multiple 
Regions error (addendum - different fix)
837cf4f is described below

commit 837cf4f1cc119c6f86be9f3518e774e48faaa049
Author: Istvan Toth <st...@apache.org>
AuthorDate: Thu Jul 2 16:31:37 2020 +0200

    PHOENIX-5779 SplitSystemCatalogIT tests fail with Multiple Regions error 
(addendum - different fix)
    
    Co-authored-by: Richard Antal <antal97rich...@gmail.com>
---
 .../phoenix/end2end/SplitSystemCatalogIT.java      |  2 +
 .../it/java/org/apache/phoenix/end2end/ViewIT.java |  2 +
 .../org/apache/phoenix/end2end/ViewMetadataIT.java |  2 +
 .../java/org/apache/phoenix/query/BaseTest.java    | 71 ++++++++--------------
 4 files changed, 30 insertions(+), 47 deletions(-)

diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SplitSystemCatalogIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SplitSystemCatalogIT.java
index 9d95825..ebe818f 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SplitSystemCatalogIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SplitSystemCatalogIT.java
@@ -57,6 +57,8 @@ public class SplitSystemCatalogIT extends BaseTest {
         setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator()));
         // Split SYSTEM.CATALOG once after the mini-cluster is started
         if (splitSystemCatalog) {
+            // splitSystemCatalog is incompatible with the balancer chore
+            getUtility().getHBaseCluster().getMaster().balanceSwitch(false);
             splitSystemCatalog();
         }
     }
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
index bea5aa3..3e6027a 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
@@ -142,6 +142,8 @@ public class ViewIT extends SplitSystemCatalogIT {
         setUpTestDriver(new ReadOnlyProps(serverProps.entrySet().iterator()), 
new ReadOnlyProps(props.entrySet().iterator()));
         // Split SYSTEM.CATALOG once after the mini-cluster is started
         if (splitSystemCatalog) {
+            // splitSystemCatalog is incompatible with the balancer chore
+            getUtility().getHBaseCluster().getMaster().balanceSwitch(false);
             splitSystemCatalog();
         }
     }
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
index e118fce..be5af7c 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewMetadataIT.java
@@ -99,6 +99,8 @@ public class ViewMetadataIT extends SplitSystemCatalogIT {
                 new ReadOnlyProps(clientProps.entrySet().iterator()));
         // Split SYSTEM.CATALOG once after the mini-cluster is started
         if (splitSystemCatalog) {
+            // splitSystemCatalog is incompatible with the balancer chore
+            getUtility().getHBaseCluster().getMaster().balanceSwitch(false);
             splitSystemCatalog();
         }
 
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java 
b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
index 8df410e..c4e254b 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java
@@ -91,9 +91,11 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -101,7 +103,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
-import java.util.HashSet;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -1836,31 +1837,6 @@ public abstract class BaseTest {
         return false;
     }
 
-    protected static HashMap<ServerName, List<HRegionInfo>> getRegionMap(Admin 
admin,
-            HBaseTestingUtility util, TableName fullTableName, List<byte[]> 
splitPoints)
-            throws IOException {
-        MiniHBaseCluster cluster = util.getHBaseCluster();
-        HMaster master = cluster.getMaster();
-        AssignmentManager am = master.getAssignmentManager();
-        List<HRegionInfo> tableRegions =
-                admin.getTableRegions(fullTableName);
-        HashMap<ServerName, List<HRegionInfo>> serverToRegionsMap =
-                Maps.newHashMapWithExpectedSize(NUM_SLAVES_BASE);
-
-        for (HRegionInfo hRegionInfo : tableRegions) {
-            // filter on regions we are interested in
-            if (regionContainsMetadataRows(hRegionInfo, splitPoints)) {
-                ServerName serverName = 
am.getRegionStates().getRegionServerOfRegion(hRegionInfo);
-                if (!serverToRegionsMap.containsKey(serverName)) {
-                    serverToRegionsMap.put(serverName, new 
ArrayList<HRegionInfo>());
-                }
-                serverToRegionsMap.get(serverName).add(hRegionInfo);
-            }
-        }
-        return serverToRegionsMap;
-
-    }
-
     protected static void splitTable(TableName fullTableName, List<byte[]> 
splitPoints) throws Exception {
         Admin admin =
                 driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
@@ -1871,42 +1847,43 @@ public abstract class BaseTest {
         HBaseTestingUtility util = getUtility();
         MiniHBaseCluster cluster = util.getHBaseCluster();
         HMaster master = cluster.getMaster();
+        //We don't want BalancerChore to undo our hard work
+        assertFalse("Balancer must be off", master.isBalancerOn());
         AssignmentManager am = master.getAssignmentManager();
         // No need to split on the first splitPoint since the end key of 
region boundaries are exclusive
         for (int i=1; i<splitPoints.size(); ++i) {
             splitRegion(fullTableName, splitPoints.get(i));
         }
-        HashSet<ServerName> allRegionServers = new HashSet<>(NUM_SLAVES_BASE);
+        HashMap<ServerName, List<HRegionInfo>> serverToRegionsList = 
Maps.newHashMapWithExpectedSize(NUM_SLAVES_BASE);
+        Deque<ServerName> availableRegionServers = new 
ArrayDeque<ServerName>(NUM_SLAVES_BASE);
         for (int i=0; i<NUM_SLAVES_BASE; ++i) {
-            
allRegionServers.add(util.getHBaseCluster().getRegionServer(i).getServerName());
+            
availableRegionServers.push(util.getHBaseCluster().getRegionServer(i).getServerName());
         }
-        HashSet<ServerName> availableRegionServers;
-        HashMap<ServerName, List<HRegionInfo>> serverToRegionsMap = 
getRegionMap(admin,
-                util, fullTableName, splitPoints);
-
-        for (Entry<ServerName, List<HRegionInfo>> entry : 
serverToRegionsMap.entrySet()) {
+        List<HRegionInfo> tableRegions =
+                admin.getTableRegions(fullTableName);
+        for (HRegionInfo hRegionInfo : tableRegions) {
+            // filter on regions we are interested in
+            if (regionContainsMetadataRows(hRegionInfo, splitPoints)) {
+                ServerName serverName = 
am.getRegionStates().getRegionServerOfRegion(hRegionInfo);
+                if (!serverToRegionsList.containsKey(serverName)) {
+                    serverToRegionsList.put(serverName, new 
ArrayList<HRegionInfo>());
+                }
+                serverToRegionsList.get(serverName).add(hRegionInfo);
+                availableRegionServers.remove(serverName);
+            }
+        }
+        assertTrue("No region servers available to move regions on to ", 
!availableRegionServers.isEmpty());
+        for (Entry<ServerName, List<HRegionInfo>> entry : 
serverToRegionsList.entrySet()) {
             List<HRegionInfo> regions = entry.getValue();
             if (regions.size()>1) {
                 for (int i=1; i< regions.size(); ++i) {
-                    availableRegionServers = new HashSet<>(NUM_SLAVES_BASE);
-                    for (ServerName serverName: allRegionServers) {
-                        availableRegionServers.add(serverName);
-                    }
-                    //PHOENIX-5779 refresh the server to region map
-                    //The regions may have been moved either by us, or by an 
HBase chore
-                    HashMap<ServerName, List<HRegionInfo>> 
currentServerToRegionsMap =
-                            getRegionMap(admin, util, fullTableName, 
splitPoints);
-                    
availableRegionServers.removeAll(currentServerToRegionsMap.keySet());
-                    assertTrue("No region servers available to move regions on 
to ",
-                            !availableRegionServers.isEmpty());
-                    ServerName serverName = 
availableRegionServers.iterator().next();
-                    moveRegion(regions.get(i), entry.getKey(), serverName);
+                    moveRegion(regions.get(i), entry.getKey(), 
availableRegionServers.pop());
                 }
             }
         }
 
         // verify each region is on its own region server
-        List<HRegionInfo> tableRegions =
+        tableRegions =
                 admin.getTableRegions(fullTableName);
         Set<ServerName> serverNames = Sets.newHashSet();
         for (HRegionInfo hRegionInfo : tableRegions) {

Reply via email to