Operational Remediation Reports
Permit Pool Remediation Report
Admit readers against a fixed permit pool and turn the remaining permits into an admit, hold, or shed remediation action.
remaining capacity
The permit pool is modeled with a scalar counter, so the remaining permits stay deterministic and free of atomic identity while driving the remediation action.
Permit Pool Remediation Report
PermitPoolRemediationReport.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val readers = 1
val capacity = 3
var admitted = readers
if (admitted > capacity) {
admitted = capacity
}
val remaining = capacity - admitted
var action = "admit"
if (remaining == 1) {
action = "hold"
}
if (remaining == 0) {
action = "shed"
}
println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val readers = 2
val capacity = 3
var admitted = readers
if (admitted > capacity) {
admitted = capacity
}
val remaining = capacity - admitted
var action = "admit"
if (remaining == 1) {
action = "hold"
}
if (remaining == 0) {
action = "shed"
}
println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val readers = 4
val capacity = 3
var admitted = readers
if (admitted > capacity) {
admitted = capacity
}
val remaining = capacity - admitted
var action = "admit"
if (remaining == 1) {
action = "hold"
}
if (remaining == 0) {
action = "shed"
}
println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
}
}
readers ← 1, capacity ← 3, admitted ← 1, remaining ← 2, action ← admit
1object Main {2 def main(args: Array[String]): Unit = {3 val readers→ 1 = 1 //@readers=2, 44 val capacity→ 3 = 35 var admitted→ 1 = readers→ 16 if (admitted > capacity) {7 admitted = capacity8 }9 val remaining→ 2 = capacity3 - admitted11011 var action→ admit = "admit"12 if (remaining == 1) {13 action = "hold"14 }15 if (remaining == 0) {16 action = "shed"17 }1819 println("readers=" + readers1 + " admitted=" + admitted1 + " remaining=" + remaining2 + " " + actionadmit)20 }21}outputreaders=1 admitted=1 remaining=2 admit
readers ← 2, capacity ← 3, admitted ← 2, remaining ← 1, action ← admit
1object Main {2 def main(args: Array[String]): Unit = {3 val readers→ 2 = 24 val capacity→ 3 = 35 var admitted→ 2 = readers→ 26 if (admitted > capacity) {7 admitted = capacity8 }9 val remaining→ 1 = capacity3 - admitted21011 var action→ admit = "admit"12 if (remaining == 1) {13 action = "hold"action ← hold
11var action = "admit"12if (remaining1 == 1) {13 action→ hold = "hold"14}15if (remaining == 0) {println("readers=" + readers + " admitted=" + admitted + " remaining="…
19 println("readers=" + readers2 + " admitted=" + admitted2 + " remaining=" + remaining1 + " " + actionhold)20 }21}outputreaders=2 admitted=2 remaining=1 hold
readers ← 4, capacity ← 3, admitted ← 4
1object Main {2 def main(args: Array[String]): Unit = {3 val readers→ 4 = 44 val capacity→ 3 = 35 var admitted→ 4 = readers→ 46 if (admitted > capacity) {7 admitted = capacityadmitted ← 3
5var admitted = readers6if (admitted4 > capacity3) {7 admitted→ 3 = capacity38}9val remaining = capacity - admittedremaining ← 0, action ← admit
8}9val remaining→ 0 = capacity3 - admitted31011var action→ admit = "admit"12if (remaining == 1) {13 action = "hold"action ← shed
14}15if (remaining0 == 0) {16 action→ shed = "shed"17}println("readers=" + readers + " admitted=" + admitted + " remaining="…
19 println("readers=" + readers4 + " admitted=" + admitted3 + " remaining=" + remaining0 + " " + actionshed)20 }21}outputreaders=4 admitted=3 remaining=0 shed