Contend for a single claim slot and turn the rejected count into a grant, queue, or reject remediation action.

claim contention The single claim slot and request count are scalars, so the claimed and rejected counts that drive the remediation action stay deterministic and free of atomic identity.

Atomic Claim Remediation Report

requests
AtomicClaimRemediationReport.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val requests = 1
    val slotCapacity = 1
    var claimed = 0
    var rejected = 0
    for (i <- 1 to requests) {
      if (claimed < slotCapacity) {
        claimed = claimed + 1
      } else {
        rejected = rejected + 1
      }
    }

    var action = "grant"
    if (rejected == 1) {
      action = "queue"
    }
    if (rejected >= 2) {
      action = "reject"
    }

    println("requests=" + requests + " claimed=" + claimed + " rejected=" + rejected + " " + action)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val requests = 2
    val slotCapacity = 1
    var claimed = 0
    var rejected = 0
    for (i <- 1 to requests) {
      if (claimed < slotCapacity) {
        claimed = claimed + 1
      } else {
        rejected = rejected + 1
      }
    }

    var action = "grant"
    if (rejected == 1) {
      action = "queue"
    }
    if (rejected >= 2) {
      action = "reject"
    }

    println("requests=" + requests + " claimed=" + claimed + " rejected=" + rejected + " " + action)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val requests = 3
    val slotCapacity = 1
    var claimed = 0
    var rejected = 0
    for (i <- 1 to requests) {
      if (claimed < slotCapacity) {
        claimed = claimed + 1
      } else {
        rejected = rejected + 1
      }
    }

    var action = "grant"
    if (rejected == 1) {
      action = "queue"
    }
    if (rejected >= 2) {
      action = "reject"
    }

    println("requests=" + requests + " claimed=" + claimed + " rejected=" + rejected + " " + action)
  }
}
  1. requests ← 1, slotCapacity ← 1, claimed ← 0, rejected ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val requests→ 1 = 1 //@requests=2, 34    val slotCapacity→ 1 = 15    var claimed→ 0 = 06    var rejected→ 0 = 07    for (i <- 1 to requests) {8      if (claimed < slotCapacity) {
  2. for (i <- 1 to requests)

    6var rejected = 07for (i1 <- 1 to requests1) {8  if (claimed < slotCapacity) {
  3. claimed ← 1

    7for (i <- 1 to requests) {8  if (claimed0 < slotCapacity1) {9    claimed→ 1 = claimed + 110  } else {11    rejected = rejected + 1
  4. action ← grant

    15    var action→ grant = "grant"16    if (rejected == 1) {17      action = "queue"18    }19    if (rejected >= 2) {20      action = "reject"21    }2223    println("requests=" + requests1 + " claimed=" + claimed1 + " rejected=" + rejected0 + " " + actiongrant)24  }25}
    outputrequests=1 claimed=1 rejected=0 grant
  1. requests ← 2, slotCapacity ← 1, claimed ← 0, rejected ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val requests→ 2 = 24    val slotCapacity→ 1 = 15    var claimed→ 0 = 06    var rejected→ 0 = 07    for (i <- 1 to requests) {8      if (claimed < slotCapacity) {
  2. for (i <- 1 to requests)

    pass 1 of 2
    6var rejected = 07for (i1 <- 1 to requests2) {8  if (claimed < slotCapacity) {
  3. claimed ← 1

    7for (i <- 1 to requests) {8  if (claimed0 < slotCapacity1) {9    claimed→ 1 = claimed + 110  } else {11    rejected = rejected + 1
  4. for (i <- 1 to requests)

    pass 2 of 2
    6var rejected = 07for (i2 <- 1 to requests2) {8  if (claimed < slotCapacity) {
  5. rejected ← 1

    9    claimed = claimed + 110  } else {11    rejected→ 1 = rejected + 112  }13}
  6. action ← grant

    15var action→ grant = "grant"16if (rejected == 1) {17  action = "queue"
  7. action ← queue

    15var action = "grant"16if (rejected1 == 1) {17  action→ queue = "queue"18}19if (rejected >= 2) {
  8. println("requests=" + requests + " claimed=" + claimed + " rejected=" …

    23    println("requests=" + requests2 + " claimed=" + claimed1 + " rejected=" + rejected1 + " " + actionqueue)24  }25}
    outputrequests=2 claimed=1 rejected=1 queue
  1. requests ← 3, slotCapacity ← 1, claimed ← 0, rejected ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val requests→ 3 = 34    val slotCapacity→ 1 = 15    var claimed→ 0 = 06    var rejected→ 0 = 07    for (i <- 1 to requests) {8      if (claimed < slotCapacity) {
  2. for (i <- 1 to requests)

    pass 1 of 3
    6var rejected = 07for (i1 <- 1 to requests3) {8  if (claimed < slotCapacity) {
    All 3 passes — pass 1 is the card above
    passislotCapacityclaimedrejected
    1110 1
    220 1
    331 2
  3. claimed ← 1

    7for (i <- 1 to requests) {8  if (claimed0 < slotCapacity1) {9    claimed→ 1 = claimed + 110  } else {11    rejected = rejected + 1
  4. rejected ← 1

    pass 1 of 2
    9    claimed = claimed + 110  } else {11    rejected→ 1 = rejected + 112  }13}
  5. rejected ← 2

    pass 2 of 2
    9    claimed = claimed + 110  } else {11    rejected→ 2 = rejected + 112  }13}
  6. action ← grant

    15var action→ grant = "grant"16if (rejected == 1) {17  action = "queue"
  7. action ← reject

    18}19if (rejected2 >= 2) {20  action→ reject = "reject"21}
  8. println("requests=" + requests + " claimed=" + claimed + " rejected=" …

    23    println("requests=" + requests3 + " claimed=" + claimed1 + " rejected=" + rejected2 + " " + actionreject)24  }25}
    outputrequests=3 claimed=1 rejected=2 reject