Example usage for com.google.common.util.concurrent ListeningExecutorService submit

List of usage examples for com.google.common.util.concurrent ListeningExecutorService submit

Introduction

In this page you can find the example usage for com.google.common.util.concurrent ListeningExecutorService submit.

Prototype

@Override
ListenableFuture<?> submit(Runnable task);

Source Link

Usage

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);
        }
    });
}