mon/PaxosService: remove unused exists_version() variant

Signed-off-by: Sage Weil <sage@inktank.com>
mon/MonmapMonitor: avoid exists_version() helper

We are the only user; open-code it.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: drop unused helpers

Signed-off-by: Sage Weil <sage@inktank.com>
mon: make PaxosService::get_value() int return type 64-bit

Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
mon: fix mkfs monmap cleanup

exists_key(a,b) was looking for "monmap/mkfs/monmap".

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: remove mkfs helpers

Keep it simple.  These are one-liners.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: simplify full helpers, drop single-use helper

We are the only caller for get_version(prefix, name), so move it inline
and drop it.  Also rename full_version_name to full_prefix_name, which I
find slightly less confusing.

Signed-off-by: Sage Weil <sage@inktank.com>
mon/OSDMOnitor: use provided get_version_full()

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: drop unused {get,set,put}_version(prefix, a, bl)

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: some whitespace

Signed-off-by: Sage Weil <sage@inktank.com>
mon/PaxosService: drop unused last_accepted_name

Signed-off-by: Sage Weil <sage@inktank.com>
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 store, bypassing PaxosService stash_full

Instead of encoding incrementals and periodically dumping the whole encoded
PGMap, instead store everything in a range of keys, and update them
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().

This has several benefits:
 - we avoid every encoding the entire PGMap
 - we avoid dumping that blob into leveldb keys
 - we limit the amount of data living in forward-moving keys, which leveldb
   has a hard time compacting away
 - pgmap data instead lives over a fixed range of keys, which leveldb
   excels at
 - we only keep the latest copy of the PGMap (which is all we care about)

Bump the internal monitor protocol version.

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>