Apply at most one idempotent write and turn the accepted and skipped counts into a commit, skip, or retry remediation action.

idempotent write Only the first write is accepted and later writes are counted as skipped, so the remediation action is reproducible without a live lazy initializer.

Lazy Value Remediation Report

writes
LazyValueRemediationReport.kt
Replay: real traced execution (multi-file project)
fun main() {
    val writes = 1
    var accepted = 0
    var skipped = 0

    for (i in 1..writes) {
        if (accepted == 0) {
            accepted++
        } else {
            skipped++
        }
    }

    val action = if (accepted == 0) {
        "retry"
    } else if (skipped > 0) {
        "skip"
    } else {
        "commit"
    }

    println("writes=$writes accepted=$accepted skipped=$skipped $action")
}
fun main() {
    val writes = 0
    var accepted = 0
    var skipped = 0

    for (i in 1..writes) {
        if (accepted == 0) {
            accepted++
        } else {
            skipped++
        }
    }

    val action = if (accepted == 0) {
        "retry"
    } else if (skipped > 0) {
        "skip"
    } else {
        "commit"
    }

    println("writes=$writes accepted=$accepted skipped=$skipped $action")
}
fun main() {
    val writes = 2
    var accepted = 0
    var skipped = 0

    for (i in 1..writes) {
        if (accepted == 0) {
            accepted++
        } else {
            skipped++
        }
    }

    val action = if (accepted == 0) {
        "retry"
    } else if (skipped > 0) {
        "skip"
    } else {
        "commit"
    }

    println("writes=$writes accepted=$accepted skipped=$skipped $action")
}
  1. writes ← 1, accepted ← 0, skipped ← 0

    1fun main() {2    val writes→ 1 = 1 //@writes=2, 03    var accepted→ 0 = 04    var skipped→ 0 = 0
  2. for (i in 1..writes)

    6for (i1 in 1..writes1) {7    if (accepted == 0) {
  3. if (accepted == 0)

    6for (i in 1..writes) {7    if (accepted0 == 0) {8        accepted0++9    } else {10        skipped++
  4. action ← commit

    14    val action→ commit = if (accepted1 == 0) {15        "retry"16    } else if (skipped0 > 0) {17        "skip"18    } else {19        "commit"20    }2122    println("writes=$writes1 accepted=$accepted1 skipped=$skipped0 $actioncommit")23}
    outputwrites=1 accepted=1 skipped=0 commit
  1. writes ← 0, accepted ← 0, skipped ← 0, action ← retry

    1fun main() {2    val writes→ 0 = 03    var accepted→ 0 = 04    var skipped→ 0 = 056    for (i in 1..writes) {7        if (accepted == 0) {8            accepted++9        } else {10            skipped++11        }12    }1314    val action→ retry = if (accepted0 == 0) {15        "retry"16    } else if (skipped0 > 0) {17        "skip"18    } else {19        "commit"20    }2122    println("writes=$writes0 accepted=$accepted0 skipped=$skipped0 $actionretry")23}
    outputwrites=0 accepted=0 skipped=0 retry
  1. writes ← 2, accepted ← 0, skipped ← 0

    1fun main() {2    val writes→ 2 = 23    var accepted→ 0 = 04    var skipped→ 0 = 0
  2. for (i in 1..writes)

    pass 1 of 2
    6for (i1 in 1..writes2) {7    if (accepted == 0) {
  3. if (accepted == 0)

    6for (i in 1..writes) {7    if (accepted0 == 0) {8        accepted0++9    } else {10        skipped++
  4. for (i in 1..writes)

    pass 2 of 2
    6for (i2 in 1..writes2) {7    if (accepted == 0) {
  5. else

    8        accepted++9    } else {10        skipped0++11    }12}
  6. action ← skip

    14    val action→ skip = if (accepted1 == 0) {15        "retry"16    } else if (skipped1 > 0) {17        "skip"18    } else {19        "commit"20    }2122    println("writes=$writes2 accepted=$accepted1 skipped=$skipped1 $actionskip")23}
    outputwrites=2 accepted=1 skipped=1 skip