From fbe5bf762d616c8bbe6e824bd0713e20f0751b74 Mon Sep 17 00:00:00 2001
From: Stan Hu <stanhu@gmail.com>
Date: Fri, 25 Sep 2015 01:14:54 -0700
Subject: [PATCH] Fix bug where projects would appear to be stuck in the forked
 import state

A race condition existed between when Rails committed the `import_status` to
`started` and when the Sidekiq worker forked a project. If this fork was quick,
it's possible that the worker would attempt to move into the `finished` state
before the `started` state took effect.

As mentioned in https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#cannot-find-modelname-with-id12345,
we should delay the worker to ensure the DB has a chance to update.

Closes #2736
---
 CHANGELOG             | 1 +
 app/models/project.rb | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index 20b6dce1764..256e445d7df 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 Please view this file on the master branch, on stable branches it's out of date.
 
 v 8.1.0 (unreleased)
+  - Fix bug where projects would appear to be stuck in the forked import state (Stan Hu)
   - Show CI status on all pages where commits list is rendered
   - Automatically enable CI when push .gitlab-ci.yml file to repository
   - Move CI charts to project graphs area
diff --git a/app/models/project.rb b/app/models/project.rb
index a7ea1236b86..5deddb2fbc4 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -276,8 +276,10 @@ class Project < ActiveRecord::Base
   end
 
   def add_import_job
+    # Schedule these jobs after 2 seconds to ensure DB changes to import_status
+    # are saved by the time the workers start
     if forked?
-      unless RepositoryForkWorker.perform_async(id, forked_from_project.path_with_namespace, self.namespace.path)
+      unless RepositoryForkWorker.perform_in(2.seconds, id, forked_from_project.path_with_namespace, self.namespace.path)
         import_fail
       end
     else
-- 
GitLab