Skip to content

Commit

Permalink
Merge c06305e into d384cb5
Browse files Browse the repository at this point in the history
  • Loading branch information
Jialin Qiao committed Mar 24, 2020
2 parents d384cb5 + c06305e commit 2b91bf6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 33 deletions.
Expand Up @@ -28,7 +28,7 @@ public class QueryServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private List<SqlArgument> list = TSServiceImpl.sqlArgumentsList;
private List<SqlArgument> list = TSServiceImpl.sqlArgumentList;
private MetricsPage page;

public QueryServlet(MetricsPage page) {
Expand Down
53 changes: 21 additions & 32 deletions server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
Expand Up @@ -133,7 +133,9 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
private static final int DELETE_SIZE = 50;
private static final String ERROR_PARSING_SQL =
"meet error while parsing SQL to physical plan: {}";
public static Vector<SqlArgument> sqlArgumentsList = new Vector<>();

private boolean enableMetric = IoTDBDescriptor.getInstance().getConfig().isEnableMetricService();
public static final Vector<SqlArgument> sqlArgumentList = new Vector<>();

protected Planner processor;
protected IPlanExecutor executor;
Expand Down Expand Up @@ -483,9 +485,6 @@ private boolean executeStatementInBatch(String statement, List<TSStatus> result,

@Override
public TSExecuteStatementResp executeStatement(TSExecuteStatementReq req) {
long startTime = System.currentTimeMillis();
TSExecuteStatementResp resp;
SqlArgument sqlArgument;
try {
if (!checkLogin(req.getSessionId())) {
logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
Expand All @@ -500,19 +499,8 @@ public TSExecuteStatementResp executeStatement(TSExecuteStatementReq req) {
PhysicalPlan physicalPlan =
processor.parseSQLToPhysicalPlan(statement, sessionIdZoneIdMap.get(req.getSessionId()));
if (physicalPlan.isQuery()) {
resp =
internalExecuteQueryStatement(
req.statementId,
physicalPlan,
req.fetchSize,
return internalExecuteQueryStatement(statement, req.statementId, physicalPlan, req.fetchSize,
sessionIdUsernameMap.get(req.getSessionId()));
long endTime = System.currentTimeMillis();
sqlArgument = new SqlArgument(resp, physicalPlan, statement, startTime, endTime);
sqlArgumentsList.add(sqlArgument);
if (sqlArgumentsList.size() > MAX_SIZE) {
sqlArgumentsList.subList(0, DELETE_SIZE).clear();
}
return resp;
} else {
return executeUpdateStatement(physicalPlan, req.getSessionId());
}
Expand All @@ -538,10 +526,6 @@ public TSExecuteStatementResp executeStatement(TSExecuteStatementReq req) {
@Override
public TSExecuteStatementResp executeQueryStatement(TSExecuteStatementReq req) {
try {
long startTime = System.currentTimeMillis();
TSExecuteStatementResp resp;
SqlArgument sqlArgument;

if (!checkLogin(req.getSessionId())) {
logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
return RpcUtils.getTSExecuteStatementResp(TSStatusCode.NOT_LOGIN_ERROR);
Expand All @@ -562,16 +546,9 @@ public TSExecuteStatementResp executeQueryStatement(TSExecuteStatementReq req) {
TSStatusCode.EXECUTE_STATEMENT_ERROR, "Statement is not a query statement.");
}

resp = internalExecuteQueryStatement(
req.statementId, physicalPlan, req.fetchSize,
return internalExecuteQueryStatement(statement, req.statementId, physicalPlan, req.fetchSize,
sessionIdUsernameMap.get(req.getSessionId()));
long endTime = System.currentTimeMillis();
sqlArgument = new SqlArgument(resp, physicalPlan, statement, startTime, endTime);
sqlArgumentsList.add(sqlArgument);
if (sqlArgumentsList.size() > MAX_SIZE) {
sqlArgumentsList.subList(0, DELETE_SIZE).clear();
}
return resp;

} catch (ParseCancellationException e) {
logger.debug(e.getMessage());
return RpcUtils.getTSExecuteStatementResp(TSStatusCode.SQL_PARSE_ERROR,
Expand All @@ -587,9 +564,9 @@ public TSExecuteStatementResp executeQueryStatement(TSExecuteStatementReq req) {
* @param plan must be a plan for Query: FillQueryPlan, AggregationPlan, GroupByPlan, some
* AuthorPlan
*/
private TSExecuteStatementResp internalExecuteQueryStatement(
private TSExecuteStatementResp internalExecuteQueryStatement(String statement,
long statementId, PhysicalPlan plan, int fetchSize, String username) {
long t1 = System.currentTimeMillis();
long startTime = System.currentTimeMillis();
long queryId = -1;
try {
TSExecuteStatementResp resp = getQueryResp(plan, username); // column headers
Expand Down Expand Up @@ -625,6 +602,18 @@ private TSExecuteStatementResp internalExecuteQueryStatement(
resp.setQueryDataSet(result);
}
resp.setQueryId(queryId);

if (enableMetric) {
long endTime = System.currentTimeMillis();
SqlArgument sqlArgument = new SqlArgument(resp, plan, statement, startTime, endTime);
synchronized (sqlArgumentList) {
sqlArgumentList.add(sqlArgument);
if (sqlArgumentList.size() > MAX_SIZE) {
sqlArgumentList.subList(0, DELETE_SIZE).clear();
}
}
}

return resp;
} catch (Exception e) {
logger.error("{}: Internal server error: ", IoTDBConstant.GLOBAL_DB_NAME, e);
Expand All @@ -637,7 +626,7 @@ private TSExecuteStatementResp internalExecuteQueryStatement(
}
return RpcUtils.getTSExecuteStatementResp(TSStatusCode.INTERNAL_SERVER_ERROR, e.getMessage());
} finally {
Measurement.INSTANCE.addOperationLatency(Operation.EXECUTE_QUERY, t1);
Measurement.INSTANCE.addOperationLatency(Operation.EXECUTE_QUERY, startTime);
}
}

Expand Down

0 comments on commit 2b91bf6

Please sign in to comment.