예제 #1
0
    def consume_in_thread(self):
        """Runs the ZmqProxy service."""
        ipc_dir = CONF.rpc_zmq_ipc_dir
        consume_in = "tcp://%s:%s" % \
            (CONF.rpc_zmq_bind_address,
             CONF.rpc_zmq_port)
        consumption_proxy = InternalContext(None)

        try:
            os.makedirs(ipc_dir)
        except os.error:
            if not os.path.isdir(ipc_dir):
                with excutils.save_and_reraise_exception():
                    LOG.error(_LE("Required IPC directory does not exist at"
                                  " %s") % (ipc_dir, ))
        try:
            self.register(consumption_proxy,
                          consume_in,
                          zmq.PULL)
        except zmq.ZMQError:
            if os.access(ipc_dir, os.X_OK):
                with excutils.save_and_reraise_exception():
                    LOG.error(_LE("Permission denied to IPC directory at"
                                  " %s") % (ipc_dir, ))
            with excutils.save_and_reraise_exception():
                LOG.error(_LE("Could not create ZeroMQ receiver daemon. "
                              "Socket may already be in use."))

        super(ZmqProxy, self).consume_in_thread()
예제 #2
0
 def test_save_and_reraise_exception_no_reraise(self):
     """Test that suppressing the reraise works."""
     try:
         raise Exception('foo')
     except Exception:
         with excutils.save_and_reraise_exception() as ctxt:
             ctxt.reraise = False
예제 #3
0
 def test_save_and_reraise_exception_no_reraise(self):
     """Test that suppressing the reraise works."""
     try:
         raise Exception('foo')
     except Exception:
         with excutils.save_and_reraise_exception() as ctxt:
             ctxt.reraise = False
예제 #4
0
def _serialize(data):
    """Serialization wrapper.

    We prefer using JSON, but it cannot encode all types.
    Error if a developer passes us bad data.
    """
    try:
        return jsonutils.dumps(data, ensure_ascii=True)
    except TypeError:
        with excutils.save_and_reraise_exception():
            LOG.error(_LE("JSON serialization failed."))
예제 #5
0
    def test_save_and_reraise_exception(self):
        e = None
        msg = 'foo'
        try:
            try:
                raise Exception(msg)
            except Exception:
                with excutils.save_and_reraise_exception():
                    pass
        except Exception as _e:
            e = _e

        self.assertEqual(str(e), msg)
예제 #6
0
    def test_save_and_reraise_exception(self):
        e = None
        msg = 'foo'
        try:
            try:
                raise Exception(msg)
            except Exception:
                with excutils.save_and_reraise_exception():
                    pass
        except Exception as _e:
            e = _e

        self.assertEqual(str(e), msg)
예제 #7
0
def remove_path_on_error(path, remove=delete_if_exists):
    """Protect code that wants to operate on PATH atomically.
    Any exception will cause PATH to be removed.

    :param path: File to work with
    :param remove: Optional function to remove passed path
    """

    try:
        yield
    except Exception:
        with excutils.save_and_reraise_exception():
            remove(path)
예제 #8
0
    def test_save_and_reraise_exception_dropped_no_reraise(self):
        e = None
        msg = 'second exception'
        with mock.patch('logging.error') as log:
            try:
                try:
                    raise Exception('dropped')
                except Exception:
                    with excutils.save_and_reraise_exception(reraise=False):
                        raise Exception(msg)
            except Exception as _e:
                e = _e

            self.assertEqual(str(e), msg)
            self.assertFalse(log.called)
예제 #9
0
    def test_save_and_reraise_exception_dropped_no_reraise(self):
        e = None
        msg = 'second exception'
        with mock.patch('logging.error') as log:
            try:
                try:
                    raise Exception('dropped')
                except Exception:
                    with excutils.save_and_reraise_exception(reraise=False):
                        raise Exception(msg)
            except Exception as _e:
                e = _e

            self.assertEqual(str(e), msg)
            self.assertFalse(log.called)
예제 #10
0
 def __iter__(self):
     """Return a result until we get a reply with an 'ending' flag."""
     if self._done:
         raise StopIteration
     while True:
         try:
             data = self._dataqueue.get(timeout=self._timeout)
             result = self._process_data(data)
         except queue.Empty:
             self.done()
             raise rpc_common.Timeout()
         except Exception:
             with excutils.save_and_reraise_exception():
                 self.done()
         if self._got_ending:
             self.done()
             raise StopIteration
         if isinstance(result, Exception):
             self.done()
             raise result
         yield result