'Run and wait for LUN snapshot to complete.
:param snapshot -- cinder snapshot object provided by the Manager'

def _wait_run_delete_lun_snapshot(self, snapshot):

    cinder_volume_id = snapshot['volume_id']
    cinder_snapshot_id = snapshot['id']
    comment = self._compress_snapshot_id(cinder_snapshot_id)
    oid = self.vmem_mg.snapshot.snapshot_comment_to_object_id(cinder_volume_id, comment)
    def _loop_func():
        LOG.debug('Entering    _wait_run_delete_lun_snapshot    loop:    vol=%(vol)s,    snap_id=%(snap_id)s,    oid=%(oid)s', {'vol': cinder_volume_id, 'oid': oid, 'snap_id': cinder_snapshot_id})
        try:
            ans = self.vmem_mg.snapshot.delete_lun_snapshot(snapshot_object_id=oid)
        except Exception:
            msg = (_('Failed    to    delete    snapshot    %(snap)s    of    volume    %(vol)s') % {'snap': cinder_snapshot_id, 'vol': cinder_volume_id})
            raise exception.ViolinBackendErr(msg)
        if ans['success']:
            LOG.debug('Delete    snapshot    %(snap_id)s    of    %(vol)s:    success', {'vol': cinder_volume_id, 'snap_id': cinder_snapshot_id})
            raise loopingcall.LoopingCallDone(retvalue=True)
        else:
            LOG.warning('Delete    snapshot    %(snap)s    of    %(vol)s    encountered    temporary    error:    %(msg)s', {'snap': cinder_snapshot_id, 'vol': cinder_volume_id, 'msg': ans['msg']})
    timer = loopingcall.FixedIntervalLoopingCall(_loop_func)
    success = timer.start(interval=1).wait()
    return success
