info: Project transfer failed halfway
Hi there,
I spend some time today debugging this issue. For us it's solved, but just wanted to share it with you.
A colleague of my started a new project in his own namespace, discovered that it should be in a group so he tried to transfer the project. Somehow Gitlab kept hanging (can happen) and the process/request never finished the transfer.
The project then exist in both the group and the personal namespace, but wasn't reachable (ERR_TOO_MANY_REDIRECTS
). After some debugging, I figured out that the database wasn't successfully updated after the transfer:
(I've changed the username to user, group-name to group and project-name to some-project)
select id, name, path, type from namespaces where id = 7 or id = 21;
id | name | path | type
----+-----------+-----------+-------
7 | user | user |
21 | group | group | Group
(2 rows)
select id, name, path, namespace_id from projects where id = 444;
id | name | path | namespace_id
-----+--------------+--------------+--------------
444 | some-project | some-project | 7
(1 row)
select * from project_group_links where project_id = 444;
id | project_id | group_id | group_access | expires_at
----+------------+----------+--------------+------------
18 | 444 | 21 | 40 |
(1 row)
select * from redirect_routes where source_id = 444;
id | source_id | source_type | path | permanent
-----+-----------+-------------+-------------------+-----------
202 | 444 | Project | user/some-project | f
(1 row)
select * from routes where source_id = 444;
id | source_id | source_type | path | name
-----+-----------+-------------+--------------------+------------------------
546 | 444 | Project | group/some-project | group / some-project
(1 row)
I was able to remove the project in the web-interface after:
delete from redirect_routes where id = 202;
update routes set path = 'user/some-project' where id = 546;
Maybe it could be nice to check on this kind of misconfigurations in future?
Gitlab version: GitLab Enterprise Edition 10.6.4-ee 42f072e0
Logs (hide some info):
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.83,"view":0.0,"db":2.52,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.135Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.25,"view":0.0,"db":2.49,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.185Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.45,"view":0.0,"db":2.64,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.236Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":16.9,"view":0.0,"db":2.43,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.285Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.0,"view":0.0,"db":2.59,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.337Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.39,"view":0.0,"db":2.53,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.388Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.91,"view":0.0,"db":2.45,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.437Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.4,"view":0.0,"db":2.48,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.493Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.03,"view":0.0,"db":2.48,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.544Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":18.33,"view":0.0,"db":2.51,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.591Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.39,"view":0.0,"db":2.57,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.642Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":20.06,"view":0.0,"db":3.63,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.693Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
{"method":"GET","path":"/user/some-project","format":"html","controller":"ProjectsController","action":"show","status":302,"duration":17.55,"view":0.0,"db":2.55,"location":"https://company-git.com/user/some-project","time":"2018-04-12T08:02:52.749Z","params":[{"key":"namespace_id","value":"user"},{"key":"id","value":"some-project"}],"remote_ip":"127.0.0.1","user_id":1,"username":"mvancalker"}
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}
Redirected to https://company-git.com/user/some-project
Started GET "/user/some-project" for 127.0.0.1 at 2018-04-12 10:02:52 +0200
Parameters: {"namespace_id"=>"user", "id"=>"some-project"}