60
60
import java .time .Instant ;
61
61
import java .util .HashSet ;
62
62
import java .util .Set ;
63
+ import java .util .concurrent .atomic .AtomicBoolean ;
63
64
import javax .annotation .Nullable ;
64
65
65
66
/** This module provides the Sandbox spawn strategy. */
@@ -425,9 +426,15 @@ private static Path getPathToDockerClient(CommandEnvironment cmdEnv) {
425
426
return null ;
426
427
}
427
428
428
- private static SpawnRunner withFallback (CommandEnvironment env , SpawnRunner sandboxSpawnRunner ) {
429
- return new SandboxFallbackSpawnRunner (
430
- sandboxSpawnRunner , createFallbackRunner (env ), env .getReporter ());
429
+ private static SpawnRunner withFallback (
430
+ CommandEnvironment env , AbstractSandboxSpawnRunner sandboxSpawnRunner ) {
431
+ SandboxOptions sandboxOptions = env .getOptions ().getOptions (SandboxOptions .class );
432
+ if (sandboxOptions != null && sandboxOptions .legacyLocalFallback ) {
433
+ return new SandboxFallbackSpawnRunner (
434
+ sandboxSpawnRunner , createFallbackRunner (env ), env .getReporter ());
435
+ } else {
436
+ return sandboxSpawnRunner ;
437
+ }
431
438
}
432
439
433
440
private static SpawnRunner createFallbackRunner (CommandEnvironment env ) {
@@ -447,15 +454,16 @@ private static SpawnRunner createFallbackRunner(CommandEnvironment env) {
447
454
private static final class SandboxFallbackSpawnRunner implements SpawnRunner {
448
455
private final SpawnRunner sandboxSpawnRunner ;
449
456
private final SpawnRunner fallbackSpawnRunner ;
450
- private final ExtendedEventHandler extendedEventHandler ;
457
+ private final ExtendedEventHandler reporter ;
458
+ private static final AtomicBoolean warningEmitted = new AtomicBoolean ();
451
459
452
460
SandboxFallbackSpawnRunner (
453
461
SpawnRunner sandboxSpawnRunner ,
454
462
SpawnRunner fallbackSpawnRunner ,
455
- ExtendedEventHandler extendedEventHandler ) {
463
+ ExtendedEventHandler reporter ) {
456
464
this .sandboxSpawnRunner = sandboxSpawnRunner ;
457
465
this .fallbackSpawnRunner = fallbackSpawnRunner ;
458
- this .extendedEventHandler = extendedEventHandler ;
466
+ this .reporter = reporter ;
459
467
}
460
468
461
469
@ Override
@@ -471,10 +479,15 @@ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context)
471
479
if (sandboxSpawnRunner .canExec (spawn )) {
472
480
spawnResult = sandboxSpawnRunner .exec (spawn , context );
473
481
} else {
482
+ if (warningEmitted .compareAndSet (false , true )) {
483
+ reporter .handle (
484
+ Event .warn (
485
+ "Use of implicit local fallback will go away soon, please"
486
+ + " set a fallback strategy instead. See --legacy_local_fallback option." ));
487
+ }
474
488
spawnResult = fallbackSpawnRunner .exec (spawn , context );
475
489
}
476
- extendedEventHandler .post (
477
- new SpawnExecutedEvent (spawn , spawnResult , spawnExecutionStartInstant ));
490
+ reporter .post (new SpawnExecutedEvent (spawn , spawnResult , spawnExecutionStartInstant ));
478
491
return spawnResult ;
479
492
}
480
493
@@ -491,7 +504,9 @@ public boolean handlesCaching() {
491
504
@ Override
492
505
public void cleanupSandboxBase (Path sandboxBase , TreeDeleter treeDeleter ) throws IOException {
493
506
sandboxSpawnRunner .cleanupSandboxBase (sandboxBase , treeDeleter );
494
- fallbackSpawnRunner .cleanupSandboxBase (sandboxBase , treeDeleter );
507
+ if (fallbackSpawnRunner != null ) {
508
+ fallbackSpawnRunner .cleanupSandboxBase (sandboxBase , treeDeleter );
509
+ }
495
510
}
496
511
}
497
512
0 commit comments