mon/PaxosService: s/get_version()/get_last_committed()/

Avoid aliasing simple accessors; use a single name instead.  Also, function
name overloading will throw a wrench in the class inheritance later.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PGMap: make int type explicit

We get away with this because int is 32-bits on x86_64 and i386 both, but
we should be explicit anyway!

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PGMonitor: drop some dead code

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: move upgrade_format() machinery into PaxosService

We originally did this in AuthMonitor, but it is perfect for PGMonitor too,
so make it generic.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/AuthMonitor: start at format 1 (latest) for new clusters

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PGMonitor: store PGMap directly in leveldb

Instead of encoding incrementals and periodically dumping the whole encoded
PGMap in leveldb, instead store everything in a range of keys, and update
between versions using transactions.  The per-version values are now
breadcrumbs indicating which keys were dirtied so they can be refreshed
via update_from_paxos().

Bump the internal monitor protocol version.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PGMonitor: use accessors for main pg_map fields

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: allow paxos service writes while paxos is updating

In commit f985de28f86675e974ac7842a49922a35fe24c6c I mistakenly made
is_writeable() false while paxos was updating due to a misread of
Paxos::propose_new_value() (I didn't see that it would queue).
This is problematic because it narrows the window during which each service
is writeable for no reason.

Allow service to be writeable both when paxos is active and updating.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/Paxos: drop unnecessary last_committed loads

Drop (apparently) ad-hoc refreshes of last_committed from the store.
These are unnecessary and confusing.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/Paxos: assert that the store gives us back what we just wrote

In bug #5424 I observed leveldb failing internally and then returning
bad info.  We then hit a random/confusing assert.  Try to detect this
earlier by verifying that a get of a just-written last_committed gives
us back the right thing.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>