Skip to content

Commit 27ac85b

Browse files
authored
Added check if account group already exists during failure recovery (#446)
Removing recovering local groups if the corresponding account group is already attached to the workspace.
1 parent 41f4373 commit 27ac85b

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/databricks/labs/ucx/workspace_access/groups.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,12 @@ def _validate_selected_groups(self, group_names: list[str]):
258258
return valid_group_names
259259

260260
def ws_local_group_deletion_recovery(self):
261+
account_groups_reflected_on_the_workspace = {
262+
g.display_name
263+
for g in self._ws.groups.list(attributes="id,displayName,meta")
264+
if g.meta.resource_type == "Group" and g.display_name not in self._SYSTEM_GROUPS
265+
}
266+
261267
workspace_groups = {_.display_name for _ in self._workspace_groups}
262268
source_groups = [
263269
g
@@ -271,8 +277,12 @@ def ws_local_group_deletion_recovery(self):
271277
)
272278

273279
for backup_group in source_groups:
280+
source_groups_name = backup_group.display_name.removeprefix(self._backup_group_prefix)
281+
if source_groups_name in account_groups_reflected_on_the_workspace:
282+
logger.info(f"Group {source_groups_name} already exists on the workspace level, skipping")
283+
continue
274284
ws_local_group = self._ws.groups.create(
275-
display_name=backup_group.display_name.removeprefix(self._backup_group_prefix),
285+
display_name=source_groups_name,
276286
meta=backup_group.meta,
277287
entitlements=backup_group.entitlements,
278288
roles=backup_group.roles,

tests/integration/workspace_access/test_groups.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def test_id_validity(ws: WorkspaceClient, make_ucx_group):
186186

187187

188188
def test_recover_from_ws_local_deletion(ws, make_ucx_group):
189-
ws_group, _ = make_ucx_group()
189+
ws_group, acc_group = make_ucx_group()
190190
ws_group_two, _ = make_ucx_group()
191191

192192
group_manager = GroupManager(ws, GroupsConfig(auto=True))
@@ -195,6 +195,7 @@ def test_recover_from_ws_local_deletion(ws, make_ucx_group):
195195
# simulate disaster
196196
ws.groups.delete(ws_group.id)
197197
ws.groups.delete(ws_group_two.id)
198+
group_manager._reflect_account_group_to_workspace(acc_group)
198199

199200
# recovery run from a debug notebook
200201
group_manager = GroupManager(ws, GroupsConfig(auto=True))
@@ -208,17 +209,10 @@ def test_recover_from_ws_local_deletion(ws, make_ucx_group):
208209
for gi in group_manager.migration_state.groups:
209210
recovered_state[gi.workspace.display_name] = gi.workspace
210211

211-
assert sorted([member.display for member in ws_group.members]) == sorted(
212-
[member.display for member in recovered_state[ws_group.display_name].members]
213-
)
214212
assert sorted([member.display for member in ws_group_two.members]) == sorted(
215213
[member.display for member in recovered_state[ws_group_two.display_name].members]
216214
)
217215

218-
assert sorted([member.value for member in ws_group.members]) == sorted(
219-
[member.value for member in recovered_state[ws_group.display_name].members]
220-
)
221-
222216
assert sorted([member.value for member in ws_group_two.members]) == sorted(
223217
[member.value for member in recovered_state[ws_group_two.display_name].members]
224218
)

0 commit comments

Comments
 (0)