Rand Stats

JobQueue

zef:apogee
Revision history for JobQueue

0.1.3  2026-10-24T19:48:18+01:00
    - [2026-10-24] Fix a data race in JobQueue::Coordinator: tick,
      find-jobs and active-count handed back a lazy sequence from inside
      the lock, so the walk over the job table ran after the lock was
      released while submit inserted into it and tick pruned from it,
      which could end a run with a MoarVM "stale hashtable pointer" crash.
      The walks, the queue-registry walks (tick, cancel, find-job,
      cancel-most-recent-in-scope, total-active) and the per-job
      bookkeeping and dependency-handoff copies now complete inside the
      critical section, so callers always get a snapshot. The held-too-long
      warning is now tested and set under the lock as well.

0.1.2  2026-10-05T10:53:36+01:00
    - Retain a bounded FIFO cache of terminal dependency outcomes in
      JobQueue::Coordinator. Late hard/soft dependents submitted after
      a predecessor Job object is pruned now resolve the predecessor's
      done, failure, cancelled or superseded outcome instead of treating
      it as unknown; evicted hard/soft dependencies keep the existing
      unknown-dependency behavior.
    - Record each Job's last dependency-readiness decision as compact
      scalar metadata exposed through dependency-state and included in
      queue snapshots, so observers can explain blocked, doomed and
      released jobs without re-running scheduler logic or retaining
      dependency result bodies.
    - Add Queue.physical-job-ids for an atomic pending+running id
      snapshot that includes cancelled or superseded runners until
      their physical drain completes.

0.1.1  2026-08-21T21:30:35+01:00
    - Make dedup lookup plus pending insertion one atomic queue transition.
      Concurrent producers of one live key now all receive the same job;
      the key is reusable once that job becomes terminal.

0.1.0  2026-08-10T19:52:26+01:00
    - Initial release
    - JobQueue::Job role: atomic terminal transitions (finish /
      request-cancel / begin-running), cancel + completion Promises,
      dedup keys, lanes, priorities, hard/soft dependency edges, and
      the keep-once atomic Promise settler
    - JobQueue::Queue: per-resource serial/parallel queue with
      re-evaluated parallelism policy, max-concurrent cap, lane
      serialisation, priority dispatch, live-job dedup, deferred
      cancel terminals and an optional store event sink
    - JobQueue::Coordinator: named-queue registry plus a cross-queue
      dependency DAG with hold/release, dep-result injection and
      transitive supersede cascades over hard edges
    - JobQueue::FailedRegistry: capped, insertion-ordered registry of
      failed/cancelled jobs with atomic claim-for-retry
    - Injectable log + tracer (null objects by default) and an
      EventSink documentation role
    - JobQueue::Job's role and keep-once sub are package-scoped as
      well as exported, so a host application can wrap the role in
      its own facade module (need + fully-qualified name) and
      re-export both without a name clash