os: use coll_t:is_pg_prefix() check instead of is_pg()

The objectstore code was trying to parse out a pgid from the collection
name and using the is_pg() helper, which incorrectly tolerates a _TEMP
suffix and returns a bad value for the snapid.  The objectstore doesn't
actually care about that value, so this is harmless, but sloppy.

Introduce a simpler is_pg_prefix() helper and use that instead.

Signed-off-by: Sage Weil <sage@inktank.com>
osd: make coll_t::is_pg() correctly validate the snapid suffix

The strtoull() man page suggests resetting errno and using that to
check for a parsing error.  This ensures the OSD::load_pgs() callers are
getting what they expect (now that they aren't relying on the broken
behavior).  The other callers in the os/* code is moved to a different
method that ignores the suffix.

Signed-off-by: Sage Weil <sage@inktank.com>
os/FileStore: do not tolerate ENOENT on collection_add

If we get ENOENT on a collection_add that is a bad thing; do not ignore
the error.  This was hiding #4071 for some time.

Signed-off-by: Sage Weil <sage@inktank.com>
FileStore: _split_collection should not create the collection

This will simplify adding a replay guard to create_collection.

Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
FileStore: set replay guard on create_collection

This should prevent sequences like:

rmcoll a
mkcoll a
touch a foo
<crash>

from causing trouble by preventing the rmcoll
and mkcoll from being replayed.

Fixes: 4064
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Merge branch 'wip-4064-sam'

Reviewed-by: Sage Weil <sage@inktank.com>