HenrikBengtsson / future

:rocket: R package: future: Unified Parallel and Distributed Processing in R for Everyone
https://future.futureverse.org
946 stars 82 forks source link

Set future state to "failed" on orchestration errors? #671

Open HenrikBengtsson opened 1 year ago

HenrikBengtsson commented 1 year ago

For example,

library(future)
plan(multicore)
f <- future(tools::pskill(pid = Sys.getpid()))
r <- result(f)
# Error: Failed to retrieve the result of MulticoreFuture (<none>) from the
# forked worker (on localhost; PID 1136927). Post-mortem diagnostic: No process
# exists with this PID, i.e. the forked localhost worker is no longer alive
> r <- tryCatch(result(f), error = identity)
> class(r)
[1] "FutureError"     "error"           "FutureCondition" "condition"      
> f$state
[1] "running"

Suggestion

When there is a non-recoverable FutureError, set the state of the future to "failed". This can then be used to prevent further attempts to retrieve the result(). OTH, this requires that we know the problem cannot be recovered from. For instance, if it's due to a temporary communication issue, it might work when we call result(f) at a later stage.

See also

This is related to Issue #667.