'Handoff a locally owned volume to a remote destination.
The remote destination will be the new owner of the volume.
This is a blocking API for now (but it does return a ``Deferred``
for success/failure).
:param Volume volume: The volume to handoff.
:param IRemoteVolumeManager destination: The remote volume manager
to handoff to.
:return: ``Deferred`` that fires when the handoff has finished, or
errbacks on error (specifcally with a ``ValueError`` if the
volume is not locally owned).'

def handoff(self, volume, destination):

    pushing = maybeDeferred(self.push, volume, destination)
    def pushed(ignored):
        remote_uuid = destination.acquire(volume)
        return volume.change_owner(remote_uuid)
    changing_owner = pushing.addCallback(pushed)
    return changing_owner
