Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions acapy_agent/anoncreds/revocation/revocation.py
Original file line number Diff line number Diff line change
Expand Up @@ -1505,12 +1505,20 @@ async def decommission_registry(self, cred_def_id: str) -> list:
)
)
# set new as active...
if new_reg:
if new_reg and not isinstance(new_reg, str):
new_rev_reg_def_id = new_reg.rev_reg_def_id
# Store the registry definition synchronously before setting it as active
# This ensures the registry is available in the wallet when
# set_active_registry tries to fetch it, avoiding a race condition
# with async event processing
await self.store_revocation_registry_definition(new_reg)
await self.set_active_registry(new_rev_reg_def_id)
else:
new_rev_reg_def_id = None
LOGGER.warning("No new registry created while decommissioning registry")
if isinstance(new_reg, str):
LOGGER.error(f"Failed to create new registry: {new_reg}")
else:
LOGGER.warning("No new registry created while decommissioning registry")

# decommission everything except init/wait
async with self.profile.transaction() as txn:
Expand Down
5 changes: 5 additions & 0 deletions acapy_agent/anoncreds/revocation/tests/test_revocation.py
Original file line number Diff line number Diff line change
Expand Up @@ -927,6 +927,9 @@ async def test_decommission_registry(self, mock_handle):
)
)
)
self.revocation.store_revocation_registry_definition = mock.CoroutineMock(
return_value=None
)
self.revocation.set_active_registry = mock.CoroutineMock(return_value=None)
mock_handle.replace = mock.CoroutineMock(return_value=None)

Expand All @@ -938,6 +941,8 @@ async def test_decommission_registry(self, mock_handle):
assert result[0].tags["state"] == RevRegDefState.STATE_DECOMMISSIONED
assert mock_handle.fetch_all.called
assert mock_handle.replace.called
# Verify store_revocation_registry_definition was called before set_active_registry
self.revocation.store_revocation_registry_definition.assert_called_once()
# # One for backup
assert (
self.revocation.create_and_register_revocation_registry_definition.call_count
Expand Down
Loading