librados: drop useless ver arg to _notify_ack

Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 2ccdd4235a0698672ef13471476c165b58c5723b)
librados: define updated watch/notify interface

- new notify callback with the correct values:
  - notify_id
  - watch handle
  - payload
- new notify_ack call
  - not implicit when the callback returns (for new api only)
  - optional payload
- new watch2 call
  - that provides the new callback
- new notify2 call
  - with the right arguments, and optional timeout

A couple refactors in here:
- IoCtx notify_ack is now called unlocked (Note: this will soon change
  with pending Objecter locking changes)
- Objecter notify_ack takes a buffer

TODO:
- no timeout on the individual watch, yet...

Signed-off-by: Sage Weil <sage@redhat.com>
osd: implement notify ack payloads

If the notified send back reply payloads, pass them back to the notifier.

Note that we have changed the on-wire behavior of the watch completion
message a bit: instead of sending the original notify payload back to the
notifier, we send the map of notified to replies.  Note that only users of
the new API will know what to do with the notify acknowledgement
information.  At the same time, we stop sending the original payload.
However, the old API users never saw that data; we were uselessly sending
it over the wire.

Signed-off-by: Sage Weil <sage@redhat.com>
librados: update notify2 API to accept reply payloads

Allow the notify2 callers to provide bufferlists or char ** pointers
so that we can pass the reply buffer back to them.

Signed-off-by: Sage Weil <sage@redhat.com>
librados: Add exec_mutable operation

The existing exec operation does not pass the current
snapshot context.  The new exec_mutable operation
includes the snapshot context so that methods which
update objects can be rolled back.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
rbd: Implement object map for tracking in-use objects

When enabled, the object map is stored in a new
'rbd_object_map.<id>' object in the image's pool. The
object map tracks blocks that are in-use, non-existent,
and are pending deletion.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
rbd: Use object map for read operations

When the RBD object map is enabled, read operations
now check whether or not an object exists before
sending a read operation to RADOS.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>