Nothing
source("incl/start.R")
message("*** Non-exportable globals ...")
options(future.debug = FALSE)
options(future.globals.onReference = "warning")
plan(cluster, workers = 1L)
message("* R connections ...")
## Create a dummy, global connection with a high enough connection index
## such that it won't conflict with an existing connection index on the
## worker. We use sink():s to "pad" with enough connections
tmp_file <- tempfile()
utils::capture.output(utils::capture.output({
con <- file(tmp_file, open = "wb")
}))
cat("hello\n", file = con)
flush(con)
bfr <- readLines(con = tmp_file)
print(bfr)
stopifnot(bfr == "hello")
message(sprintf("Connection index of dummy 'con' connection: %d\n", as.integer(con)))
stopifnot(as.integer(con) >= 6)
message("- Run-time error")
## Assert we can detect the reference
res <- tryCatch({
f <- future(cat("world\n", file = con), stdout = NA)
}, FutureWarning = identity)
print(res)
stopifnot(inherits(res, "FutureWarning"),
grepl("non-exportable reference", conditionMessage(res)))
f <- future({
max <- max(getAllConnections(), na.rm = TRUE)
cat(sprintf("Max connection index on worker: %d\n", max))
if (as.integer(con) <= max) {
warning(sprintf("TEST ERROR: Index of global 'con' is the same of an existing connection of the worker: %d in [0,%d]", as.integer(con), max))
}
cat("world\n", file = con)
})
res <- tryCatch({
v <- value(f)
}, error = identity)
print(res)
stopifnot(inherits(res, "error"))
## Nothing changed
bfr <- readLines(con = tmp_file)
print(bfr)
stopifnot(bfr == "hello")
close(con)
file.remove(tmp_file)
message("* R connections ... DONE")
message("*** Non-exportable globals ... DONE")
source("incl/end.R")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.