use of org.apache.hyracks.api.job.JobId in project asterixdb by apache.
the class NodeManager method removeDeadNodes.
@Override
public Pair<Collection<String>, Collection<JobId>> removeDeadNodes() throws HyracksException {
Set<String> deadNodes = new HashSet<>();
Set<JobId> affectedJobIds = new HashSet<>();
Iterator<Map.Entry<String, NodeControllerState>> nodeIterator = nodeRegistry.entrySet().iterator();
while (nodeIterator.hasNext()) {
Map.Entry<String, NodeControllerState> entry = nodeIterator.next();
String nodeId = entry.getKey();
NodeControllerState state = entry.getValue();
if (state.incrementLastHeartbeatDuration() >= ccConfig.getHeartbeatMaxMisses()) {
deadNodes.add(nodeId);
affectedJobIds.addAll(state.getActiveJobIds());
// Removes the node from node map.
nodeIterator.remove();
// Removes the node from IP map.
removeNodeFromIpAddressMap(nodeId, state);
// Updates the cluster capacity.
resourceManager.update(nodeId, new NodeCapacity(0L, 0));
LOGGER.info(entry.getKey() + " considered dead");
}
}
return Pair.of(deadNodes, affectedJobIds);
}
use of org.apache.hyracks.api.job.JobId in project asterixdb by apache.
the class NCQueryServiceServlet method executeStatement.
@Override
protected void executeStatement(String statementsText, SessionOutput sessionOutput, IStatementExecutor.ResultDelivery delivery, IStatementExecutor.Stats stats, RequestParameters param, String handleUrl, long[] outExecStartEnd) throws Exception {
// Running on NC -> send 'execute' message to CC
INCServiceContext ncCtx = (INCServiceContext) serviceCtx;
INCMessageBroker ncMb = (INCMessageBroker) ncCtx.getMessageBroker();
IStatementExecutor.ResultDelivery ccDelivery = delivery == IStatementExecutor.ResultDelivery.IMMEDIATE ? IStatementExecutor.ResultDelivery.DEFERRED : delivery;
ExecuteStatementResponseMessage responseMsg;
MessageFuture responseFuture = ncMb.registerMessageFuture();
try {
ExecuteStatementRequestMessage requestMsg = new ExecuteStatementRequestMessage(ncCtx.getNodeId(), responseFuture.getFutureId(), queryLanguage, statementsText, sessionOutput.config(), ccDelivery, param.clientContextID, handleUrl);
outExecStartEnd[0] = System.nanoTime();
ncMb.sendMessageToCC(requestMsg);
responseMsg = (ExecuteStatementResponseMessage) responseFuture.get(ExecuteStatementResponseMessage.DEFAULT_TIMEOUT_MILLIS, java.util.concurrent.TimeUnit.MILLISECONDS);
outExecStartEnd[1] = System.nanoTime();
} finally {
ncMb.deregisterMessageFuture(responseFuture.getFutureId());
}
Throwable err = responseMsg.getError();
if (err != null) {
if (err instanceof Error) {
throw (Error) err;
} else if (err instanceof Exception) {
throw (Exception) err;
} else {
throw new Exception(err.toString(), err);
}
}
IStatementExecutor.ResultMetadata resultMetadata = responseMsg.getMetadata();
if (delivery == IStatementExecutor.ResultDelivery.IMMEDIATE && !resultMetadata.getResultSets().isEmpty()) {
for (Triple<JobId, ResultSetId, ARecordType> rsmd : resultMetadata.getResultSets()) {
ResultReader resultReader = new ResultReader(getHyracksDataset(), rsmd.getLeft(), rsmd.getMiddle());
ResultUtil.printResults(appCtx, resultReader, sessionOutput, stats, rsmd.getRight());
}
} else {
sessionOutput.out().append(responseMsg.getResult());
}
}
use of org.apache.hyracks.api.job.JobId in project asterixdb by apache.
the class APIFramework method executeJobArray.
public void executeJobArray(IHyracksClientConnection hcc, Job[] jobs, PrintWriter out) throws Exception {
for (Job job : jobs) {
job.getJobSpec().setMaxReattempts(0);
long startTime = System.currentTimeMillis();
try {
JobId jobId = hcc.startJob(job.getJobSpec());
if (job.getSubmissionMode() == SubmissionMode.ASYNCHRONOUS) {
continue;
}
hcc.waitForCompletion(jobId);
} catch (Exception e) {
e.printStackTrace();
continue;
}
long endTime = System.currentTimeMillis();
double duration = (endTime - startTime) / 1000.00;
out.println("<pre>Duration: " + duration + " sec</pre>");
}
}
use of org.apache.hyracks.api.job.JobId in project asterixdb by apache.
the class QueryCancellationServlet method delete.
@Override
protected void delete(IServletRequest request, IServletResponse response) throws IOException {
// gets the parameter client_context_id from the request.
String clientContextId = request.getParameter(CLIENT_CONTEXT_ID);
if (clientContextId == null) {
response.setStatus(HttpResponseStatus.BAD_REQUEST);
return;
}
// Retrieves the corresponding Hyracks job id.
IStatementExecutorContext runningQueries = (IStatementExecutorContext) ctx.get(ServletConstants.RUNNING_QUERIES_ATTR);
IHyracksClientConnection hcc = (IHyracksClientConnection) ctx.get(ServletConstants.HYRACKS_CONNECTION_ATTR);
JobId jobId = runningQueries.getJobIdFromClientContextId(clientContextId);
if (jobId == null) {
// response: NOT FOUND
response.setStatus(HttpResponseStatus.NOT_FOUND);
return;
}
try {
// Cancels the on-going job.
hcc.cancelJob(jobId);
// Removes the cancelled query from the map activeQueries.
runningQueries.removeJobIdFromClientContextId(clientContextId);
// response: OK
response.setStatus(HttpResponseStatus.OK);
} catch (Exception e) {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
// response: INTERNAL SERVER ERROR
response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
}
}
use of org.apache.hyracks.api.job.JobId in project asterixdb by apache.
the class QueryTranslator method createAndRunJob.
private static void createAndRunJob(IHyracksClientConnection hcc, Mutable<JobId> jId, IStatementCompiler compiler, IMetadataLocker locker, ResultDelivery resultDelivery, IResultPrinter printer, String clientContextId, IStatementExecutorContext ctx) throws Exception {
locker.lock();
try {
final JobSpecification jobSpec = compiler.compile();
if (jobSpec == null) {
return;
}
final JobId jobId = JobUtils.runJob(hcc, jobSpec, false);
if (ctx != null && clientContextId != null) {
// Adds the running job into the context.
ctx.put(clientContextId, jobId);
}
if (jId != null) {
jId.setValue(jobId);
}
if (ResultDelivery.ASYNC == resultDelivery) {
printer.print(jobId);
hcc.waitForCompletion(jobId);
} else {
hcc.waitForCompletion(jobId);
printer.print(jobId);
}
} finally {
locker.unlock();
// No matter the job succeeds or fails, removes it into the context.
if (ctx != null && clientContextId != null) {
ctx.removeJobIdFromClientContextId(clientContextId);
}
}
}
Aggregations