in tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java [85:180]
public void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
Map<String, Object> returnValue = new HashMap<String, Object>();
try {
if(tajoClient == null) {
errorResponse(response, "TajoClient not initialized");
return;
}
if(action == null || action.trim().isEmpty()) {
errorResponse(response, "no action parameter.");
return;
}
if("runQuery".equals(action)) {
String query = request.getParameter("query");
if(query == null || query.trim().isEmpty()) {
errorResponse(response, "No query parameter");
return;
}
String queryRunnerId = null;
while(true) {
synchronized(queryRunners) {
queryRunnerId = "" + System.currentTimeMillis();
if(!queryRunners.containsKey(queryRunnerId)) {
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
QueryRunner queryRunner = new QueryRunner(queryRunnerId, query);
try {
queryRunner.sizeLimit = Integer.parseInt(request.getParameter("limitSize"));
} catch (java.lang.NumberFormatException nfe) {
queryRunner.sizeLimit = 1048576;
}
synchronized(queryRunners) {
queryRunners.put(queryRunnerId, queryRunner);
}
queryRunnerExecutor.submit(queryRunner);
returnValue.put("queryRunnerId", queryRunnerId);
} else if("getQueryProgress".equals(action)) {
synchronized(queryRunners) {
String queryRunnerId = request.getParameter("queryRunnerId");
QueryRunner queryRunner = queryRunners.get(queryRunnerId);
if(queryRunner == null) {
errorResponse(response, "No query info:" + queryRunnerId);
return;
}
if(queryRunner.error != null) {
errorResponse(response, queryRunner.error);
return;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
returnValue.put("progress", queryRunner.progress);
returnValue.put("startTime", df.format(queryRunner.startTime));
returnValue.put("finishTime", queryRunner.finishTime == 0 ? "-" : df.format(queryRunner.startTime));
returnValue.put("runningTime", JSPUtil.getElapsedTime(queryRunner.startTime, queryRunner.finishTime));
}
} else if("getQueryResult".equals(action)) {
synchronized(queryRunners) {
String queryRunnerId = request.getParameter("queryRunnerId");
QueryRunner queryRunner = queryRunners.get(queryRunnerId);
if(queryRunner == null) {
errorResponse(response, "No query info:" + queryRunnerId);
return;
}
if(queryRunner.error != null) {
errorResponse(response, queryRunner.error);
return;
}
returnValue.put("numOfRows", queryRunner.numOfRows);
returnValue.put("resultSize", queryRunner.resultSize);
returnValue.put("resultData", queryRunner.queryResult);
returnValue.put("resultColumns", queryRunner.columnNames);
returnValue.put("runningTime", JSPUtil.getElapsedTime(queryRunner.startTime, queryRunner.finishTime));
}
} else if("clearAllQueryRunner".equals(action)) {
synchronized(queryRunners) {
for(QueryRunner eachQueryRunner: queryRunners.values()) {
eachQueryRunner.setStop();
}
queryRunners.clear();
}
}
returnValue.put("success", "true");
writeHttpResponse(response, returnValue);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
errorResponse(response, e);
}
}