From ac10ff20dbdc7d170413ac419a64cf963f45bd77 Mon Sep 17 00:00:00 2001 From: Mahesh Kumar Behera Date: Fri, 9 Nov 2018 17:11:43 +0530 Subject: [PATCH 1/2] HIVE-20897 : TestJdbcDriver2#testSelectExecAsync2 fails with result set not present error --- .../org/apache/hive/service/cli/OperationHandle.java | 11 ++++++++--- .../org/apache/hive/service/cli/OperationStatus.java | 11 ++++++++--- .../apache/hive/service/cli/operation/Operation.java | 4 ++-- .../hive/service/cli/thrift/ThriftCLIService.java | 4 +++- .../service/cli/thrift/ThriftCLIServiceClient.java | 2 +- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/service/src/java/org/apache/hive/service/cli/OperationHandle.java b/service/src/java/org/apache/hive/service/cli/OperationHandle.java index 000291392487..8409926d8a2a 100644 --- a/service/src/java/org/apache/hive/service/cli/OperationHandle.java +++ b/service/src/java/org/apache/hive/service/cli/OperationHandle.java @@ -24,7 +24,7 @@ public class OperationHandle extends Handle { private final OperationType opType; private final TProtocolVersion protocol; - private boolean hasResultSet = false; + private Boolean hasResultSet = null; public OperationHandle(OperationType opType, TProtocolVersion protocol) { super(); @@ -53,14 +53,19 @@ public void setHasResultSet(boolean hasResultSet) { } public boolean hasResultSet() { - return hasResultSet; + // null check to retain the old behavior + return hasResultSet == null ? false : hasResultSet; + } + + public boolean isHasResultSetIsSet() { + return hasResultSet != null; } public TOperationHandle toTOperationHandle() { TOperationHandle tOperationHandle = new TOperationHandle(); tOperationHandle.setOperationId(getHandleIdentifier().toTHandleIdentifier()); tOperationHandle.setOperationType(opType.toTOperationType()); - tOperationHandle.setHasResultSet(hasResultSet); + tOperationHandle.setHasResultSet(hasResultSet()); return tOperationHandle; } diff --git a/service/src/java/org/apache/hive/service/cli/OperationStatus.java b/service/src/java/org/apache/hive/service/cli/OperationStatus.java index 581bf925c568..8c1d036cdbe6 100644 --- a/service/src/java/org/apache/hive/service/cli/OperationStatus.java +++ b/service/src/java/org/apache/hive/service/cli/OperationStatus.java @@ -28,12 +28,13 @@ public class OperationStatus { private final String taskStatus; private final long operationStarted; private final long operationCompleted; - private final boolean hasResultSet; + private final Boolean hasResultSet; private final HiveSQLException operationException; private JobProgressUpdate jobProgressUpdate; private long numModifiedRows; - public OperationStatus(OperationState state, String taskStatus, long operationStarted, long operationCompleted, boolean hasResultSet, HiveSQLException operationException) { + public OperationStatus(OperationState state, String taskStatus, long operationStarted, long operationCompleted, + Boolean hasResultSet, HiveSQLException operationException) { this.state = state; this.taskStatus = taskStatus; this.operationStarted = operationStarted; @@ -59,7 +60,7 @@ public long getOperationCompleted() { } public boolean getHasResultSet() { - return hasResultSet; + return hasResultSet == null ? false : hasResultSet; } public HiveSQLException getOperationException() { @@ -81,4 +82,8 @@ public long getNumModifiedRows() { void setNumModifiedRows(long numRows) { this.numModifiedRows = numRows; } + + public boolean isHasResultSetIsSet() { + return hasResultSet != null; + } } diff --git a/service/src/java/org/apache/hive/service/cli/operation/Operation.java b/service/src/java/org/apache/hive/service/cli/operation/Operation.java index cb995de94ec4..32c24e875c3a 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/Operation.java +++ b/service/src/java/org/apache/hive/service/cli/operation/Operation.java @@ -61,7 +61,7 @@ public abstract class Operation { private final OperationHandle opHandle; public static final FetchOrientation DEFAULT_FETCH_ORIENTATION = FetchOrientation.FETCH_NEXT; public static final Logger LOG = LoggerFactory.getLogger(Operation.class.getName()); - protected boolean hasResultSet; + protected Boolean hasResultSet = null; protected volatile HiveSQLException operationException; protected volatile Future backgroundHandle; protected OperationLog operationLog; @@ -143,7 +143,7 @@ public OperationStatus getStatus() { } public boolean hasResultSet() { - return hasResultSet; + return hasResultSet == null ? false : hasResultSet; } protected void setHasResultSet(boolean hasResultSet) { diff --git a/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java b/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java index 059e4c98dcff..085604bdac0c 100644 --- a/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java +++ b/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java @@ -706,7 +706,9 @@ public TGetOperationStatusResp GetOperationStatus(TGetOperationStatusReq req) th resp.setTaskStatus(operationStatus.getTaskStatus()); resp.setOperationStarted(operationStatus.getOperationStarted()); resp.setOperationCompleted(operationStatus.getOperationCompleted()); - resp.setHasResultSet(operationStatus.getHasResultSet()); + if (operationStatus.isHasResultSetIsSet()) { + resp.setHasResultSet(operationStatus.getHasResultSet()); + } JobProgressUpdate progressUpdate = operationStatus.jobProgressUpdate(); ProgressMonitorStatusMapper mapper = ProgressMonitorStatusMapper.DEFAULT; if ("tez".equals(hiveConf.getVar(ConfVars.HIVE_EXECUTION_ENGINE))) { diff --git a/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIServiceClient.java b/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIServiceClient.java index df16b64e7f93..078eff05be43 100644 --- a/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIServiceClient.java +++ b/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIServiceClient.java @@ -384,7 +384,7 @@ public OperationStatus getOperationStatus(OperationHandle opHandle, boolean getP opException = new HiveSQLException(resp.getErrorMessage(), resp.getSqlState(), resp.getErrorCode()); } return new OperationStatus(opState, resp.getTaskStatus(), resp.getOperationStarted(), - resp.getOperationCompleted(), resp.isHasResultSet(), opException); + resp.getOperationCompleted(), resp.isSetHasResultSet() ? resp.isHasResultSet() : null, opException); } catch (HiveSQLException e) { throw e; } catch (Exception e) { From 457eba57a7b5a5cbe3338819103a92c2c02ead89 Mon Sep 17 00:00:00 2001 From: Mahesh Kumar Behera Date: Wed, 28 Nov 2018 16:57:24 +0530 Subject: [PATCH 2/2] HIVE-20966: Support incremental replication to a target cluster with hive.strict.managed.tables enabled --- .../org/apache/hive/service/cli/OperationHandle.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/service/src/java/org/apache/hive/service/cli/OperationHandle.java b/service/src/java/org/apache/hive/service/cli/OperationHandle.java index 8409926d8a2a..000291392487 100644 --- a/service/src/java/org/apache/hive/service/cli/OperationHandle.java +++ b/service/src/java/org/apache/hive/service/cli/OperationHandle.java @@ -24,7 +24,7 @@ public class OperationHandle extends Handle { private final OperationType opType; private final TProtocolVersion protocol; - private Boolean hasResultSet = null; + private boolean hasResultSet = false; public OperationHandle(OperationType opType, TProtocolVersion protocol) { super(); @@ -53,19 +53,14 @@ public void setHasResultSet(boolean hasResultSet) { } public boolean hasResultSet() { - // null check to retain the old behavior - return hasResultSet == null ? false : hasResultSet; - } - - public boolean isHasResultSetIsSet() { - return hasResultSet != null; + return hasResultSet; } public TOperationHandle toTOperationHandle() { TOperationHandle tOperationHandle = new TOperationHandle(); tOperationHandle.setOperationId(getHandleIdentifier().toTHandleIdentifier()); tOperationHandle.setOperationType(opType.toTOperationType()); - tOperationHandle.setHasResultSet(hasResultSet()); + tOperationHandle.setHasResultSet(hasResultSet); return tOperationHandle; }