Last updated on 2025-05-09 01:50:03 CEST.
Flavor | Version | Tinstall | Tcheck | Ttotal | Status | Flags |
---|---|---|---|---|---|---|
r-devel-linux-x86_64-debian-clang | 1.0.2 | 3.40 | 135.85 | 139.25 | OK | |
r-devel-linux-x86_64-debian-gcc | 1.0.2 | 2.47 | 107.03 | 109.50 | OK | |
r-devel-linux-x86_64-fedora-clang | 1.0.2 | 219.40 | OK | |||
r-devel-linux-x86_64-fedora-gcc | 1.0.2 | 214.84 | OK | |||
r-devel-windows-x86_64 | 1.0.2 | 4.00 | 309.00 | 313.00 | ERROR | |
r-patched-linux-x86_64 | 1.0.2 | 3.62 | 130.39 | 134.01 | OK | |
r-release-linux-x86_64 | 1.0.2 | 3.19 | 130.90 | 134.09 | OK | |
r-release-macos-arm64 | 1.0.2 | 116.00 | OK | |||
r-release-macos-x86_64 | 1.0.2 | 176.00 | OK | |||
r-release-windows-x86_64 | 1.0.2 | 4.00 | 310.00 | 314.00 | ERROR | |
r-oldrel-macos-arm64 | 1.0.2 | 110.00 | OK | |||
r-oldrel-macos-x86_64 | 1.0.2 | 281.00 | OK | |||
r-oldrel-windows-x86_64 | 1.0.2 | 6.00 | 351.00 | 357.00 | ERROR |
Version: 1.0.2
Check: tests
Result: ERROR
Running 'foreach_dofuture,cluster-missing-doFuture-pkg.R' [62s]
Running 'foreach_dofuture,errors.R' [10s]
Running 'foreach_dofuture,globals.R' [7s]
Running 'foreach_dofuture,nested_colon.R' [14s]
Running 'foreach_dofuture,nested_dofuture.R' [15s]
Running 'foreach_dofuture,rng.R' [4s]
Running 'foreach_dofuture.R' [3s]
Running 'foreach_dopar,cluster-missing-doFuture-pkg.R' [62s]
Running 'foreach_dopar,doRNG,dopar.R' [2s]
Running 'foreach_dopar,doRNG,dorng.R' [6s]
Running 'foreach_dopar,errors.R' [7s]
Running 'foreach_dopar,globals.R' [7s]
Running 'foreach_dopar,nested_colon.R' [12s]
Running 'foreach_dopar,nested_dopar.R' [16s]
Running 'foreach_dopar,options-for-export.R' [5s]
Running 'foreach_dopar.R' [3s]
Running 'makeChunks.R' [4s]
Running 'options,nested.R' [4s]
Running 'registerDoFuture.R' [2s]
Running 'times.R' [2s]
Running 'utils.R' [1s]
Running 'withDoRNG.R' [4s]
Running the tests in 'tests/foreach_dofuture,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R Under development (unstable) (2025-05-03 r88188 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.6.0 parallelly_1.43.0 tools_4.6.0
[4] parallel_4.6.0 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_04_01_50_00_20595/RtmpYZkclo/RLIBS_25614370322e5', 'D:/RCompile/recent/R/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.6/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[12:21:41.179] doFuture2() ...
[12:21:41.240] Number of chunks: 1
[12:21:41.240] Number of futures (= number of chunks): 1
[12:21:41.240] seed = FALSE
[12:21:41.241] NULL
[12:21:41.244] seed = FALSE
[12:21:41.244] seed = FALSE
[12:21:41.244] - %dofuture% R expression:
[12:21:41.245] ii
[12:21:41.245] - foreach iterator arguments: [1] 'ii'
[12:21:41.245] - dummy globals (as locals): [1] 'ii'
[12:21:41.246] - R expression (map-reduce expression adjusted for RNG):
[12:21:41.246] {
[12:21:41.246] NULL
[12:21:41.246] "# doFuture():::doFuture2(): process chunk of elements"
[12:21:41.246] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[12:21:41.246] ...future.x_jj <- ...future.x_ii[[jj]]
[12:21:41.246] {
[12:21:41.246] NULL
[12:21:41.246] ii <- NULL
[12:21:41.246] }
[12:21:41.246] ...future.env <- environment()
[12:21:41.246] local({
[12:21:41.246] for (name in names(...future.x_jj)) {
[12:21:41.246] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[12:21:41.246] inherits = FALSE)
[12:21:41.246] }
[12:21:41.246] })
[12:21:41.246] NULL
[12:21:41.246] tryCatch(ii, error = identity)
[12:21:41.246] })
[12:21:41.246] }
[12:21:41.247] - identifying globals and packages ...
[12:21:41.247] - Argument 'globals':
[12:21:41.247] logi TRUE
[12:21:41.247] - attr(*, "add")= chr "...future.x_ii"
[12:21:41.247] - attr(*, "ignore")= chr "ii"
[12:21:41.250] - R expression (map-reduce expression searched for globals):
[12:21:41.250] {
[12:21:41.250] NULL
[12:21:41.250] "# doFuture():::doFuture2(): process chunk of elements"
[12:21:41.250] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[12:21:41.250] ...future.x_jj <- ...future.x_ii[[jj]]
[12:21:41.250] {
[12:21:41.250] NULL
[12:21:41.250] ii <- NULL
[12:21:41.250] }
[12:21:41.250] ...future.env <- environment()
[12:21:41.250] local({
[12:21:41.250] for (name in names(...future.x_jj)) {
[12:21:41.250] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[12:21:41.250] inherits = FALSE)
[12:21:41.250] }
[12:21:41.250] })
[12:21:41.250] NULL
[12:21:41.250] tryCatch(ii, error = identity)
[12:21:41.250] })
[12:21:41.250] }
[12:21:41.264] - R expression (%dofuture% expression searched for globals):
[12:21:41.264] ii
[12:21:41.266] - Globals in %dofuture% R expression not in map-reduce expression:
[12:21:41.266] - Appending 0 globals only found in the vanilla %dofuture% expression:
[12:21:41.267] - globals: [1] '...future.x_ii'
[12:21:41.267] List of 1
[12:21:41.267] $ ...future.x_ii: num 42
[12:21:41.267] - attr(*, "where")=List of 1
[12:21:41.267] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[12:21:41.267] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[12:21:41.267] - attr(*, "resolved")= logi FALSE
[12:21:41.267] - attr(*, "total_size")= num 39
[12:21:41.271] - packages: [1] 'doFuture'
[12:21:41.271] - identifying globals and packages ... DONE
[12:21:41.271] Launching 1 futures (chunks) ...
[12:21:41.272] Chunk #1 of 1 ...
[12:21:41.272] - Finding globals in 'args_list' for chunk #1 ...
[12:21:41.273]
[12:21:41.273]
[12:21:41.273] - Finding globals in 'args_list' for chunk #1 ... DONE
[12:21:41.274] - seeds: <none>
[12:21:41.282] Chunk #1 of 1 ... DONE
[12:21:41.282] Launching 1 futures (chunks) ... DONE
[12:21:41.283] - resolving futures
[12:21:41.283] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture2-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: 6c2fd98c93303f021bf84e8a226a1d34-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture2-1'
Expression:
{
NULL
"# doFuture():::doFuture2(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
NULL
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: 6c2fd98c93303f021bf84e8a226a1d34
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Running the tests in 'tests/foreach_dopar,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R Under development (unstable) (2025-05-03 r88188 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.6.0 parallelly_1.43.0 tools_4.6.0
[4] parallel_4.6.0 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> registerDoFuture()
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_04_01_50_00_20595/RtmpYZkclo/RLIBS_25614370322e5', 'D:/RCompile/recent/R/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.6/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[12:23:36.739] doFuture() ...
[12:23:36.741] - dummy globals (as locals): [1] 'ii'
[12:23:36.741] - R expression:
[12:23:36.741] {
[12:23:36.741] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[12:23:36.741] "# also in nested calls "
[12:23:36.741] doFuture::registerDoFuture()
[12:23:36.741] "# doFuture():::doFuture(): process chunk of elements"
[12:23:36.741] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[12:23:36.741] ...future.x_jj <- ...future.x_ii[[jj]]
[12:23:36.741] {
[12:23:36.741] NULL
[12:23:36.741] ii <- NULL
[12:23:36.741] }
[12:23:36.741] ...future.env <- environment()
[12:23:36.741] local({
[12:23:36.741] for (name in names(...future.x_jj)) {
[12:23:36.741] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[12:23:36.741] inherits = FALSE)
[12:23:36.741] }
[12:23:36.741] })
[12:23:36.741] tryCatch(ii, error = identity)
[12:23:36.741] })
[12:23:36.741] }
[12:23:36.742] - identifying globals and packages ...
[12:23:36.759] List of 1
[12:23:36.759] $ ...future.x_ii: NULL
[12:23:36.759] - attr(*, "where")=List of 1
[12:23:36.759] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[12:23:36.759] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[12:23:36.759] - attr(*, "resolved")= logi FALSE
[12:23:36.759] - attr(*, "total_size")= num 27
[12:23:36.767] - R expression:
[12:23:36.767] {
[12:23:36.767] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[12:23:36.767] "# also in nested calls "
[12:23:36.767] doFuture::registerDoFuture()
[12:23:36.767] "# doFuture():::doFuture(): process chunk of elements"
[12:23:36.767] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[12:23:36.767] ...future.x_jj <- ...future.x_ii[[jj]]
[12:23:36.767] {
[12:23:36.767] NULL
[12:23:36.767] ii <- NULL
[12:23:36.767] }
[12:23:36.767] ...future.env <- environment()
[12:23:36.767] local({
[12:23:36.767] for (name in names(...future.x_jj)) {
[12:23:36.767] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[12:23:36.767] inherits = FALSE)
[12:23:36.767] }
[12:23:36.767] })
[12:23:36.767] tryCatch(ii, error = identity)
[12:23:36.767] })
[12:23:36.767] }
[12:23:36.768] - globals: [1] '...future.x_ii'
[12:23:36.768] List of 1
[12:23:36.768] $ ...future.x_ii: NULL
[12:23:36.768] - attr(*, "where")=List of 1
[12:23:36.768] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[12:23:36.768] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[12:23:36.768] - attr(*, "resolved")= logi FALSE
[12:23:36.768] - attr(*, "total_size")= num 27
[12:23:36.772] - packages: [1] 'doFuture'
[12:23:36.772] - identifying globals and packages ... DONE
[12:23:36.808] Number of chunks: 1
[12:23:36.809] Number of futures (= number of chunks): 1
[12:23:36.809] Launching 1 futures (chunks) ...
[12:23:36.809] Chunk #1 of 1 ...
[12:23:36.809] - Finding globals in 'args_list' chunk #1 ...
[12:23:36.810]
[12:23:36.810]
[12:23:36.810] - Finding globals in 'args_list' for chunk #1 ... DONE
[12:23:36.817] Chunk #1 of 1 ... DONE
[12:23:36.818] Launching 1 futures (chunks) ... DONE
[12:23:36.818] - resolving futures
[12:23:36.818] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: 3e10db7d2aff89ae83bf065d8d54f0c4-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture-1'
Expression:
{
"# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
"# also in nested calls "
doFuture::registerDoFuture()
"# doFuture():::doFuture(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: 3e10db7d2aff89ae83bf065d8d54f0c4
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Flavor: r-devel-windows-x86_64
Version: 1.0.2
Check: tests
Result: ERROR
Running 'foreach_dofuture,cluster-missing-doFuture-pkg.R' [62s]
Running 'foreach_dofuture,errors.R' [10s]
Running 'foreach_dofuture,globals.R' [7s]
Running 'foreach_dofuture,nested_colon.R' [14s]
Running 'foreach_dofuture,nested_dofuture.R' [15s]
Running 'foreach_dofuture,rng.R' [4s]
Running 'foreach_dofuture.R' [3s]
Running 'foreach_dopar,cluster-missing-doFuture-pkg.R' [62s]
Running 'foreach_dopar,doRNG,dopar.R' [2s]
Running 'foreach_dopar,doRNG,dorng.R' [6s]
Running 'foreach_dopar,errors.R' [7s]
Running 'foreach_dopar,globals.R' [7s]
Running 'foreach_dopar,nested_colon.R' [12s]
Running 'foreach_dopar,nested_dopar.R' [16s]
Running 'foreach_dopar,options-for-export.R' [5s]
Running 'foreach_dopar.R' [3s]
Running 'makeChunks.R' [4s]
Running 'options,nested.R' [4s]
Running 'registerDoFuture.R' [2s]
Running 'times.R' [2s]
Running 'utils.R' [1s]
Running 'withDoRNG.R' [3s]
Running the tests in 'tests/foreach_dofuture,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R version 4.5.0 (2025-04-11 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.5.0 parallelly_1.43.0 tools_4.5.0
[4] parallel_4.5.0 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_07_01_50_00_15065/RtmpuECvju/RLIBS_191f014d84260', 'D:/RCompile/recent/R-4.5.0/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.5/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[17:21:20.825] doFuture2() ...
[17:21:20.898] Number of chunks: 1
[17:21:20.899] Number of futures (= number of chunks): 1
[17:21:20.899] seed = FALSE
[17:21:20.900] NULL
[17:21:20.903] seed = FALSE
[17:21:20.903] seed = FALSE
[17:21:20.904] - %dofuture% R expression:
[17:21:20.904] ii
[17:21:20.904] - foreach iterator arguments: [1] 'ii'
[17:21:20.905] - dummy globals (as locals): [1] 'ii'
[17:21:20.905] - R expression (map-reduce expression adjusted for RNG):
[17:21:20.906] {
[17:21:20.906] NULL
[17:21:20.906] "# doFuture():::doFuture2(): process chunk of elements"
[17:21:20.906] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[17:21:20.906] ...future.x_jj <- ...future.x_ii[[jj]]
[17:21:20.906] {
[17:21:20.906] NULL
[17:21:20.906] ii <- NULL
[17:21:20.906] }
[17:21:20.906] ...future.env <- environment()
[17:21:20.906] local({
[17:21:20.906] for (name in names(...future.x_jj)) {
[17:21:20.906] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[17:21:20.906] inherits = FALSE)
[17:21:20.906] }
[17:21:20.906] })
[17:21:20.906] NULL
[17:21:20.906] tryCatch(ii, error = identity)
[17:21:20.906] })
[17:21:20.906] }
[17:21:20.906] - identifying globals and packages ...
[17:21:20.907] - Argument 'globals':
[17:21:20.907] logi TRUE
[17:21:20.907] - attr(*, "add")= chr "...future.x_ii"
[17:21:20.907] - attr(*, "ignore")= chr "ii"
[17:21:20.910] - R expression (map-reduce expression searched for globals):
[17:21:20.910] {
[17:21:20.910] NULL
[17:21:20.910] "# doFuture():::doFuture2(): process chunk of elements"
[17:21:20.910] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[17:21:20.910] ...future.x_jj <- ...future.x_ii[[jj]]
[17:21:20.910] {
[17:21:20.910] NULL
[17:21:20.910] ii <- NULL
[17:21:20.910] }
[17:21:20.910] ...future.env <- environment()
[17:21:20.910] local({
[17:21:20.910] for (name in names(...future.x_jj)) {
[17:21:20.910] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[17:21:20.910] inherits = FALSE)
[17:21:20.910] }
[17:21:20.910] })
[17:21:20.910] NULL
[17:21:20.910] tryCatch(ii, error = identity)
[17:21:20.910] })
[17:21:20.910] }
[17:21:20.926] - R expression (%dofuture% expression searched for globals):
[17:21:20.926] ii
[17:21:20.928] - Globals in %dofuture% R expression not in map-reduce expression:
[17:21:20.929] - Appending 0 globals only found in the vanilla %dofuture% expression:
[17:21:20.929] - globals: [1] '...future.x_ii'
[17:21:20.929] List of 1
[17:21:20.929] $ ...future.x_ii: num 42
[17:21:20.929] - attr(*, "where")=List of 1
[17:21:20.929] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[17:21:20.929] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[17:21:20.929] - attr(*, "resolved")= logi FALSE
[17:21:20.929] - attr(*, "total_size")= num 39
[17:21:20.934] - packages: [1] 'doFuture'
[17:21:20.934] - identifying globals and packages ... DONE
[17:21:20.935] Launching 1 futures (chunks) ...
[17:21:20.935] Chunk #1 of 1 ...
[17:21:20.935] - Finding globals in 'args_list' for chunk #1 ...
[17:21:20.936]
[17:21:20.937]
[17:21:20.937] - Finding globals in 'args_list' for chunk #1 ... DONE
[17:21:20.937] - seeds: <none>
[17:21:20.946] Chunk #1 of 1 ... DONE
[17:21:20.947] Launching 1 futures (chunks) ... DONE
[17:21:20.947] - resolving futures
[17:21:20.947] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture2-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: 62fb52d71a79b36803b2d505efdac040-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture2-1'
Expression:
{
NULL
"# doFuture():::doFuture2(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
NULL
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: 62fb52d71a79b36803b2d505efdac040
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Running the tests in 'tests/foreach_dopar,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R version 4.5.0 (2025-04-11 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.5.0 parallelly_1.43.0 tools_4.5.0
[4] parallel_4.5.0 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> registerDoFuture()
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_07_01_50_00_15065/RtmpuECvju/RLIBS_191f014d84260', 'D:/RCompile/recent/R-4.5.0/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.5/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[17:23:16.210] doFuture() ...
[17:23:16.212] - dummy globals (as locals): [1] 'ii'
[17:23:16.213] - R expression:
[17:23:16.213] {
[17:23:16.213] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[17:23:16.213] "# also in nested calls "
[17:23:16.213] doFuture::registerDoFuture()
[17:23:16.213] "# doFuture():::doFuture(): process chunk of elements"
[17:23:16.213] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[17:23:16.213] ...future.x_jj <- ...future.x_ii[[jj]]
[17:23:16.213] {
[17:23:16.213] NULL
[17:23:16.213] ii <- NULL
[17:23:16.213] }
[17:23:16.213] ...future.env <- environment()
[17:23:16.213] local({
[17:23:16.213] for (name in names(...future.x_jj)) {
[17:23:16.213] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[17:23:16.213] inherits = FALSE)
[17:23:16.213] }
[17:23:16.213] })
[17:23:16.213] tryCatch(ii, error = identity)
[17:23:16.213] })
[17:23:16.213] }
[17:23:16.214] - identifying globals and packages ...
[17:23:16.239] List of 1
[17:23:16.239] $ ...future.x_ii: NULL
[17:23:16.239] - attr(*, "where")=List of 1
[17:23:16.239] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[17:23:16.239] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[17:23:16.239] - attr(*, "resolved")= logi FALSE
[17:23:16.239] - attr(*, "total_size")= num 27
[17:23:16.251] - R expression:
[17:23:16.251] {
[17:23:16.251] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[17:23:16.251] "# also in nested calls "
[17:23:16.251] doFuture::registerDoFuture()
[17:23:16.251] "# doFuture():::doFuture(): process chunk of elements"
[17:23:16.251] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[17:23:16.251] ...future.x_jj <- ...future.x_ii[[jj]]
[17:23:16.251] {
[17:23:16.251] NULL
[17:23:16.251] ii <- NULL
[17:23:16.251] }
[17:23:16.251] ...future.env <- environment()
[17:23:16.251] local({
[17:23:16.251] for (name in names(...future.x_jj)) {
[17:23:16.251] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[17:23:16.251] inherits = FALSE)
[17:23:16.251] }
[17:23:16.251] })
[17:23:16.251] tryCatch(ii, error = identity)
[17:23:16.251] })
[17:23:16.251] }
[17:23:16.253] - globals: [1] '...future.x_ii'
[17:23:16.253] List of 1
[17:23:16.253] $ ...future.x_ii: NULL
[17:23:16.253] - attr(*, "where")=List of 1
[17:23:16.253] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[17:23:16.253] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[17:23:16.253] - attr(*, "resolved")= logi FALSE
[17:23:16.253] - attr(*, "total_size")= num 27
[17:23:16.259] - packages: [1] 'doFuture'
[17:23:16.259] - identifying globals and packages ... DONE
[17:23:16.301] Number of chunks: 1
[17:23:16.301] Number of futures (= number of chunks): 1
[17:23:16.301] Launching 1 futures (chunks) ...
[17:23:16.301] Chunk #1 of 1 ...
[17:23:16.302] - Finding globals in 'args_list' chunk #1 ...
[17:23:16.303]
[17:23:16.303]
[17:23:16.303] - Finding globals in 'args_list' for chunk #1 ... DONE
[17:23:16.311] Chunk #1 of 1 ... DONE
[17:23:16.311] Launching 1 futures (chunks) ... DONE
[17:23:16.312] - resolving futures
[17:23:16.312] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: 6b6d8c64ee87ad004c153b4a9964633c-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture-1'
Expression:
{
"# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
"# also in nested calls "
doFuture::registerDoFuture()
"# doFuture():::doFuture(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: 6b6d8c64ee87ad004c153b4a9964633c
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Flavor: r-release-windows-x86_64
Version: 1.0.2
Check: tests
Result: ERROR
Running 'foreach_dofuture,cluster-missing-doFuture-pkg.R' [63s]
Running 'foreach_dofuture,errors.R' [12s]
Running 'foreach_dofuture,globals.R' [9s]
Running 'foreach_dofuture,nested_colon.R' [17s]
Running 'foreach_dofuture,nested_dofuture.R' [19s]
Running 'foreach_dofuture,rng.R' [5s]
Running 'foreach_dofuture.R' [4s]
Running 'foreach_dopar,cluster-missing-doFuture-pkg.R' [63s]
Running 'foreach_dopar,doRNG,dopar.R' [3s]
Running 'foreach_dopar,doRNG,dorng.R' [7s]
Running 'foreach_dopar,errors.R' [10s]
Running 'foreach_dopar,globals.R' [9s]
Running 'foreach_dopar,nested_colon.R' [16s]
Running 'foreach_dopar,nested_dopar.R' [21s]
Running 'foreach_dopar,options-for-export.R' [6s]
Running 'foreach_dopar.R' [4s]
Running 'makeChunks.R' [5s]
Running 'options,nested.R' [5s]
Running 'registerDoFuture.R' [3s]
Running 'times.R' [2s]
Running 'utils.R' [1s]
Running 'withDoRNG.R' [4s]
Running the tests in 'tests/foreach_dofuture,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R version 4.4.3 (2025-02-28 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.4.3 parallelly_1.43.0 tools_4.4.3
[4] parallel_4.4.3 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_04_01_50_00_20595/RtmpieOMwS/RLIBS_275907b014e43', 'D:/RCompile/recent/R-4.4.3/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.4/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dofuture% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[10:12:55.987] doFuture2() ...
[10:12:56.074] Number of chunks: 1
[10:12:56.074] Number of futures (= number of chunks): 1
[10:12:56.075] seed = FALSE
[10:12:56.076] NULL
[10:12:56.080] seed = FALSE
[10:12:56.081] seed = FALSE
[10:12:56.081] - %dofuture% R expression:
[10:12:56.081] ii
[10:12:56.082] - foreach iterator arguments: [1] 'ii'
[10:12:56.082] - dummy globals (as locals): [1] 'ii'
[10:12:56.083] - R expression (map-reduce expression adjusted for RNG):
[10:12:56.084] {
[10:12:56.084] NULL
[10:12:56.084] "# doFuture():::doFuture2(): process chunk of elements"
[10:12:56.084] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[10:12:56.084] ...future.x_jj <- ...future.x_ii[[jj]]
[10:12:56.084] {
[10:12:56.084] NULL
[10:12:56.084] ii <- NULL
[10:12:56.084] }
[10:12:56.084] ...future.env <- environment()
[10:12:56.084] local({
[10:12:56.084] for (name in names(...future.x_jj)) {
[10:12:56.084] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[10:12:56.084] inherits = FALSE)
[10:12:56.084] }
[10:12:56.084] })
[10:12:56.084] NULL
[10:12:56.084] tryCatch(ii, error = identity)
[10:12:56.084] })
[10:12:56.084] }
[10:12:56.085] - identifying globals and packages ...
[10:12:56.085] - Argument 'globals':
[10:12:56.085] logi TRUE
[10:12:56.085] - attr(*, "add")= chr "...future.x_ii"
[10:12:56.085] - attr(*, "ignore")= chr "ii"
[10:12:56.090] - R expression (map-reduce expression searched for globals):
[10:12:56.090] {
[10:12:56.090] NULL
[10:12:56.090] "# doFuture():::doFuture2(): process chunk of elements"
[10:12:56.090] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[10:12:56.090] ...future.x_jj <- ...future.x_ii[[jj]]
[10:12:56.090] {
[10:12:56.090] NULL
[10:12:56.090] ii <- NULL
[10:12:56.090] }
[10:12:56.090] ...future.env <- environment()
[10:12:56.090] local({
[10:12:56.090] for (name in names(...future.x_jj)) {
[10:12:56.090] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[10:12:56.090] inherits = FALSE)
[10:12:56.090] }
[10:12:56.090] })
[10:12:56.090] NULL
[10:12:56.090] tryCatch(ii, error = identity)
[10:12:56.090] })
[10:12:56.090] }
[10:12:56.114] - R expression (%dofuture% expression searched for globals):
[10:12:56.114] ii
[10:12:56.117] - Globals in %dofuture% R expression not in map-reduce expression:
[10:12:56.118] - Appending 0 globals only found in the vanilla %dofuture% expression:
[10:12:56.118] - globals: [1] '...future.x_ii'
[10:12:56.118] List of 1
[10:12:56.118] $ ...future.x_ii: num 42
[10:12:56.118] - attr(*, "where")=List of 1
[10:12:56.118] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[10:12:56.118] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[10:12:56.118] - attr(*, "resolved")= logi FALSE
[10:12:56.118] - attr(*, "total_size")= num 39
[10:12:56.125] - packages: [1] 'doFuture'
[10:12:56.125] - identifying globals and packages ... DONE
[10:12:56.126] Launching 1 futures (chunks) ...
[10:12:56.126] Chunk #1 of 1 ...
[10:12:56.126] - Finding globals in 'args_list' for chunk #1 ...
[10:12:56.128]
[10:12:56.128]
[10:12:56.129] - Finding globals in 'args_list' for chunk #1 ... DONE
[10:12:56.129] - seeds: <none>
[10:12:56.139] Chunk #1 of 1 ... DONE
[10:12:56.139] Launching 1 futures (chunks) ... DONE
[10:12:56.140] - resolving futures
[10:12:56.140] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture2-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: fa812925f99b7d3379ff7ac1429e6313-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture2-1'
Expression:
{
NULL
"# doFuture():::doFuture2(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
NULL
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: fa812925f99b7d3379ff7ac1429e6313
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Running the tests in 'tests/foreach_dopar,cluster-missing-doFuture-pkg.R' failed.
Complete output:
> source("incl/start.R")
Loading required package: foreach
Loading required package: future
R version 4.4.3 (2025-02-28 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows Server 2022 x64 (build 20348)
Matrix products: default
locale:
[1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] doFuture_1.0.2 future_1.40.0 foreach_1.5.2
loaded via a namespace (and not attached):
[1] compiler_4.4.3 parallelly_1.43.0 tools_4.4.3
[4] parallel_4.4.3 future.apply_1.11.3 listenv_0.9.1
[7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37
[10] globals_0.17.0
> options(future.debug = FALSE)
>
> message("*** cluster() ...")
*** cluster() ...
>
> registerDoFuture()
>
> message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", "))
Library paths: 'D:/temp/2025_05_04_01_50_00_20595/RtmpieOMwS/RLIBS_275907b014e43', 'D:/RCompile/recent/R-4.4.3/library'
> message("Package path: ", sQuote(system.file(package = "future")))
Package path: 'D:/RCompile/CRANpkg/lib/4.4/future'
>
> types <- "PSOCK"
> #if (supportsMulticore()) types <- c(types, "FORK")
>
> setupClusterWithoutPkgs <- function(type = "PSOCK",
+ withs = c("digest", "globals",
+ "listenv", "future"),
+ withouts = c("doFuture")) {
+ cl <- parallel::makeCluster(1L, type = type, timeout = 60)
+
+ ## Emulate a worker that does not have 'future' installed.
+ ## by setting a different user library path on the worker.
+ libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]]
+ attr(cl, "libs") <- libs
+
+ ## 'withouts' tops 'withs' for conveniency
+ withs <- setdiff(withs, withouts)
+
+ ## "Install" any 'withs' packages?
+ if (length(withs) > 0L) {
+ paths <- find.package(withs)
+ res <- parallel::clusterCall(cl, fun = sapply, X = paths,
+ FUN = file.copy, to = libs[1],
+ recursive = TRUE)[[1]]
+ res <- parallel::clusterCall(cl, fun = sapply, X = withs,
+ FUN = requireNamespace)[[1]]
+ }
+ attr(cl, "withs") <- res
+
+ ## Check whether 'future' is still available on the worker or not.
+ ## It could be that it is installed in the system library path, which
+ ## in case we cannot "hide" the future package from the worker.
+ res <- parallel::clusterCall(cl, fun = sapply, X = withouts,
+ FUN = requireNamespace)[[1]]
+ attr(cl, "withouts") <- res
+
+ cl
+ }
>
>
> cl <- NULL
> for (type in types) {
+ message(sprintf("Test set #1 with cluster type %s ...", sQuote(type)))
+
+ cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture"))
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## Package 'future' is not installed on worker (r_version: ...)>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ cl <- setupClusterWithoutPkgs(type)
+ if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) {
+ plan(cluster, workers = cl, .init = FALSE)
+
+ ## Here we will get:
+ ## <UnexpectedFutureResultError: Unexpected result (of class
+ ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture
+ ## future (label = '<none>', expression = '{ ... }'):
+ ## there is no package called 'doFuture'>
+ ## Note: This error is produced by the future backend when it recieves
+ ## the unexpected results.
+ res <- tryCatch({
+ y <- foreach(ii = 1:3) %dopar% ii
+ }, error = identity)
+ print(res)
+ stopifnot(inherits(res, "FutureError"))
+ }
+ parallel::stopCluster(cl)
+ cl <- NULL
+
+ plan(sequential)
+
+ message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type)))
+ } ## for (type ...)
Test set #1 with cluster type 'PSOCK' ...
[10:15:05.256] doFuture() ...
[10:15:05.259] - dummy globals (as locals): [1] 'ii'
[10:15:05.259] - R expression:
[10:15:05.260] {
[10:15:05.260] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[10:15:05.260] "# also in nested calls "
[10:15:05.260] doFuture::registerDoFuture()
[10:15:05.260] "# doFuture():::doFuture(): process chunk of elements"
[10:15:05.260] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[10:15:05.260] ...future.x_jj <- ...future.x_ii[[jj]]
[10:15:05.260] {
[10:15:05.260] NULL
[10:15:05.260] ii <- NULL
[10:15:05.260] }
[10:15:05.260] ...future.env <- environment()
[10:15:05.260] local({
[10:15:05.260] for (name in names(...future.x_jj)) {
[10:15:05.260] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[10:15:05.260] inherits = FALSE)
[10:15:05.260] }
[10:15:05.260] })
[10:15:05.260] tryCatch(ii, error = identity)
[10:15:05.260] })
[10:15:05.260] }
[10:15:05.261] - identifying globals and packages ...
[10:15:05.281] List of 1
[10:15:05.281] $ ...future.x_ii: NULL
[10:15:05.281] - attr(*, "where")=List of 1
[10:15:05.281] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[10:15:05.281] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[10:15:05.281] - attr(*, "resolved")= logi FALSE
[10:15:05.281] - attr(*, "total_size")= num 27
[10:15:05.294] - R expression:
[10:15:05.294] {
[10:15:05.294] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
[10:15:05.294] "# also in nested calls "
[10:15:05.294] doFuture::registerDoFuture()
[10:15:05.294] "# doFuture():::doFuture(): process chunk of elements"
[10:15:05.294] lapply(seq_along(...future.x_ii), FUN = function(jj) {
[10:15:05.294] ...future.x_jj <- ...future.x_ii[[jj]]
[10:15:05.294] {
[10:15:05.294] NULL
[10:15:05.294] ii <- NULL
[10:15:05.294] }
[10:15:05.294] ...future.env <- environment()
[10:15:05.294] local({
[10:15:05.294] for (name in names(...future.x_jj)) {
[10:15:05.294] assign(name, ...future.x_jj[[name]], envir = ...future.env,
[10:15:05.294] inherits = FALSE)
[10:15:05.294] }
[10:15:05.294] })
[10:15:05.294] tryCatch(ii, error = identity)
[10:15:05.294] })
[10:15:05.294] }
[10:15:05.295] - globals: [1] '...future.x_ii'
[10:15:05.296] List of 1
[10:15:05.296] $ ...future.x_ii: NULL
[10:15:05.296] - attr(*, "where")=List of 1
[10:15:05.296] ..$ ...future.x_ii:<environment: R_EmptyEnv>
[10:15:05.296] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list"
[10:15:05.296] - attr(*, "resolved")= logi FALSE
[10:15:05.296] - attr(*, "total_size")= num 27
[10:15:05.303] - packages: [1] 'doFuture'
[10:15:05.303] - identifying globals and packages ... DONE
[10:15:05.388] Number of chunks: 1
[10:15:05.389] Number of futures (= number of chunks): 1
[10:15:05.389] Launching 1 futures (chunks) ...
[10:15:05.390] Chunk #1 of 1 ...
[10:15:05.391] - Finding globals in 'args_list' chunk #1 ...
[10:15:05.392]
[10:15:05.393]
[10:15:05.393] - Finding globals in 'args_list' for chunk #1 ... DONE
[10:15:05.401] Chunk #1 of 1 ... DONE
[10:15:05.402] Launching 1 futures (chunks) ... DONE
[10:15:05.402] - resolving futures
[10:15:05.402] - gathering results & relaying conditions (except errors)
<FutureInterruptError: A future ('doFuture-1') of class ClusterFuture was interrupted, while running on 'localhost'>
Future UUID: 70c81c700ce96db80fdaa43bb8e3de16-2
DEBUG: BEGIN TROUBLESHOOTING HELP
Future involved:
ClusterFuture:
Label: 'doFuture-1'
Expression:
{
"# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'"
"# also in nested calls "
doFuture::registerDoFuture()
"# doFuture():::doFuture(): process chunk of elements"
lapply(seq_along(...future.x_ii), FUN = function(jj) {
...future.x_jj <- ...future.x_ii[[jj]]
{
NULL
ii <- NULL
}
...future.env <- environment()
local({
for (name in names(...future.x_jj)) {
assign(name, ...future.x_jj[[name]], envir = ...future.env,
inherits = FALSE)
}
})
tryCatch(ii, error = identity)
})
}
Lazy evaluation: FALSE
Asynchronous evaluation: TRUE
Local evaluation: TRUE
Environment: R_GlobalEnv
Capture standard output: TRUE
Capture condition classes: 'condition' (excluding '<none>')
Immediate condition classes: 'immediateCondition'
Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes)
Packages: 1 packages ('doFuture')
L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE)
Resolved: TRUE
Value: <not collected>
Conditions captured: <none>
Early signaling: FALSE
Owner process: 70c81c700ce96db80fdaa43bb8e3de16
Class: 'ClusterFuture', 'MultiprocessFuture', 'Future'
DEBUG: END TROUBLESHOOTING HELP
Error in serialize(data, node$con) : error writing to connection
Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize
Execution halted
Flavor: r-oldrel-windows-x86_64