Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
ef3551d1
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ef3551d1
编写于
2月 24, 2020
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Test engine: experimental change to avoid busy port problems.
上级
72c05351
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
84 addition
and
49 deletion
+84
-49
tests/support/server.tcl
tests/support/server.tcl
+84
-49
未找到文件。
tests/support/server.tcl
浏览文件 @
ef3551d1
...
...
@@ -141,6 +141,18 @@ proc tags {tags code} {
uplevel 1 $code
set ::tags
[
lrange $::tags 0 end-
[
llength $tags
]]
}
# Write the configuration in the dictionary 'config' in the specified
# file name.
proc create_server_config_file
{
filename config
}
{
set fp
[
open $filename w+
]
foreach directive
[
dict keys $config
]
{
puts -nonewline $fp
"
$directive
"
puts $fp
[
dict get $config $directive
]
}
close $fp
}
proc start_server
{
options
{
code undefined
}}
{
# If we are running against an external server, we just push the
# host/port pair in the stack the first time
...
...
@@ -222,68 +234,91 @@ proc start_server {options {code undefined}} {
# write new configuration to temporary file
set config_file
[
tmpfile redis.conf
]
set fp
[
open $config_file w+
]
foreach directive
[
dict keys $config
]
{
puts -nonewline $fp
"
$directive
"
puts $fp
[
dict get $config $directive
]
}
close $fp
create_server_config_file $config_file $config
set stdout
[
format
"%s/%s"
[
dict get $config
"dir"
]
"stdout"
]
set stderr
[
format
"%s/%s"
[
dict get $config
"dir"
]
"stderr"
]
send_data_packet $::test_server_fd
"server-spawning"
"port
$::port
"
# We need a loop here to retry with different ports.
set server_started 0
while
{
$server
_started == 0
}
{
if
{
$::verbose
}
{
puts -nonewline
"=== (
$tags
) Starting server
${::host}
:
${::port}
"
}
if
{
$::valgrind
}
{
set pid
[
exec valgrind --track-origins=yes --suppressions=src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full src/redis-server $config_file > $stdout 2> $stderr &
]
}
elseif
(
$::stack
_logging
)
{
set pid
[
exec /usr/bin/env MallocStackLogging=1 MallocLogFile=/tmp/malloc_log.txt src/redis-server $config_file > $stdout 2> $stderr &
]
}
else
{
set pid
[
exec src/redis-server $config_file > $stdout 2> $stderr &
]
}
send_data_packet $::test_server_fd
"server-spawning"
"port
$::port
"
# Tell the test server about this new instance.
send_data_packet $::test_server_fd server-spawned $pid
if
{
$::valgrind
}
{
set pid
[
exec valgrind --track-origins=yes --suppressions=src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full src/redis-server $config_file > $stdout 2> $stderr &
]
}
elseif
(
$::stack
_logging
)
{
set pid
[
exec /usr/bin/env MallocStackLogging=1 MallocLogFile=/tmp/malloc_log.txt src/redis-server $config_file > $stdout 2> $stderr &
]
}
else
{
set pid
[
exec src/redis-server $config_file > $stdout 2> $stderr &
]
}
# check that the server actually started
# ugly but tries to be as fast as possible...
if
{
$::valgrind
}
{
set retrynum 1000
}
else
{
set retrynum 100
}
# Tell the test server about this new instance.
send_data_packet $::test_server_fd server-spawned $pid
# check that the server actually started
# ugly but tries to be as fast as possible...
if
{
$::valgrind
}
{
set retrynum 1000
}
else
{
set retrynum 100
}
# Wait for actual startup
set checkperiod 100
;
# Milliseconds
set maxiter
[
expr
{
120*1000/100
}]
;
# Wait up to 2 minutes.
set port_busy 0
while
{
!
[
info exists _pid
]}
{
regexp
{
PID:
\s
(
\d
+
)}
[
exec cat $stdout
]
_ _pid
after $checkperiod
incr maxiter -1
if
{
$maxiter
== 0
}
{
start_server_error $config_file
"No PID detected in log
$stdout
"
puts
"--- LOG CONTENT ---"
puts
[
exec cat $stdout
]
puts
"-------------------"
break
}
if
{
$::verbose
}
{
puts -nonewline
"=== (
$tags
) Starting server
${::host}
:
${::port}
"
}
# Check if the port is actually busy and the server failed
# for this reason.
if
{[
regexp
{
Could not create server TCP
}
[
exec cat $stdout
]]}
{
set port_busy 1
break
}
}
if
{
$code
ne
"undefined"
}
{
set serverisup
[
server_is_up $::host $::port $retrynum
]
}
else
{
set serverisup 1
}
# Sometimes we have to try a different port, even if we checked
# for availability. Other test clients may grab the port before we
# are able to do it for example.
if
{
$port
_busy
}
{
puts
"Port
$::port
was already busy, trying another port..."
set ::port
[
find_available_port
[
expr
{
$::port
+1
}]]
if
{
$::tls
}
{
dict set config
"tls-port"
$::port
}
else
{
dict set config port $::port
}
create_server_config_file $config_file $config
continue
;
# Try again
}
if
{
$::verbose
}
{
puts
""
}
if
{
$code
ne
"undefined"
}
{
set serverisup
[
server_is_up $::host $::port $retrynum
]
}
else
{
set serverisup 1
}
if
{
!$serverisup
}
{
set err
{}
append err
[
exec cat $stdout
]
"
\n
"
[
exec cat $stderr
]
start_server_error $config_file $err
return
}
if
{
$::verbose
}
{
puts
""
}
# Wait for actual startup
set checkperiod 100
;
# Milliseconds
set maxiter
[
expr
{
120*1000/100
}]
;
# Wait up to 2 minutes.
while
{
!
[
info exists _pid
]}
{
regexp
{
PID:
\s
(
\d
+
)}
[
exec cat $stdout
]
_ _pid
after $checkperiod
incr maxiter -1
if
{
$maxiter
== 0
}
{
start_server_error $config_file
"No PID detected in log
$stdout
"
puts
"--- LOG CONTENT ---"
puts
[
exec cat $stdout
]
puts
"-------------------"
break
if
{
!$serverisup
}
{
set err
{}
append err
[
exec cat $stdout
]
"
\n
"
[
exec cat $stderr
]
start_server_error $config_file $err
return
}
set server_started 1
}
# setup properties to be able to initialize a client object
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录