void renderPage(CharSequence source) { final List<ImageInfo> imageInfos = scanForImageInfo(source); Callable<List<ImageData>> task = new Callable<List<ImageData>>() { public List<ImageData> call() { List<ImageData> result = new ArrayList<ImageData>(); for (ImageInfo imageInfo : imageInfos) result.add(imageInfo.downloadImage()); return result; } }; Future<List<ImageData>> future = executor.submit(task); renderText(source); try { List<ImageData> imageData = future.get(); for (ImageData data : imageData) renderImage(data); } catch (InterruptedException e) { // Re-assert the thread's interrupted status Thread.currentThread().interrupt(); // We don't need the result, so cancel the task too future.cancel(true); } catch (ExecutionException e) { throw launderThrowable(e.getCause()); } }
public Integer call() { count = 0; try { File[] files = directory.listFiles(); ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>(); for (File file : files) if (file.isDirectory()) { MatchCounter counter = new MatchCounter(file, keyword); FutureTask<Integer> task = new FutureTask<Integer>(counter); results.add(task); Thread t = new Thread(task); t.start(); } else { if (search(file)) count++; } for (Future<Integer> result : results) try { count += result.get(); } catch (ExecutionException e) { e.printStackTrace(); } } catch (InterruptedException e) { } return count; }
public List<TravelQuote> getRankedTravelQuotes( TravelInfo travelInfo, Set<TravelCompany> companies, Comparator<TravelQuote> ranking, long time, TimeUnit unit) throws InterruptedException { List<QuoteTask> tasks = new ArrayList<QuoteTask>(); for (TravelCompany company : companies) tasks.add(new QuoteTask(company, travelInfo)); List<Future<TravelQuote>> futures = exec.invokeAll(tasks, time, unit); List<TravelQuote> quotes = new ArrayList<TravelQuote>(tasks.size()); Iterator<QuoteTask> taskIter = tasks.iterator(); for (Future<TravelQuote> f : futures) { QuoteTask task = taskIter.next(); try { quotes.add(f.get()); } catch (ExecutionException e) { quotes.add(task.getFailureQuote(e.getCause())); } catch (CancellationException e) { quotes.add(task.getTimeoutQuote(e)); } } Collections.sort(quotes, ranking); return quotes; }
protected void handleMapGetAsync(String[] args) { try { println(getMap().getAsync(args[1]).get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }
/** * This blocking function attempts to send the message passed in as a parameter. This {@link * AmqpsIotHubConnection} handles all calls to this method. * * <p>Only the first call to this method will result in an attempt to send. Until the message has * been sent, all other calls to this method will block. Once a message has been sent and this * method notified that it has been sent, this method will be invoked again if was previously * another call to send a message. * * <p>If a message has been passed down to the handler for sending but the message isn't sent * after a default constant number of seconds, the {@link AmqpsTransport} will set an ERROR status * code on the message and it will placed back onto the queue. * * @throws IOException If {@link AmqpsIotHubConnectionBaseHandler} has not been initialized. */ protected synchronized void send(Tuple<CompletableFuture<Boolean>, byte[], Object> message) throws IOException { if (this.state == ReactorState.CLOSED) { throw new IllegalStateException( "The AMQPS IotHub Connection is currently closed. Call open() before attempting to send a message."); } if (message != null) { if (this.inProgressMessageMap.size() >= this.maxQueueSize * 0.9) { message.V1.completeExceptionally( new Throwable("Insufficient link credit to send message.")); } else { try { // Use the content and ID fields of the input message to have the handler create and send // the message CompletableFuture<Integer> deliveryFuture = amqpsHandler.createBinaryMessage((byte[]) message.V2, message.V3); // Wait for a period of time before rejecting the message new Thread( () -> { try { Thread.sleep(DEFAULT_DELIVERY_WAIT_TIME_SECONDS * 1000); deliveryFuture.completeExceptionally( new Throwable("Default timeout exceeded before this message was sent.")); } catch (InterruptedException e) { e.printStackTrace(); } }) .start(); // Wait for the deliveryFuture to be completed, providing the delivery hash code. // When this future completes, the message has been SENT Integer deliveryHash = deliveryFuture.get(); inProgressMessageMap.put(deliveryHash, message); } catch (InterruptedException e) { e.printStackTrace(); } // The message was unable to be sent, exceptionally complete that future causing the message // to be put back on the queue. catch (ExecutionException e) { message.V1.completeExceptionally(e.getCause()); this.fail(e.getCause()); } // There was some other problem sending, exceptionally complete that future causing the // message to be put back on the queue. catch (Exception e) { if (message != null) { message.V1.completeExceptionally(e); } this.fail(e); } } } else { throw new IOException("Cannot send an unitialized message."); } }
/** * Waits for completed requests. Once the first request has been taken, the method will wait * WAIT_TIMEOUT ms longer to collect more completed requests. * * @return Collected feeds or null if the method has been interrupted during the first waiting * period. */ private List<Feed> collectCompletedRequests() { List<Feed> results = new LinkedList<Feed>(); DownloadRequester requester = DownloadRequester.getInstance(); int tasks = 0; try { DownloadRequest request = completedRequests.take(); parserService.submit(new FeedParserTask(request)); tasks++; } catch (InterruptedException e) { return null; } tasks += pollCompletedDownloads(); isCollectingRequests = true; if (requester.isDownloadingFeeds()) { // wait for completion of more downloads long startTime = System.currentTimeMillis(); long currentTime = startTime; while (requester.isDownloadingFeeds() && (currentTime - startTime) < WAIT_TIMEOUT) { try { if (BuildConfig.DEBUG) Log.d(TAG, "Waiting for " + (startTime + WAIT_TIMEOUT - currentTime) + " ms"); sleep(startTime + WAIT_TIMEOUT - currentTime); } catch (InterruptedException e) { if (BuildConfig.DEBUG) Log.d(TAG, "interrupted while waiting for more downloads"); tasks += pollCompletedDownloads(); } finally { currentTime = System.currentTimeMillis(); } } tasks += pollCompletedDownloads(); } isCollectingRequests = false; for (int i = 0; i < tasks; i++) { try { Feed f = parserService.take().get(); if (f != null) { results.add(f); } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } return results; }
@Override public void run() { if (BuildConfig.DEBUG) Log.d(TAG, "downloadCompletionThread was started"); while (!isInterrupted()) { try { Downloader downloader = downloadExecutor.take().get(); if (BuildConfig.DEBUG) Log.d(TAG, "Received 'Download Complete' - message."); removeDownload(downloader); DownloadStatus status = downloader.getResult(); boolean successful = status.isSuccessful(); final int type = status.getFeedfileType(); if (successful) { if (type == Feed.FEEDFILETYPE_FEED) { handleCompletedFeedDownload(downloader.getDownloadRequest()); } else if (type == FeedImage.FEEDFILETYPE_FEEDIMAGE) { handleCompletedImageDownload(status, downloader.getDownloadRequest()); } else if (type == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { handleCompletedFeedMediaDownload(status, downloader.getDownloadRequest()); } } else { numberOfDownloads.decrementAndGet(); if (!status.isCancelled()) { if (status.getReason() == DownloadError.ERROR_UNAUTHORIZED) { postAuthenticationNotification(downloader.getDownloadRequest()); } else if (status.getReason() == DownloadError.ERROR_HTTP_DATA_ERROR && Integer.valueOf(status.getReasonDetailed()) == HttpStatus.SC_REQUESTED_RANGE_NOT_SATISFIABLE) { Log.d(TAG, "Requested invalid range, restarting download from the beginning"); FileUtils.deleteQuietly( new File(downloader.getDownloadRequest().getDestination())); DownloadRequester.getInstance() .download(DownloadService.this, downloader.getDownloadRequest()); } else { Log.e(TAG, "Download failed"); saveDownloadStatus(status); handleFailedDownload(status, downloader.getDownloadRequest()); } } sendDownloadHandledIntent(); queryDownloadsAsync(); } } catch (InterruptedException e) { if (BuildConfig.DEBUG) Log.d(TAG, "DownloadCompletionThread was interrupted"); } catch (ExecutionException e) { e.printStackTrace(); numberOfDownloads.decrementAndGet(); } } if (BuildConfig.DEBUG) Log.d(TAG, "End of downloadCompletionThread"); }
public void setKeyspace(String keyspace) throws NoHostAvailableException { try { executeQuery( new QueryMessage("use " + keyspace, ConsistencyLevel.DEFAULT_CASSANDRA_CL), Query.DEFAULT) .get(); } catch (InterruptedException e) { // If we're interrupted, then fine, we stop waiting, but the user shouldn't complain if the // keyspace is not set. } catch (ExecutionException e) { Throwable cause = e.getCause(); // A USE query should never fail unless we cannot contact a node if (cause instanceof NoHostAvailableException) throw (NoHostAvailableException) cause; else if (cause instanceof DriverUncheckedException) throw (DriverUncheckedException) cause; else throw new DriverInternalError("Unexpected exception thrown", cause); } }
@Override public void done() { try { StringBuilder result = get(); textArea.setText(result.toString()); statusLine.setText("Done"); } catch (InterruptedException ex) { } catch (CancellationException ex) { textArea.setText(""); statusLine.setText("Cancelled"); } catch (ExecutionException ex) { statusLine.setText("" + ex.getCause()); } cancelItem.setEnabled(false); openItem.setEnabled(true); }
public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): "); String directory = in.nextLine(); System.out.print("Enter keyword (e.g. volatile): "); String keyword = in.nextLine(); MatchCounter counter = new MatchCounter(new File(directory), keyword); FutureTask<Integer> task = new FutureTask<Integer>(counter); Thread t = new Thread(task); t.start(); try { System.out.println(task.get() + " matching files."); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { } }
@Override public void run() { if (request.isDeleteOnFailure()) { if (BuildConfig.DEBUG) Log.d(TAG, "Ignoring failed download, deleteOnFailure=true"); } else { File dest = new File(request.getDestination()); if (dest.exists() && request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { Log.d(TAG, "File has been partially downloaded. Writing file url"); FeedMedia media = DBReader.getFeedMedia(DownloadService.this, request.getFeedfileId()); media.setFile_url(request.getDestination()); try { DBWriter.setFeedMedia(DownloadService.this, media).get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } }
@Override public boolean isAuthorized( @WebParam(name = "authenticationData", targetNamespace = "") List<SecretAuthenticationKey> authenticationData, @WebParam(name = "action", targetNamespace = "") Action action) throws SNAAExceptionException { if (authenticationData == null || action == null) { throw createSNAAException("Arguments must not be null!"); } Map<String, Set<SecretAuthenticationKey>> intersectionPrefixSet = getIntersectionPrefixSetSAK(authenticationData); Set<Future<Boolean>> futures = new HashSet<Future<Boolean>>(); for (String urnPrefix : intersectionPrefixSet.keySet()) { IsAuthorizedCallable authenticationCallable = new IsAuthorizedCallable( getWsnUrlFromUrnPrefix(urnPrefix), new ArrayList<SecretAuthenticationKey>(intersectionPrefixSet.get(urnPrefix)), action); Future<Boolean> future = executorService.submit(authenticationCallable); futures.add(future); } for (Future<Boolean> future : futures) { try { if (!future.get()) { return false; } } catch (InterruptedException e) { throw createSNAAException(e.getMessage()); } catch (ExecutionException e) { throw createSNAAException(e.getMessage()); } } return true; }
@Override public List<SecretAuthenticationKey> authenticate( @WebParam(name = "authenticationData", targetNamespace = "") List<AuthenticationTriple> authenticationData) throws AuthenticationExceptionException, SNAAExceptionException { Map<String, Set<AuthenticationTriple>> intersectionPrefixSet = getIntersectionPrefixSetAT(authenticationData); Set<Future<List<SecretAuthenticationKey>>> futures = new HashSet<Future<List<SecretAuthenticationKey>>>(); for (String wsEndpointUrl : intersectionPrefixSet.keySet()) { AuthenticationCallable authenticationCallable = new AuthenticationCallable( wsEndpointUrl, new ArrayList<AuthenticationTriple>(intersectionPrefixSet.get(wsEndpointUrl))); Future<List<SecretAuthenticationKey>> future = executorService.submit(authenticationCallable); futures.add(future); } List<SecretAuthenticationKey> resultSet = new LinkedList<SecretAuthenticationKey>(); for (Future<List<SecretAuthenticationKey>> future : futures) { try { resultSet.addAll(future.get()); } catch (InterruptedException e) { SNAAException exception = new SNAAException(); exception.setMessage(e.getMessage()); throw new SNAAExceptionException(e.getMessage(), exception, e); } catch (ExecutionException e) { SNAAException exception = new SNAAException(); exception.setMessage(e.getMessage()); throw new SNAAExceptionException(e.getMessage(), exception, e); } } return resultSet; }
@Override public void run() { while (isActive) { final List<Feed> feeds = collectCompletedRequests(); if (feeds == null) { continue; } if (BuildConfig.DEBUG) Log.d(TAG, "Bundling " + feeds.size() + " feeds"); for (Feed feed : feeds) { removeDuplicateImages( feed); // duplicate images have to removed because the DownloadRequester does not // accept two downloads with the same download URL yet. } // Save information of feed in DB if (dbUpdateFuture != null) { try { dbUpdateFuture.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } dbUpdateFuture = dbService.submit( new Runnable() { @Override public void run() { Feed[] savedFeeds = DBTasks.updateFeed( DownloadService.this, feeds.toArray(new Feed[feeds.size()])); for (Feed savedFeed : savedFeeds) { // Download Feed Image if provided and not downloaded if (savedFeed.getImage() != null && savedFeed.getImage().isDownloaded() == false) { if (BuildConfig.DEBUG) Log.d(TAG, "Feed has image; Downloading...."); savedFeed.getImage().setOwner(savedFeed); final Feed savedFeedRef = savedFeed; try { requester.downloadImage(DownloadService.this, savedFeedRef.getImage()); } catch (DownloadRequestException e) { e.printStackTrace(); DBWriter.addDownloadStatus( DownloadService.this, new DownloadStatus( savedFeedRef.getImage(), savedFeedRef.getImage().getHumanReadableIdentifier(), DownloadError.ERROR_REQUEST_ERROR, false, e.getMessage())); } } numberOfDownloads.decrementAndGet(); } sendDownloadHandledIntent(); queryDownloadsAsync(); } }); } if (dbUpdateFuture != null) { try { dbUpdateFuture.get(); } catch (InterruptedException e) { } catch (ExecutionException e) { e.printStackTrace(); } } if (BuildConfig.DEBUG) Log.d(TAG, "Shutting down"); }
/** {@inheritDoc} */ @Override protected DataExecutionResponse run( DataBuilderContext dataBuilderContext, DataFlowInstance dataFlowInstance, DataDelta dataDelta, DataFlow dataFlow, DataBuilderFactory builderFactory) throws DataBuilderFrameworkException, DataValidationException { CompletionService<DataContainer> completionExecutor = new ExecutorCompletionService<DataContainer>(executorService); ExecutionGraph executionGraph = dataFlow.getExecutionGraph(); DataSet dataSet = dataFlowInstance.getDataSet().accessor().copy(); // Create own copy to work with DataSetAccessor dataSetAccessor = DataSet.accessor(dataSet); dataSetAccessor.merge(dataDelta); Map<String, Data> responseData = Maps.newTreeMap(); Set<String> activeDataSet = Sets.newHashSet(); for (Data data : dataDelta.getDelta()) { activeDataSet.add(data.getData()); } List<List<DataBuilderMeta>> dependencyHierarchy = executionGraph.getDependencyHierarchy(); Set<String> newlyGeneratedData = Sets.newHashSet(); Set<DataBuilderMeta> processedBuilders = Collections.synchronizedSet(Sets.<DataBuilderMeta>newHashSet()); while (true) { for (List<DataBuilderMeta> levelBuilders : dependencyHierarchy) { List<Future<DataContainer>> dataFutures = Lists.newArrayList(); for (DataBuilderMeta builderMeta : levelBuilders) { if (processedBuilders.contains(builderMeta)) { continue; } // If there is an intersection, means some of it's inputs have changed. Reevaluate if (Sets.intersection(builderMeta.getConsumes(), activeDataSet).isEmpty()) { continue; } DataBuilder builder = builderFactory.create(builderMeta.getName()); if (!dataSetAccessor.checkForData(builder.getDataBuilderMeta().getConsumes())) { break; // No need to run others, list is topo sorted } BuilderRunner builderRunner = new BuilderRunner( dataBuilderExecutionListener, dataFlowInstance, builderMeta, dataDelta, responseData, builder, dataBuilderContext, processedBuilders, dataSet); Future<DataContainer> future = completionExecutor.submit(builderRunner); dataFutures.add(future); } // Now wait for something to complete. int listSize = dataFutures.size(); for (int i = 0; i < listSize; i++) { try { DataContainer responseContainer = completionExecutor.take().get(); Data response = responseContainer.getGeneratedData(); if (responseContainer.isHasError()) { if (null != responseContainer.getValidationException()) { throw responseContainer.getValidationException(); } throw responseContainer.getException(); } if (null != response) { dataSetAccessor.merge(response); responseData.put(response.getData(), response); activeDataSet.add(response.getData()); if (null != dataFlow.getTransients() && !dataFlow.getTransients().contains(response.getData())) { newlyGeneratedData.add(response.getData()); } } } catch (InterruptedException e) { throw new DataBuilderFrameworkException( DataBuilderFrameworkException.ErrorCode.BUILDER_EXECUTION_ERROR, "Error while waiting for error ", e); } catch (ExecutionException e) { throw new DataBuilderFrameworkException( DataBuilderFrameworkException.ErrorCode.BUILDER_EXECUTION_ERROR, "Error while waiting for error ", e.getCause()); } } } if (newlyGeneratedData.contains(dataFlow.getTargetData())) { // logger.debug("Finished running this instance of the flow. Exiting."); break; } if (newlyGeneratedData.isEmpty()) { // logger.debug("Nothing happened in this loop, exiting.."); break; } // StringBuilder stringBuilder = new StringBuilder(); // for(String data : newlyGeneratedData) { // stringBuilder.append(data + ", "); // } // logger.info("Newly generated: " + stringBuilder); activeDataSet.clear(); activeDataSet.addAll(newlyGeneratedData); newlyGeneratedData.clear(); if (!dataFlow.isLoopingEnabled()) { break; } } DataSet finalDataSet = dataSetAccessor.copy(dataFlow.getTransients()); dataFlowInstance.setDataSet(finalDataSet); return new DataExecutionResponse(responseData); }
@Override public void run() { FeedMedia media = DBReader.getFeedMedia(DownloadService.this, request.getFeedfileId()); if (media == null) { throw new IllegalStateException("Could not find downloaded media object in database"); } boolean chaptersRead = false; media.setDownloaded(true); media.setFile_url(request.getDestination()); // Get duration MediaMetadataRetriever mmr = null; try { mmr = new MediaMetadataRetriever(); mmr.setDataSource(media.getFile_url()); String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); media.setDuration(Integer.parseInt(durationStr)); if (BuildConfig.DEBUG) Log.d(TAG, "Duration of file is " + media.getDuration()); } catch (NumberFormatException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { if (mmr != null) { mmr.release(); } } if (media.getItem().getChapters() == null) { ChapterUtils.loadChaptersFromFileUrl(media); if (media.getItem().getChapters() != null) { chaptersRead = true; } } try { if (chaptersRead) { DBWriter.setFeedItem(DownloadService.this, media.getItem()).get(); } DBWriter.setFeedMedia(DownloadService.this, media).get(); if (!DBTasks.isInQueue(DownloadService.this, media.getItem().getId())) { DBWriter.addQueueItem(DownloadService.this, media.getItem().getId()).get(); } } catch (ExecutionException e) { e.printStackTrace(); status = new DownloadStatus( media, media.getEpisodeTitle(), DownloadError.ERROR_DB_ACCESS_ERROR, false, e.getMessage()); } catch (InterruptedException e) { e.printStackTrace(); status = new DownloadStatus( media, media.getEpisodeTitle(), DownloadError.ERROR_DB_ACCESS_ERROR, false, e.getMessage()); } saveDownloadStatus(status); sendDownloadHandledIntent(); numberOfDownloads.decrementAndGet(); queryDownloadsAsync(); }
@SuppressWarnings({"unchecked"}) public final void execute(final Callback callback) throws MojoExecutionException, MojoFailureException { if (!skip) { if (header == null) { warn("No header file specified to check for license"); return; } if (!strictCheck) { warn( "Property 'strictCheck' is not enabled. Please consider adding <strictCheck>true</strictCheck> in your pom.xml file."); warn("See http://mycila.github.io/license-maven-plugin for more information."); } finder = new ResourceFinder(basedir); try { finder.setCompileClassPath(project.getCompileClasspathElements()); } catch (DependencyResolutionRequiredException e) { throw new MojoExecutionException(e.getMessage(), e); } finder.setPluginClassPath(getClass().getClassLoader()); final Header h = new Header(finder.findResource(this.header), encoding, headerSections); debug("Header %s:\n%s", h.getLocation(), h); if (this.validHeaders == null) { this.validHeaders = new String[0]; } final List<Header> validHeaders = new ArrayList<Header>(this.validHeaders.length); for (String validHeader : this.validHeaders) { validHeaders.add(new Header(finder.findResource(validHeader), encoding, headerSections)); } final List<PropertiesProvider> propertiesProviders = new LinkedList<PropertiesProvider>(); for (PropertiesProvider provider : ServiceLoader.load( PropertiesProvider.class, Thread.currentThread().getContextClassLoader())) { propertiesProviders.add(provider); } final DocumentPropertiesLoader propertiesLoader = new DocumentPropertiesLoader() { @Override public Properties load(Document document) { Properties props = new Properties(); for (Map.Entry<String, String> entry : mergeProperties(document).entrySet()) { if (entry.getValue() != null) { props.setProperty(entry.getKey(), entry.getValue()); } else { props.remove(entry.getKey()); } } for (PropertiesProvider provider : propertiesProviders) { try { final Map<String, String> providerProperties = provider.getAdditionalProperties(AbstractLicenseMojo.this, props, document); if (getLog().isDebugEnabled()) { getLog() .debug( "provider: " + provider.getClass() + " brought new properties\n" + providerProperties); } for (Map.Entry<String, String> entry : providerProperties.entrySet()) { if (entry.getValue() != null) { props.setProperty(entry.getKey(), entry.getValue()); } else { props.remove(entry.getKey()); } } } catch (Exception e) { getLog().warn("failure occured while calling " + provider.getClass(), e); } } return props; } }; final DocumentFactory documentFactory = new DocumentFactory( basedir, buildMapping(), buildHeaderDefinitions(), encoding, keywords, propertiesLoader); int nThreads = (int) (Runtime.getRuntime().availableProcessors() * concurrencyFactor); ExecutorService executorService = Executors.newFixedThreadPool(nThreads); CompletionService completionService = new ExecutorCompletionService(executorService); int count = 0; debug("Number of execution threads: %s", nThreads); try { for (final String file : listSelectedFiles()) { completionService.submit( new Runnable() { @Override public void run() { Document document = documentFactory.createDocuments(file); debug( "Selected file: %s [header style: %s]", document.getFilePath(), document.getHeaderDefinition()); if (document.isNotSupported()) { callback.onUnknownFile(document, h); } else if (document.is(h)) { debug("Skipping header file: %s", document.getFilePath()); } else if (document.hasHeader(h, strictCheck)) { callback.onExistingHeader(document, h); } else { boolean headerFound = false; for (Header validHeader : validHeaders) { if (headerFound = document.hasHeader(validHeader, strictCheck)) { callback.onExistingHeader(document, h); break; } } if (!headerFound) { callback.onHeaderNotFound(document, h); } } } }, null); count++; } while (count-- > 0) { try { completionService.take().get(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { Throwable cause = e.getCause(); if (cause instanceof Error) { throw (Error) cause; } if (cause instanceof MojoExecutionException) { throw (MojoExecutionException) cause; } if (cause instanceof MojoFailureException) { throw (MojoFailureException) cause; } if (cause instanceof RuntimeException) { throw (RuntimeException) cause; } throw new RuntimeException(cause.getMessage(), cause); } } } finally { executorService.shutdownNow(); } } }
public Object down(Event evt) { switch (evt.getType()) { case ExecutorEvent.TASK_SUBMIT: Runnable runnable = evt.getArg(); // We are limited to a number of concurrent request id's // equal to 2^63-1. This is quite large and if it // overflows it will still be positive long requestId = Math.abs(counter.getAndIncrement()); if (requestId == Long.MIN_VALUE) { // TODO: need to fix this it isn't safe for concurrent modifications counter.set(0); requestId = Math.abs(counter.getAndIncrement()); } // Need to make sure to put the requestId in our map before // adding the runnable to awaiting consumer in case if // coordinator sent a consumer found and their original task // is no longer around // see https://issues.jboss.org/browse/JGRP-1744 _requestId.put(runnable, requestId); _awaitingConsumer.add(runnable); sendToCoordinator(RUN_REQUEST, requestId, local_addr); break; case ExecutorEvent.CONSUMER_READY: Thread currentThread = Thread.currentThread(); long threadId = currentThread.getId(); _consumerId.put(threadId, PRESENT); try { for (; ; ) { CyclicBarrier barrier = new CyclicBarrier(2); _taskBarriers.put(threadId, barrier); // We only send to the coordinator that we are ready after // making the barrier, wait for request to come and let // us free sendToCoordinator(Type.CONSUMER_READY, threadId, local_addr); try { barrier.await(); break; } catch (BrokenBarrierException e) { if (log.isDebugEnabled()) log.debug( "Producer timed out before we picked up" + " the task, have to tell coordinator" + " we are still good."); } } // This should always be non nullable since the latch // was freed runnable = _tasks.remove(threadId); _runnableThreads.put(runnable, currentThread); return runnable; } catch (InterruptedException e) { if (log.isDebugEnabled()) log.debug("Consumer " + threadId + " stopped via interrupt"); sendToCoordinator(Type.CONSUMER_UNREADY, threadId, local_addr); Thread.currentThread().interrupt(); } finally { // Make sure the barriers are cleaned up as well _taskBarriers.remove(threadId); _consumerId.remove(threadId); } break; case ExecutorEvent.TASK_COMPLETE: Object arg = evt.getArg(); Throwable throwable = null; if (arg instanceof Object[]) { Object[] array = (Object[]) arg; runnable = (Runnable) array[0]; throwable = (Throwable) array[1]; } else { runnable = (Runnable) arg; } Owner owner = _running.remove(runnable); // This won't remove anything if owner doesn't come back _runnableThreads.remove(runnable); Object value = null; boolean exception = false; if (throwable != null) { // InterruptedException is special telling us that // we interrupted the thread while waiting but still got // a task therefore we have to reject it. if (throwable instanceof InterruptedException) { if (log.isDebugEnabled()) log.debug("Run rejected due to interrupted exception returned"); sendRequest(owner.address, Type.RUN_REJECTED, owner.requestId, null); break; } value = throwable; exception = true; } else if (runnable instanceof RunnableFuture<?>) { RunnableFuture<?> future = (RunnableFuture<?>) runnable; boolean interrupted = false; boolean gotValue = false; // We have the value, before we interrupt at least get it! while (!gotValue) { try { value = future.get(); gotValue = true; } catch (InterruptedException e) { interrupted = true; } catch (ExecutionException e) { value = e.getCause(); exception = true; gotValue = true; } } if (interrupted) { Thread.currentThread().interrupt(); } } if (owner != null) { final Type type; final Object valueToSend; if (value == null) { type = Type.RESULT_SUCCESS; valueToSend = value; } // Both serializable values and exceptions would go in here else if (value instanceof Serializable || value instanceof Externalizable || value instanceof Streamable) { type = exception ? Type.RESULT_EXCEPTION : Type.RESULT_SUCCESS; valueToSend = value; } // This would happen if the value wasn't serializable, // so we have to send back to the client that the class // wasn't serializable else { type = Type.RESULT_EXCEPTION; valueToSend = new NotSerializableException(value.getClass().getName()); } if (local_addr.equals(owner.getAddress())) { if (log.isTraceEnabled()) log.trace( "[redirect] <--> [" + local_addr + "] " + type.name() + " [" + value + (owner.requestId != -1 ? " request id: " + owner.requestId : "") + "]"); if (type == Type.RESULT_SUCCESS) { handleValueResponse(local_addr, owner.requestId, valueToSend); } else if (type == Type.RESULT_EXCEPTION) { handleExceptionResponse(local_addr, owner.requestId, (Throwable) valueToSend); } } else { sendRequest(owner.getAddress(), type, owner.requestId, valueToSend); } } else { if (log.isTraceEnabled()) { log.trace("Could not return result - most likely because it was interrupted"); } } break; case ExecutorEvent.TASK_CANCEL: Object[] array = evt.getArg(); runnable = (Runnable) array[0]; if (_awaitingConsumer.remove(runnable)) { _requestId.remove(runnable); ExecutorNotification notification = notifiers.remove(runnable); if (notification != null) { notification.interrupted(runnable); } if (log.isTraceEnabled()) log.trace("Cancelled task " + runnable + " before it was picked up"); return Boolean.TRUE; } // This is guaranteed to not be null so don't take cost of auto unboxing else if (array[1] == Boolean.TRUE) { owner = removeKeyForValue(_awaitingReturn, runnable); if (owner != null) { Long requestIdValue = _requestId.remove(runnable); // We only cancel if the requestId is still available // this means the result hasn't been returned yet and // we still have a chance to interrupt if (requestIdValue != null) { if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); } sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null); } } else { if (log.isTraceEnabled()) log.warn("Couldn't interrupt server task: " + runnable); } ExecutorNotification notification = notifiers.remove(runnable); if (notification != null) { notification.interrupted(runnable); } return Boolean.TRUE; } else { return Boolean.FALSE; } case ExecutorEvent.ALL_TASK_CANCEL: array = evt.getArg(); // This is a RunnableFuture<?> so this cast is okay @SuppressWarnings("unchecked") Set<Runnable> runnables = (Set<Runnable>) array[0]; Boolean booleanValue = (Boolean) array[1]; List<Runnable> notRan = new ArrayList<>(); for (Runnable cancelRunnable : runnables) { // Removed from the consumer if (!_awaitingConsumer.remove(cancelRunnable) && booleanValue == Boolean.TRUE) { synchronized (_awaitingReturn) { owner = removeKeyForValue(_awaitingReturn, cancelRunnable); if (owner != null) { Long requestIdValue = _requestId.remove(cancelRunnable); if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); } sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null); } ExecutorNotification notification = notifiers.remove(cancelRunnable); if (notification != null) { log.trace("Notifying listener"); notification.interrupted(cancelRunnable); } } } else { _requestId.remove(cancelRunnable); notRan.add(cancelRunnable); } } return notRan; case Event.SET_LOCAL_ADDRESS: local_addr = evt.getArg(); break; case Event.VIEW_CHANGE: handleView(evt.getArg()); break; } return down_prot.down(evt); }
private SpecificationTestCasesListener<T> run( final URL[] classpath, final Collection<TestCase> failures, ClassLoader unitTestClassLoader) { final SpecificationTestCasesListener<T> listener = new SpecificationTestCasesListener<>(runtimeValues); // create the classpath for JPF String stringClassPath = createClassPath(classpath); String mainClass = "nopol.repair.NopolTestRunner"; // TestExecutorProcessor.createMainTestClass(spoon, mainClass); List<TestCase> passedTest = new ArrayList<>(failures.size()); Iterator<TestCase> iterator = failures.iterator(); while (iterator.hasNext()) { TestCase testCase = iterator.next(); logger.debug("SYMBOLIC EXECUTION on " + sourceLocation + " Test " + testCase); String[] args = new String[1]; args[0] = testCase.className() + "." + testCase.testName(); Config conf = JPFUtil.createConfig( args, mainClass, stringClassPath, outputSourceFile.getAbsolutePath()); final JPF jpf = new JPF(conf); // executes JPF JPFListener jpfListener = new JPFListener(); jpf.addSearchListener(jpfListener); ExecutorService executor = Executors.newFixedThreadPool(1); Future<?> future = executor.submit( new Runnable() { @Override public void run() { jpf.run(); } }); executor.shutdown(); try { future.get(60, TimeUnit.SECONDS); } catch (InterruptedException e) { continue; } catch (ExecutionException e) { e.printStackTrace(); continue; } catch (TimeoutException e) { future.cancel(true); continue; } // get the JPF result Object result = jpfListener.getResult(); if (result == null) { continue; } logger.debug( "SYMBOLIC VALUE on " + sourceLocation + " for Test " + testCase + " Value: " + result); // collect runtime boolean passed = executeTestAndCollectRuntimeValues(result, testCase, unitTestClassLoader, listener); if (passed) { this.find = true; TestSuiteExecution.runTestCases(failures, unitTestClassLoader, listener); if (!passedTest.contains(testCase)) { passedTest.add(testCase); } if (passedTest.size() == failures.size()) { break; } } } return listener; }
@SuppressWarnings({"unchecked", "boxing", "rawtypes"}) private DiscoveryManager getRemoteProxyToDiscoveryManager(final String ip, final int port) { final String address = ip + ":" + port; final int timeout = 500; // 500 ms RemoteAPIImpl if need detailed version... this.logger.status("remoteproxytodiscovery/start", "ip", ip, "port", port); final DiscoveryManager newClient = Proxies.newClient( EXPORT_NAME, address, getClass().getClassLoader(), DiscoveryManager.class); // Execute collection asynchronously (TODO: cache pool usage could be improved) final ExecutorService cachePool = Executors.newCachedThreadPool(RemoteDiscoveryImpl.threadFactory); final ExecutorCompletionService<String> ecs = new ExecutorCompletionService(cachePool); final Future<String> future = ecs.submit( new Callable<String>() { public String call() throws Exception { return AccessController.doPrivileged( new PrivilegedAction<String>() { public String run() { return newClient.ping(667) == 667 ? "OK" : null; } }); } }); // Wait at most half a second (TODO: Make this configurable) try { final String string = future.get(timeout, TimeUnit.MILLISECONDS); if (string == null) return null; return newClient; } catch (final InterruptedException e) { this.logger.status("remoteproxytodiscovery/exception/interrupted", "message", e.getMessage()); e.printStackTrace(); } catch (final ExecutionException e) { this.logger.status( "remoteproxytodiscovery/exception/executionexception", "message", e.getMessage()); } catch (final TimeoutException e) { this.logger.status( "remoteproxytodiscovery/exception/timeoutexception", "message", e.getMessage()); } catch (final SecurityException e) { this.logger.status( "remoteproxytodiscovery/exception/securityexception", "message", e.getMessage()); e.printStackTrace(); } finally { AccessController.doPrivileged( new PrivilegedAction<Object>() { public Object run() { future.cancel(true); cachePool.shutdownNow(); return null; } }); this.logger.status("remoteproxytodiscovery/end"); } this.logger.status("remoteproxytodiscovery/end"); return null; }