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 0002913924..14a9d90fee 100644 --- a/service/src/java/org/apache/hive/service/cli/OperationHandle.java +++ b/service/src/java/org/apache/hive/service/cli/OperationHandle.java @@ -25,6 +25,7 @@ private final OperationType opType; private final TProtocolVersion protocol; private boolean hasResultSet = false; + private boolean hasResultSetIsSet = false; public OperationHandle(OperationType opType, TProtocolVersion protocol) { super(); @@ -42,6 +43,7 @@ public OperationHandle(TOperationHandle tOperationHandle, TProtocolVersion proto this.opType = OperationType.getOperationType(tOperationHandle.getOperationType()); this.hasResultSet = tOperationHandle.isHasResultSet(); this.protocol = protocol; + this.hasResultSetIsSet = tOperationHandle.isSetHasResultSet(); } public OperationType getOperationType() { @@ -50,17 +52,24 @@ public OperationType getOperationType() { public void setHasResultSet(boolean hasResultSet) { this.hasResultSet = hasResultSet; + hasResultSetIsSet = true; } public boolean hasResultSet() { return hasResultSet; } + public boolean isHasResultSetIsSet() { + return hasResultSetIsSet; + } + public TOperationHandle toTOperationHandle() { TOperationHandle tOperationHandle = new TOperationHandle(); tOperationHandle.setOperationId(getHandleIdentifier().toTHandleIdentifier()); tOperationHandle.setOperationType(opType.toTOperationType()); - tOperationHandle.setHasResultSet(hasResultSet); + if (hasResultSetIsSet) { + 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 581bf925c5..bd55801ef8 100644 --- a/service/src/java/org/apache/hive/service/cli/OperationStatus.java +++ b/service/src/java/org/apache/hive/service/cli/OperationStatus.java @@ -32,14 +32,17 @@ private final HiveSQLException operationException; private JobProgressUpdate jobProgressUpdate; private long numModifiedRows; + private final boolean hasResultSetIsSet; - 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, boolean hasResultSetIsSet) { this.state = state; this.taskStatus = taskStatus; this.operationStarted = operationStarted; this.operationCompleted = operationCompleted; this.hasResultSet = hasResultSet; this.operationException = operationException; + this.hasResultSetIsSet = hasResultSetIsSet; } public OperationState getState() { @@ -81,4 +84,8 @@ public long getNumModifiedRows() { void setNumModifiedRows(long numRows) { this.numModifiedRows = numRows; } + + public boolean isHasResultSetIsSet() { + return hasResultSetIsSet; + } } 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 cb995de94e..67835510af 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,8 @@ 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 = false; + protected boolean hasResultSetIsSet = false; protected volatile HiveSQLException operationException; protected volatile Future backgroundHandle; protected OperationLog operationLog; @@ -139,7 +140,8 @@ public OperationStatus getStatus() { } catch (HiveSQLException sqlException) { LOG.error("Error getting task status for " + opHandle.toString(), sqlException); } - return new OperationStatus(state, taskStatus, operationStart, operationComplete, hasResultSet, operationException); + return new OperationStatus(state, taskStatus, operationStart, operationComplete, hasResultSet, + operationException, hasResultSetIsSet); } public boolean hasResultSet() { @@ -148,6 +150,7 @@ public boolean hasResultSet() { protected void setHasResultSet(boolean hasResultSet) { this.hasResultSet = hasResultSet; + this.hasResultSetIsSet = true; opHandle.setHasResultSet(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 059e4c98dc..085604bdac 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 df16b64e7f..056dd05201 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.isHasResultSet(), opException, resp.isSetHasResultSet()); } catch (HiveSQLException e) { throw e; } catch (Exception e) {