Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
303dca48
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,发现更多精彩内容 >>
提交
303dca48
编写于
5月 18, 2015
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20175 from eugeneius/copy_schema_cache_after_fork
Add schema cache to new connection pool after fork
上级
d4cfd543
19bc5708
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
49 addition
and
24 deletion
+49
-24
activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
...ve_record/connection_adapters/abstract/connection_pool.rb
+3
-1
activerecord/test/cases/connection_adapters/connection_handler_test.rb
...test/cases/connection_adapters/connection_handler_test.rb
+46
-0
activerecord/test/cases/connection_management_test.rb
activerecord/test/cases/connection_management_test.rb
+0
-23
未找到文件。
activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
浏览文件 @
303dca48
...
...
@@ -933,7 +933,9 @@ def pool_for(owner)
# A connection was established in an ancestor process that must have
# subsequently forked. We can't reuse the connection, but we can copy
# the specification and establish a new connection with it.
establish_connection
owner
,
ancestor_pool
.
spec
establish_connection
(
owner
,
ancestor_pool
.
spec
).
tap
do
|
pool
|
pool
.
schema_cache
=
ancestor_pool
.
schema_cache
if
ancestor_pool
.
schema_cache
end
else
owner_to_pool
[
owner
.
name
]
=
nil
end
...
...
activerecord/test/cases/connection_adapters/connection_handler_test.rb
浏览文件 @
303dca48
...
...
@@ -46,6 +46,52 @@ def test_retrieve_connection_pool_uses_superclass_pool_after_subclass_establish_
def
test_connection_pools
assert_equal
([
@pool
],
@handler
.
connection_pools
)
end
if
Process
.
respond_to?
(
:fork
)
def
test_connection_pool_per_pid
object_id
=
ActiveRecord
::
Base
.
connection
.
object_id
rd
,
wr
=
IO
.
pipe
rd
.
binmode
wr
.
binmode
pid
=
fork
{
rd
.
close
wr
.
write
Marshal
.
dump
ActiveRecord
::
Base
.
connection
.
object_id
wr
.
close
exit!
}
wr
.
close
Process
.
waitpid
pid
assert_not_equal
object_id
,
Marshal
.
load
(
rd
.
read
)
rd
.
close
end
def
test_retrieve_connection_pool_copies_schema_cache_from_ancestor_pool
@pool
.
schema_cache
=
@pool
.
connection
.
schema_cache
@pool
.
schema_cache
.
add
(
'posts'
)
rd
,
wr
=
IO
.
pipe
rd
.
binmode
wr
.
binmode
pid
=
fork
{
rd
.
close
pool
=
@handler
.
retrieve_connection_pool
(
@klass
)
wr
.
write
Marshal
.
dump
pool
.
schema_cache
.
size
wr
.
close
exit!
}
wr
.
close
Process
.
waitpid
pid
assert_equal
@pool
.
schema_cache
.
size
,
Marshal
.
load
(
rd
.
read
)
rd
.
close
end
end
end
end
end
activerecord/test/cases/connection_management_test.rb
浏览文件 @
303dca48
...
...
@@ -26,29 +26,6 @@ def setup
assert
ActiveRecord
::
Base
.
connection_handler
.
active_connections?
end
if
Process
.
respond_to?
(
:fork
)
def
test_connection_pool_per_pid
object_id
=
ActiveRecord
::
Base
.
connection
.
object_id
rd
,
wr
=
IO
.
pipe
rd
.
binmode
wr
.
binmode
pid
=
fork
{
rd
.
close
wr
.
write
Marshal
.
dump
ActiveRecord
::
Base
.
connection
.
object_id
wr
.
close
exit!
}
wr
.
close
Process
.
waitpid
pid
assert_not_equal
object_id
,
Marshal
.
load
(
rd
.
read
)
rd
.
close
end
end
def
test_app_delegation
manager
=
ConnectionManagement
.
new
(
@app
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录