Operational Remediation Reports
Atomic Guard Remediation Report
Turn the number of waiters behind a held guard into an enter, backoff, or page remediation action.
guard contention
The waiter count behind a held guard is kept as a scalar, so the remediation action stays deterministic and never depends on atomic identity or scheduler timing.
Atomic Guard Remediation Report
AtomicGuardRemediationReport.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val waiters = 0
val guardLimit = 2
val acquired = 1
var action = "enter"
if (waiters >= 1 && waiters <= guardLimit) {
action = "backoff"
}
if (waiters > guardLimit) {
action = "page"
}
println("waiters=" + waiters + " acquired=" + acquired + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val waiters = 1
val guardLimit = 2
val acquired = 1
var action = "enter"
if (waiters >= 1 && waiters <= guardLimit) {
action = "backoff"
}
if (waiters > guardLimit) {
action = "page"
}
println("waiters=" + waiters + " acquired=" + acquired + " " + action)
}
}
object Main {
def main(args: Array[String]): Unit = {
val waiters = 3
val guardLimit = 2
val acquired = 1
var action = "enter"
if (waiters >= 1 && waiters <= guardLimit) {
action = "backoff"
}
if (waiters > guardLimit) {
action = "page"
}
println("waiters=" + waiters + " acquired=" + acquired + " " + action)
}
}
waiters ← 0, guardLimit ← 2, acquired ← 1, action ← enter
1object Main {2 def main(args: Array[String]): Unit = {3 val waiters→ 0 = 0 //@waiters=1, 34 val guardLimit→ 2 = 25 val acquired→ 1 = 167 var action→ enter = "enter"8 if (waiters >= 1 && waiters <= guardLimit) {9 action = "backoff"10 }11 if (waiters > guardLimit) {12 action = "page"13 }1415 println("waiters=" + waiters0 + " acquired=" + acquired1 + " " + actionenter)16 }17}outputwaiters=0 acquired=1 enter
waiters ← 1, guardLimit ← 2, acquired ← 1, action ← enter
1object Main {2 def main(args: Array[String]): Unit = {3 val waiters→ 1 = 14 val guardLimit→ 2 = 25 val acquired→ 1 = 167 var action→ enter = "enter"8 if (waiters >= 1 && waiters <= guardLimit) {9 action = "backoff"action ← backoff
7var action = "enter"8if (waiters1 >= 1 && waiters <= guardLimit2) {9 action→ backoff = "backoff"10}11if (waiters > guardLimit) {println("waiters=" + waiters + " acquired=" + acquired + " " + action)
15 println("waiters=" + waiters1 + " acquired=" + acquired1 + " " + actionbackoff)16 }17}outputwaiters=1 acquired=1 backoff
waiters ← 3, guardLimit ← 2, acquired ← 1, action ← enter
1object Main {2 def main(args: Array[String]): Unit = {3 val waiters→ 3 = 34 val guardLimit→ 2 = 25 val acquired→ 1 = 167 var action→ enter = "enter"8 if (waiters >= 1 && waiters <= guardLimit) {9 action = "backoff"action ← page
10}11if (waiters3 > guardLimit2) {12 action→ page = "page"13}println("waiters=" + waiters + " acquired=" + acquired + " " + action)
15 println("waiters=" + waiters3 + " acquired=" + acquired1 + " " + actionpage)16 }17}outputwaiters=3 acquired=1 page