Merge pull request #36694 from kirs/timeout-error-superclass

[ActiveRecord] Superclass for aborted queries
This commit is contained in:
Rafael França 2019-07-16 23:16:23 +01:00 committed by GitHub
commit 1b984fc258
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 5 deletions

@ -353,20 +353,24 @@ class Deadlocked < TransactionRollbackError
class IrreversibleOrderError < ActiveRecordError
end
# Superclass for errors that have been aborted (either by client or server).
class QueryAborted < StatementInvalid
end
# LockWaitTimeout will be raised when lock wait timeout exceeded.
class LockWaitTimeout < StatementInvalid
end
# StatementTimeout will be raised when statement timeout exceeded.
class StatementTimeout < StatementInvalid
class StatementTimeout < QueryAborted
end
# QueryCanceled will be raised when canceling statement due to user request.
class QueryCanceled < StatementInvalid
class QueryCanceled < QueryAborted
end
# AdapterTimeout will be raised when database clients times out while waiting from the server.
class AdapterTimeout < StatementInvalid
class AdapterTimeout < QueryAborted
end
# UnknownAttributeReference is raised when an unknown and potentially unsafe

@ -233,6 +233,7 @@ def test_read_timeout_exception
error = assert_raises(ActiveRecord::AdapterTimeout) do
ActiveRecord::Base.connection.execute("SELECT SLEEP(2)")
end
assert_kind_of ActiveRecord::QueryAborted, error
assert_equal Mysql2::Error::TimeoutError, error.cause.class
ensure

@ -92,7 +92,7 @@ class Sample < ActiveRecord::Base
test "raises StatementTimeout when statement timeout exceeded" do
skip unless ActiveRecord::Base.connection.show_variable("max_execution_time")
assert_raises(ActiveRecord::StatementTimeout) do
error = assert_raises(ActiveRecord::StatementTimeout) do
s = Sample.create!(value: 1)
latch1 = Concurrent::CountDownLatch.new
latch2 = Concurrent::CountDownLatch.new
@ -117,10 +117,11 @@ class Sample < ActiveRecord::Base
thread.join
end
end
assert_kind_of ActiveRecord::QueryAborted, error
end
test "raises QueryCanceled when canceling statement due to user request" do
assert_raises(ActiveRecord::QueryCanceled) do
error = assert_raises(ActiveRecord::QueryCanceled) do
s = Sample.create!(value: 1)
latch = Concurrent::CountDownLatch.new
@ -144,6 +145,7 @@ class Sample < ActiveRecord::Base
thread.join
end
end
assert_kind_of ActiveRecord::QueryAborted, error
end
end
end