36fb5bceab
Kombu recommend to run heartbeat_check every seconds but we use a lock around the kombu connection so, to not lock to much this lock to most of the time do nothing except waiting the events drain, we start heartbeat_check and retrieve the server heartbeat packet only two times more than the minimum required for the heartbeat works: heartbeat_timeout / heartbeat_rate / 2.0 Because of this, we are not sending the heartbeat frames at correct intervals. E.G. If heartbeat_timeout=60 and rate=2, AMQP protocol expects to send a frame every 30sec. With the current heartbeat_check implementation, heartbeat_check will be called every: heartbeat_timeout / heartbeat_rate / 2.0 = 60 / 2 / 2.0 = 15 Which will result in the following frame flow: T+0 --> do nothing (60/2 > 0) T+15 --> do nothing (60/2 > 15) T+30 --> do nothing (60/2 > 30) T+45 --> send a frame (60/2 < 45) ... With heartbeat_rate=3, the heartbeat_check will be executed more often: heartbeat_timeout / heartbeat_rate / 2.0 = 60 / 3 / 2.0 = 10 Frame flow: T+0 --> do nothing (60/3 > 0) T+10 --> do nothing (60/3 > 10) T+20 --> do nothing (60/3 > 20) T+30 --> send a frame (60/3 < 30) ... Now we are sending the frame with correct intervals Closes-bug: #2008734 Signed-off-by: Arnaud Morin <arnaud.morin@ovhcloud.com> Change-Id: Ie646d254faf5e45ba46948212f4c9baf1ba7a1a8 |
||
---|---|---|
.. | ||
amqp1_driver | ||
kafka_driver | ||
__init__.py | ||
amqp.py | ||
amqpdriver.py | ||
base.py | ||
common.py | ||
impl_amqp1.py | ||
impl_fake.py | ||
impl_kafka.py | ||
impl_rabbit.py | ||
pool.py |