Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
4a65dfcb
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4a65dfcb
编写于
11月 11, 2017
作者:
R
Ryuta Kamizono
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Raise `TransactionTimeout` when lock wait timeout exceeded for PG adapter
Follow up of #30360.
上级
ee5cf14a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
35 addition
and
3 deletion
+35
-3
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+2
-2
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
...b/active_record/connection_adapters/postgresql_adapter.rb
+3
-0
activerecord/test/cases/adapters/mysql2/transaction_test.rb
activerecord/test/cases/adapters/mysql2/transaction_test.rb
+1
-1
activerecord/test/cases/adapters/postgresql/transaction_test.rb
...record/test/cases/adapters/postgresql/transaction_test.rb
+29
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
4a65dfcb
...
...
@@ -144,8 +144,8 @@
*Jeremy Green*
*
Add new error class
`TransactionTimeout`
for MySQL adapter
which will be raised
when lock wait time
expires
.
*
Add new error class
`TransactionTimeout`
which will be raised
when lock wait time
out exceeded
.
*Gabriel Courtemanche*
...
...
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
浏览文件 @
4a65dfcb
...
...
@@ -391,6 +391,7 @@ def default_index_type?(index) # :nodoc:
UNIQUE_VIOLATION
=
"23505"
SERIALIZATION_FAILURE
=
"40001"
DEADLOCK_DETECTED
=
"40P01"
LOCK_NOT_AVAILABLE
=
"55P03"
def
translate_exception
(
exception
,
message
)
return
exception
unless
exception
.
respond_to?
(
:result
)
...
...
@@ -410,6 +411,8 @@ def translate_exception(exception, message)
SerializationFailure
.
new
(
message
)
when
DEADLOCK_DETECTED
Deadlocked
.
new
(
message
)
when
LOCK_NOT_AVAILABLE
TransactionTimeout
.
new
(
message
)
else
super
end
...
...
activerecord/test/cases/adapters/mysql2/transaction_test.rb
浏览文件 @
4a65dfcb
...
...
@@ -60,7 +60,7 @@ class Sample < ActiveRecord::Base
end
end
test
"raises TransactionTimeout when
mysql raises ER_LOCK_WAIT_TIMEOUT
"
do
test
"raises TransactionTimeout when
lock wait timeout exceeded
"
do
assert_raises
(
ActiveRecord
::
TransactionTimeout
)
do
s
=
Sample
.
create!
(
value:
1
)
latch1
=
Concurrent
::
CountDownLatch
.
new
...
...
activerecord/test/cases/adapters/postgresql/transaction_test.rb
浏览文件 @
4a65dfcb
...
...
@@ -91,6 +91,35 @@ class Sample < ActiveRecord::Base
end
end
test
"raises TransactionTimeout when lock wait timeout exceeded"
do
skip
unless
ActiveRecord
::
Base
.
connection
.
postgresql_version
>=
90300
assert_raises
(
ActiveRecord
::
TransactionTimeout
)
do
s
=
Sample
.
create!
(
value:
1
)
latch1
=
Concurrent
::
CountDownLatch
.
new
latch2
=
Concurrent
::
CountDownLatch
.
new
thread
=
Thread
.
new
do
Sample
.
transaction
do
Sample
.
lock
.
find
(
s
.
id
)
latch1
.
count_down
latch2
.
wait
end
end
begin
Sample
.
transaction
do
latch1
.
wait
Sample
.
connection
.
execute
(
"SET lock_timeout = 1"
)
Sample
.
lock
.
find
(
s
.
id
)
end
ensure
Sample
.
connection
.
execute
(
"SET lock_timeout = DEFAULT"
)
latch2
.
count_down
thread
.
join
end
end
end
private
def
with_warning_suppression
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录