  Two-phase commit (2PC) is widely used in distributed databases to ensure the
atomicity of distributed transactions. However, 2PC has two limitations. First,
it requires two eager log writes on the critical path, which incurs significant
latency. Second, when a coordinator fails, a participant may be blocked waiting
for the coordinator's decision, leading to indefinitely long latency and low
throughput. 2PC was originally designed for a shared-nothing architecture. We
observe that the two problems above can be addressed in an emerging storage
disaggregation architecture which provides compare-and-swap capability in the
storage layer. We propose Cornus, an optimized 2PC protocol for Cloud DBMS with
Storage Disaggregation. We present Cornus in detail with proofs and show how it
addresses the two limitations in 2PC. We also deploy it on real storage
services including Azure Blob Storage and Redis. Empirical evaluations show
that Cornus can achieve up to 1.9x speedup in latency over 2PC.
