Skip to content

Commit 5ada528

Browse files
authored
When re-establishing RabbitMQ connection create new transport object (#325)
On sends from a TransportManager instance there is currently a check on the connection. This doesn't work as it tries to start and existing thread. A new transport object should be created and connected instead. Resolves #324
1 parent 42ffb99 commit 5ada528

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/murfey/server/ispyb.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@ def __init__(self, transport_type):
5959
self.ispyb = ispyb.open()
6060
self._connection_callback: Callable | None = None
6161

62+
def reconnect(self):
63+
try:
64+
self.transport.disconnect()
65+
except Exception:
66+
log.warning(
67+
"Disconnection of old transport failed when reconnecting",
68+
exc_info=True,
69+
)
70+
self.transport = workflows.transport.lookup(self._transport_type)()
71+
self.transport.connect()
72+
6273
def do_insert_data_collection_group(
6374
self,
6475
record: DataCollectionGroup,
@@ -82,13 +93,7 @@ def do_insert_data_collection_group(
8293
def send(self, queue: str, message: dict, new_connection: bool = False):
8394
if self.transport:
8495
if not self.transport.is_connected():
85-
try:
86-
self.transport.disconnect()
87-
except AttributeError:
88-
# If there is not _pika_thread to join on the transport
89-
# then don't need to worry about dicsonnecting
90-
pass
91-
self.transport.connect()
96+
self.reconnect()
9297
if self._connection_callback:
9398
self._connection_callback()
9499
if new_connection:

0 commit comments

Comments
 (0)