summaryrefslogtreecommitdiff
path: root/app/models/bulk_imports
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/bulk_imports')
-rw-r--r--app/models/bulk_imports/entity.rb13
-rw-r--r--app/models/bulk_imports/export_status.rb6
-rw-r--r--app/models/bulk_imports/tracker.rb5
3 files changed, 20 insertions, 4 deletions
diff --git a/app/models/bulk_imports/entity.rb b/app/models/bulk_imports/entity.rb
index a7e1384641c..dee533944e9 100644
--- a/app/models/bulk_imports/entity.rb
+++ b/app/models/bulk_imports/entity.rb
@@ -51,11 +51,15 @@ class BulkImports::Entity < ApplicationRecord
enum source_type: { group_entity: 0, project_entity: 1 }
scope :by_user_id, ->(user_id) { joins(:bulk_import).where(bulk_imports: { user_id: user_id }) }
+ scope :stale, -> { where('created_at < ?', 8.hours.ago).where(status: [0, 1]) }
+ scope :by_bulk_import_id, ->(bulk_import_id) { where(bulk_import_id: bulk_import_id)}
+ scope :order_by_created_at, -> (direction) { order(created_at: direction) }
state_machine :status, initial: :created do
state :created, value: 0
state :started, value: 1
state :finished, value: 2
+ state :timeout, value: 3
state :failed, value: -1
event :start do
@@ -70,6 +74,11 @@ class BulkImports::Entity < ApplicationRecord
event :fail_op do
transition any => :failed
end
+
+ event :cleanup_stale do
+ transition created: :timeout
+ transition started: :timeout
+ end
end
def self.all_human_statuses
@@ -83,9 +92,9 @@ class BulkImports::Entity < ApplicationRecord
def pipelines
@pipelines ||= case source_type
when 'group_entity'
- BulkImports::Groups::Stage.new(bulk_import).pipelines
+ BulkImports::Groups::Stage.new(self).pipelines
when 'project_entity'
- BulkImports::Projects::Stage.new(bulk_import).pipelines
+ BulkImports::Projects::Stage.new(self).pipelines
end
end
diff --git a/app/models/bulk_imports/export_status.rb b/app/models/bulk_imports/export_status.rb
index cae6aad27da..a9750a76987 100644
--- a/app/models/bulk_imports/export_status.rb
+++ b/app/models/bulk_imports/export_status.rb
@@ -32,10 +32,12 @@ module BulkImports
strong_memoize(:export_status) do
status = fetch_export_status
+ relation_export_status = status&.find { |item| item['relation'] == relation }
+
# Consider empty response as failed export
- raise StandardError, 'Empty export status response' unless status&.present?
+ raise StandardError, 'Empty relation export status' unless relation_export_status&.present?
- status.find { |item| item['relation'] == relation }
+ relation_export_status
end
rescue StandardError => e
{ 'status' => Export::FAILED, 'error' => e.message }
diff --git a/app/models/bulk_imports/tracker.rb b/app/models/bulk_imports/tracker.rb
index cfe33c013ba..a994cc3f8ce 100644
--- a/app/models/bulk_imports/tracker.rb
+++ b/app/models/bulk_imports/tracker.rb
@@ -46,6 +46,7 @@ class BulkImports::Tracker < ApplicationRecord
state :started, value: 1
state :finished, value: 2
state :enqueued, value: 3
+ state :timeout, value: 4
state :failed, value: -1
state :skipped, value: -2
@@ -76,5 +77,9 @@ class BulkImports::Tracker < ApplicationRecord
event :fail_op do
transition any => :failed
end
+
+ event :cleanup_stale do
+ transition [:created, :started] => :timeout
+ end
end
end