← PracticeIntermediateFailure

Two Transfers, Opposite Directions, Total Stop

Pull up the evidence one item at a time, commit to a diagnosis, and only then see the schedule that actually ran.

What was reported

The ledger service stopped. Not slowed — stopped. It happened at 03:14, and the first symptom was two requests that never returned. Over the next forty minutes every other worker thread was consumed one at a time until the health check timed out and the orchestrator killed the pod. The pod that replaced it ran fine for six hours and then did the same thing.
1void transfer(Account& from, Account& to, Money amount) {
2 std::lock_guard<std::mutex> lock_from(from.mtx);
3 std::lock_guard<std::mutex> lock_to(to.mtx); // ← second lock, order set by the caller
4 if (from.balance < amount) throw InsufficientFunds{};
5 from.balance -= amount;
6 to.balance += amount;
7}

Evidence

Nothing here is labelled as relevant. Some of it is not.

What is actually happening?