Drain a fixed backlog of arrivals against a bounded depth and turn the remaining depth into a drain, steady, or throttle remediation action.

backlog depth The backlog depth and arrivals are scalars, so the remaining capacity that drives the remediation action stays deterministic without consuming a live async sequence.

Async Sequence Remediation Report

arrivals
async_sequence_remediation_report.swift
Replay: real traced execution (multi-file project)
let arrivals = 1
let depth = 4
var drained = arrivals
if drained > depth {
    drained = depth
}
let remaining = depth - drained

var action = "steady"
if drained <= 1 {
    action = "drain"
}
if remaining == 0 {
    action = "throttle"
}

let line = "arrivals=\(arrivals) drained=\(drained) remaining=\(remaining) \(action)"
print(line)
let arrivals = 3
let depth = 4
var drained = arrivals
if drained > depth {
    drained = depth
}
let remaining = depth - drained

var action = "steady"
if drained <= 1 {
    action = "drain"
}
if remaining == 0 {
    action = "throttle"
}

let line = "arrivals=\(arrivals) drained=\(drained) remaining=\(remaining) \(action)"
print(line)
let arrivals = 5
let depth = 4
var drained = arrivals
if drained > depth {
    drained = depth
}
let remaining = depth - drained

var action = "steady"
if drained <= 1 {
    action = "drain"
}
if remaining == 0 {
    action = "throttle"
}

let line = "arrivals=\(arrivals) drained=\(drained) remaining=\(remaining) \(action)"
print(line)
  1. arrivals ← 1, depth ← 4, drained ← 1, remaining ← 3, action ← steady

    1let arrivals→ 1 = 1  //@arrivals=3, 52let depth→ 4 = 43var drained→ 1 = arrivals14if drained > depth {5    drained = depth6}7let remaining→ 3 = depth4 - drained189var action→ steady = "steady"10if drained <= 1 {
  2. if drained <= 1

    9var action = "steady"10if drained1 <= 1 {11    action = "drain"12}
  3. line ← arrivals=1 drained=1 remaining=3 drain

    17let line→ arrivals=1 drained=1 remaining=3 drain = "arrivals=\(arrivals1) drained=\(drained1) remaining=\(remaining3) \(actiondrain)"18print(linearrivals=1 drained=1 remaining=3 drain)
    outputarrivals=1 drained=1 remaining=3 drain
  1. arrivals ← 3, depth ← 4, drained ← 3, remaining ← 1, action ← steady

    1let arrivals→ 3 = 32let depth→ 4 = 43var drained→ 3 = arrivals34if drained > depth {5    drained = depth6}7let remaining→ 1 = depth4 - drained389var action→ steady = "steady"10if drained <= 1 {11    action = "drain"12}13if remaining == 0 {14    action = "throttle"15}1617let line→ arrivals=3 drained=3 remaining=1 steady = "arrivals=\(arrivals3) drained=\(drained3) remaining=\(remaining1) \(actionsteady)"18print(linearrivals=3 drained=3 remaining=1 steady)
    outputarrivals=3 drained=3 remaining=1 steady
  1. arrivals ← 5, depth ← 4, drained ← 5

    1let arrivals→ 5 = 52let depth→ 4 = 43var drained→ 5 = arrivals54if drained > depth {
  2. if drained > depth

    3var drained = arrivals4if drained5 > depth4 {5    drained = depth46}
  3. remaining ← 0, action ← steady

    6}7let remaining→ 0 = depth4 - drained489var action→ steady = "steady"10if drained <= 1 {
  4. if remaining == 0

    12}13if remaining0 == 0 {14    action = "throttle"15}
  5. line ← arrivals=5 drained=4 remaining=0 throttle

    17let line→ arrivals=5 drained=4 remaining=0 throttle = "arrivals=\(arrivals5) drained=\(drained4) remaining=\(remaining0) \(actionthrottle)"18print(linearrivals=5 drained=4 remaining=0 throttle)
    outputarrivals=5 drained=4 remaining=0 throttle