summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArcadiy Ivanov <arcadiy@ivanov.biz>2018-01-13 11:39:34 -0500
committerAsif Saifuddin Auvi <auvipy@users.noreply.github.com>2018-01-13 22:39:34 +0600
commit2f9eb53128b780628fb753d4851331c6aea19510 (patch)
tree3bf6055e4afe64046bde3cd01d5b53c8a904e9bb
parente209fa6f84ca831cb2760a433dd172e6ce5cb6b6 (diff)
downloadkombu-2f9eb53128b780628fb753d4851331c6aea19510.tar.gz
Virtual transport timeout does not supesede period polling (#689)
fixes #688
-rw-r--r--AUTHORS1
-rw-r--r--kombu/transport/virtual/base.py2
-rw-r--r--t/unit/transport/virtual/test_base.py9
3 files changed, 12 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index df265337..5813c597 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -144,3 +144,4 @@ Vincent Driessen <vincent@datafox.nl>
Wido den Hollander <wido@widodh.nl>
Zach Smith <zmsmith27@gmail.com>
Zhao Xiaohong <mrluanma@gmail.com>
+Arcadiy Ivanov <arcadiy@ivanov.biz>
diff --git a/kombu/transport/virtual/base.py b/kombu/transport/virtual/base.py
index 7f2c61ad..8ccb8f6c 100644
--- a/kombu/transport/virtual/base.py
+++ b/kombu/transport/virtual/base.py
@@ -956,6 +956,8 @@ class Transport(base.Transport):
time_start = monotonic()
get = self.cycle.get
polling_interval = self.polling_interval
+ if timeout and polling_interval and polling_interval > timeout:
+ polling_interval = timeout
while 1:
try:
get(self._deliver, timeout=timeout)
diff --git a/t/unit/transport/virtual/test_base.py b/t/unit/transport/virtual/test_base.py
index 69c1eafe..003c8d53 100644
--- a/t/unit/transport/virtual/test_base.py
+++ b/t/unit/transport/virtual/test_base.py
@@ -4,6 +4,7 @@ import io
import pytest
import sys
import warnings
+import socket
from case import MagicMock, Mock, patch
@@ -12,6 +13,7 @@ from kombu.compression import compress
from kombu.exceptions import ResourceError, ChannelError
from kombu.transport import virtual
from kombu.utils.uuid import uuid
+from kombu.five import monotonic
PY3 = sys.version_info[0] == 3
PRINT_FQDN = 'builtins.print' if PY3 else '__builtin__.print'
@@ -556,6 +558,13 @@ class test_Transport:
x = client(transport_options={'polling_interval': 32.3})
assert x.transport.polling_interval == 32.3
+ def test_timeout_over_polling_interval(self):
+ x = client(transport_options=dict(polling_interval=60))
+ start = monotonic()
+ with pytest.raises(socket.timeout):
+ x.transport.drain_events(x, timeout=.5)
+ assert monotonic() - start < 60
+
def test_close_connection(self):
c1 = self.transport.create_channel(self.transport)
c2 = self.transport.create_channel(self.transport)