Skip to content

Commit d3d1455

Browse files
Merge branch 'release/1.69.0'
2 parents 6125208 + ba36408 commit d3d1455

File tree

145 files changed

+2294
-2474
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+2294
-2474
lines changed

.Rbuildignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#----------------------------
22
# Git and SVN related
33
#----------------------------
4+
^.pre-commit-config.yaml$
45
^.svn
56
^.git
67
^.make

.github/workflows/R-CMD-check.yaml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ jobs:
2828
- {os: ubuntu-latest, r: 'oldrel-1' }
2929
- {os: ubuntu-latest, r: 'oldrel-2' }
3030
- {os: ubuntu-latest, r: '4.0' }
31-
- {os: ubuntu-latest, r: 'devel' , globals: develop, label: 'globals develop' }
32-
- {os: ubuntu-latest, r: '4.0' , globals: develop, label: 'globals develop' }
3331

3432
- {os: ubuntu-latest, r: 'release', strict: true, label: 'strict' }
3533

@@ -38,7 +36,6 @@ jobs:
3836
- {os: ubuntu-latest, r: 'release' , language: ko, label: ko }
3937
- {os: ubuntu-latest, r: 'release' , language: zh_CN, label: zh_CN }
4038
- {os: ubuntu-latest, r: 'release' , language: zh_TW, label: zh_TW }
41-
- {os: ubuntu-latest, r: 'release' , globals_keepWhere: false, label: '!keepWhere' }
4239
- {os: ubuntu-latest, r: 'release' , plan: multicore, fork_multithreading_enable: false, label: 'multicore, no-multithreading-in-forks' }
4340
- {os: ubuntu-latest, r: 'release' , plan: multisession, fork_multithreading_enable: false, label: 'multisession, no-multithreading-in-forks' }
4441
- {os: ubuntu-latest, r: 'release' , psock_relay_immediate: false, label: 'no-immediate-relay-in-psock' }
@@ -130,8 +127,14 @@ jobs:
130127
run: |
131128
if ("${{ matrix.config.strict }}" == "true") {
132129
# FIXME: Sys.setenv(R_FUTURE_CONNECTIONS_ONMISUSE = "error[details=TRUE]")
130+
Sys.setenv(NOT_CRAN = "true")
133131
Sys.setenv(R_FUTURE_GLOBALENV_ONMISUSE = "error")
134132
Sys.setenv(R_FUTURE_RNG_ONMISUSE = "error")
133+
Sys.setenv(R_FUTURE_FUTURE_EARLYSIGNAL = "defunct")
134+
Sys.setenv(R_FUTURE_FUTURE_LOCAL = "defunct")
135+
Sys.setenv(R_FUTURE_FUTURE_GC = "defunct")
136+
Sys.setenv(R_FUTURE_PLAN_EARLYSIGNAL = "defunct")
137+
Sys.setenv(R_FUTURE_RESOLVED_RUN = "defunct")
135138
}
136139
if (nzchar(Sys.getenv("R_FUTURE_PLAN")) || getRversion() < "3.5.0") Sys.setenv(RCMDCHECK_ERROR_ON = "error")
137140
rcmdcheck::rcmdcheck(
@@ -149,6 +152,11 @@ jobs:
149152
Sys.setenv(R_FUTURE_DEVICES_ONMISUSE = "error")
150153
Sys.setenv(R_FUTURE_GLOBALENV_ONMISUSE = "error")
151154
Sys.setenv(R_FUTURE_RNG_ONMISUSE = "error")
155+
Sys.setenv(R_FUTURE_FUTURE_EARLYSIGNAL = "defunct")
156+
Sys.setenv(R_FUTURE_FUTURE_LOCAL = "defunct")
157+
Sys.setenv(R_FUTURE_FUTURE_GC = "defunct")
158+
Sys.setenv(R_FUTURE_PLAN_EARLYSIGNAL = "defunct")
159+
Sys.setenv(R_FUTURE_RESOLVED_RUN = "defunct")
152160
}
153161
rcmdcheck::rcmdcheck(
154162
args = c("--no-manual", "--as-cran",

.github/workflows/future_tests.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020
- { plan: 'multicore' }
2121
- { plan: 'multisession' }
2222
- { plan: 'sequential' }
23+
- { plan: 'plan(cluster, workers = parallelly::makeClusterSequential())' }
2324
- { plan: 'future.batchtools::batchtools_local' }
2425
- { plan: 'future.batchtools::batchtools_bash' }
2526
- { plan: 'future.callr::callr' }
@@ -84,7 +85,7 @@ jobs:
8485
run: |
8586
R CMD build --no-build-vignettes --no-manual .
8687
R CMD INSTALL *.tar.gz
87-
Rscript -e future.tests::check --args --test-plan=${{ matrix.future.plan }}
88+
Rscript -e future.tests::check --args --test-plan="${{ matrix.future.plan }}"
8889
8990
- name: Upload check results
9091
if: failure()

.github/workflows/revdepcheck-top.yaml

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ name: revdepcheck-top
44

55
jobs:
66
R-CMD-check:
7-
if: "! contains(github.event.head_commit.message, '[ci skip]')"
7+
if: "! contains(github.event.head_commit.message, '[ci skip]')"
88

99
timeout-minutes: 30
10-
10+
1111
runs-on: ubuntu-latest
1212

1313
name: ${{ matrix.config.pkg }} (${{ matrix.config.r }}) ${{ matrix.config.label }}
@@ -24,19 +24,11 @@ jobs:
2424
- { r: "release", pkg: "furrr", not_cran: false }
2525
- { r: "release", pkg: "future.tests" }
2626
- { r: "release", pkg: "promises" , force_suggests: false }
27-
- { r: "release", pkg: "shiny", not_cran: false }
27+
- { r: "release", pkg: "shiny" , force_suggests: false , not_cran: false }
2828
- { r: "release", pkg: "plumber" }
29-
- { r: "release", pkg: "future.batchtools" , globals: develop, label: 'globals develop' }
30-
- { r: "release", pkg: "future.callr" , globals: develop, label: 'globals develop' }
31-
- { r: "release", pkg: "future.mirai" , globals: develop, label: 'globals develop' }
32-
- { r: "release", pkg: "doFuture" , globals: develop, label: 'globals develop' }
33-
- { r: "release", pkg: "future.apply" , globals: develop, label: 'globals develop' }
34-
- { r: "release", pkg: "furrr", not_cran: false, globals: develop, label: 'globals develop' }
35-
- { r: "release", pkg: "future.tests" , globals: develop, label: 'globals develop' }
3629
- { r: "release", pkg: "doFuture" , plan: multisession, label: multisession }
3730
- { r: "release", pkg: "future.apply" , plan: multisession, label: multisession }
3831
- { r: "release", pkg: "furrr", not_cran: false, plan: multisession, label: multisession }
39-
- { r: "release", pkg: "future.apply" , globals_keepWhere: false, label: '!keepWhere' }
4032

4133
env:
4234
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
@@ -50,7 +42,7 @@ jobs:
5042
R_FUTURE_GLOBALS_KEEPWHERE: ${{ matrix.config.globals_keepWhere }}
5143
R_GLOBALS_BRANCH: ${{ matrix.config.globals }}
5244
NOT_CRAN: true
53-
45+
5446
steps:
5547
- uses: actions/checkout@v4
5648

@@ -70,6 +62,21 @@ jobs:
7062
any::covr
7163
needs: check
7264

65+
- name: Install system dependencies
66+
run: |
67+
## 'plumber' fails to install 'units' and 'sf'
68+
if [[ "${{ matrix.config.pkg }}" == "plumber" ]]; then
69+
sudo apt install -y libudunits2-dev ## 'units'
70+
sudo apt install -y libgdal-dev libgeos-dev libproj-dev ## 'sf'
71+
fi
72+
## 'shiny' fails at run time with "Error in `dyn.load(file, DLLpath
73+
## = DLLpath, ...)`: unable to load shared object '/home/runner/
74+
## work/_temp/Library/otelsdk/libs/otelsdk.so': libprotobuf.so.32:
75+
## cannot open shared object file: No such file or directory
76+
if [[ "${{ matrix.config.pkg }}" == "shiny" ]]; then
77+
sudo apt install -y libprotobuf32t64
78+
fi
79+
7380
- name: Install dependencies
7481
run: |
7582
remotes::install_deps(dependencies = TRUE)

.github/workflows/tmate.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,12 @@ jobs:
3333
# - {os: ubuntu-latest, r: 'oldrel' }
3434
# - {os: ubuntu-latest, r: 'oldrel-1' }
3535
# - {os: ubuntu-latest, r: 'oldrel-2' }
36-
# - {os: ubuntu-latest, r: '4.0' }
3736
#
3837
# - {os: ubuntu-latest, r: 'release' , availablecores: 1, label: 'availableCores.system=1' }
3938
# - {os: ubuntu-latest, r: 'release' , availablecores: 2, label: 'availableCores.system=2' }
4039
# - {os: ubuntu-latest, r: 'release' , language: ko, label: ko }
4140
# - {os: ubuntu-latest, r: 'release' , language: zh_CN, label: zh_CN }
4241
# - {os: ubuntu-latest, r: 'release' , language: zh_TW, label: zh_TW }
43-
# - {os: ubuntu-latest, r: 'release' , globals_keepWhere: true, label: 'keepWhere' }
44-
# - {os: ubuntu-latest, r: 'release' , globals_keepWhere: false, label: '!keepWhere' }
4542
# - {os: ubuntu-latest, r: 'release' , plan: multicore, fork_multithreading_enable: false, label: 'multicore, no-multithreading-in-forks' }
4643
# - {os: ubuntu-latest, r: 'release' , plan: multisession, fork_multithreading_enable: false, label: 'multisession, no-multithreading-in-forks' }
4744
# - {os: ubuntu-latest, r: 'release' , psock_relay_immediate: false, label: 'no-immediate-relay-in-psock' }

.pre-commit-config.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
repos:
2+
- repo: https://github.com/pre-commit/pre-commit-hooks
3+
rev: v2.3.0
4+
hooks:
5+
- id: check-yaml
6+
- id: check-merge-conflict
7+
- id: detect-aws-credentials
8+
- id: detect-private-key
9+
- id: mixed-line-ending
10+

DESCRIPTION

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: future
2-
Version: 1.68.0
2+
Version: 1.69.0
33
Title: Unified Parallel and Distributed Processing in R for Everyone
44
Depends:
55
R (>= 3.2.0)
@@ -49,6 +49,7 @@ Collate:
4949
'000.bquote.R'
5050
'000.import.R'
5151
'000.re-exports.R'
52+
'009.deprecation.R'
5253
'010.tweakable.R'
5354
'010.utils-parallelly.R'
5455
'backend_api-01-FutureBackend-class.R'
@@ -86,6 +87,7 @@ Collate:
8687
'protected_api-globals.R'
8788
'protected_api-journal.R'
8889
'protected_api-resolve.R'
90+
'protected_api-result.R'
8991
'protected_api-signalConditions.R'
9092
'testme.R'
9193
'utils-basic.R'

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ vignettes: vignettes/future-1-overview.md.rsp
1010

1111
spelling:
1212
$(R_SCRIPT) -e "spelling::spell_check_package()"
13-
$(R_SCRIPT) -e "spelling::spell_check_files(c('NEWS.md', 'inst/vignettes-static/future-1-overview.md.rsp.rsp', dir('vignettes', pattern='[.]rsp$$', full.names=TRUE)), ignore=readLines('inst/WORDLIST', warn=FALSE))"
13+
$(R_SCRIPT) -e "spelling::spell_check_files(c('inst/vignettes-static/future-1-overview.md.rsp.rsp', dir('vignettes', pattern='[.]rsp$$', full.names=TRUE)), ignore=readLines('inst/WORDLIST', warn=FALSE))"
1414

1515
future.tests/%:
1616
$(R_SCRIPT) -e "future.tests::check" --args --test-plan=$*

NAMESPACE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ S3method(cancel,default)
1818
S3method(cancel,environment)
1919
S3method(cancel,list)
2020
S3method(cancel,listenv)
21+
S3method(conditionMessage,FutureCondition)
2122
S3method(futures,environment)
2223
S3method(futures,list)
2324
S3method(futures,listenv)
@@ -162,7 +163,6 @@ export(SequentialFutureBackend)
162163
export(UnexpectedFutureResultError)
163164
export(UniprocessFuture)
164165
export(as.FutureGlobals)
165-
export(as.cluster)
166166
export(availableCores)
167167
export(availableWorkers)
168168
export(backtrace)

NEWS.md

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,60 @@
1+
# Version 1.69.0 [2026-01-15]
2+
3+
## Significant Changes
4+
5+
* Removed generic function `as.cluster()`, which has been re-exported
6+
from the **parallelly** package since 2020. If needed, please use
7+
it from the **parallelly** package instead.
8+
9+
## New Features
10+
11+
* Add `conditionMessage()` for `FutureCondition`, which appends
12+
meta-data information to the original message.
13+
14+
* Add more metadata to `FutureCondition` objects by default, e.g. in
15+
which session (including UUID, hostname, and PID) and when the
16+
condition was created.
17+
18+
* `print()` on a Future outputs a description of the current state.
19+
20+
## Bug Fixes
21+
22+
* `makeClusterFuture()` clusters would not signal errors as other
23+
**parallel** clusters. Instead they were signals as-is instantly.
24+
25+
* `future(..., packages = "missing-package")` did not result in an
26+
error despite requesting a non-installed package.
27+
28+
* `plan(..., interrupts = ...)` would produce a warning on "Detected
29+
1 unknown future arguments: 'interrupts'" for third-party future
30+
backends.
31+
32+
* `plan(cluster, workers = parallelly::makeClusterSequential())` would
33+
erase the global environment as soon as a future is launched.
34+
35+
* `resolved()` on a 'cluster' future would produce a warning when
36+
using a `parallelly::makeClusterSequential())` cluster.
37+
38+
## Deprecated and Defunct
39+
40+
* The `cluster` backend now defaults to `earlySignal = FALSE`. This
41+
was effectively already the case, because of an internal thinko
42+
bug.
43+
44+
* Remove arguments `earlySignal` and `gc` from `future()`,
45+
`futureAssign()`, and `futureCall()`. Attempts to set them produce
46+
deprecation warnings. Deprecated also hidden argument `local`,
47+
which was kept around for legacy reasons.
48+
49+
* Use of `plan(..., earlySignal = ...)` is now deprecated and
50+
produces a deprecation warning.
51+
52+
* Remove argument `run` from `resolved()`. Attempts to set it
53+
produces a deprecation warning.
54+
55+
* Remove internal future field `envir`.
56+
57+
158
# Version 1.68.0 [2025-11-16]
259

360
This is the fifth rollout out of several towards a near-future major
@@ -19,7 +76,7 @@ repeat. This release fixes a few more regressions introduced in
1976

2077
* The `cluster` backend failed when used with an `MPIcluster` as
2178
created by `parallel::makeCluster(..., type = "MPI")`. This bug was
22-
introduced in **future** (>= 1.40.0) [2025-04-10].
79+
introduced in **future** 1.40.0 [2025-04-10].
2380

2481
* Setting `R_FUTURE_PLAN=multisession` in an Renviron file, or a
2582
shell startup script, would result in a "fork bomb" when loading
@@ -28,7 +85,7 @@ repeat. This release fixes a few more regressions introduced in
2885
loaded instead of being deferred to when the first future launched.
2986
This resulted in new, nested R workers being created recursively,
3087
until the machine ran out of resources. This bug was introduced in
31-
**future** (>= 1.67.0) [2025-07-29].
88+
**future** 1.67.0 [2025-07-29].
3289

3390
* ``value(..., reduce = structure(`+`, init = 42))`` is not
3491
supported, because `` `+` `` is a primitive function and one must
@@ -63,8 +120,8 @@ repeat. This release fixes a few more regressions introduced in
63120
* The pre-validation of the cluster worker allotted to a future when
64121
launched was unnecessarily expensive due to a thinko since
65122
**future** 1.40.0 (2025-04-10), e.g. it would take ~0.1-0.2 seconds
66-
for a multisession future, whereas after the fix it is effectly 0.0
67-
seconds.
123+
for a multisession future, whereas after the fix it is effectively
124+
0.0 seconds.
68125

69126
* Calling `resolved()` on a lazy `ClusterFuture` would collect the
70127
result for the first _resolved_ future in order to free up one

0 commit comments

Comments
 (0)