Admit requests against a fixed counter capacity and turn the remaining capacity into an admit, hold, or shed remediation action.

counter capacity The counter capacity is modeled with a scalar so the remaining headroom stays deterministic and free of actor identity while driving the remediation action.

Actor Counter Remediation Report

requests
actor_counter_remediation_report.swift
Replay: real traced execution (multi-file project)
let requests = 1
let capacity = 3
var admitted = requests
if admitted > capacity {
    admitted = capacity
}
let remaining = capacity - admitted

var action = "admit"
if remaining == 1 {
    action = "hold"
}
if remaining == 0 {
    action = "shed"
}

let line = "requests=\(requests) admitted=\(admitted) remaining=\(remaining) \(action)"
print(line)
let requests = 2
let capacity = 3
var admitted = requests
if admitted > capacity {
    admitted = capacity
}
let remaining = capacity - admitted

var action = "admit"
if remaining == 1 {
    action = "hold"
}
if remaining == 0 {
    action = "shed"
}

let line = "requests=\(requests) admitted=\(admitted) remaining=\(remaining) \(action)"
print(line)
let requests = 4
let capacity = 3
var admitted = requests
if admitted > capacity {
    admitted = capacity
}
let remaining = capacity - admitted

var action = "admit"
if remaining == 1 {
    action = "hold"
}
if remaining == 0 {
    action = "shed"
}

let line = "requests=\(requests) admitted=\(admitted) remaining=\(remaining) \(action)"
print(line)
  1. requests ← 1, capacity ← 3, admitted ← 1, remaining ← 2, action ← admit

    1let requests→ 1 = 1  //@requests=2, 42let capacity→ 3 = 33var admitted→ 1 = requests14if admitted > capacity {5    admitted = capacity6}7let remaining→ 2 = capacity3 - admitted189var action→ admit = "admit"10if remaining == 1 {11    action = "hold"12}13if remaining == 0 {14    action = "shed"15}1617let line→ requests=1 admitted=1 remaining=2 admit = "requests=\(requests1) admitted=\(admitted1) remaining=\(remaining2) \(actionadmit)"18print(linerequests=1 admitted=1 remaining=2 admit)
    outputrequests=1 admitted=1 remaining=2 admit
  1. requests ← 2, capacity ← 3, admitted ← 2, remaining ← 1, action ← admit

    1let requests→ 2 = 22let capacity→ 3 = 33var admitted→ 2 = requests24if admitted > capacity {5    admitted = capacity6}7let remaining→ 1 = capacity3 - admitted289var action→ admit = "admit"10if remaining == 1 {
  2. if remaining == 1

    9var action = "admit"10if remaining1 == 1 {11    action = "hold"12}
  3. line ← requests=2 admitted=2 remaining=1 hold

    17let line→ requests=2 admitted=2 remaining=1 hold = "requests=\(requests2) admitted=\(admitted2) remaining=\(remaining1) \(actionhold)"18print(linerequests=2 admitted=2 remaining=1 hold)
    outputrequests=2 admitted=2 remaining=1 hold
  1. requests ← 4, capacity ← 3, admitted ← 4

    1let requests→ 4 = 42let capacity→ 3 = 33var admitted→ 4 = requests44if admitted > capacity {
  2. if admitted > capacity

    3var admitted = requests4if admitted4 > capacity3 {5    admitted = capacity36}
  3. remaining ← 0, action ← admit

    6}7let remaining→ 0 = capacity3 - admitted389var action→ admit = "admit"10if remaining == 1 {
  4. if remaining == 0

    12}13if remaining0 == 0 {14    action = "shed"15}
  5. line ← requests=4 admitted=3 remaining=0 shed

    17let line→ requests=4 admitted=3 remaining=0 shed = "requests=\(requests4) admitted=\(admitted3) remaining=\(remaining0) \(actionshed)"18print(linerequests=4 admitted=3 remaining=0 shed)
    outputrequests=4 admitted=3 remaining=0 shed