You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pr...@apache.org on 2018/04/15 14:59:27 UTC
hive git commit: HIVE-19193: TestActivePassiveHA fails (Prasanth
Jayachandran reviewed by Ashutosh Chauhan)
Repository: hive
Updated Branches:
refs/heads/master b153a6b1e -> 185173237
HIVE-19193: TestActivePassiveHA fails (Prasanth Jayachandran reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/18517323
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/18517323
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/18517323
Branch: refs/heads/master
Commit: 185173237ddc190ea661bc1af5f1a4933f7c9124
Parents: b153a6b
Author: Prasanth Jayachandran <pr...@apache.org>
Authored: Sun Apr 15 07:58:54 2018 -0700
Committer: Prasanth Jayachandran <pr...@apache.org>
Committed: Sun Apr 15 07:58:54 2018 -0700
----------------------------------------------------------------------
.../apache/hive/jdbc/TestActivePassiveHA.java | 20 ++++++++++++
.../org/apache/hive/jdbc/miniHS2/MiniHS2.java | 10 ++++++
.../apache/hive/service/server/HiveServer2.java | 34 ++++++++++++++++++++
3 files changed, 64 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/18517323/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java
index c94c0e1..fb846b4 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java
@@ -134,6 +134,7 @@ public class TestActivePassiveHA {
String instanceId2 = UUID.randomUUID().toString();
miniHS2_2.start(getConfOverlay(instanceId2));
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
assertEquals("true", sendGet(url));
@@ -175,6 +176,7 @@ public class TestActivePassiveHA {
miniHS2_1.stop();
+ assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_2.isLeader());
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
assertEquals("true", sendGet(url));
@@ -264,6 +266,7 @@ public class TestActivePassiveHA {
confOverlay.put(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PATH.varname, "clidriverTest");
miniHS2_2.start(confOverlay);
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
assertEquals("true", sendGet(url));
@@ -285,6 +288,7 @@ public class TestActivePassiveHA {
// miniHS2_2 will become leader
miniHS2_1.stop();
+ assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
parsedUrl = HiveConnection.getAllUrls(zkJdbcUrl).get(0).getJdbcUriString();
String hs2_2_directUrl = "jdbc:hive2://" + miniHS2_2.getHost() + ":" + miniHS2_2.getHttpPort() +
"/default;serviceDiscoveryMode=" + serviceDiscoveryMode + ";zooKeeperNamespace=" + zkHANamespace + ";";
@@ -302,6 +306,7 @@ public class TestActivePassiveHA {
// miniHS2_1 will become leader
miniHS2_2.stop();
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
parsedUrl = HiveConnection.getAllUrls(zkJdbcUrl).get(0).getJdbcUriString();
hs2_1_directUrl = "jdbc:hive2://" + miniHS2_1.getHost() + ":" + miniHS2_1.getBinaryPort() +
"/default;serviceDiscoveryMode=" + serviceDiscoveryMode + ";zooKeeperNamespace=" + zkHANamespace + ";";
@@ -330,6 +335,7 @@ public class TestActivePassiveHA {
String url2 = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
// when we start miniHS2_1 will be leader (sequential start)
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
assertEquals("true", sendGet(url1, true));
@@ -338,23 +344,28 @@ public class TestActivePassiveHA {
assertTrue(resp.contains("Failover successful!"));
// make sure miniHS2_1 is not leader
+ assertEquals(true, miniHS2_1.getNotLeaderTestFuture().get());
assertEquals(false, miniHS2_1.isLeader());
assertEquals("false", sendGet(url1, true));
// make sure miniHS2_2 is the new leader
+ assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_2.isLeader());
assertEquals("true", sendGet(url2, true));
// send failover request again to miniHS2_1 and get a failure
resp = sendDelete(url1, true);
assertTrue(resp.contains("Cannot failover an instance that is not a leader"));
+ assertEquals(true, miniHS2_1.getNotLeaderTestFuture().get());
assertEquals(false, miniHS2_1.isLeader());
// send failover request to miniHS2_2 and make sure miniHS2_1 takes over (returning back to leader, test listeners)
resp = sendDelete(url2, true);
assertTrue(resp.contains("Failover successful!"));
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
assertEquals("true", sendGet(url1, true));
+ assertEquals(true, miniHS2_2.getNotLeaderTestFuture().get());
assertEquals("false", sendGet(url2, true));
assertEquals(false, miniHS2_2.isLeader());
} finally {
@@ -382,13 +393,16 @@ public class TestActivePassiveHA {
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
// when we start miniHS2_1 will be leader (sequential start)
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
assertEquals("true", sendGet(url1, true));
// trigger failover on miniHS2_1 without authorization header
assertEquals("Unauthorized", sendDelete(url1, false));
assertTrue(sendDelete(url1, true).contains("Failover successful!"));
+ assertEquals(true, miniHS2_1.getNotLeaderTestFuture().get());
assertEquals(false, miniHS2_1.isLeader());
+ assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_2.isLeader());
} finally {
// revert configs to not affect other tests
@@ -419,6 +433,7 @@ public class TestActivePassiveHA {
assertTrue(zkJdbcUrl.contains(zkConnectString));
// when we start miniHS2_1 will be leader (sequential start)
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
assertEquals("true", sendGet(url1, true));
@@ -441,10 +456,12 @@ public class TestActivePassiveHA {
}
// make sure miniHS2_1 is not leader
+ assertEquals(true, miniHS2_1.getNotLeaderTestFuture().get());
assertEquals(false, miniHS2_1.isLeader());
assertEquals("false", sendGet(url1, true));
// make sure miniHS2_2 is the new leader
+ assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_2.isLeader());
assertEquals("true", sendGet(url2, true));
@@ -461,13 +478,16 @@ public class TestActivePassiveHA {
// send failover request again to miniHS2_1 and get a failure
resp = sendDelete(url1, true);
assertTrue(resp.contains("Cannot failover an instance that is not a leader"));
+ assertEquals(true, miniHS2_1.getNotLeaderTestFuture().get());
assertEquals(false, miniHS2_1.isLeader());
// send failover request to miniHS2_2 and make sure miniHS2_1 takes over (returning back to leader, test listeners)
resp = sendDelete(url2, true);
assertTrue(resp.contains("Failover successful!"));
+ assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
assertEquals(true, miniHS2_1.isLeader());
assertEquals("true", sendGet(url1, true));
+ assertEquals(true, miniHS2_2.getNotLeaderTestFuture().get());
assertEquals("false", sendGet(url2, true));
assertEquals(false, miniHS2_2.isLeader());
// make sure miniHS2_2 closes all its connections
http://git-wip-us.apache.org/repos/asf/hive/blob/18517323/itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java
----------------------------------------------------------------------
diff --git a/itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java b/itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java
index 23fcbe8..cafdb98 100644
--- a/itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java
+++ b/itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java
@@ -27,6 +27,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.SettableFuture;
+
import org.apache.commons.io.FileUtils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
@@ -416,6 +418,14 @@ public class MiniHS2 extends AbstractHiveService {
return hiveServer2.isLeader();
}
+ public SettableFuture<Boolean> getIsLeaderTestFuture() {
+ return hiveServer2.getIsLeaderTestFuture();
+ }
+
+ public SettableFuture<Boolean> getNotLeaderTestFuture() {
+ return hiveServer2.getNotLeaderTestFuture();
+ }
+
public void setPamAuthenticator(final PamAuthenticator pamAuthenticator) {
this.pamAuthenticator = pamAuthenticator;
}
http://git-wip-us.apache.org/repos/asf/hive/blob/18517323/service/src/java/org/apache/hive/service/server/HiveServer2.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index 47f84b5..4e88565 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -119,6 +119,7 @@ import org.slf4j.LoggerFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.SettableFuture;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
/**
@@ -149,6 +150,9 @@ public class HiveServer2 extends CompositeService {
private Hive sessionHive;
private String wmQueue;
private AtomicBoolean isLeader = new AtomicBoolean(false);
+ // used for testing
+ private SettableFuture<Boolean> isLeaderTestFuture = SettableFuture.create();
+ private SettableFuture<Boolean> notLeaderTestFuture = SettableFuture.create();
public HiveServer2() {
super(HiveServer2.class.getSimpleName());
@@ -167,6 +171,24 @@ public class HiveServer2 extends CompositeService {
this.pamAuthenticator = pamAuthenticator;
}
+ @VisibleForTesting
+ public SettableFuture<Boolean> getIsLeaderTestFuture() {
+ return isLeaderTestFuture;
+ }
+
+ @VisibleForTesting
+ public SettableFuture<Boolean> getNotLeaderTestFuture() {
+ return notLeaderTestFuture;
+ }
+
+ private void resetIsLeaderTestFuture() {
+ isLeaderTestFuture = SettableFuture.create();
+ }
+
+ private void resetNotLeaderTestFuture() {
+ notLeaderTestFuture = SettableFuture.create();
+ }
+
@Override
public synchronized void init(HiveConf hiveConf) {
//Initialize metrics first, as some metrics are for initialization stuff.
@@ -698,6 +720,12 @@ public class HiveServer2 extends CompositeService {
}
hiveServer2.startOrReconnectTezSessions();
LOG.info("Started/Reconnected tez sessions.");
+
+ // resolve futures used for testing
+ if (HiveConf.getBoolVar(hiveServer2.hiveConf, ConfVars.HIVE_IN_TEST)) {
+ hiveServer2.isLeaderTestFuture.set(true);
+ hiveServer2.resetNotLeaderTestFuture();
+ }
}
@Override
@@ -707,6 +735,12 @@ public class HiveServer2 extends CompositeService {
hiveServer2.closeHiveSessions();
hiveServer2.stopOrDisconnectTezSessions();
LOG.info("Stopped/Disconnected tez sessions.");
+
+ // resolve futures used for testing
+ if (HiveConf.getBoolVar(hiveServer2.hiveConf, ConfVars.HIVE_IN_TEST)) {
+ hiveServer2.notLeaderTestFuture.set(true);
+ hiveServer2.resetIsLeaderTestFuture();
+ }
}
}