Bedrock.JobQueue.QueueLease (bedrock_job_queue v0.2.0)
View SourceA lease on a queue for exclusive dequeuing.
Per QuiCK paper: Two-tier leasing prevents thundering herd by first acquiring a queue lease, then item leases within that queue. Only one consumer can hold a queue lease at a time.
Default Duration
Queue leases default to 5 seconds (vs 30 seconds for item leases). This is intentionally short because queue leases only protect the dequeue operation, not job execution. A consumer holds the queue lease just long enough to:
- Peek for visible items
- Obtain item leases on those items
- Release the queue lease
Item leases are held much longer to cover actual job execution time.
Summary
Functions
Derives a deterministic queue lease ID from inputs.
Returns true if the queue lease has expired.
Creates a new queue lease.
Returns the remaining time on the lease in milliseconds.
Types
@type t() :: %Bedrock.JobQueue.QueueLease{ expires_at: non_neg_integer(), holder: binary(), id: binary(), obtained_at: non_neg_integer(), queue_id: String.t() }
Functions
@spec derive_id(String.t(), binary(), non_neg_integer()) :: binary()
Derives a deterministic queue lease ID from inputs.
This makes queue lease IDs predictable for testing while still being unique per queue/holder/time combination.
Returns true if the queue lease has expired.
Options
:now- Current time in milliseconds (default: System.system_time(:millisecond))
Creates a new queue lease.
Options
:duration_ms- Lease duration in milliseconds (default: 5_000):now- Current time in milliseconds (default: System.system_time(:millisecond))
@spec remaining_ms( t(), keyword() ) :: non_neg_integer()
Returns the remaining time on the lease in milliseconds.
Options
:now- Current time in milliseconds (default: System.system_time(:millisecond))