Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/terraform/remote_state_handler.rb')
-rw-r--r--app/services/terraform/remote_state_handler.rb8
1 files changed, 6 insertions, 2 deletions
diff --git a/app/services/terraform/remote_state_handler.rb b/app/services/terraform/remote_state_handler.rb
index 849afaddec6..f72bf0390e4 100644
--- a/app/services/terraform/remote_state_handler.rb
+++ b/app/services/terraform/remote_state_handler.rb
@@ -2,6 +2,8 @@
module Terraform
class RemoteStateHandler < BaseService
+ include Gitlab::OptimisticLocking
+
StateLockedError = Class.new(StandardError)
StateDeletedError = Class.new(StandardError)
UnauthorizedError = Class.new(StandardError)
@@ -59,7 +61,9 @@ module Terraform
private
def retrieve_with_lock(find_only: false)
- create_or_find!(find_only: find_only).tap { |state| state.with_lock { yield state } }
+ create_or_find!(find_only: find_only).tap do |state|
+ retry_lock(state, name: "Terraform state: #{state.id}") { yield state }
+ end
end
def create_or_find!(find_only:)
@@ -70,7 +74,7 @@ module Terraform
state = if find_only
find_state!(find_params)
else
- Terraform::State.create_or_find_by(find_params)
+ Terraform::State.safe_find_or_create_by(find_params)
end
raise StateDeletedError if state.deleted_at?