Skip to contents

crew 1.0.0.9001 (development)

  • Change prefix in name_worker() from crew- to crew-worker-.

crew 1.0.0

CRAN release: 2025-02-03

  • Avoid partial match in a call to crew_terminate_process().
  • Migrate to mirai 2.0.0 with the pair 1 poly protocol (#193). Most notably, all workers now share the same URL instead of having different web sockets for different workers. This gets rid of crew’s previous “slotted” model for workers.
  • Prohibit duplicated task names in push(). (The task must be popped first before another task of the same name can be submitted.) This allows controllers to use hash tables to track tasks, which makes push() and pop() orders of magnitude faster. It is also needed for the new retry mechanism based on backup controllers and controller groups.
  • Use exponential backoff in throttles.
  • Share throttles between scale() and wait() to increase responsiveness.
  • Use a unified throttle for controller groups, which requires refactoring wait(mode = "all") for controller groups.
  • Name every task and record every command.
  • Switch URLs from ws:// (and wss://) to tcp:// (and tls+tcp://) (#193).
  • Change R-level error status code to -1 (previously 1).
  • Add a queue class for resolved tasks to make pop() and collect() more efficient. pop() is 64 times faster.
  • For clarity, rename the "launcher" column of the results to "controller".
  • Log crashes and cancellations separately from ordinary errors in summary().

crew 0.10.2

CRAN release: 2024-11-15

  • Eliminate spurious launch_max error from underutilized workers (#189).
  • Deprecate launch_max in favor of crashes_error (#189).
  • Look for crashes of all workers in rotate() instead of looking for crashes of a specific worker in launch() (#189).
  • Add a crashes() launcher method to allow plugins to detect and respond to crashes more easily.
  • Change default seconds_idle to 300.
  • Move autometric to Suggests:.

crew 0.10.1

CRAN release: 2024-11-03

crew 0.10.0

CRAN release: 2024-10-11

  • Give full worker name in the worker launch error message (@multimeric).
  • Start the controller automatically in more methods.
  • Add an r_arguments argument to supply command line arguments to R for workers (#175, @rpruim).
  • Add a cancel() controller method to cancel one or more tasks.
  • Call cancel(all = TRUE) from terminate() as a safeguard.
  • Make client$dispatcher a ps::ps_handle() handle and add a new client$client handle for the current process.
  • To passively log memory usage when log_resources is given, the controller now calls log() as a side effect in most controller methods, with throttling to preserve speed.
  • Return a status and status code from pop() etc.
  • New internal function as_monad() makes error reporting more consistent.
  • Use path.expand() on local log files.
  • Switch to Rscript.
  • Print session info from crew_worker() before attempting to dial into mirai.
  • Add asyncdial = FALSE back to mirai::daemon() call.
  • Deprecate local_log_directory and local_log_join in favor of crew_options_local() and the options_local argument.
  • Add crew_options_metrics() and the options_metrics argument for recording resource metrics (#178).
  • Add a new logging.Rmd vignette to explain best practices for logging and resource usage metrics (#178).

crew 0.9.5

CRAN release: 2024-06-24

  • CRAN patch.

crew 0.9.4

CRAN release: 2024-06-20

  • Do not use extended tasks in Shiny vignette.
  • Add a new retry_tasks argument with default TRUE (#170).
  • Avoid Base64 encoding functions from nanonext

crew 0.9.3

CRAN release: 2024-05-22

  • Deprecate native crew promises in favor of native event-driven promises in mirai (#162).
  • Update the shiny.Rmd and promises.Rmd vignette to recommend native event-driven mirai promises (#162).

crew 0.9.2

CRAN release: 2024-04-24

  • Use .args rather than ... in mirai::mirai() to make sure arguments continue to be passed as local variables in mirai >= 0.13.1.9012.
  • Add new controller methods autoscale(), descale(), and started() to facilitate different kinds of Shiny apps.
  • Deprecate the scale and throttle methods of controller$promise(). promise() now always calls autoscale() to make sure one and only one auto-scaling loop is running asynchronously. Auto-scaling thus continues even after the promise resolves.
  • Add a second example vignette that simulates coin flips.
  • Add a new error argument to collect() (#166).

crew 0.9.1

CRAN release: 2024-03-25

  • Rewrite the async Shiny vignette with crew promises and Shiny extended tasks (#157, @jcheng5).
  • Clarify the intent of controller$promise(mode = "one") in the vignette on promises (@jcheng5).
  • Implement an error argument in pop() which may help with integration with ExtendedTask (@jcheng5).
  • Handle task errors in the Shiny vignette (@jcheng5).

crew 0.9.0

CRAN release: 2024-02-08

  • Require nanonext >= 0.12.0 and mirai >= 0.12.0.
  • Return to always re-launching backlogged inactive workers (#79, https://github.com/shikokuchuo/mirai/discussions/95).
  • Implement push_backlog() and pop_backlog() to manage cases when it is not desirable to push to saturated controllers (https://github.com/ropensci/targets/issues/1220).
  • Invisibly return the mirai object of a task pushed to the controller. This allows users to interact with the task directly, e.g. to create a promise object with promises::as.promise() (#146, @jcheng5).
  • Add a new walk() method for controllers and controller groups to submit tasks in batch and return control immediately without waiting for any task to complete (#148, @jcheng5).
  • Revive the collect() method for popping multiple tasks at once (#148, @jcheng5).
  • Add controller group methods nonempty(), resolved(), unresolved(), and unpopped() to help with #148.
  • Make the mirai dispatcher error message extremely verbose.

crew 0.8.0

CRAN release: 2024-01-09

crew 0.7.0

CRAN release: 2023-12-11

  • Migrate from asyncdial to autoexit.
  • Use Sys.info()[["user"]] to get the user in crew_clean() (#135, @luwidmer).
  • Use condition variables to wait for tasks more efficiently (#108).
  • Because of #108, controller$map() can no longer be used if there are tasks waiting to be popped.
  • Use a cli progress bar in map().
  • Encapsulate non-function R6 members in the private list and add active bindings where interfaces are necessary (#137). Ad hoc tests that absolutely need to modify private objects can use object$.__enclos_env__$private trick, but these tests should be skipped on CRAN in case there is a change to R6 that breaks this.
  • Drop .signal from mirai::mirai() since all mirai tasks signal as of mirai version 0.11.2.9025.
  • Implement crew_throttle(), a decoupled mechanism for throttling that can be applied to scaling.
  • Bring back the throttle argument, powered by crew_throttle().
  • Retry mirai::status() again in daemons_info() and make it configurable using seconds_interval and seconds_timeout in both the client and the launcher (#128).

crew 0.6.0

CRAN release: 2023-10-12

  • Migrate checks to enforce features in version 0.5.0 for reverse dependencies.
  • Drop check of backlogged workers, c.f. https://github.com/shikokuchuo/mirai/discussions/63#discussioncomment-7051889 (#79, #124, @shikokuchuo).
  • Deprecate seconds_exit because exitlinger in mirai is now obsolete (#125, @shikokuchuo).
  • Use mirai::nextget("cv") to count unresolved tasks instead of looping through all the task objects (#131).
  • Remove throttling and collect() in auto-scaling. Simplifies much of the code. Made possible by the efficiency gains in #131.
  • Simplify wait().
  • seconds_interval in map() no longer defaults to controller$client$seconds_interval.
  • launcher$terminate_workers() terminates one or more workers, and launcher$terminate terminates the whole launcher.
  • Add infrastructure to let custom launcher plugins launch and terminate workers asynchronously (#133). Launchers can set a positive number in the processes field to set the number of local mirai daemons for asynchronous requests to launch and terminate the serious workers. Then, launch_worker() and terminate_worker() can optionally make use of launcher$async$eval() to send these asynchronous calls.

crew 0.5.0

CRAN release: 2023-09-18

  • Suppress interactive browser on Windows which launched on each worker previously (@psychelzh).
  • Migrate to the new host/daemon nomenclature in mirai 0.9.1 (#96).
  • Suppress status() retries (@shikokuchuo, #100).
  • Implement launch_max to error out if workers repeatedly launch without completing any tasks (#101, @shikokuchuo, @multimeric).
  • Detect discovered workers more robustly in launcher$done().
  • Add a new algorithm argument to the push(), shove(), and map() methods of controllers and controller groups, as well as arguments/fields in crew_eval() and its return value (#113, @shikokuchuo).
  • As a default for pseudo-random number generation, leverage widely-spaced L’Ecuyer streams as supported by mirai::nextstream() (#115, @shikokuchuo).
  • Move README documentation to vignettes.
  • Add a new crew_tls() function for TLS configuration (#120).
  • Deprecate the tls_enable and tls_config arguments of crew_client() etc. in favor of a tls argument which accepts crew_tls() objects (#120).

crew 0.4.0

CRAN release: 2023-07-10

Highlights

  • Use the TLS capabilities of nanonext and mirai.
  • Add a map() method to the controller class for functional programming (#93).
  • Fix bug in scale() which launched too many workers when active - demand was less than 0.
  • Add crew_clean() to help clean up any lingering dispatchers and workers from previous sessions.

Other improvements

  • Remove temporary controller summary workaround that ensured CRAN compatibility with targets 1.1.3.
  • Add guardrails to make sure the controller is started for methods that require this. Part of this involved improving the error messages.
  • Retry daemons() in daemons_info().

crew 0.3.0

CRAN release: 2023-06-26

  • Track warnings properly (#81, @brendanf).
  • Optimize heavily (#81, #83, @shikokuchuo, @brendanf).
  • Use CRAN nanonext 0.9.0.
  • Delegate the task pushing and collection logic to a new R6 schedule class (#84).
  • Delegate auto-scaling to the launcher (#84).
  • Drastically simplify internal logic (#84).
  • Rename “router” to “client” and change the function signature of launch_worker() (#84). Unfortunately neither of these changes is back-compatible for third-party launcher plugins. However, the controller interface is still back-compatible, so targets remains unaffected.
  • Terminate “lost” workers on websocket rotation.
  • Allow NULL result in pop()$result[[1L]].
  • Delegate summaries among the controller, schedule, launcher, and client.
  • Default to the loopback address for the local controller.
  • Use already cumulative assigned and complete stats from mirai 0.8.7.9029.
  • Reorganize pkgdown reference and Rd families to clarify which parts are for end-users and which parts are for launcher plugin developers.
  • Add controller$shove() and schedule$list() to support fast extensions for functional programming.
  • Depend on mirai 0.9.0 or greater.

crew 0.2.1

CRAN release: 2023-05-22

crew 0.2.0

  • Use .args instead of ... in mirai::mirai().
  • Use set.seed() instead of withr::local_seed() (#67, @shikokuchuo).
  • Add a vignette to showcase integration with Shiny, co-authored with @dwoodie and with helpful suggestions by @shikokuchuo.
  • Drop rlang::duplicate() (#72, @shikokuchuo).
  • Do not poll dispatcher availability when starting router objects (@shikokuchuo).
  • Implement a saturated() controller method to support targets.
  • Add a worker_index column to controller summaries.
  • When relaunching workers, prioritize those with unresolved tasks stuck at the NNG level (#75, @shikokuchuo).
  • Always relaunch backlogged inactive workers (#79).
  • Deprecate the auto_scale argument/field of controllers in favor of the scale argument of push(), pop(), and wait().
  • Throttle auto-scaling with interval self$router$seconds_interval (#76).
  • Remove clean() and instead terminate lost workers on launch.
  • Fix examples.
  • Add a collect argument to pop().

crew 0.1.1

CRAN release: 2023-04-21

  • Ensure checks pass on CRAN.

crew 0.1.0

CRAN release: 2023-04-19

  • Remove asyncdial from call to mirai::daemons().
  • Explain vision in the launcher plugin vignette.
  • Remove the superfluous clean() controller method.
  • Clean up logic for scale() and launch() controller methods.
  • Add a new inactive() launcher method to help with the above.
  • Eliminate superfluous worker launches: clean up the controller logic, and check worker discoveries before worker connections (#51).
  • Simplify the launcher plugin interface (#54).
  • Commit to using the fast nanonext::.unresolved() (#49).
  • Rename the callr launcher to the local process launcher (#56).
  • Switch from SHA224 to SHA1 as the hash for random tokens and names (#59, @shikokuchuo).
  • Open and confirm bus socket listeners asynchronously in the launcher abstract class (#58).
  • Use condition variables to test the connection status of worker instances (#57, @shikokuchuo).
  • Allow the dispatcher process to not exist so that the router will keep working if mirai implements the dispatcher another way (#60).
  • Add a substitute argument to push() (#63).
  • Remove dependency on custom NNG bus sockets, which significantly simplifies the internals, improves robustness, and smooths the integration with mirai (#61).
  • Use processx instead of callr for the local process launcher (#64”).
  • Speed up crew_eval() by e.g. relying on nanonext::mclock() for the time.
  • Add an empty() method to check if the controller or controller group is empty.
  • Rely on mirai for globals cleanup, garbage collection, and global option resets (#65).
  • Expose the package unloading capabilities of mirai (#65).
  • Make monads classed environments and leave tibbles to the last minute in pop().
  • Rename crew_wait() to crew_retry().
  • Export crew_assert() and crew_random_name() to help launcher plugins.
  • Rename the listen() method to start() in the router class.
  • The poll() method now retries mirai::daemons() for robustness.
  • crew_retry() gains a max_tries argument.
  • Bug fix: stop setting router$daemons to NULL in poll() when the connection has a momentary problem.
  • Simplify listening().

crew 0.0.5

CRAN release: 2023-03-23

  • Write a call() method to make it easier to write custom launcher plugins.
  • Add robust documentation and tests for custom launcher plugins.
  • Use as.character() to make sure the list argument supplied to rm() is safe. Fixes a test that was failing on R-devel with crew version 0.0.4.
  • Remove the seconds_poll_high and seconds_poll_low fields and arguments for compatibility with mirai development and release versions.
  • Hard-code the async_dial field in the router for compatibility with mirai development and release versions.

crew 0.0.4

CRAN release: 2023-03-21

  • Adjust references and tests as requested by CRAN.

crew 0.0.3

  • First version.