Erlang / Erlang Advanced Interview questions
Why is Mnesia's two-phase commit necessary for distributed transactions?
When a Mnesia transaction writes to tables replicated across multiple nodes, every replica must end up agreeing on the outcome — either all of them commit the change, or none of them do. Without coordination, a network hiccup could leave one node having applied the write while another hasn't, silently corrupting replica consistency.
sequenceDiagram
participant Coord as Coordinator node
participant N1 as Replica 1
participant N2 as Replica 2
Coord->>N1: prepare (can you commit?)
Coord->>N2: prepare (can you commit?)
N1-->>Coord: yes
N2-->>Coord: yes
Coord->>N1: commit
Coord->>N2: commit
In the prepare phase, the coordinating node asks every replica whether it can apply the change (data validated, locks acquired); only if every replica agrees does the coordinator send the actual commit phase, telling all of them to make it permanent. If any replica can't prepare (a conflicting write, an unreachable node), the whole transaction aborts everywhere rather than partially applying — this is what gives Mnesia its ACID-style guarantee across a cluster instead of just on a single node.
More Related questions...