futureverse / futureverse/future

Error: ‘inherits(future, "Future")’ is not TRUE

Open
#723 19 comments 0 reactions 0 assignees View on GitHub
bug question uses/future_promises
Dominant language
R
Stars
1k
Forks
92
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**

When I try to load a promise in the context of starting up a Shiny app, I get the following error:

`Error: ‘inherits(future, "Future")’ is not TRUE`

This doesn't happen consistently.

The traceback (see below) is interesting. It suggests my promise is of cluster type, even though I have used plan(multisession). If I explicitly set the plan when calling `future_promise`, I still get the same behaviour.

**Reproduce example**

```r

library(shiny)
library(promises)

ui <- fluidPage(

titlePanel("Promise fail"),

)

server <- function(input, output, session) {

on_start(session)

}

on_start <- function(session) {

future::plan(future::multisession)

res <- promises::future_promise({
Sys.sleep(5)
"test_res"
}, seed = NULL) %...>% (function(result) {
print(result)
})

}

# Run the application
shinyApp(ui = ui, server = server)
```

**Expected behavior**

I expect the promise not to fail.

**Traceback**

```r
13: stop(cond)
12: stopf("%s is not TRUE", sQuote(call), call. = FALSE, domain = NA)
11: stop_if_not(inherits(future, "Future"))
10: post_mortem_cluster_failure(ex, when = "checking resolved from",
node = node, future = future)
9: resolved.ClusterFuture(x, timeout = 0)
8: future::resolved(x, timeout = 0)
7: withCallingHandlers(expr, error = function(e) {
promiseDomain$onError(e)
})
6: doTryCatch(return(expr), name, parentenv, handler)
5: tryCatchOne(expr, names, parentenv, handlers[[1L]])
4: tryCatchList(expr, classes, parentenv, handlers)
3: base::tryCatch(withCallingHandlers(expr, error = function(e) {
promiseDomain$onError(e)
}), ..., finally = finally)
2: tryCatch({
future::resolved(x, timeout = 0)
}, FutureError = function(e) {
reject(e)
TRUE
})
1: (function ()
{
is_resolved <- tryCatch({
future::resolved(x, timeout = 0)
}, FutureError = function(e) {
reject(e)
TRUE
})
if (is_resolved) {
tryCatch({
result <- future::value(x, signal = TRUE)
resolve(result)
}, FutureError = function(e) {
reject(e)
TRUE
}, error = function(e) {
reject(e)
})
}
else {
...
```

**Session information**

```r
> sessionInfo()

R version 4.3.0 (2023-04-21)
Platform: x86_64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.6.6

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] promises_1.2.1 shiny_1.8.0 devtools_2.4.5 usethis_2.2.3

loaded via a namespace (and not attached):
[1] jsonlite_1.8.8 miniUI_0.1.1.1 compiler_4.3.0 Rcpp_1.0.12
[5] stringr_1.5.1 parallel_4.3.0 jquerylib_0.1.4 later_1.3.2
[9] globals_0.16.3 fastmap_1.1.1 mime_0.12 R6_2.5.1
[13] htmlwidgets_1.6.4 future_1.33.1 profvis_0.3.8 bslib_0.7.0
[17] rlang_1.1.3 cachem_1.0.8 stringi_1.8.3 httpuv_1.6.14
[21] sass_0.4.9 fs_1.6.3 pkgload_1.3.4 memoise_2.0.1
[25] cli_3.6.2 withr_3.0.0 magrittr_2.0.3 digest_0.6.35
[29] rstudioapi_0.15.0 xtable_1.8-4 remotes_2.5.0 lifecycle_1.0.4
[33] vctrs_0.6.5 glue_1.7.0 listenv_0.9.1 urlchecker_1.0.1
[37] codetools_0.2-19 sessioninfo_1.2.2 pkgbuild_1.4.4 parallelly_1.37.1
[41] purrr_1.0.2 tools_4.3.0 ellipsis_0.3.2 htmltools_0.5.8.1

> future::futureSessionInfo()

*** Package versions
future 1.33.1, parallelly 1.37.1, parallel 4.3.0, globals 0.16.3, listenv 0.9.1

*** Allocations
availableCores():
system
16
availableWorkers():
$system
[1] "localhost" "localhost" "localhost" "localhost" "localhost" "localhost" "localhost"
[8] "localhost" "localhost" "localhost" "localhost" "localhost" "localhost" "localhost"
[15] "localhost" "localhost"

*** Settings
- future.plan=
- future.fork.multithreading.enable=
- future.globals.maxSize=
- future.globals.onReference=
- future.resolve.recursive=
- future.rng.onMisuse=
- future.wait.timeout=
- future.wait.interval=
- future.wait.alpha=
- future.startup.script=

*** Backends
Number of workers: 16
List of future strategies:
1. multisession:
- args: function (..., workers = availableCores(), lazy = FALSE, rscript_libs = .libPaths(), envir = parent.frame())
- tweaked: FALSE
- call: future::plan(future::multisession)

*** Basic tests
Main R session details:
pid r sysname release
1 85671 4.3.0 Darwin 22.6.0
version
1 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
nodename machine login user effective_user
1 host001 x86_64 user001 user002 user002
Worker R session details:
worker pid r sysname release
1 1 86370 4.3.0 Darwin 22.6.0
2 2 86367 4.3.0 Darwin 22.6.0
3 3 86369 4.3.0 Darwin 22.6.0
4 4 86372 4.3.0 Darwin 22.6.0
5 5 86376 4.3.0 Darwin 22.6.0
6 6 86366 4.3.0 Darwin 22.6.0
7 7 86374 4.3.0 Darwin 22.6.0
8 8 86373 4.3.0 Darwin 22.6.0
9 9 86371 4.3.0 Darwin 22.6.0
10 10 86368 4.3.0 Darwin 22.6.0
11 11 86378 4.3.0 Darwin 22.6.0
12 12 86379 4.3.0 Darwin 22.6.0
13 13 86380 4.3.0 Darwin 22.6.0
14 14 86377 4.3.0 Darwin 22.6.0
15 15 86375 4.3.0 Darwin 22.6.0
16 16 86365 4.3.0 Darwin 22.6.0
version
1 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
2 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
3 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
4 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
5 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
6 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
7 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
8 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
9 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
10 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
11 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
12 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
13 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
14 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
15 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
16 Darwin Kernel Version 22.6.0: Mon Feb 19 19:48:53 PST 2024; root:xnu-8796.141.3.704.6~1/RELEASE_X86_64
nodename machine login user effective_user
1 host001 x86_64 user001 user002 user002
2 host001 x86_64 user001 user002 user002
3 host001 x86_64 user001 user002 user002
4 host001 x86_64 user001 user002 user002
5 host001 x86_64 user001 user002 user002
6 host001 x86_64 user001 user002 user002
7 host001 x86_64 user001 user002 user002
8 host001 x86_64 user001 user002 user002
9 host001 x86_64 user001 user002 user002
10 host001 x86_64 user001 user002 user002
11 host001 x86_64 user001 user002 user002
12 host001 x86_64 user001 user002 user002
13 host001 x86_64 user001 user002 user002
14 host001 x86_64 user001 user002 user002
15 host001 x86_64 user001 user002 user002
16 host001 x86_64 user001 user002 user002
Number of unique worker PIDs: 16 (as expected)

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.