You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by st...@apache.org on 2020/07/01 08:38:44 UTC
[phoenix] branch master updated: PHOENIX-5779 SplitSystemCatalogIT
tests fail with Multiple Regions error
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 713c8d9 PHOENIX-5779 SplitSystemCatalogIT tests fail with Multiple Regions error
713c8d9 is described below
commit 713c8d953596f7a002502b7298a393414766a87e
Author: Richard Antal <an...@gmail.com>
AuthorDate: Fri Jun 26 14:18:53 2020 +0200
PHOENIX-5779 SplitSystemCatalogIT tests fail with Multiple Regions error
---
.../java/org/apache/phoenix/query/BaseTest.java | 69 +++++++++++++++-------
1 file changed, 47 insertions(+), 22 deletions(-)
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 b003053..8df410e 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,11 +91,9 @@ 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;
@@ -103,6 +101,7 @@ 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;
@@ -1837,6 +1836,31 @@ 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();
@@ -1852,36 +1876,37 @@ public abstract class BaseTest {
for (int i=1; i<splitPoints.size(); ++i) {
splitRegion(fullTableName, splitPoints.get(i));
}
- HashMap<ServerName, List<HRegionInfo>> serverToRegionsList = Maps.newHashMapWithExpectedSize(NUM_SLAVES_BASE);
- Deque<ServerName> availableRegionServers = new ArrayDeque<ServerName>(NUM_SLAVES_BASE);
+ HashSet<ServerName> allRegionServers = new HashSet<>(NUM_SLAVES_BASE);
for (int i=0; i<NUM_SLAVES_BASE; ++i) {
- availableRegionServers.push(util.getHBaseCluster().getRegionServer(i).getServerName());
- }
- 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);
- }
+ allRegionServers.add(util.getHBaseCluster().getRegionServer(i).getServerName());
}
- assertTrue("No region servers available to move regions on to ", !availableRegionServers.isEmpty());
- for (Entry<ServerName, List<HRegionInfo>> entry : serverToRegionsList.entrySet()) {
+ HashSet<ServerName> availableRegionServers;
+ HashMap<ServerName, List<HRegionInfo>> serverToRegionsMap = getRegionMap(admin,
+ util, fullTableName, splitPoints);
+
+ for (Entry<ServerName, List<HRegionInfo>> entry : serverToRegionsMap.entrySet()) {
List<HRegionInfo> regions = entry.getValue();
if (regions.size()>1) {
for (int i=1; i< regions.size(); ++i) {
- moveRegion(regions.get(i), entry.getKey(), availableRegionServers.pop());
+ 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);
}
}
}
// verify each region is on its own region server
- tableRegions =
+ List<HRegionInfo> tableRegions =
admin.getTableRegions(fullTableName);
Set<ServerName> serverNames = Sets.newHashSet();
for (HRegionInfo hRegionInfo : tableRegions) {