diff --git a/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java index 7b6ec3b03dfea..f56da14313084 100644 --- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java +++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java @@ -465,6 +465,10 @@ protected SessionDataSet executeQueryStatement(String sql, long timeout) }, TSExecuteStatementResp::getStatus); TSExecuteStatementResp execResp = result.getResult(); + if (execResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { RpcUtils.verifySuccessWithRedirection(execResp.getStatus()); } else { @@ -536,6 +540,10 @@ protected SessionDataSet executeRawDataQuery( TSExecuteStatementResp::getStatus); TSExecuteStatementResp execResp = result.getResult(); + if (execResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { RpcUtils.verifySuccessWithRedirection(execResp.getStatus()); } else { @@ -575,7 +583,10 @@ protected SessionDataSet executeLastDataQueryForOnePrefixPath(final List return client.executeFastLastDataQueryForOnePrefixPath(req); }); final TSExecuteStatementResp tsExecuteStatementResp = result.getResult(); - + if (tsExecuteStatementResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { RpcUtils.verifySuccessWithRedirection(tsExecuteStatementResp.getStatus()); } else { @@ -621,6 +632,10 @@ protected Pair executeLastDataQueryForOneDevice( TSExecuteStatementResp::getStatus); TSExecuteStatementResp tsExecuteStatementResp = result.getResult(); + if (tsExecuteStatementResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { try { RpcUtils.verifySuccessWithRedirection(tsExecuteStatementResp.getStatus()); @@ -668,7 +683,10 @@ protected SessionDataSet executeLastDataQuery(List paths, long time, lon }, TSExecuteStatementResp::getStatus); final TSExecuteStatementResp tsExecuteStatementResp = result.getResult(); - + if (tsExecuteStatementResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { RpcUtils.verifySuccessWithRedirection(tsExecuteStatementResp.getStatus()); } else { @@ -751,6 +769,10 @@ private SessionDataSet executeAggregationQuery(TSAggregationQueryReq tsAggregati TSExecuteStatementResp::getStatus); TSExecuteStatementResp tsExecuteStatementResp = result.getResult(); + if (tsExecuteStatementResp == null) { + throw new IoTDBConnectionException( + "Cannot get statement response from server, response is null"); + } if (result.getRetryAttempts() == 0) { RpcUtils.verifySuccessWithRedirection(tsExecuteStatementResp.getStatus()); } else { diff --git a/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java b/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java index 9faa0c6efb6a2..7f3766850fc6a 100644 --- a/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java +++ b/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java @@ -67,8 +67,11 @@ import org.powermock.reflect.Whitebox; import java.time.ZoneId; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; @@ -450,4 +453,17 @@ public void testToString() { Assert.assertEquals("localhost", sessionConnection.getEndPoint().getIp()); sessionConnection.toString(); } + + @Test(expected = IoTDBConnectionException.class) + public void testExecuteQueryStatementNullResponse() + throws IoTDBConnectionException, StatementExecutionException, RedirectException, TException { + List mockNodes = Collections.singletonList(new TEndPoint("127.0.0.1", 6667)); + Whitebox.setInternalState(sessionConnection, "endPointList", new ArrayList<>(mockNodes)); + Whitebox.setInternalState( + sessionConnection, "availableNodes", (Supplier>) () -> mockNodes); + + Mockito.when(client.executeQueryStatementV2(any())).thenReturn(null); + + sessionConnection.executeQueryStatement("show version", 500l); + } }