Search in sources :

Example 1 with Directories

use of build.buildfarm.common.io.Directories in project bazel-buildfarm by bazelbuild.

the class CFCExecFileSystem method fetchInputs.

private Iterable<ListenableFuture<Void>> fetchInputs(Path path, Digest directoryDigest, Map<Digest, Directory> directoriesIndex, OutputDirectory outputDirectory, ImmutableList.Builder<String> inputFiles, ImmutableList.Builder<Digest> inputDirectories) throws IOException {
    Directory directory = directoriesIndex.get(directoryDigest);
    if (directory == null) {
        // not quite IO...
        throw new IOException("Directory " + DigestUtil.toString(directoryDigest) + " is not in directories index");
    }
    Iterable<ListenableFuture<Void>> downloads = directory.getFilesList().stream().map(fileNode -> put(path, fileNode, inputFiles)).collect(ImmutableList.toImmutableList());
    downloads = concat(downloads, directory.getSymlinksList().stream().map(symlinkNode -> putSymlink(path, symlinkNode)).collect(ImmutableList.toImmutableList()));
    for (DirectoryNode directoryNode : directory.getDirectoriesList()) {
        Digest digest = directoryNode.getDigest();
        String name = directoryNode.getName();
        OutputDirectory childOutputDirectory = outputDirectory != null ? outputDirectory.getChild(name) : null;
        Path dirPath = path.resolve(name);
        if (childOutputDirectory != null || !linkInputDirectories) {
            Files.createDirectories(dirPath);
            downloads = concat(downloads, fetchInputs(dirPath, digest, directoriesIndex, childOutputDirectory, inputFiles, inputDirectories));
        } else {
            downloads = concat(downloads, ImmutableList.of(transform(linkDirectory(dirPath, digest, directoriesIndex), (result) -> {
                // we saw null entries in the built immutable list without synchronization
                synchronized (inputDirectories) {
                    inputDirectories.add(digest);
                }
                return null;
            }, fetchService)));
        }
        if (Thread.currentThread().isInterrupted()) {
            break;
        }
    }
    return downloads;
}
Also used : Directory(build.bazel.remote.execution.v2.Directory) MoreExecutors.listeningDecorator(com.google.common.util.concurrent.MoreExecutors.listeningDecorator) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) Command(build.bazel.remote.execution.v2.Command) DirectoryNode(build.bazel.remote.execution.v2.DirectoryNode) Futures.transformAsync(com.google.common.util.concurrent.Futures.transformAsync) Executors.newWorkStealingPool(java.util.concurrent.Executors.newWorkStealingPool) MINUTES(java.util.concurrent.TimeUnit.MINUTES) Utils.getInterruptiblyOrIOException(build.buildfarm.common.io.Utils.getInterruptiblyOrIOException) ContentAddressableStorage(build.buildfarm.cas.ContentAddressableStorage) DigestUtil(build.buildfarm.common.DigestUtil) Level(java.util.logging.Level) Action(build.bazel.remote.execution.v2.Action) UserPrincipal(java.nio.file.attribute.UserPrincipal) Directories(build.buildfarm.common.io.Directories) Lists(com.google.common.collect.Lists) ImmutableList(com.google.common.collect.ImmutableList) Digest(build.bazel.remote.execution.v2.Digest) Iterables.concat(com.google.common.collect.Iterables.concat) Map(java.util.Map) FileNode(build.bazel.remote.execution.v2.FileNode) Path(java.nio.file.Path) ExecutorService(java.util.concurrent.ExecutorService) Nullable(javax.annotation.Nullable) Utils.readdir(build.buildfarm.common.io.Utils.readdir) Futures.immediateFuture(com.google.common.util.concurrent.Futures.immediateFuture) MoreExecutors.shutdownAndAwaitTermination(com.google.common.util.concurrent.MoreExecutors.shutdownAndAwaitTermination) Dirent(build.buildfarm.common.io.Dirent) CASFileCache(build.buildfarm.cas.cfc.CASFileCache) Futures.allAsList(com.google.common.util.concurrent.Futures.allAsList) Files(java.nio.file.Files) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) IOException(java.io.IOException) Logger(java.util.logging.Logger) Preconditions.checkState(com.google.common.base.Preconditions.checkState) ExecutionException(java.util.concurrent.ExecutionException) Consumer(java.util.function.Consumer) List(java.util.List) Futures.immediateFailedFuture(com.google.common.util.concurrent.Futures.immediateFailedFuture) Iterables.filter(com.google.common.collect.Iterables.filter) SymlinkNode(build.bazel.remote.execution.v2.SymlinkNode) OutputDirectory(build.buildfarm.worker.OutputDirectory) Futures.transform(com.google.common.util.concurrent.Futures.transform) Collections(java.util.Collections) InputStream(java.io.InputStream) Path(java.nio.file.Path) Digest(build.bazel.remote.execution.v2.Digest) OutputDirectory(build.buildfarm.worker.OutputDirectory) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) DirectoryNode(build.bazel.remote.execution.v2.DirectoryNode) Utils.getInterruptiblyOrIOException(build.buildfarm.common.io.Utils.getInterruptiblyOrIOException) IOException(java.io.IOException) Directory(build.bazel.remote.execution.v2.Directory) OutputDirectory(build.buildfarm.worker.OutputDirectory)

Aggregations

Action (build.bazel.remote.execution.v2.Action)1 Command (build.bazel.remote.execution.v2.Command)1 Digest (build.bazel.remote.execution.v2.Digest)1 Directory (build.bazel.remote.execution.v2.Directory)1 DirectoryNode (build.bazel.remote.execution.v2.DirectoryNode)1 FileNode (build.bazel.remote.execution.v2.FileNode)1 SymlinkNode (build.bazel.remote.execution.v2.SymlinkNode)1 ContentAddressableStorage (build.buildfarm.cas.ContentAddressableStorage)1 CASFileCache (build.buildfarm.cas.cfc.CASFileCache)1 DigestUtil (build.buildfarm.common.DigestUtil)1 Directories (build.buildfarm.common.io.Directories)1 Dirent (build.buildfarm.common.io.Dirent)1 Utils.getInterruptiblyOrIOException (build.buildfarm.common.io.Utils.getInterruptiblyOrIOException)1 Utils.readdir (build.buildfarm.common.io.Utils.readdir)1 OutputDirectory (build.buildfarm.worker.OutputDirectory)1 Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 Preconditions.checkState (com.google.common.base.Preconditions.checkState)1 ImmutableList (com.google.common.collect.ImmutableList)1 Iterables.concat (com.google.common.collect.Iterables.concat)1 Iterables.filter (com.google.common.collect.Iterables.filter)1