diff options
author | Guo Xiang Tan <tgx_world@hotmail.com> | 2017-11-21 13:20:15 +0800 |
---|---|---|
committer | Guo Xiang Tan <tgx_world@hotmail.com> | 2017-11-21 13:21:41 +0800 |
commit | 0bd7f4ad44c53832ec029a53a88461e9f6eab6f1 (patch) | |
tree | 2cae31fb8881fa651a388495cdacd89e365c64cb /activerecord/lib/active_record/migration.rb | |
parent | 3e304e8177bc1fd81d9d8db15eaf252cf386e22f (diff) | |
download | rails-0bd7f4ad44c53832ec029a53a88461e9f6eab6f1.tar.gz rails-0bd7f4ad44c53832ec029a53a88461e9f6eab6f1.tar.bz2 rails-0bd7f4ad44c53832ec029a53a88461e9f6eab6f1.zip |
Raise an error if advisory lock in migrator was not released.
Diffstat (limited to 'activerecord/lib/active_record/migration.rb')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index 360bf25a8c..ecf74b9824 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -140,6 +140,7 @@ module ActiveRecord class ConcurrentMigrationError < MigrationError #:nodoc: DEFAULT_MESSAGE = "Cannot run migrations because another migration process is currently running.".freeze + RELEASE_LOCK_FAILED_MESSAGE = "Failed to release advisory lock".freeze def initialize(message = DEFAULT_MESSAGE) super @@ -1337,12 +1338,17 @@ module ActiveRecord def with_advisory_lock lock_id = generate_migrator_advisory_lock_id - got_lock = Base.connection.get_advisory_lock(lock_id) + connection = Base.connection + got_lock = connection.get_advisory_lock(lock_id) raise ConcurrentMigrationError unless got_lock load_migrated # reload schema_migrations to be sure it wasn't changed by another process before we got the lock yield ensure - Base.connection.release_advisory_lock(lock_id) if got_lock + if got_lock && !connection.release_advisory_lock(lock_id) + raise ConcurrentMigrationError.new( + ConcurrentMigrationError::RELEASE_LOCK_FAILED_MESSAGE + ) + end end MIGRATOR_SALT = 2053462845 |