Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
61f4b1ff
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,发现更多精彩内容 >>
提交
61f4b1ff
编写于
7月 06, 2016
作者:
M
Matthew Draper
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make connection stealing more explicit
上级
f397b385
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
6 deletion
+27
-6
activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
...ve_record/connection_adapters/abstract/connection_pool.rb
+9
-4
activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
...lib/active_record/connection_adapters/abstract_adapter.rb
+14
-1
activerecord/test/cases/connection_pool_test.rb
activerecord/test/cases/connection_pool_test.rb
+4
-1
未找到文件。
activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
浏览文件 @
61f4b1ff
...
...
@@ -415,7 +415,10 @@ def disconnect(raise_on_acquisition_timeout = true)
with_exclusively_acquired_all_connections
(
raise_on_acquisition_timeout
)
do
synchronize
do
@connections
.
each
do
|
conn
|
checkin
conn
if
conn
.
in_use?
conn
.
steal!
checkin
conn
end
conn
.
disconnect!
end
@connections
=
[]
...
...
@@ -447,7 +450,10 @@ def clear_reloadable_connections(raise_on_acquisition_timeout = true)
with_exclusively_acquired_all_connections
(
raise_on_acquisition_timeout
)
do
synchronize
do
@connections
.
each
do
|
conn
|
checkin
conn
if
conn
.
in_use?
conn
.
steal!
checkin
conn
end
conn
.
disconnect!
if
conn
.
requires_reloading?
end
@connections
.
delete_if
(
&
:requires_reloading?
)
...
...
@@ -557,8 +563,7 @@ def reap
@connections
.
select
do
|
conn
|
conn
.
in_use?
&&
!
conn
.
owner
.
alive?
end
.
each
do
|
conn
|
conn
.
expire
conn
.
lease
conn
.
steal!
end
end
...
...
activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
浏览文件 @
61f4b1ff
...
...
@@ -185,7 +185,7 @@ def schema_cache=(cache)
# this method must only be called while holding connection pool's mutex
def
expire
if
in_use?
if
@owner
!=
Thread
.
current
&&
@owner
.
alive?
if
@owner
!=
Thread
.
current
raise
ActiveRecordError
,
"Cannot expire connection, "
<<
"it is owned by a different thread:
#{
@owner
}
. "
<<
"Current thread:
#{
Thread
.
current
}
."
...
...
@@ -197,6 +197,19 @@ def expire
end
end
# this method must only be called while holding connection pool's mutex (and a desire for segfaults)
def
steal!
# :nodoc:
if
in_use?
if
@owner
!=
Thread
.
current
pool
.
send
:remove_connection_from_thread_cache
,
self
,
@owner
@owner
=
Thread
.
current
end
else
raise
ActiveRecordError
,
'Cannot steal connection, it is not currently leased.'
end
end
def
unprepared_statement
old_prepared_statements
,
@prepared_statements
=
@prepared_statements
,
false
yield
...
...
activerecord/test/cases/connection_pool_test.rb
浏览文件 @
61f4b1ff
...
...
@@ -151,7 +151,7 @@ def test_reap_inactive
assert_equal
1
,
active_connections
(
@pool
).
size
ensure
@pool
.
connections
.
each
(
&
:close
)
@pool
.
connections
.
each
{
|
conn
|
conn
.
close
if
conn
.
in_use?
}
end
def
test_remove_connection
...
...
@@ -432,6 +432,9 @@ def test_bang_versions_of_disconnect_and_clear_reloadable_connections_if_unable_
Thread
.
new
{
@pool
.
send
(
group_action_method
)
}.
join
# assert connection has been forcefully taken away from us
assert_not
@pool
.
active_connection?
# make a new connection for with_connection to clean up
@pool
.
connection
end
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录