Commit b47646ef13597836cad342a4d9372316289f0155

Authored by Dmitriy Zaporozhets
1 parent 37db76a3

Add retry feature to project import

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/models/project.rb
@@ -126,12 +126,18 @@ class Project &lt; ActiveRecord::Base @@ -126,12 +126,18 @@ class Project &lt; ActiveRecord::Base
126 end 126 end
127 127
128 event :import_fail do 128 event :import_fail do
129 - transition :started => :timeout 129 + transition :started => :failed
  130 + end
  131 +
  132 + event :import_retry do
  133 + transition :failed => :started
130 end 134 end
131 135
132 state :started 136 state :started
133 state :finished 137 state :finished
134 - state :timeout 138 + state :failed
  139 +
  140 + after_transition any => :started, :do => :add_import_job
135 end 141 end
136 142
137 class << self 143 class << self
@@ -210,12 +216,28 @@ class Project &lt; ActiveRecord::Base @@ -210,12 +216,28 @@ class Project &lt; ActiveRecord::Base
210 id && persisted? 216 id && persisted?
211 end 217 end
212 218
  219 + def add_import_job
  220 + RepositoryImportWorker.perform_in(2.seconds, id)
  221 + end
  222 +
213 def import? 223 def import?
214 import_url.present? 224 import_url.present?
215 end 225 end
216 226
217 def imported? 227 def imported?
218 - imported 228 + import_finished?
  229 + end
  230 +
  231 + def import_in_progress?
  232 + import? && import_status == 'started'
  233 + end
  234 +
  235 + def import_failed?
  236 + import_status == 'failed'
  237 + end
  238 +
  239 + def import_finished?
  240 + import_status == 'finished'
219 end 241 end
220 242
221 def check_limit 243 def check_limit
app/services/projects/create_service.rb
@@ -62,7 +62,7 @@ module Projects @@ -62,7 +62,7 @@ module Projects
62 @project.update_column(:last_activity_at, @project.created_at) 62 @project.update_column(:last_activity_at, @project.created_at)
63 63
64 if @project.import? 64 if @project.import?
65 - RepositoryImportWorker.perform_in(5.seconds, @project.id) 65 + @project.import_start
66 else 66 else
67 GitlabShellWorker.perform_async( 67 GitlabShellWorker.perform_async(
68 :add_repository, 68 :add_repository,
app/workers/repository_import_worker.rb
@@ -6,8 +6,6 @@ class RepositoryImportWorker @@ -6,8 +6,6 @@ class RepositoryImportWorker
6 6
7 def perform(project_id) 7 def perform(project_id)
8 project = Project.find(project_id) 8 project = Project.find(project_id)
9 - project.import_start  
10 -  
11 result = gitlab_shell.send(:import_repository, 9 result = gitlab_shell.send(:import_repository,
12 project.path_with_namespace, 10 project.path_with_namespace,
13 project.import_url) 11 project.import_url)
config/routes.rb
@@ -179,6 +179,8 @@ Gitlab::Application.routes.draw do @@ -179,6 +179,8 @@ Gitlab::Application.routes.draw do
179 post :archive 179 post :archive
180 post :unarchive 180 post :unarchive
181 get :autocomplete_sources 181 get :autocomplete_sources
  182 + get :import
  183 + put :retry_import
182 end 184 end
183 185
184 scope module: :projects do 186 scope module: :projects do