Skip to content

Commit 43cb21a

Browse files
coeuvrecopybara-github
authored andcommitted
Manage temporary files inside AbstractActionInputPrefetcher
so that we can share this code among implementations. Also, always delete tempDir after build PiperOrigin-RevId: 449221017
1 parent 8179e78 commit 43cb21a

File tree

4 files changed

+46
-17
lines changed

4 files changed

+46
-17
lines changed

src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,20 @@
2828
import com.google.devtools.build.lib.actions.FileArtifactValue;
2929
import com.google.devtools.build.lib.actions.MetadataProvider;
3030
import com.google.devtools.build.lib.actions.cache.VirtualActionInput;
31+
import com.google.devtools.build.lib.events.Event;
32+
import com.google.devtools.build.lib.events.EventHandler;
3133
import com.google.devtools.build.lib.profiler.Profiler;
3234
import com.google.devtools.build.lib.profiler.ProfilerTask;
3335
import com.google.devtools.build.lib.profiler.SilentCloseable;
3436
import com.google.devtools.build.lib.remote.util.AsyncTaskCache;
3537
import com.google.devtools.build.lib.remote.util.RxUtils.TransferResult;
3638
import com.google.devtools.build.lib.remote.util.TempPathGenerator;
39+
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
40+
import com.google.devtools.build.lib.server.FailureDetails.RemoteExecution;
41+
import com.google.devtools.build.lib.server.FailureDetails.RemoteExecution.Code;
42+
import com.google.devtools.build.lib.util.AbruptExitException;
43+
import com.google.devtools.build.lib.util.DetailedExitCode;
44+
import com.google.devtools.build.lib.util.ExitCode;
3745
import com.google.devtools.build.lib.vfs.FileSystemUtils;
3846
import com.google.devtools.build.lib.vfs.Path;
3947
import io.reactivex.rxjava3.core.Completable;
@@ -60,6 +68,36 @@ protected AbstractActionInputPrefetcher(Path execRoot, TempPathGenerator tempPat
6068
this.tempPathGenerator = tempPathGenerator;
6169
}
6270

71+
public void startBuild(EventHandler eventHandler) throws AbruptExitException {
72+
Path tempDir = tempPathGenerator.getTempDir();
73+
if (tempDir.exists()) {
74+
eventHandler.handle(Event.warn("Found stale downloads from previous build, deleting..."));
75+
try {
76+
tempDir.deleteTree();
77+
} catch (IOException e) {
78+
throw new AbruptExitException(
79+
DetailedExitCode.of(
80+
ExitCode.LOCAL_ENVIRONMENTAL_ERROR,
81+
FailureDetail.newBuilder()
82+
.setMessage(
83+
String.format("Failed to delete stale downloads: %s", e.getMessage()))
84+
.setRemoteExecution(
85+
RemoteExecution.newBuilder()
86+
.setCode(Code.DOWNLOADED_INPUTS_DELETION_FAILURE))
87+
.build()));
88+
}
89+
}
90+
}
91+
92+
public void finalizeBuild() {
93+
Path tempDir = tempPathGenerator.getTempDir();
94+
try {
95+
tempDir.deleteTree();
96+
} catch (IOException ignored) {
97+
// Intentionally left empty.
98+
}
99+
}
100+
63101
protected abstract boolean shouldDownloadInput(
64102
ActionInput input, @Nullable FileArtifactValue metadata);
65103

src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -921,19 +921,6 @@ public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorB
921921
RemoteOutputsMode remoteOutputsMode = remoteOptions.remoteOutputsMode;
922922
if (!remoteOutputsMode.downloadAllOutputs() && actionContextProvider.getRemoteCache() != null) {
923923
Path tempDir = env.getActionTempsDirectory().getChild("remote");
924-
try {
925-
if (tempDir.exists()
926-
&& (!tempDir.isDirectory() || !tempDir.getDirectoryEntries().isEmpty())) {
927-
env.getReporter()
928-
.handle(Event.warn("Found incomplete downloads from previous build, deleting..."));
929-
tempDir.deleteTree();
930-
}
931-
} catch (IOException e) {
932-
throw createExitException(
933-
e.getMessage(),
934-
ExitCode.LOCAL_ENVIRONMENTAL_ERROR,
935-
Code.DOWNLOADED_INPUTS_DELETION_FAILURE);
936-
}
937924
actionInputFetcher =
938925
new RemoteActionInputFetcher(
939926
env.getBuildRequestId(),

src/main/java/com/google/devtools/build/lib/remote/RemoteOutputService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.devtools.build.lib.actions.FilesetOutputSymlink;
2525
import com.google.devtools.build.lib.actions.cache.MetadataHandler;
2626
import com.google.devtools.build.lib.events.EventHandler;
27+
import com.google.devtools.build.lib.util.AbruptExitException;
2728
import com.google.devtools.build.lib.vfs.BatchStat;
2829
import com.google.devtools.build.lib.vfs.FileSystem;
2930
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
@@ -76,13 +77,18 @@ public String getFilesSystemName() {
7677

7778
@Override
7879
public ModifiedFileSet startBuild(
79-
EventHandler eventHandler, UUID buildId, boolean finalizeActions) {
80+
EventHandler eventHandler, UUID buildId, boolean finalizeActions) throws AbruptExitException {
81+
if (actionInputFetcher != null) {
82+
actionInputFetcher.startBuild(eventHandler);
83+
}
8084
return ModifiedFileSet.EVERYTHING_MODIFIED;
8185
}
8286

8387
@Override
8488
public void finalizeBuild(boolean buildSuccessful) {
85-
// Intentionally left empty.
89+
if (actionInputFetcher != null) {
90+
actionInputFetcher.finalizeBuild();
91+
}
8692
}
8793

8894
@Override

src/main/java/com/google/devtools/build/lib/remote/util/TempPathGenerator.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414
package com.google.devtools.build.lib.remote.util;
1515

16-
import com.google.common.annotations.VisibleForTesting;
1716
import com.google.devtools.build.lib.vfs.Path;
1817
import java.util.concurrent.atomic.AtomicInteger;
1918
import javax.annotation.concurrent.ThreadSafe;
@@ -33,7 +32,6 @@ public Path generateTempPath() {
3332
return tempDir.getChild(index.getAndIncrement() + ".tmp");
3433
}
3534

36-
@VisibleForTesting
3735
public Path getTempDir() {
3836
return tempDir;
3937
}

0 commit comments

Comments
 (0)