diff --git a/oslo_messaging/_drivers/impl_zmq.py b/oslo_messaging/_drivers/impl_zmq.py index f6518cbf6..b4e1558f9 100644 --- a/oslo_messaging/_drivers/impl_zmq.py +++ b/oslo_messaging/_drivers/impl_zmq.py @@ -58,9 +58,12 @@ zmq_opts = [ help='Name of this node. Must be a valid hostname, FQDN, or ' 'IP address. Must match "host" option, if running Nova.'), - cfg.IntOpt('rpc_cast_timeout', default=30, + cfg.IntOpt('rpc_cast_timeout', default=-1, help='Seconds to wait before a cast expires (TTL). ' - 'Only supported by impl_zmq.'), + 'The default value of -1 specifies an infinite linger ' + 'period. The value of 0 specifies no linger period. ' + 'Pending messages shall be discarded immediately ' + 'when the socket is closed. Only supported by impl_zmq.'), cfg.IntOpt('rpc_poll_timeout', default=1, help='The default number of seconds that poll should wait. ' diff --git a/oslo_messaging/_drivers/zmq_driver/zmq_socket.py b/oslo_messaging/_drivers/zmq_driver/zmq_socket.py index 8556b7345..5a61cbcf2 100644 --- a/oslo_messaging/_drivers/zmq_driver/zmq_socket.py +++ b/oslo_messaging/_drivers/zmq_driver/zmq_socket.py @@ -36,6 +36,12 @@ class ZmqSocket(object): self.context = context self.socket_type = socket_type self.handle = context.socket(socket_type) + + self.close_linger = -1 + if self.conf.rpc_cast_timeout > 0: + self.close_linger = self.conf.rpc_cast_timeout * 1000 + self.handle.setsockopt(zmq.LINGER, self.close_linger) + self.connections = set() def type_name(self): @@ -86,7 +92,6 @@ class ZmqSocket(object): return self.handle.recv_multipart(*args, **kwargs) def close(self, *args, **kwargs): - self.handle.setsockopt(zmq.LINGER, self.conf.rpc_cast_timeout * 1000) self.handle.close(*args, **kwargs) def connect_to_address(self, address):