@@ -55,6 +55,7 @@ def __init__( # pylint: disable=super-init-not-called
55
55
self .auto_reconnect = auto_reconnect
56
56
self .timeout = send_timeout
57
57
self .retry_policy = errors .ErrorPolicy (max_retries = 3 , on_error = _error_handler )
58
+ self .reconnect_backoff = 1
58
59
self .name = "EHSender-{}" .format (uuid .uuid4 ())
59
60
self .redirected = None
60
61
self .error = None
@@ -100,9 +101,7 @@ async def open_async(self):
100
101
while not await self ._handler .client_ready_async ():
101
102
await asyncio .sleep (0.05 )
102
103
103
- async def reconnect_async (self ):
104
- """If the Receiver was disconnected from the service with
105
- a retryable error - attempt to reconnect."""
104
+ async def _reconnect_async (self ):
106
105
await self ._handler .close_async ()
107
106
unsent_events = self ._handler .pending_messages
108
107
self ._handler = SendClientAsync (
@@ -119,6 +118,7 @@ async def reconnect_async(self):
119
118
await self ._handler .open_async ()
120
119
self ._handler .queue_message (* unsent_events )
121
120
await self ._handler .wait_async ()
121
+ return True
122
122
except errors .TokenExpired as shutdown :
123
123
log .info ("AsyncSender disconnected due to token expiry. Shutting down." )
124
124
error = EventHubError (str (shutdown ), shutdown )
@@ -127,36 +127,39 @@ async def reconnect_async(self):
127
127
except (errors .LinkDetach , errors .ConnectionClose ) as shutdown :
128
128
if shutdown .action .retry and self .auto_reconnect :
129
129
log .info ("AsyncSender detached. Attempting reconnect." )
130
- await self .reconnect_async ()
131
- else :
132
- log .info ("AsyncSender reconnect failed. Shutting down." )
133
- error = EventHubError (str (shutdown ), shutdown )
134
- await self .close_async (exception = error )
135
- raise error
130
+ return False
131
+ log .info ("AsyncSender reconnect failed. Shutting down." )
132
+ error = EventHubError (str (shutdown ), shutdown )
133
+ await self .close_async (exception = error )
134
+ raise error
136
135
except errors .MessageHandlerError as shutdown :
137
136
if self .auto_reconnect :
138
137
log .info ("AsyncSender detached. Attempting reconnect." )
139
- await self .reconnect_async ()
140
- else :
141
- log .info ("AsyncSender reconnect failed. Shutting down." )
142
- error = EventHubError (str (shutdown ), shutdown )
143
- await self .close_async (exception = error )
144
- raise error
138
+ return False
139
+ log .info ("AsyncSender reconnect failed. Shutting down." )
140
+ error = EventHubError (str (shutdown ), shutdown )
141
+ await self .close_async (exception = error )
142
+ raise error
145
143
except errors .AMQPConnectionError as shutdown :
146
144
if str (shutdown ).startswith ("Unable to open authentication session" ) and self .auto_reconnect :
147
145
log .info ("AsyncSender couldn't authenticate. Attempting reconnect." )
148
- await self .reconnect_async ()
149
- else :
150
- log .info ("AsyncSender connection error (%r). Shutting down." , e )
151
- error = EventHubError (str (shutdown ), shutdown )
152
- await self .close_async (exception = error )
153
- raise error
146
+ return False
147
+ log .info ("AsyncSender connection error (%r). Shutting down." , e )
148
+ error = EventHubError (str (shutdown ), shutdown )
149
+ await self .close_async (exception = error )
150
+ raise error
154
151
except Exception as e :
155
152
log .info ("Unexpected error occurred (%r). Shutting down." , e )
156
153
error = EventHubError ("Sender reconnect failed: {}" .format (e ))
157
154
await self .close_async (exception = error )
158
155
raise error
159
156
157
+ async def reconnect_async (self ):
158
+ """If the Receiver was disconnected from the service with
159
+ a retryable error - attempt to reconnect."""
160
+ while not await self ._reconnect_async ():
161
+ await asyncio .sleep (self .reconnect_backoff )
162
+
160
163
async def has_started (self ):
161
164
"""
162
165
Whether the handler has completed all start up processes such as
0 commit comments