Changelog
Source:NEWS.md
rush 1.2.0
CRAN release: 2026-07-13
- fix:
$start_workers(),$start_local_workers(),start_worker(), andRushWorker$new()now append a random suffix to generated worker ids so that ids are unique by construction and can no longer collide. - fix:
$start_workers()andRushWorker$new()now reject fractionalheartbeat_periodandheartbeat_expirevalues and coerce integer-valued doubles. - chore: The minimum R version is now 3.6.0, and Redis (>= 7.0) is declared as a system requirement.
- refactor: Remove deprecated worker types
"local"and"remote". - fix:
AppenderRedisnow strips custom fields from log events in its own layout instead of mutating the shared log event. Previously, the custom fields were also removed from the output log and console output whenoutput_logwas set. Thefilter_custom_fields()function is removed. - refactor:
$fail_tasks(),$finish_tasks(),$pop_task(), and$push_running_tasks()are moved fromRushtoRushWorkerso that a task is only marked as failed or finished by the worker that processes it. - fix:
$fail_tasks(),$finish_tasks(),$pop_task(), and$detect_lost_workers()now change task states with guarded first-writer-wins transitions implemented as Lua scripts. A task can no longer be recorded as finished and failed at the same time when a live worker is wrongly declared lost. The losing transition is discarded with a warning. - fix:
$stop_workers(type = "kill")now marks the running and pending tasks of killed workers as failed with the condition message"Worker was killed". Previously these tasks remained in the running state indefinitely. - refactor: The deprecated methods
$push_failed()and$push_results()are removed. Use$fail_tasks()and$finish_tasks()instead. - fix:
$empty_queue()no longer creates an orphaned hash in the Redis database when the queue is already empty. - BREAKING CHANGE: The
$empty_queue()method now empties the entire queue instead of a specified set of tasks. Thekeysandconditionsarguments are removed. - fix:
$detect_lost_workers()no longer marks a task as both finished and failed, or loses a task. - fix:
$detect_lost_workers()now returns only the worker ids it actually detected as lost during the call, instead of also including workers that terminated cleanly while the method was running. - fix:
$detect_lost_workers()no longer reports a heartbeat worker as lost and fails its tasks when the worker terminates cleanly while the method is running. - fix:
$pop_task()no longer loses a task when a worker crashes between popping the task from the queue and marking it as running. The task is now moved atomically into a per-worker pending list and recovered as a failed task by$detect_lost_workers(). - fix:
$push_tasks(),$push_finished_tasks(),$push_failed_tasks(), and$push_running_tasks()now return early when called with an empty list of tasks. - fix:
$fetch_tasks(),$fetch_finished_tasks(), and$fetch_new_tasks()no longer fail when task hashes have been removed from the database. Affected tasks are dropped with a warning. - fix:
$fetch_new_tasks()and$fetch_finished_tasks()no longer fail after more than 100,000 tasks have been fetched. The internal counter of consumed tasks is now stored as an integer so it can no longer be formatted in scientific notation in Redis commands. - fix:
$fetch_failed_tasks()and related methods now return the documentedconditioncolumn holding the whole condition object. - feat: The
extraargument of$push_tasks(),$push_running_tasks(), and$finish_tasks()methods is deprecated in favor of the consistently namedxss_extraandyss_extraarguments. - fix:
$start_local_workers()now redirects the standard error stream of workers to a file instead of a pipe. Previously, a worker writing more than the operating system’s pipe buffer to standard error blocked forever because the pipe was only drained after the worker terminated. - fix:
$start_local_workers()no longer generates unparseable worker startup code on Windows or when the temporary directory path contains quotes. The temporary arguments file is now deleted after the worker reads it. - fix:
$stop_workers()no longer errors when a requested worker id is not running. Such ids are now skipped with a warning. - perf:
$wait_for_tasks()no longer reads the full finished list and failed task set on every poll. - fix:
$worker_script()now embeds values as R string literals and shell-quotes the wholeRscript -epayload exactly once for POSIX shells. - fix:
$worker_script()no longer logs the Redis password. The logged script shows<redacted>instead. The method now returns the script visibly. - fix:
$worker_script()now validates theheartbeat_period,heartbeat_expire,message_log, andoutput_logarguments instead of interpolating them into the shell command unchecked. - fix:
RushWorker$new()now errors when the heartbeat process fails to set the heartbeat key within the startup timeout instead of silently registering a dead heartbeat.heartbeat_periodandheartbeat_expiremust now be at least 1 second, andheartbeat_expiremust be at leastheartbeat_periodseconds. - fix:
$reset()now also resets the internal log counter, so$print_log()no longer skips messages when the same network id is reused after a reset. - fix:
$reset()now deletes all keys in a singleMULTI/EXECtransaction so a concurrent reader can no longer observe a half-reset network. - feat:
rush_plan()gains thestart_worker_timeoutargument, which sets the default timeout used by$wait_for_workers(). An explicittimeoutpassed to$wait_for_workers()is no longer overridden by the configuration. - fix:
$wait_for_workers(timeout = 0)now checks once and errors immediately if the workers are not yet registered, instead of never checking. - fix:
start_worker()no longer errors on exit whenmessage_logoroutput_logis set. The sinks are now reverted before the log connections are closed. - fix:
start_worker()now checks thatmessage_logandoutput_logare existing directories, so a wrong path raises a clear error instead of a cryptic “cannot open the connection”. - perf:
$worker_inforeads all workers in one pipelined round trip. - refactor: Large objects are now stored under UUID keys.
rush 1.1.0
CRAN release: 2026-04-24
- fix:
$detect_lost_workers()no longer creates phantom failed tasks when a worker crashes between task evaluations (#89). - fix:
$fetch_new_tasks()now correctly tracks seen results by using the actual cache size instead of the Redis counter, fixing cases where new results could be missed or duplicated. - fix:
$write_hashes()now requires all value lists to have the same length or length 1 instead of recycling. Length mismatches raise an error (#87). - fix:
rsh()no longer accepts...(which was ignored).
rush 1.0.1
CRAN release: 2026-04-04
- fix:
$start_workers()now strips the enclosing environment fromworker_loopbefore serialization, avoiding bloated Redis payloads when the function is a closure. - fix:
$fetch_tasks()and related methods no longer fail when task parameters contain vector values instead of scalars.
rush 1.0.0
CRAN release: 2026-03-18
- feat: Add
$push_finished_tasks()method. - feat: Combine
$wait_for_new_tasks()and$fetch_new_tasks()into$fetch_new_tasks()with timeout argument. - refactor: The
$wait_for_finished_tasks()method is removed. - perf: Cache is now a
data.table()instead of a list.data_formatargument is removed. - refactor: Seed mechanism is removed. Includes
with_rng_state(),is_lecyer_cmrg_seed(),get_random_seed(),set_random_seed(),make_rng_seeds()helper functions. - refactor: PID is no longer stored with tasks by
$push_tasks()and$push_running_tasks()methods. - refactor:
worker_extrafield is renamed toworker_id. - refactor:
$push_results()is renamed to$finish_tasks(). - fix: Heartbeat process moves worker to terminated.
- refactor:
$push_results()is deprecated. Use$finish_tasks()instead. - refactor:
$push_failed()is deprecated. Use$fail_tasks()instead. - refactor:
$terminated_on_idleis removed. - refactor: Removed
$push_priority_tasks(),$n_queued_priority_tasks,$priority_info, and$fetch_priority_tasks(). - fix: Redis with password is supported now.
- refactor: Remove
$restart_workers()method. - refactor: Squashed
"terminated","killed"and"lost"worker states into"terminated". - feat: Added
push_failed_tasks()for creating failed tasks. - refactor: Remove
reset_cachearguments in favor of$reset_cache()method. - refactor:
network_id,configandconnectorare now active bindings with validation. - refactor: Removed
$snapshot_schedule()and$redis_info()methods. - refactor: Removed
$all_workers_terminatedandall_workers_lostactive bindings. - refactor: Moved
$worker_statesto$worker_info. - feat: Add
"rush.max_object_size"option to limit the size of objects stored in Redis. - refactor: Renamed
$start_remote_workers()to$start_workers(). - feat: Add
$reset_data()method to reset task data without resetting the network. - fix:
rush_plan()now allows script workers. - fix: Default heartbeat expire is now correctly calculated as three times the heartbeat period.
- fix: Message and output log file connections are now properly closed when the worker exits.
- perf: Network-specific Redis keys are now deleted once during
$reset()instead of once per worker.
rush 0.4.1
CRAN release: 2025-11-06
- feat: The
$wait_for_workers()method can now wait for a specific number of workers or a specific set of worker ids. The workers are checked for registration in the network now.
rush 0.4.0
CRAN release: 2025-10-08
- feat: Add
$empty_queue()method. - fix: Queued tasks can be moved to failed now.
rush 0.3.0
CRAN release: 2025-07-31
- feat: Output and message logs can be written to files now via the
message_logandoutput_logarguments. - compatibility: lgr 0.5.0
- BREAKING CHANGE: The mlr3 ecosystem has a base logger now which is named
mlr3. Themlr3/rushlogger is a child of themlr3logger and is used for logging messages from therushpackage.