Skip to content

Commit a5eb092

Browse files
authored
Merge pull request #4028 from OpSecId/fix-revocation-registry-rotation
Synchronously store the revocation registry
2 parents 36342af + 9f1fce8 commit a5eb092

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

acapy_agent/anoncreds/revocation/revocation.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,12 +1505,20 @@ async def decommission_registry(self, cred_def_id: str) -> list:
15051505
)
15061506
)
15071507
# set new as active...
1508-
if new_reg:
1508+
if new_reg and not isinstance(new_reg, str):
15091509
new_rev_reg_def_id = new_reg.rev_reg_def_id
1510+
# Store the registry definition synchronously before setting it as active
1511+
# This ensures the registry is available in the wallet when
1512+
# set_active_registry tries to fetch it, avoiding a race condition
1513+
# with async event processing
1514+
await self.store_revocation_registry_definition(new_reg)
15101515
await self.set_active_registry(new_rev_reg_def_id)
15111516
else:
15121517
new_rev_reg_def_id = None
1513-
LOGGER.warning("No new registry created while decommissioning registry")
1518+
if isinstance(new_reg, str):
1519+
LOGGER.error(f"Failed to create new registry: {new_reg}")
1520+
else:
1521+
LOGGER.warning("No new registry created while decommissioning registry")
15141522

15151523
# decommission everything except init/wait
15161524
async with self.profile.transaction() as txn:

acapy_agent/anoncreds/revocation/tests/test_revocation.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,9 @@ async def test_decommission_registry(self, mock_handle):
927927
)
928928
)
929929
)
930+
self.revocation.store_revocation_registry_definition = mock.CoroutineMock(
931+
return_value=None
932+
)
930933
self.revocation.set_active_registry = mock.CoroutineMock(return_value=None)
931934
mock_handle.replace = mock.CoroutineMock(return_value=None)
932935

@@ -938,6 +941,8 @@ async def test_decommission_registry(self, mock_handle):
938941
assert result[0].tags["state"] == RevRegDefState.STATE_DECOMMISSIONED
939942
assert mock_handle.fetch_all.called
940943
assert mock_handle.replace.called
944+
# Verify store_revocation_registry_definition was called before set_active_registry
945+
self.revocation.store_revocation_registry_definition.assert_called_once()
941946
# # One for backup
942947
assert (
943948
self.revocation.create_and_register_revocation_registry_definition.call_count

0 commit comments

Comments
 (0)