public Serializable serializeResult(final AnalysisResultFuture resultFuture, final String slaveJobId) { try { // wait for result to be ready resultFuture.await(); final Serializable resultObject; if (resultFuture.isSuccessful()) { resultObject = new SimpleAnalysisResult(resultFuture.getResultMap()); } else { resultObject = new ArrayList<>(resultFuture.getErrors()); } return resultObject; } finally { if (slaveJobId != null) { _runningJobs.remove(slaveJobId); } } }
@Override public boolean isSuccessful() { await(); for (final AnalysisResultFuture result : _results) { if (result.isErrornous()) { return false; } } return _reductionErrors.isEmpty(); }
public void cancelIfRunning() { final javax.swing.SwingWorker.StateValue state = getState(); switch (state) { case STARTED: case DONE: try { final AnalysisResultFuture resultFuture = get(2, TimeUnit.SECONDS); if (!resultFuture.isDone()) { resultFuture.cancel(); } } catch (final Exception e) { logger.warn("Failed to cancel job", e); } break; case PENDING: logger.info("SwingWorker hasn't started yet - cancelIfRunning() invocation disregarded"); break; default: throw new IllegalArgumentException(); } } }
/** * Spawns a new thread for awaiting the result future (which will force the * reducer to inform about the progress). * * @param job * @param analysisJobMetrics * @param resultFuture */ private void awaitAndInformListener(final AnalysisJob job, final AnalysisJobMetrics analysisJobMetrics, final RowProcessingMetrics rowProcessingMetrics, final AnalysisResultFuture resultFuture) { SharedExecutorService.get().execute(() -> { resultFuture.await(); if (resultFuture.isSuccessful()) { _analysisListener.jobSuccess(job, analysisJobMetrics); } }); }
final AnalysisResultFuture resultFuture = runner.run(previewJob.analysisJobBuilder.toAnalysisJob()); resultFuture.await(); if (resultFuture.isErrornous()) { final List<Throwable> errors = resultFuture.getErrors(); final Throwable firstError = errors.get(0); logger.error("Error occurred while running preview data job: {}", firstError.getMessage()); resultFuture.getResults(PreviewTransformedDataAnalyzer.class); assert results.size() == 1;
if (resultFuture.isErrornous()) { throw resultFuture.getErrors().get(0); final PreviewTransformedDataAnalyzer result = (PreviewTransformedDataAnalyzer) resultFuture.getResults().get(0);
final AnalysisResultFuture resultFuture = runner.run(analysisJobBuilder.toAnalysisJob()); resultFuture.await(); if (resultFuture.isSuccessful()) { final CliOutputType outputType = _arguments.getOutputType(); final AnalysisResultWriter writer = outputType.createWriter(); write("------"); final List<Throwable> errors = resultFuture.getErrors(); write(errors.size() + " error(s) occurred while executing the job:");
if (result.isErrornous()) { logger.error("Encountered errorneous slave result. Result reduction will stop. Result={}", result); final List<Throwable> errors = result.getErrors(); if (!errors.isEmpty()) { final Throwable firstError = errors.get(0); for (final AnalysisResultFuture result : results) { final Map<ComponentJob, AnalyzerResult> slaveResultMap = result.getResultMap(); final List<AnalyzerJob> slaveAnalyzerJobs = CollectionUtils2.filterOnClass(slaveResultMap.keySet(), AnalyzerJob.class); final AnalyzerResult analyzerResult = result.getResult(slaveAnalyzerJob); slaveResults.add(analyzerResult);
@Override public void await() { for (final AnalysisResultFuture result : _results) { result.await(); } if (_resultMap.isEmpty()) { synchronized (this) { if (_resultMap.isEmpty() && _reductionErrors.isEmpty()) { _reducer.reduce(_results, _resultMap, _reductionErrors); } } } }
/** * Cancels a slave job, referred by it's id. * * @param slaveJobId * @return whether or not the job was (found and) cancelled. */ public boolean cancelJob(final String slaveJobId) { final AnalysisResultFuture resultFuture = _runningJobs.remove(slaveJobId); if (resultFuture != null) { resultFuture.cancel(); return true; } return false; }
@Override public List<Throwable> getErrors() { final List<Throwable> errors = new ArrayList<>(); for (final AnalysisResultFuture result : _results) { final List<Throwable> slaveErrors = result.getErrors(); if (slaveErrors != null) { errors.addAll(slaveErrors); } } errors.addAll(_reductionErrors); return errors; }
@Override public boolean isDone() { for (final AnalysisResultFuture result : _results) { if (!result.isDone()) { return false; } } return true; }
if (resultFuture.isErrornous()) { throw resultFuture.getErrors().get(0); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final List<AnalyzerResult> results = resultFuture.getResults(); for (final AnalyzerResult analyzerResult : results) { final JComponent renderedResult =
@Override public void await(final long timeout, final TimeUnit timeUnit) { final long offsetMillis = System.currentTimeMillis(); final long millisToWait = timeUnit.convert(timeout, TimeUnit.MILLISECONDS); for (final AnalysisResultFuture result : _results) { if (!isDone()) { result.await(timeout, TimeUnit.MILLISECONDS); final long currentMillis = System.currentTimeMillis(); final long duration = currentMillis - offsetMillis; if (duration >= millisToWait) { return; } } } }
@Override public void cancel() { if (isDone()) { // too late to cancel return; } if (!_cancelled) { for (final AnalysisResultFuture result : _results) { result.cancel(); } _cancelled = true; } }
final AnalysisResultFuture result = sparkAnalysisRunner.run(); result.await();
@Override public boolean cancelJob(TenantContext tenantContext, ExecutionLog execution) { final AnalysisResultFuture resultFuture = getRunningJob(tenantContext, execution); if (resultFuture == null) { logger.info("cancelJob(...) invoked but job not found: {}, {}", tenantContext, execution); return false; } try { logger.info("Invoking cancel on job: {}, {}", tenantContext, execution); resultFuture.cancel(); return true; } catch (Exception e) { logger.warn("Unexpected exception thrown while cancelling job: " + tenantContext + ", " + execution, e); return false; } }
resultFuture.await(); } finally { removeRunningJob(tenantContext, execution);