You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2015/12/02 21:00:55 UTC
ambari git commit: AMBARI-14109. Invalid session handle error in hive
view when hive server is restarted in http mode. (Gaurav Nagar via yusaku)
Repository: ambari
Updated Branches:
refs/heads/trunk e6c6e17a4 -> 5d081baeb
AMBARI-14109. Invalid session handle error in hive view when hive server is restarted in http mode. (Gaurav Nagar via yusaku)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5d081bae
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5d081bae
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5d081bae
Branch: refs/heads/trunk
Commit: 5d081baeb84a219bb1452b88429f6efdd07ee75d
Parents: e6c6e17
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Wed Dec 2 12:00:12 2015 -0800
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Wed Dec 2 12:00:12 2015 -0800
----------------------------------------------------------------------
.../ambari/view/hive/client/Connection.java | 7 +++-
.../ambari/view/hive/client/DDLDelegator.java | 2 +-
.../ambari/view/hive/client/HiveCall.java | 42 ++++++++++++++++++++
3 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5d081bae/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/Connection.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/Connection.java b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/Connection.java
index 451f2aa..b64a2a5 100644
--- a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/Connection.java
+++ b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/Connection.java
@@ -530,6 +530,11 @@ public class Connection {
sessHandles.remove(tag);
}
+ public void invalidateSessionBySessionHandle(TSessionHandle sessionHandle) throws HiveClientException{
+ sessHandles.values().remove(sessionHandle);
+ closeSession(sessionHandle);
+ }
+
private synchronized void closeSession(TSessionHandle sessHandle) throws HiveClientException {
if (sessHandle == null) return;
TCloseSessionReq closeReq = new TCloseSessionReq(sessHandle);
@@ -582,7 +587,7 @@ public class Connection {
final String oneCmd = commands[i];
final boolean lastCommand = i == commands.length-1;
- TExecuteStatementResp execResp = new HiveCall<TExecuteStatementResp>(this) {
+ TExecuteStatementResp execResp = new HiveCall<TExecuteStatementResp>(this,session) {
@Override
public TExecuteStatementResp body() throws HiveClientException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/5d081bae/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/DDLDelegator.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/DDLDelegator.java b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/DDLDelegator.java
index eda12ed..e609978 100644
--- a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/DDLDelegator.java
+++ b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/DDLDelegator.java
@@ -118,7 +118,7 @@ public class DDLDelegator {
else
like = ".*" + like + ".*";
final String finalLike = like;
- TGetColumnsResp resp = new HiveCall<TGetColumnsResp>(connection) {
+ TGetColumnsResp resp = new HiveCall<TGetColumnsResp>(connection,session) {
@Override
public TGetColumnsResp body() throws HiveClientException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/5d081bae/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/HiveCall.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/HiveCall.java b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/HiveCall.java
index 1b565eb..d2a459f 100644
--- a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/HiveCall.java
+++ b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/client/HiveCall.java
@@ -19,22 +19,61 @@
package org.apache.ambari.view.hive.client;
import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.hive.service.cli.thrift.TSessionHandle;
+import org.apache.hive.service.cli.thrift.TStatus;
+import org.apache.hive.service.cli.thrift.TStatusCode;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
public abstract class HiveCall <T> {
private final static Logger LOG =
LoggerFactory.getLogger(HiveCall.class);
protected final Connection conn;
+ protected final TSessionHandle sessionHandle;
public HiveCall(Connection connection) {
+ this(connection,null);
+ }
+
+ public HiveCall(Connection connection, TSessionHandle sessionHandle) {
this.conn = connection;
+ this.sessionHandle = sessionHandle;
}
public abstract T body() throws HiveClientException;
+ public boolean validateSession(T t) throws HiveClientException {
+ //invalidate a session
+ try {
+ Method m = t.getClass().getMethod("getStatus");
+ if (m != null) {
+ TStatus status = (TStatus) m.invoke(t);
+ if (status.getStatusCode().equals(TStatusCode.ERROR_STATUS) &&
+ status.getErrorMessage().startsWith("Invalid SessionHandle: SessionHandle")) {
+ try {
+ conn.invalidateSessionBySessionHandle(sessionHandle);
+ } catch (HiveClientException e) {
+ LOG.error(e.getMessage(),e);
+ }
+ throw new HiveClientException("Please Retry." + status.getErrorMessage(), null);
+ //return false;
+ }
+ }
+ } catch (NoSuchMethodException e) {
+
+ } catch (InvocationTargetException e) {
+
+ } catch (IllegalAccessException e) {
+
+ }
+ return true;
+ }
+
public T call() throws HiveClientException {
T result = null;
boolean needRetry = false;
@@ -60,6 +99,9 @@ public abstract class HiveCall <T> {
synchronized (conn) {
result = body();
+ if(sessionHandle !=null) {
+ this.validateSession(result);
+ }
}
} catch (HiveClientException ex) {