500 internal Server Error when trying to create fork relationship
I am trying to create a fork relationship between two repository on Gitlab, but it respond with 500 Internal Server Error
and by looking on the logs ( specifically /var/log/gitlab/gitlab-rails/api_json.log ) I see :
,"exception.class":"ActiveRecord::RecordNotSaved","exception.message":"Failed to remove the existing associated fork_network_member. The record failed to save after its foreign key was set to nil.","exception.backtrace":["app/services/projects/fork_service.rb:89:in build_fork_network_member'","lib/gitlab/metrics/instrumentation.rb:160:in
block in build_fork_network_member'","lib/gitlab/metrics/method_call.rb:27:in
Steps to Reproduce
- Crete a project -> Fork it
- remove fork relationship
This is what we are left with:
irb(main):001:0> parent = Project.where(id: 110).first()
=> #<Project id:110 kate/194252>>
irb(main):002:0> parent.fork_network
=> #<ForkNetwork id: 4, root_project_id: 110, deleted_root_project_name: nil>
irb(main):003:0> parent.fork_network_member
=> #<ForkNetworkMember id: 11, fork_network_id: 4, project_id: 110, forked_from_project_id: nil>
irb(main):004:0> child = Project.where(id: 111).first()
=> #<Project id:111 mygroup/194252>>
irb(main):005:0> child.fork_network
=> nil
irb(main):006:0> child.fork_network_member
=> nil
- Try setting fork relationship vice-versa. Child -> Parent with
curl --request POST --header "PRIVATE-TOKEN: TOKENHERE" https://GITLABHOSTNAMEHERE/api/v4/projects/110/fork/111
Actual Result
{"message":"500 Internal Server Error"}
{"time":"2021-02-16T14:50:22.625Z","severity":"INFO","duration_s":0.06244,"db_duration_s":0.01127,"view_duration_s":0.05117,"status":500,"method":"POST","path":"/api/v4/projects/110/fork/111","params":[],"host":"GITLABHOSTNAMEHERE","remote_ip":"109.87.135.38, 109.87.135.38","ua":"curl/7.68.0","route":"/api/:version/projects/:id/fork/:forked_from_id","user_id":50,"username":"USERNAMEHERE","exception.class":"ActiveRecord::RecordNotSaved","exception.message":"Failed to remove the existing associated fork_network_member. The record failed to save after its foreign key was set to nil.","exception.backtrace":["app/services/projects/fork_service.rb:85:in `build_fork_network_member'","lib/gitlab/metrics/instrumentation.rb:160:in `block in build_fork_network_member'","lib/gitlab/metrics/method_call.rb:27:in `measure'","lib/gitlab/metrics/instrumentation.rb:160:in `build_fork_network_member'","app/services/projects/fork_service.rb:28:in `link_existing_project'","lib/gitlab/metrics/instrumentation.rb:160:in `block in link_existing_project'","lib/gitlab/metrics/method_call.rb:27:in `measure'","lib/gitlab/metrics/instrumentation.rb:160:in `link_existing_project'","app/services/projects/fork_service.rb:6:in `execute'","lib/gitlab/metrics/instrumentation.rb:160:in `block in execute'","lib/gitlab/metrics/method_call.rb:27:in `measure'","lib/gitlab/metrics/instrumentation.rb:160:in `execute'","lib/api/projects.rb:473:in `block (2 levels) in <class:Projects>'","ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'","ee/lib/gitlab/ip_address_state.rb:10:in `with'","ee/lib/gitlab/middleware/ip_restrictor.rb:13:in `call'","lib/api/api_guard.rb:213:in `call'","lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'","lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'","lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'","lib/gitlab/metrics/transaction.rb:56:in `run'","lib/gitlab/metrics/rack_middleware.rb:16:in `call'","lib/gitlab/request_profiler/middleware.rb:17:in `call'","lib/gitlab/jira/middleware.rb:19:in `call'","lib/gitlab/middleware/go.rb:20:in `call'","lib/gitlab/etag_caching/middleware.rb:21:in `call'","lib/gitlab/middleware/multipart.rb:172:in `call'","lib/gitlab/middleware/read_only/controller.rb:50:in `call'","lib/gitlab/middleware/read_only.rb:18:in `call'","lib/gitlab/middleware/same_site_cookies.rb:27:in `call'","lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'","lib/gitlab/middleware/basic_health_check.rb:25:in `call'","lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'","lib/gitlab/middleware/request_context.rb:23:in `call'","config/initializers/fix_local_cache_middleware.rb:9:in `call'","lib/gitlab/metrics/requests_rack_middleware.rb:76:in `call'","lib/gitlab/middleware/release_env.rb:12:in `call'"],"queue_duration_s":0.018962,"redis_calls":6,"redis_duration_s":0.001441,"redis_read_bytes":768,"redis_write_bytes":423,"redis_cache_calls":6,"redis_cache_duration_s":0.001441,"redis_cache_read_bytes":768,"redis_cache_write_bytes":423,"db_count":23,"db_write_count":1,"db_cached_count":0,"correlation_id":"01EYNN48EDW2DPWPKY6YCXJGDJ","meta.user":"kate","meta.project":"kate/194252","meta.root_namespace":"kate","meta.caller_id":"/api/:version/projects/:id/fork/:forked_from_id","meta.remote_ip":"109.87.135.38","meta.feature_category":"source_code_management","content_length":"0"}
Expected result
Successfully created fork relationship
Edited by Kate Grechishkina