List of usage examples for com.google.common.util.concurrent ListeningExecutorService submit
@Override ListenableFuture<?> submit(Runnable task);
From source file:com.facebook.buck.apple.project_generator.WorkspaceAndProjectGenerator.java
private void generateProject(final Map<Path, ProjectGenerator> projectGenerators, ListeningExecutorService listeningExecutorService, WorkspaceGenerator workspaceGenerator, ImmutableSet<BuildTarget> targetsInRequiredProjects, ImmutableMultimap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder, ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder, final Optional<BuildTarget> targetToBuildWithBuck) throws IOException, InterruptedException { ImmutableMultimap.Builder<Cell, BuildTarget> projectCellToBuildTargetsBuilder = ImmutableMultimap.builder(); for (TargetNode<?, ?> targetNode : projectGraph.getNodes()) { BuildTarget buildTarget = targetNode.getBuildTarget(); projectCellToBuildTargetsBuilder.put(rootCell.getCell(buildTarget), buildTarget); }//from ww w.jav a 2s. co m ImmutableMultimap<Cell, BuildTarget> projectCellToBuildTargets = projectCellToBuildTargetsBuilder.build(); List<ListenableFuture<GenerationResult>> projectGeneratorFutures = new ArrayList<>(); for (final Cell projectCell : projectCellToBuildTargets.keySet()) { ImmutableMultimap.Builder<Path, BuildTarget> projectDirectoryToBuildTargetsBuilder = ImmutableMultimap .builder(); final ImmutableSet<BuildTarget> cellRules = ImmutableSet .copyOf(projectCellToBuildTargets.get(projectCell)); for (BuildTarget buildTarget : cellRules) { projectDirectoryToBuildTargetsBuilder.put(buildTarget.getBasePath(), buildTarget); } ImmutableMultimap<Path, BuildTarget> projectDirectoryToBuildTargets = projectDirectoryToBuildTargetsBuilder .build(); final Path relativeTargetCell = rootCell.getRoot().relativize(projectCell.getRoot()); for (final Path projectDirectory : projectDirectoryToBuildTargets.keySet()) { final ImmutableSet<BuildTarget> rules = filterRulesForProjectDirectory(projectGraph, ImmutableSet.copyOf(projectDirectoryToBuildTargets.get(projectDirectory))); if (Sets.intersection(targetsInRequiredProjects, rules).isEmpty()) { continue; } projectGeneratorFutures.add(listeningExecutorService.submit(() -> { GenerationResult result = generateProjectForDirectory(projectGenerators, targetToBuildWithBuck, projectCell, projectDirectory, rules); // convert the projectPath to relative to the target cell here result = GenerationResult.of(relativeTargetCell.resolve(result.getProjectPath()), result.isProjectGenerated(), result.getRequiredBuildTargets(), result.getBuildTargetToGeneratedTargetMap()); return result; })); } } List<GenerationResult> generationResults; try { generationResults = Futures.allAsList(projectGeneratorFutures).get(); } catch (ExecutionException e) { Throwables.propagateIfInstanceOf(e.getCause(), IOException.class); Throwables.propagateIfPossible(e.getCause()); throw new IllegalStateException("Unexpected exception: ", e); } for (GenerationResult result : generationResults) { if (!result.isProjectGenerated()) { continue; } workspaceGenerator.addFilePath(result.getProjectPath()); processGenerationResult(buildTargetToPbxTargetMapBuilder, targetToProjectPathMapBuilder, result); } }
From source file:com.facebook.buck.features.apple.project.WorkspaceAndProjectGenerator.java
private void generateProject(Map<Path, ProjectGenerator> projectGenerators, ListeningExecutorService listeningExecutorService, WorkspaceGenerator workspaceGenerator, ImmutableSet<BuildTarget> targetsInRequiredProjects, ImmutableSetMultimap.Builder<PBXProject, PBXTarget> generatedProjectToPbxTargetsBuilder, ImmutableMap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder, ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder) throws IOException, InterruptedException { ImmutableMultimap.Builder<Cell, BuildTarget> projectCellToBuildTargetsBuilder = ImmutableMultimap.builder(); for (TargetNode<?> targetNode : projectGraph.getNodes()) { BuildTarget buildTarget = targetNode.getBuildTarget(); projectCellToBuildTargetsBuilder.put(rootCell.getCell(buildTarget), buildTarget); }// w w w.j a v a 2s . c o m ImmutableMultimap<Cell, BuildTarget> projectCellToBuildTargets = projectCellToBuildTargetsBuilder.build(); List<ListenableFuture<GenerationResult>> projectGeneratorFutures = new ArrayList<>(); for (Cell projectCell : projectCellToBuildTargets.keySet()) { ImmutableMultimap.Builder<Path, BuildTarget> projectDirectoryToBuildTargetsBuilder = ImmutableMultimap .builder(); ImmutableSet<BuildTarget> cellRules = ImmutableSet.copyOf(projectCellToBuildTargets.get(projectCell)); for (BuildTarget buildTarget : cellRules) { projectDirectoryToBuildTargetsBuilder.put(buildTarget.getBasePath(), buildTarget); } ImmutableMultimap<Path, BuildTarget> projectDirectoryToBuildTargets = projectDirectoryToBuildTargetsBuilder .build(); Path relativeTargetCell = rootCell.getRoot().relativize(projectCell.getRoot()); for (Path projectDirectory : projectDirectoryToBuildTargets.keySet()) { ImmutableSet<BuildTarget> rules = filterRulesForProjectDirectory(projectGraph, ImmutableSet.copyOf(projectDirectoryToBuildTargets.get(projectDirectory))); if (Sets.intersection(targetsInRequiredProjects, rules).isEmpty()) { continue; } boolean isMainProject = workspaceArguments.getSrcTarget().isPresent() && rules.contains(workspaceArguments.getSrcTarget().get()); projectGeneratorFutures.add(listeningExecutorService.submit(() -> { GenerationResult result = generateProjectForDirectory(projectGenerators, projectCell, projectDirectory, rules, isMainProject, targetsInRequiredProjects); // convert the projectPath to relative to the target cell here result = GenerationResult.of(relativeTargetCell.resolve(result.getProjectPath()), result.isProjectGenerated(), result.getRequiredBuildTargets(), result.getXcconfigPaths(), result.getFilesToCopyInXcode(), result.getBuildTargetToGeneratedTargetMap(), result.getGeneratedProjectToPbxTargets()); return result; })); } } List<GenerationResult> generationResults; try { generationResults = Futures.allAsList(projectGeneratorFutures).get(); } catch (ExecutionException e) { Throwables.throwIfInstanceOf(e.getCause(), IOException.class); Throwables.throwIfUnchecked(e.getCause()); throw new IllegalStateException("Unexpected exception: ", e); } for (GenerationResult result : generationResults) { if (!result.isProjectGenerated()) { continue; } workspaceGenerator.addFilePath(result.getProjectPath()); processGenerationResult(generatedProjectToPbxTargetsBuilder, buildTargetToPbxTargetMapBuilder, targetToProjectPathMapBuilder, result); } }
From source file:com.facebook.buck.distributed.build_client.BuildPhase.java
@SuppressWarnings("CheckReturnValue") // submit result is not used private void runLocalCoordinatorAsync(ListeningExecutorService executorService, StampedeId stampedeId, InvocationInfo invocationInfo,//ww w . j a va2 s. com ListenableFuture<ParallelRuleKeyCalculator<RuleKey>> localRuleKeyCalculator) { Preconditions.checkState(cachingBuildEngineDelegate.isPresent()); DistBuildConfig distBuildConfig = new DistBuildConfig(buildExecutorArgs.getBuckConfig()); ListenableFuture<DelegateAndGraphs> delegateAndGraphs = Futures.immediateFuture( DelegateAndGraphs.builder().setActionGraphAndBuilder(buildGraphs.getActionGraphAndBuilder()) .setCachingBuildEngineDelegate(cachingBuildEngineDelegate.get()) .setTargetGraph(buildGraphs.getTargetGraphForDistributedBuild().getTargetGraph()).build()); CoordinatorBuildRuleEventsPublisher finishedRulePublisher = new CoordinatorBuildRuleEventsPublisher() { @Override public void updateCoordinatorBuildProgress(CoordinatorBuildProgress progress) { consoleEventsDispatcher.postDistBuildProgressEvent(progress); } @Override public void createBuildRuleStartedEvents(ImmutableList<String> startedTargets) { for (String target : startedTargets) { buildRuleEventManager.recordBuildRuleStartedEvent(target); } } @Override public void createBuildRuleCompletionEvents(ImmutableList<String> finishedTargets) { long currentTimeMillis = clock.currentTimeMillis(); for (String target : finishedTargets) { buildRuleEventManager.recordBuildRuleFinishedEvent(currentTimeMillis, target); } } @Override public void createMostBuildRulesCompletedEvent() { buildRuleEventManager.mostBuildRulesFinishedEventReceived(); } @Override public void createBuildRuleUnlockedEvents(ImmutableList<String> unlockedTargets) { for (String target : unlockedTargets) { buildRuleEventManager.recordBuildRuleUnlockedEvent(target); } } }; CoordinatorModeRunner coordinator = MultiSlaveBuildModeRunnerFactory.createCoordinator(delegateAndGraphs, topLevelTargets.asList(), distBuildConfig, distBuildService, stampedeId, Optional.of(invocationInfo.getBuildId()), false, invocationInfo.getLogDirectoryPath(), finishedRulePublisher, buildExecutorArgs.getBuckEventBus(), executorService, buildExecutorArgs.getArtifactCacheFactory().remoteOnlyInstance(true, false), localRuleKeyCalculator, // TODO(shivanker): Make health-check stats work. new HealthCheckStatsTracker(), // TODO(shivanker): Make timing stats work. Optional.empty(), Optional.empty()); executorService.submit(() -> { try { coordinator.runWithHeartbeatServiceAndReturnExitCode(distBuildConfig); } catch (IOException | InterruptedException e) { // This special case of processing IOException and InterruptedException is only to // maintain backwards compatibility // TODO (buck_team): process exceptions in a good structured way LOG.error(e, "Coordinator failed with Exception."); // throwing inside an executor won't help. } catch (Exception e) { throw new RuntimeException(e); } }); }