1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
// Copyright 2014 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.exec;
import com.google.devtools.build.lib.actions.BuildFailedException;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.vfs.BatchStat;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.UUID;
/**
* An OutputService retains control over the Blaze output tree, and provides a higher level of
* abstraction compared to the VFS layer.
*
* <p>Higher-level facilities include batch statting, cleaning the output tree, creating symlink
* trees, and out-of-band insertion of metadata into the tree.
*/
public interface OutputService {
/**
* @return the name of filesystem, akin to what you might see in /proc/mounts
*/
String getFilesSystemName();
/**
* @return true if the output service uses FUSE
*/
boolean usesFuse();
/**
* @return a human-readable, one word name for the service
*/
String getName();
/**
* Start the build.
*
* @param buildId the UUID build identifier
* @throws BuildFailedException if build preparation failed
* @throws InterruptedException
*/
void startBuild(UUID buildId)
throws BuildFailedException, AbruptExitException, InterruptedException;
/**
* Finish the build.
*
* @param buildSuccessful iff build was successful
* @throws BuildFailedException on failure
*/
void finalizeBuild(boolean buildSuccessful) throws BuildFailedException, AbruptExitException;
/**
* Stages the given tool from the package path, possibly copying it to local disk.
*
* @param tool target representing the tool to stage
* @return a Path pointing to the staged target
*/
Path stageTool(Target tool) throws IOException;
/**
* @return the name of the workspace this output service controls.
*/
String getWorkspace();
/**
* @return the BatchStat instance or null.
*/
BatchStat getBatchStatter();
/**
* @return true iff createSymlinkTree() is available.
*/
boolean canCreateSymlinkTree();
/**
* Creates the symlink tree
*
* @param inputPath the input manifest
* @param outputPath the output manifest
* @param filesetTree is true iff we're constructing a Fileset
* @param symlinkTreeRoot the symlink tree root, relative to the execRoot
* @throws ExecException on failure
* @throws InterruptedException
*/
void createSymlinkTree(Path inputPath, Path outputPath, boolean filesetTree,
PathFragment symlinkTreeRoot) throws ExecException, InterruptedException;
/**
* Cleans the entire output tree.
*
* @throws ExecException on failure
* @throws InterruptedException
*/
void clean() throws ExecException, InterruptedException;
/**
* @param file the File
* @return true iff the file actually lives on a remote server
*/
boolean isRemoteFile(Path file);
/**
* @param path a fully-resolved path
* @return true iff path is under this output service's control
*/
boolean resolvedPathUnderTree(Path path);
}
|