summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshenjiatong <yshxxsjt715@gmail.com>2020-06-30 08:56:26 +0800
committerStephen Finucane <sfinucan@redhat.com>2021-09-02 16:17:52 +0100
commit54ced5361b49fb9b0cf53ff2e6f5825ba7ae513a (patch)
tree3d4a50d2678ec2f40aabe7e37f77f8e4f6189f05
parent82281a0d4e6abffa93175f30b2cbd7acca3cf9fb (diff)
downloadoslo-messaging-54ced5361b49fb9b0cf53ff2e6f5825ba7ae513a.tar.gz
Catch ConnectionForced Exception
Occasionally I saw large number of connectionforced exceptions. such exceptions cannot be healed automatically and requires a reboot. catch it and ensure connection established. Changes: oslo_messaging/_drivers/impl_rabbit.py NOTE(stephenfin): We need to add the 'absolute_import' future to disable the legacy import flow. Without this, the import of 'amqp.exceptions' in 'oslo_messaging._drivers.impl_rabbit' attempts to import 'exceptions' from the sibling module, 'oslo_messaging._drivers.amqp', instead of the top-level 'amqp' module. Thank God for Python 3.x, eh? More information is available at [1], for those curious enough. [1] https://stackoverflow.com/q/33743880/ Change-Id: I5c468d10230f05438df780e045f1e92662edf070 Closes-Bug: #1883038 (cherry picked from commit 26e8bb4cc9097fddf3c2e34599b131e3f5d73867) (cherry picked from commit 360deb89a7e95d332267564b486219e389a793f7)
-rw-r--r--oslo_messaging/_drivers/impl_rabbit.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/oslo_messaging/_drivers/impl_rabbit.py b/oslo_messaging/_drivers/impl_rabbit.py
index 6b89f89..1bd1a10 100644
--- a/oslo_messaging/_drivers/impl_rabbit.py
+++ b/oslo_messaging/_drivers/impl_rabbit.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+from __future__ import absolute_import
+
import contextlib
import errno
import functools
@@ -26,6 +28,7 @@ import threading
import time
import uuid
+from amqp import exceptions as amqp_exec
import kombu
import kombu.connection
import kombu.entity
@@ -1036,7 +1039,8 @@ class Connection(object):
except (socket.timeout,
ConnectRefuseError,
OSError,
- kombu.exceptions.OperationalError) as exc:
+ kombu.exceptions.OperationalError,
+ amqp_exec.ConnectionForced) as exc:
LOG.info("A recoverable connection/channel error "
"occurred, trying to reconnect: %s", exc)
self.ensure_connection()