Skip to content

Commit c96f1b1

Browse files
autolockrenewer on_lock_renew_failure should take two parameters, the renwable and the optional error.
1 parent 91bebe0 commit c96f1b1

File tree

6 files changed

+26
-8
lines changed

6 files changed

+26
-8
lines changed

sdk/servicebus/azure-servicebus/azure/servicebus/_common/auto_lock_renewer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def _auto_lock_renew(self, renewable, starttime, timeout, on_lock_renew_failure=
9898
renewable.auto_renew_error = error
9999
finally:
100100
if on_lock_renew_failure and not clean_shutdown:
101-
on_lock_renew_failure(renewable)
101+
on_lock_renew_failure(renewable, error)
102102

103103
def register(self, renewable, timeout=300, on_lock_renew_failure=None):
104104
"""Register a renewable entity for automatic lock renewal.
@@ -108,7 +108,7 @@ def register(self, renewable, timeout=300, on_lock_renew_failure=None):
108108
~azure.servicebus.ServiceBusSession
109109
:param float timeout: A time in seconds that the lock should be maintained for.
110110
Default value is 300 (5 minutes).
111-
:param Optional[Callable[[Union[~azure.servicebus.ServiceBusSession, ReceivedMessage]], Awaitable[None]]] on_lock_renew_failure:
111+
:param Optional[Callable[[Union[~azure.servicebus.ServiceBusSession, ReceivedMessage], Optional[Exception]], Awaitable[None]]] on_lock_renew_failure:
112112
A callback may be specified to be called when the lock is lost on the renewable that is being registered.
113113
Default value is None (no callback).
114114
"""

sdk/servicebus/azure-servicebus/azure/servicebus/aio/_async_auto_lock_renewer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def _auto_lock_renew(self,
7676
renewable: "Union[ReceivedMessage, ServiceBusSession]",
7777
starttime: datetime.datetime,
7878
timeout: int,
79-
on_lock_renew_failure: "Optional[Callable[[Union[ServiceBusSession, ReceivedMessage]], Awaitable[None]]]"=None) -> None:
79+
on_lock_renew_failure: "Optional[Callable[[Union[ServiceBusSession, ReceivedMessage], Optional[Exception]], Awaitable[None]]]"=None) -> None:
8080
_log.debug("Running async lock auto-renew for %r seconds", timeout)
8181
error = None
8282
clean_shutdown = False # Only trigger the on_lock_renew_failure if halting was not expected (shutdown, etc)
@@ -101,7 +101,7 @@ async def _auto_lock_renew(self,
101101
renewable.auto_renew_error = error
102102
finally:
103103
if on_lock_renew_failure and not clean_shutdown:
104-
await on_lock_renew_failure(renewable)
104+
await on_lock_renew_failure(renewable, error)
105105

106106
def register(self,
107107
renewable: "Union[ReceivedMessage, ServiceBusSession]",

sdk/servicebus/azure-servicebus/tests/async_tests/test_queues_async.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1108,8 +1108,11 @@ async def test_queue_message_settle_through_mgmt_link_due_to_broken_receiver_lin
11081108
@pytest.mark.asyncio
11091109
async def test_async_queue_mock_auto_lock_renew_callback(self):
11101110
results = []
1111-
async def callback_mock(renewable):
1111+
errors = []
1112+
async def callback_mock(renewable, error):
11121113
results.append(renewable)
1114+
if error:
1115+
errors.append(error)
11131116

11141117
auto_lock_renew = AutoLockRenew()
11151118
auto_lock_renew.renew_period = 1 # So we can run the test fast.
@@ -1118,13 +1121,15 @@ async def callback_mock(renewable):
11181121
auto_lock_renew.register(renewable=message, on_lock_renew_failure=callback_mock)
11191122
await asyncio.sleep(3)
11201123
assert len(results) and results[-1].expired == True
1124+
assert not errors
11211125

11221126
auto_lock_renew = AutoLockRenew()
11231127
auto_lock_renew.renew_period = 1
11241128
async with auto_lock_renew: # Check that in normal operation it does not get called
11251129
auto_lock_renew.register(renewable=MockReceivedMessage(), on_lock_renew_failure=callback_mock)
11261130
await asyncio.sleep(3)
11271131
assert len(results) == 1
1132+
assert not errors
11281133

11291134
auto_lock_renew = AutoLockRenew()
11301135
auto_lock_renew.renew_period = 1
@@ -1134,6 +1139,7 @@ async def callback_mock(renewable):
11341139
message.settled = True
11351140
await asyncio.sleep(3)
11361141
assert len(results) == 1
1142+
assert not errors
11371143

11381144
auto_lock_renew = AutoLockRenew()
11391145
auto_lock_renew.renew_period = 1
@@ -1142,6 +1148,7 @@ async def callback_mock(renewable):
11421148
auto_lock_renew.register(renewable=message, on_lock_renew_failure=callback_mock)
11431149
await asyncio.sleep(3)
11441150
assert len(results) == 2 and results[-1].expired == True
1151+
assert errors[-1]
11451152

11461153
auto_lock_renew = AutoLockRenew()
11471154
auto_lock_renew.renew_period = 1
@@ -1151,6 +1158,7 @@ async def callback_mock(renewable):
11511158
await auto_lock_renew.close()
11521159
await asyncio.sleep(3)
11531160
assert len(results) == 2
1161+
assert len(errors) == 1
11541162

11551163
auto_lock_renew = AutoLockRenew()
11561164
auto_lock_renew.renew_period = 1
@@ -1160,6 +1168,7 @@ async def callback_mock(renewable):
11601168
message._receiver._running = False
11611169
await asyncio.sleep(3)
11621170
assert len(results) == 2
1171+
assert len(errors) == 1
11631172

11641173

11651174
@pytest.mark.asyncio

sdk/servicebus/azure-servicebus/tests/async_tests/test_sessions_async.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ async def test_async_session_by_conn_str_receive_handler_with_autolockrenew(self
478478
await sender.send_messages(message)
479479

480480
results = []
481-
async def lock_lost_callback(renewable):
481+
async def lock_lost_callback(renewable, error):
482482
results.append(renewable)
483483

484484
renewer = AutoLockRenew()

sdk/servicebus/azure-servicebus/tests/test_queues.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,8 +1219,11 @@ def test_queue_message_settle_through_mgmt_link_due_to_broken_receiver_link(self
12191219

12201220
def test_queue_mock_auto_lock_renew_callback(self):
12211221
results = []
1222-
def callback_mock(renewable):
1222+
errors = []
1223+
def callback_mock(renewable, error):
12231224
results.append(renewable)
1225+
if error:
1226+
errors.append(error)
12241227

12251228
auto_lock_renew = AutoLockRenew()
12261229
auto_lock_renew.renew_period = 1 # So we can run the test fast.
@@ -1229,13 +1232,15 @@ def callback_mock(renewable):
12291232
auto_lock_renew.register(renewable=message, on_lock_renew_failure=callback_mock)
12301233
time.sleep(3)
12311234
assert len(results) and results[-1].expired == True
1235+
assert not errors
12321236

12331237
auto_lock_renew = AutoLockRenew()
12341238
auto_lock_renew.renew_period = 1
12351239
with auto_lock_renew: # Check that in normal operation it does not get called
12361240
auto_lock_renew.register(renewable=MockReceivedMessage(), on_lock_renew_failure=callback_mock)
12371241
time.sleep(3)
12381242
assert len(results) == 1
1243+
assert not errors
12391244

12401245
auto_lock_renew = AutoLockRenew()
12411246
auto_lock_renew.renew_period = 1
@@ -1245,6 +1250,7 @@ def callback_mock(renewable):
12451250
message.settled = True
12461251
time.sleep(3)
12471252
assert len(results) == 1
1253+
assert not errors
12481254

12491255
auto_lock_renew = AutoLockRenew()
12501256
auto_lock_renew.renew_period = 1
@@ -1253,6 +1259,7 @@ def callback_mock(renewable):
12531259
auto_lock_renew.register(renewable=message, on_lock_renew_failure=callback_mock)
12541260
time.sleep(3)
12551261
assert len(results) == 2 and results[-1].expired == True
1262+
assert errors[-1]
12561263

12571264
auto_lock_renew = AutoLockRenew()
12581265
auto_lock_renew.renew_period = 1
@@ -1262,6 +1269,7 @@ def callback_mock(renewable):
12621269
auto_lock_renew.close()
12631270
time.sleep(3)
12641271
assert len(results) == 2
1272+
assert len(errors) == 1
12651273

12661274
auto_lock_renew = AutoLockRenew()
12671275
auto_lock_renew.renew_period = 1
@@ -1271,6 +1279,7 @@ def callback_mock(renewable):
12711279
message._receiver._running = False
12721280
time.sleep(3)
12731281
assert len(results) == 2
1282+
assert len(errors) == 1
12741283

12751284

12761285
def test_queue_mock_no_reusing_auto_lock_renew(self):

sdk/servicebus/azure-servicebus/tests/test_sessions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ def test_session_by_conn_str_receive_handler_with_autolockrenew(self, servicebus
547547
sender.send_messages(message)
548548

549549
results = []
550-
def lock_lost_callback(renewable):
550+
def lock_lost_callback(renewable, error):
551551
results.append(renewable)
552552

553553
renewer = AutoLockRenew()

0 commit comments

Comments
 (0)