From a8b3d1bc2283f47d2a4bd62d94819932800d22b3 Mon Sep 17 00:00:00 2001
From: Jim Dowling
Date: Tue, 8 Sep 2026 19:01:51 +0200
Subject: [PATCH 1/4] [HWORKS-3227] Removing a member from a project leaves
their home directory owned by a user with no access
https://hopsworks.atlassian.net/browse/HWORKS-3227
The manage-members guide said nothing about what becomes of the files a
removed member leaves behind, which is the question an administrator
asks before removing anyone.
It now says that the member's project home directory and its whole
subtree are transferred to the data owner who has been in the project
longest, and names the two cases where nothing is transferred: a
removal that asks for the directory to be deleted, and a project with
no data owner left.
Signed-off-by: Jim Dowling
Co-Authored-By: Claude Opus 5 (1M context)
---
.../projects/project/manage_members.md | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/docs/user_guides/projects/project/manage_members.md b/docs/user_guides/projects/project/manage_members.md
index c12a8603a6..f0e8a005e1 100644
--- a/docs/user_guides/projects/project/manage_members.md
+++ b/docs/user_guides/projects/project/manage_members.md
@@ -91,6 +91,21 @@ To change a member's role or remove them from the project, click the `Manage mem
+### What happens to a removed member's files
+
+Each member has a private home directory in the project, `/Projects//Users/`, holding their notebooks, their SSH key and their agent configuration.
+
+When a member is removed, that directory and everything under it is transferred to the data owner who has been a member of the project the longest. The files keep their contents and their paths; only the owner changes. The removed member loses access, as they do to the rest of the project.
+
+Two cases where nothing is transferred:
+
+| Case | Result |
+| --- | --- |
+| The removal asks for the home directory to be deleted | The directory is deleted, so there is nothing to transfer |
+| No data owner is left in the project | The directory keeps its current owner and is reported in the Hopsworks logs |
+
+Service accounts are never chosen as the new owner, however long they have been members.
+
## Python SDK
```python
From 772618a0373e41d60e96b31bb88d9cbb6ebb63d6 Mon Sep 17 00:00:00 2001
From: Jim Dowling
Date: Wed, 9 Sep 2026 11:31:56 +0200
Subject: [PATCH 2/4] [HWORKS-3227] Removing a member from a project leaves
their home directory owned by a user with no access
https://hopsworks.atlassian.net/browse/HWORKS-3227
The guide now says that the remove dialog asks which data owner takes
the files, and that it starts on the longest-serving one, which is what
the API does when the request names nobody. It says why only data
owners are offered, and that the transfer runs in the background, since
a member with a large home directory does not hand over instantly.
The table of exceptions gains the refusal: a removal that would leave
the project with no data owner does not go through, and the guide says
what to do about it. The old row claiming the directory keeps its owner
in that case is gone, because that case can no longer happen.
The SDK snippet shows all three forms: the default, a named owner, and
deleting the files instead.
Signed-off-by: Jim Dowling
Co-Authored-By: Claude Opus 5 (1M context)
---
.../projects/project/manage_members.md | 21 +++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/docs/user_guides/projects/project/manage_members.md b/docs/user_guides/projects/project/manage_members.md
index f0e8a005e1..9f9e037c9f 100644
--- a/docs/user_guides/projects/project/manage_members.md
+++ b/docs/user_guides/projects/project/manage_members.md
@@ -95,16 +95,19 @@ To change a member's role or remove them from the project, click the `Manage mem
Each member has a private home directory in the project, `/Projects//Users/`, holding their notebooks, their SSH key and their agent configuration.
-When a member is removed, that directory and everything under it is transferred to the data owner who has been a member of the project the longest. The files keep their contents and their paths; only the owner changes. The removed member loses access, as they do to the rest of the project.
+When a member is removed, that directory and everything under it is transferred to another data owner. The files keep their contents and their paths; only the owner changes. The removed member loses access, as they do to the rest of the project.
-Two cases where nothing is transferred:
+The remove dialog asks which data owner takes them, and starts on the data owner who has been in the project the longest. Only data owners are offered: a data scientist cannot manage members, so files handed to one would be out of reach of the people who can. Service accounts are never chosen.
+
+The transfer runs in the background. A member with a large home directory takes a moment to hand over, because every file and directory under it changes owner one at a time, and the removal does not wait for that to finish.
+
+Two cases where nothing is transferred, and one where the removal is refused:
| Case | Result |
| --- | --- |
| The removal asks for the home directory to be deleted | The directory is deleted, so there is nothing to transfer |
-| No data owner is left in the project | The directory keeps its current owner and is reported in the Hopsworks logs |
-
-Service accounts are never chosen as the new owner, however long they have been members.
+| The member being removed has no home directory | Nothing to transfer |
+| Removing the member would leave the project with no data owner | The removal is refused. Give another member the data owner role first |
## Python SDK
@@ -124,8 +127,14 @@ for member in project.get_members():
# Change a member's role
project.get_members_api().update_role("alice@example.com", "Observer")
-# Remove a member
+# Remove a member. Their files go to the longest-serving data owner
project.remove_member("alice@example.com")
+
+# Name the data owner that takes over their files
+project.remove_member("alice@example.com", new_file_owner="carol@example.com")
+
+# Delete their files instead of handing them over
+project.remove_member("alice@example.com", delete_home_dir=True)
```
Roles are the same as in the UI: `Data owner`, `Data scientist`, `Observer`, and `Feature store restricted`.
From 3f678af72b5ba91baf220abcf7804cd8898de76f Mon Sep 17 00:00:00 2001
From: Jim Dowling
Date: Wed, 9 Sep 2026 23:36:58 +0200
Subject: [PATCH 3/4] [HWORKS-3227] Removing a member from a project leaves
their home directory owned by a user with no access
https://hopsworks.atlassian.net/browse/HWORKS-3227
Say where the new owner finds the handed-over home directory.
The directory keeps the removed member's name, so a data owner who
takes the files over goes looking for their own name and does not find
them. The page said the paths do not change without saying what that
means for the person now holding them.
Signed-off-by: Jim Dowling
Co-Authored-By: Claude Opus 5 (1M context)
---
docs/user_guides/projects/project/manage_members.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs/user_guides/projects/project/manage_members.md b/docs/user_guides/projects/project/manage_members.md
index 9f9e037c9f..b7c33a9722 100644
--- a/docs/user_guides/projects/project/manage_members.md
+++ b/docs/user_guides/projects/project/manage_members.md
@@ -97,6 +97,8 @@ Each member has a private home directory in the project, `/Projects//Us
When a member is removed, that directory and everything under it is transferred to another data owner. The files keep their contents and their paths; only the owner changes. The removed member loses access, as they do to the rest of the project.
+The directory keeps the name of the member who had it, since the paths do not change. The new owner finds it in the project's `Users` dataset under that name, next to their own home directory. Nobody else sees it: home directories stay private to whoever owns them.
+
The remove dialog asks which data owner takes them, and starts on the data owner who has been in the project the longest. Only data owners are offered: a data scientist cannot manage members, so files handed to one would be out of reach of the people who can. Service accounts are never chosen.
The transfer runs in the background. A member with a large home directory takes a moment to hand over, because every file and directory under it changes owner one at a time, and the removal does not wait for that to finish.
From 8e1c82e555ab72fe65088bc3db01d0979577c47e Mon Sep 17 00:00:00 2001
From: Jim Dowling
Date: Thu, 10 Sep 2026 08:04:40 +0200
Subject: [PATCH 4/4] [HWORKS-3227] Removing a member from a project leaves
their home directory owned by a user with no access
https://hopsworks.atlassian.net/browse/HWORKS-3227
Say what rejoining does, and what happens when a hand-over is lost.
A member added back to a project gets a new home directory, and the
files they left move under the data owner who took them over. Neither
was written down, and the page said the paths do not change.
Signed-off-by: Jim Dowling
Co-Authored-By: Claude Opus 5 (1M context)
---
docs/user_guides/projects/project/manage_members.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/docs/user_guides/projects/project/manage_members.md b/docs/user_guides/projects/project/manage_members.md
index b7c33a9722..2292c11781 100644
--- a/docs/user_guides/projects/project/manage_members.md
+++ b/docs/user_guides/projects/project/manage_members.md
@@ -99,6 +99,10 @@ When a member is removed, that directory and everything under it is transferred
The directory keeps the name of the member who had it, since the paths do not change. The new owner finds it in the project's `Users` dataset under that name, next to their own home directory. Nobody else sees it: home directories stay private to whoever owns them.
+Adding that member back to the project gives them a new, empty home directory. The files they left keep the data owner who took them over, and move to `Users//former-members/` to free the path.
+
+A hand-over runs in the background and is retried until it completes. If it is lost, which deleting the removed member's account before it runs does, the platform's periodic permissions check finds the directory and hands it to the longest-serving data owner instead of the one the removal chose.
+
The remove dialog asks which data owner takes them, and starts on the data owner who has been in the project the longest. Only data owners are offered: a data scientist cannot manage members, so files handed to one would be out of reach of the people who can. Service accounts are never chosen.
The transfer runs in the background. A member with a large home directory takes a moment to hand over, because every file and directory under it changes owner one at a time, and the removal does not wait for that to finish.