Nothing; the primary and secondary keep operating, they have quorum. They can still talk to each other, and they still agree that one is primary and the other is secondary.
However, if the arbiter remains unavailable when either the primary OR the secondary fail, processing of client requests stops.
If the primary fails while the arbiter is unavailable, the secondary cannot become primary. Just because the secondary cannot talk to the primary or arbiter doesn't mean that (from the secondary's point of view) the primary and arbiter aren't both running. "Fails" and "unavailable" might just be a problem with communication; machine A does not REALLY know if machine B has failed, it just knows communications don't work.
If the secondary fails while the arbiter is unavailable, the primary cannot continue processing client requests, for a similar reason... Just because the primary cannot talk to the secondary or arbiter doesn't mean that (from the primary's point of view) the secondary and arbiter aren't both running. In that case, if the secondary and arbiter are really still running, and all that's happened it that communication with the primary has been severed, the secondary will become primary... because it KNOWS the old primary will stop.
You might find this post interesting: Demonstrating High Availability. You can use the code there to set up a demo where you can play with scenarios.
answered 16 Nov '09, 19:20