Update routes for lost-and-found group and projects
What does this MR do?
Related to #219658 (closed)
With !31675 (merged) we partially addressed the issue of projects not being properly deleted (orphaned) when their namespace is deleted:
- Added a Foreign Key constraint from
projects.namespace_id
tonamespaces.id
that restricts namespaces from being deleted without all the projects that reference them being deleted first. - Fixed existing inconsistencies:
- Added a
lost-and-found
group owned by the Ghost User - Found all the Orphaned projects (i.e. those with a
namespace_id
not matching any namespace) - Made them private, marked them as
archived
and moved them under thelost-and-found
group
- Added a
This lost-and-found
group is intended as a bucket to store projects that were not properly deleted. Its purpose is 100% system level, akin to Linux's lost and found directory, so that we can gather those projects and delete them at a later stage.
For that reason a route was not added for that group, nor were the routes for the moved orphaned projects, updated.
That resulted to the group not being accessible through the UI (while visible in the admin dashboard) and caused confusion to instance admins on the origin of this group and its purpose (#219658 (closed)).
This MR addresses this issue in two ways:
-
Adds proper routes for the
lost-and-found
group and the Ghost user (if not already created) and updates all the routes for the orphaned projects to reflect their new path under thelost-and-found
group.That makes both the
lost-and-found
group and the orphaned projects accessible for admins, so that they can inspect their contents. -
The description of the
lost-and-found
group has been updated to explain its purpose and functionality.
Migration output
Up
$ bundle exec rake db:migrate
== 20200602143020 UpdateRoutesForLostAndFoundGroupAndOrphanedProjects: migrating
== 20200602143020 UpdateRoutesForLostAndFoundGroupAndOrphanedProjects: migrated (0.1836s)
Down
$ bundle exec rake db:rollback
== 20200602143020 UpdateRoutesForLostAndFoundGroupAndOrphanedProjects: reverting
== 20200602143020 UpdateRoutesForLostAndFoundGroupAndOrphanedProjects: reverted (0.0000s)
Proof of Concept
I tested with our dev seeded data, by rolling back to before we added the foreign key in !31675 (merged) and setting the gitlab-test_1
project to point to a non existing namespace.
I then run the migrations in !31675 (merged) to add a ghost user and a lost-and-found
group and move this orphaned project under it.
Before running the migration in the current MR, there are no routes for the Ghost's namespace and the lost-and-found
group and the route of gitlab-test_1
project is pointing to its old path (gitlab-org/gitlab-test
):
gitlabhq_development=# SELECT * FROM routes ORDER BY id desc LIMIT 3;
id | source_id | source_type | path | created_at | updated_at | name
-----+-----------+-------------+------------------------------+----------------------------+----------------------------+----------------------------------
117 | 1 | Project | gitlab-org/gitlab-test | 2020-06-02 19:24:30.000736 | 2020-06-02 19:24:30.000747 | Gitlab Org / Gitlab Test
78 | 54 | Namespace | Yannis_Group | 2020-06-02 16:00:09.135003 | 2020-06-02 16:00:09.135003 | Yannis_Group
69 | 18 | Project | irena/typeahead-js | 2020-06-02 10:49:51.586452 | 2020-06-02 10:49:51.586452 | Allene Hickle / Typeahead.Js
After running the migration, the routes are properly added / updated:
gitlabhq_development=# SELECT * FROM routes ORDER BY id desc LIMIT 3;
id | source_id | source_type | path | created_at | updated_at | name
-----+-----------+-------------+--------------------------------+----------------------------+----------------------------+----------------------------------
119 | 53 | Namespace | lost-and-found | 2020-06-02 19:30:34.071657 | 2020-06-02 19:30:34.071662 | lost-and-found
118 | 52 | Namespace | ghost | 2020-06-02 19:30:34.063488 | 2020-06-02 19:30:34.063495 | Ghost User
117 | 1 | Project | lost-and-found/gitlab-test_1_1 | 2020-06-02 19:24:30.000736 | 2020-06-02 19:30:34.127183 | lost-and-found / Gitlab Test_1_1
I have also tested with the local instance and both the lost-and-found
group and the orphaned project under it are fully accessible.
Does this MR meet the acceptance criteria?
Conformity
-
Changelog entry -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers - [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
- [-] Label as security and @ mention
@gitlab-com/gl-security/appsec
- [-] The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
- [-] Security reports checked/validated by a reviewer from the AppSec team