From b6c29049fbb375452f0c0a601a16a76d3ba9f742 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 23 Nov 2022 03:26:03 -0800 Subject: [PATCH] Make CppLinkAction implement Action.execute() instead of beginExecution(). Another step towards removing the continuation-based action execution machinery. RELNOTES: None. PiperOrigin-RevId: 490458651 Change-Id: I9133033da1fc529da6375fbe6eded77900884c80 --- .../build/lib/rules/cpp/CppLinkAction.java | 47 +++++-------------- 1 file changed, 11 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 97d7fef92ef081..2d18d8a00c9eed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -22,9 +22,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; -import com.google.common.util.concurrent.ListenableFuture; import com.google.devtools.build.lib.actions.AbstractAction; -import com.google.devtools.build.lib.actions.ActionContinuationOrResult; import com.google.devtools.build.lib.actions.ActionEnvironment; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; @@ -275,15 +273,22 @@ public ImmutableCollection getLinkstampObjectFileInputs() { } @Override - @ThreadCompatible - public ActionContinuationOrResult beginExecution(ActionExecutionContext actionExecutionContext) + public ActionResult execute(ActionExecutionContext actionExecutionContext) throws ActionExecutionException, InterruptedException { Spawn spawn = createSpawn(actionExecutionContext); - SpawnContinuation spawnContinuation = + SpawnContinuation continuation = actionExecutionContext .getContext(SpawnStrategyResolver.class) .beginExecution(spawn, actionExecutionContext); - return new CppLinkActionContinuation(actionExecutionContext, spawnContinuation); + + try { + while (!continuation.isDone()) { + continuation = continuation.execute(); + } + return ActionResult.create(continuation.get()); + } catch (ExecException e) { + throw ActionExecutionException.fromExecException(e, CppLinkAction.this); + } } private Spawn createSpawn(ActionExecutionContext actionExecutionContext) @@ -428,36 +433,6 @@ public ResourceSet estimateResourceConsumptionLocal(OS os, int inputs) { } } - private final class CppLinkActionContinuation extends ActionContinuationOrResult { - private final ActionExecutionContext actionExecutionContext; - private final SpawnContinuation spawnContinuation; - - public CppLinkActionContinuation( - ActionExecutionContext actionExecutionContext, SpawnContinuation spawnContinuation) { - this.actionExecutionContext = actionExecutionContext; - this.spawnContinuation = spawnContinuation; - } - - @Override - public ListenableFuture getFuture() { - return spawnContinuation.getFuture(); - } - - @Override - public ActionContinuationOrResult execute() - throws ActionExecutionException, InterruptedException { - try { - SpawnContinuation nextContinuation = spawnContinuation.execute(); - if (!nextContinuation.isDone()) { - return new CppLinkActionContinuation(actionExecutionContext, nextContinuation); - } - return ActionContinuationOrResult.of(ActionResult.create(nextContinuation.get())); - } catch (ExecException e) { - throw ActionExecutionException.fromExecException(e, CppLinkAction.this); - } - } - } - @Override public Sequence getStarlarkArgv() throws EvalException { try {