You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2021/08/18 02:15:02 UTC
[iotdb] 01/01: add log for StackOverflowError in
eExpressionOptimizer
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch add_log_for_expression
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9ca448d6b51d504200d217ecfcd25ff19f70fdfe
Author: qiaojialin <64...@qq.com>
AuthorDate: Wed Aug 18 10:14:28 2021 +0800
add log for StackOverflowError in eExpressionOptimizer
---
.../org/apache/iotdb/db/service/TSServiceImpl.java | 8 +++--
.../read/expression/util/ExpressionOptimizer.java | 34 ++++++++++++----------
2 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 88fd488..bd854f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -585,12 +585,12 @@ public class TSServiceImpl implements TSIService.Iface {
@Override
public TSExecuteStatementResp executeStatement(TSExecuteStatementReq req) {
+ String statement = req.getStatement();
try {
if (!checkLogin(req.getSessionId())) {
return RpcUtils.getTSExecuteStatementResp(getNotLoggedInStatus());
}
- String statement = req.getStatement();
PhysicalPlan physicalPlan =
processor.parseSQLToPhysicalPlan(statement, sessionManager.getZoneId(req.getSessionId()));
@@ -614,9 +614,11 @@ public class TSServiceImpl implements TSIService.Iface {
} catch (InterruptedException e) {
LOGGER.error(INFO_INTERRUPT_ERROR, req, e);
Thread.currentThread().interrupt();
- return RpcUtils.getTSExecuteStatementResp(onQueryException(e, "executing executeStatement"));
+ return RpcUtils.getTSExecuteStatementResp(
+ onQueryException(e, "executing \"" + statement + "\""));
} catch (Exception e) {
- return RpcUtils.getTSExecuteStatementResp(onQueryException(e, "executing executeStatement"));
+ return RpcUtils.getTSExecuteStatementResp(
+ onQueryException(e, "executing \"" + statement + "\""));
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/expression/util/ExpressionOptimizer.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/expression/util/ExpressionOptimizer.java
index ea2a24f..b056286 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/expression/util/ExpressionOptimizer.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/expression/util/ExpressionOptimizer.java
@@ -70,21 +70,25 @@ public class ExpressionOptimizer {
(GlobalTimeExpression) right, left, selectedSeries, relation);
} else if (left.getType() != ExpressionType.GLOBAL_TIME
&& right.getType() != ExpressionType.GLOBAL_TIME) {
- IExpression regularLeft = optimize(left, selectedSeries);
- IExpression regularRight = optimize(right, selectedSeries);
- IBinaryExpression midRet = null;
- if (relation == ExpressionType.AND) {
- midRet = BinaryExpression.and(regularLeft, regularRight);
- } else if (relation == ExpressionType.OR) {
- midRet = BinaryExpression.or(regularLeft, regularRight);
- } else {
- throw new UnsupportedOperationException("unsupported IExpression type: " + relation);
- }
- if (midRet.getLeft().getType() == ExpressionType.GLOBAL_TIME
- || midRet.getRight().getType() == ExpressionType.GLOBAL_TIME) {
- return optimize(midRet, selectedSeries);
- } else {
- return midRet;
+ try {
+ IExpression regularLeft = optimize(left, selectedSeries);
+ IExpression regularRight = optimize(right, selectedSeries);
+ IBinaryExpression midRet = null;
+ if (relation == ExpressionType.AND) {
+ midRet = BinaryExpression.and(regularLeft, regularRight);
+ } else if (relation == ExpressionType.OR) {
+ midRet = BinaryExpression.or(regularLeft, regularRight);
+ } else {
+ throw new UnsupportedOperationException("unsupported IExpression type: " + relation);
+ }
+ if (midRet.getLeft().getType() == ExpressionType.GLOBAL_TIME
+ || midRet.getRight().getType() == ExpressionType.GLOBAL_TIME) {
+ return optimize(midRet, selectedSeries);
+ } else {
+ return midRet;
+ }
+ } catch (StackOverflowError stackOverflowError) {
+ throw new QueryFilterOptimizationException("StackOverflowError is encountered.");
}
}
}