Skip to content

Commit fe242fa

Browse files
update statement_retrier.rb to setup step to increment
1 parent bb6df44 commit fe242fa

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

lib/safe-pg-migrations/configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def initialize
3333
def lock_timeout=(value)
3434
raise 'Setting lock timeout to 0 disables the lock timeout and is dangerous' if value == 0.seconds
3535

36-
unless value.nil? || (value < safe_timeout && value < max_lock_timeout_on_retry)
36+
unless value.nil? || (value < safe_timeout && value < max_lock_timeout_for_retry)
3737
raise ArgumentError, "Lock timeout (#{value}) cannot be greater than the safe timeout (#{safe_timeout}) or the max lock timeout for retry (#{max_lock_timeout_for_retry})"
3838
end
3939

lib/safe-pg-migrations/plugins/statement_retrier.rb

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,16 @@ module StatementRetrier
1313
private
1414

1515
def retry_if_lock_timeout
16+
lock_timeout_step = get_lock_timeout_step(SafePgMigrations.config)
1617
number_of_retries = 0
1718
begin
1819
number_of_retries += 1
1920
yield
2021
rescue ActiveRecord::LockWaitTimeout
2122
raise if transaction_open? # Retrying is useless if we're inside a transaction.
22-
raise if number_of_retries >= SafePgMigrations.config.max_tries
23+
raise if number_of_retries >= max_tries
2324

24-
unless SafePgMigrations.config.lock_timeout.nil?
25-
if SafePgMigrations.config.lock_timeout < SafePgMigrations.config.max_lock_timeout
26-
SafePgMigrations.config.lock_timeout = SafePgMigrations.config.lock_timeout * number_of_retries
27-
else
28-
SafePgMigrations.config.lock_timeout = SafePgMigrations.config.max_lock_timeout
29-
end
30-
end
25+
increase_lock_timeout(lock_timeout_step) unless SafePgMigrations.config.lock_timeout.nil?
3126

3227
retry_delay = SafePgMigrations.config.retry_delay
3328
Helpers::Logger.say "Retrying in #{retry_delay} seconds...", sub_item: true
@@ -36,5 +31,16 @@ def retry_if_lock_timeout
3631
retry
3732
end
3833
end
34+
35+
def increase_lock_timeout(lock_timeout_step)
36+
SafePgMigrations.config.lock_timeout += lock_timeout_step
37+
unless SafePgMigrations.config.lock_timeout < SafePgMigrations.config.max_lock_timeout_for_retry
38+
SafePgMigrations.config.lock_timeout = SafePgMigrations.config.max_lock_timeout_for_retry
39+
end
40+
end
41+
42+
def get_lock_timeout_step(config)
43+
(config.max_lock_timeout_for_retry - config.lock_timeout) / config.max_tries
44+
end
3945
end
4046
end

0 commit comments

Comments
 (0)