Operational Remediation Reports
Countdown Latch Remediation Report
Compare arrivals at a latch against the needed count and turn the remaining count into a release, wait, or escalate remediation action.
latch remaining
The needed count and arrivals are scalars, so the remaining work that drives the remediation action stays deterministic without awaiting a live latch.
Countdown Latch Remediation Report
CountdownLatchRemediationReport.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val arrivals = 3
val needed = 3
var counted = arrivals
if (counted > needed) {
counted = needed
}
val remaining = needed - counted
var action = "release"
if (remaining == 1) {
action = "wait"
}
if (remaining >= 2) {
action = "escalate"
}
println("needed=" + needed + " counted=" + counted + " remaining=" + remaining + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val arrivals = 0
val needed = 3
var counted = arrivals
if (counted > needed) {
counted = needed
}
val remaining = needed - counted
var action = "release"
if (remaining == 1) {
action = "wait"
}
if (remaining >= 2) {
action = "escalate"
}
println("needed=" + needed + " counted=" + counted + " remaining=" + remaining + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val arrivals = 2
val needed = 3
var counted = arrivals
if (counted > needed) {
counted = needed
}
val remaining = needed - counted
var action = "release"
if (remaining == 1) {
action = "wait"
}
if (remaining >= 2) {
action = "escalate"
}
println("needed=" + needed + " counted=" + counted + " remaining=" + remaining + " " + action)
}
}
arrivals ← 3, needed ← 3, counted ← 3, remaining ← 0, action ← release
1object Main {2 def main(args: Array[String]): Unit = {3 val arrivals→ 3 = 3 //@arrivals=2, 04 val needed→ 3 = 35 var counted→ 3 = arrivals→ 36 if (counted > needed) {7 counted = needed8 }9 val remaining→ 0 = needed3 - counted31011 var action→ release = "release"12 if (remaining == 1) {13 action = "wait"14 }15 if (remaining >= 2) {16 action = "escalate"17 }1819 println("needed=" + needed3 + " counted=" + counted3 + " remaining=" + remaining0 + " " + actionrelease)20 }21}outputneeded=3 counted=3 remaining=0 release
arrivals ← 0, needed ← 3, counted ← 0, remaining ← 3, action ← release
1object Main {2 def main(args: Array[String]): Unit = {3 val arrivals→ 0 = 04 val needed→ 3 = 35 var counted→ 0 = arrivals→ 06 if (counted > needed) {7 counted = needed8 }9 val remaining→ 3 = needed3 - counted01011 var action→ release = "release"12 if (remaining == 1) {13 action = "wait"action ← escalate
14}15if (remaining3 >= 2) {16 action→ escalate = "escalate"17}println("needed=" + needed + " counted=" + counted + " remaining=" + r…
19 println("needed=" + needed3 + " counted=" + counted0 + " remaining=" + remaining3 + " " + actionescalate)20 }21}outputneeded=3 counted=0 remaining=3 escalate
arrivals ← 2, needed ← 3, counted ← 2, remaining ← 1, action ← release
1object Main {2 def main(args: Array[String]): Unit = {3 val arrivals→ 2 = 24 val needed→ 3 = 35 var counted→ 2 = arrivals→ 26 if (counted > needed) {7 counted = needed8 }9 val remaining→ 1 = needed3 - counted21011 var action→ release = "release"12 if (remaining == 1) {13 action = "wait"action ← wait
11var action = "release"12if (remaining1 == 1) {13 action→ wait = "wait"14}15if (remaining >= 2) {println("needed=" + needed + " counted=" + counted + " remaining=" + r…
19 println("needed=" + needed3 + " counted=" + counted2 + " remaining=" + remaining1 + " " + actionwait)20 }21}outputneeded=3 counted=2 remaining=1 wait