StackStorm / StackStorm/st2

st2.conf settings for RabbitMQ connection retrites/limits don't work

Open
#4,775 1 comment 0 reactions 1 assignee View on GitHub

@arm4b is already working on this.

Since Aug 21, 2019.

bug HA K8s rabbitmq
Dominant language
Python
Stars
6.5k
Forks
787
PR merge metrics
No merged PRs in 30d

Description

Due to absence of real health check endpoints in st2, for K8s deployment we don't want our app to re-connect on error, but instead exit service if connection to DB or MQ was broken and let service re-start and re-schedule via K8s algorithms.

There are some settings present in st2.conf around MQ connection retries which don't work:

[messaging]
# How many times should we retry connection before failing.
connection_retries = 10
# How long should we wait between connection retries.
connection_retry_wait = 10000

However even with connection_retries = 0 services are re-connecting on RabbitMQ connection failures.

2019-08-21 12:25:22,915 WARNING [-] Connection to broker lost, trying to re-establish connection...
Traceback (most recent call last):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/mixins.py", line 175, in run
    for _ in self.consume(limit=None, **kwargs):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/mixins.py", line 197, in consume
    conn.drain_events(timeout=safety_interval)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 315, in drain_events
    return self.transport.drain_events(self.connection, **kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 103, in drain_events
    return connection.drain_events(**kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 500, in drain_events
    while not self.blocking_read(timeout):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 506, in blocking_read
    return self.on_inbound_frame(frame)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/method_framing.py", line 55, in on_frame
    callback(channel, method_sig, buf, None)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 510, in on_inbound_method
    method_sig, payload, content,
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/abstract_channel.py", line 126, in dispatch_method
    listener(*args)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 637, in _on_close
    self._x_close_ok()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 652, in _x_close_ok
2019-08-21 12:25:22,919 WARNING [-] Connection to broker lost, trying to re-establish connection...
Traceback (most recent call last):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/mixins.py", line 175, in run
    for _ in self.consume(limit=None, **kwargs):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/mixins.py", line 197, in consume
    conn.drain_events(timeout=safety_interval)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 315, in drain_events
    return self.transport.drain_events(self.connection, **kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 103, in drain_events
    return connection.drain_events(**kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 500, in drain_events
    while not self.blocking_read(timeout):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 506, in blocking_read
    return self.on_inbound_frame(frame)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/method_framing.py", line 55, in on_frame
    callback(channel, method_sig, buf, None)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 510, in on_inbound_method
    method_sig, payload, content,
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/abstract_channel.py", line 126, in dispatch_method
    listener(*args)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 637, in _on_close
    self._x_close_ok()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 652, in _x_close_ok
    self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/abstract_channel.py", line 51, in send_method
    conn.frame_writer(1, self.channel_id, sig, args, content)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/method_framing.py", line 172, in write_frame
    write(view[:offset])
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 288, in write
    self._write(s)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 401, in sendall
    tail = self.send(data, flags)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 395, in send
    return self._send_loop(self.fd.send, data, flags)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 382, in _send_loop
    self.send_method(spec.Connection.CloseOk, callback=self._on_close_ok)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/abstract_channel.py", line 51, in send_method
    conn.frame_writer(1, self.channel_id, sig, args, content)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/method_framing.py", line 172, in write_frame
    write(view[:offset])
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 288, in write
    self._write(s)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 401, in sendall
    tail = self.send(data, flags)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 395, in send
    return self._send_loop(self.fd.send, data, flags)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/eventlet/greenio/base.py", line 382, in _send_loop
    return send_method(data, *args)
error: [Errno 104] Connection reset by peer
    return send_method(data, *args)
error: [Errno 104] Connection reset by peer

and

2019-08-21 12:25:23,052 WARNING [-] Broker connection error, trying again in 0 seconds: error(u'failed to resolve broker hostname',).
Traceback (most recent call last):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/utils/functional.py", line 341, in retry_over_time
    return fun(*args, **kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 275, in connect
    return self.connection
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 823, in connection
    self._connection = self._establish_connection()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 778, in _establish_connection
    conn = self.transport.establish_connection()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 130, in establish_connection
    conn.connect()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 307, in connect
    self.transport.connect()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 81, in connect
    self._connect(self.host, self.port, self.connect_timeout)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 152, in _connect
    "failed to resolve broker hostname"))
error: failed to resolve broker hostname
2019-08-21 12:35:53,544 WARNING [-] Broker connection error, trying again in 4.0 seconds: error(111, 'ECONNREFUSED').
Traceback (most recent call last):
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/utils/functional.py", line 341, in retry_over_time
    return fun(*args, **kwargs)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 275, in connect
    return self.connection
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 823, in connection
    self._connection = self._establish_connection()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/connection.py", line 778, in _establish_connection
    conn = self.transport.establish_connection()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 130, in establish_connection
    conn.connect()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/connection.py", line 307, in connect
    self.transport.connect()
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 81, in connect
    self._connect(self.host, self.port, self.connect_timeout)
  File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/amqp/transport.py", line 152, in _connect
    "failed to resolve broker hostname"))
error: [Errno 111] ECONNREFUSED

We'll need a way to configure real MQ retries and limits.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.