In a comment to my availability and partition tolerance post, Sergio Bossa asked a very interesting question that I thought was worth answering in a full post.

is it correct to say that a CA system can simply be turned into a CP one by just forcing “partitioned nodes” down, so that:
1) Partitioned nodes are completely non-functional.
2) Live nodes are still functional because locks held by the partitioned ones have been broken.

I’ve been thinking about this all afternoon, and I still haven’t decided on a single answer. What I’d say is that in a mathematical sense the answer is no, but in practice the answer is likely to be yes. In many distributed systems where consistency has been considered before availability and partition tolerance, locking or leases are used to ensure that consistency. When a partition occurs, therefore, the “natural” outcome is that requests can get stuck waiting for locks or leases held on the other side of the partition. According to the Brewer/Lynch terminology, this would be CA behavior. In those particular kinds of systems, enforcing quorum can change the behavior to CP – requests no longer get blocked during the partition but non-quorum nodes do.

What makes my answer less than straightforward is this: what if it’s not just locks or leases that are stranded on the non-quorum side of a partition, but actual data? In particular, in an MVCC-based system, it’s quite possible that the current version of some datum might only exist on the non-quorum side. Forcing that node down would not help if requests still had to wait for that datum, and discarding it (i.e. discarding the transaction of which it was a part) would violate consistency. For that type of system, then, it would not be true that enforcing quorum would turn a CA system into a CP one. Maybe that’s why I can’t immediately think of an MVCC system that applies quorum across a WAN; most only use MVCC inside a local cluster where partitions are considered unlikely and then switch to a different model for replication.