【追記】

解決した。遅いマシンなので、fork後のsleep時間が問題だった模様。
Server::Starterは、問題を解決した0.04がでています。

http://search.cpan.org/~kazuho/Server-Starter-0.04/

Gearmanも、0.10でなおっているんだけど、

@@ -54,8 +54,8 @@ foreach my $iter (1..5) {
 }
 $tasks->wait;

-is($completed, 2, 'number of success'); # One starts immediately and on the queue
-is($failed, 3, 'number of failure'); # All the rest
+ok($completed == 2 || $completed == 1, 'number of success'); # One in the queue, plus one that may start immediately
+ok($failed == 3 || $failed== 4, 'number of failure'); # All the rest

という、「ないわー」的な対応。

実際は、t/TestGearman.pmで書かれているstart_workr後のsleepが足りない感じ。

--- 30-maxqueue.t.orig  2009-10-11 14:12:31.000000000 +0900
+++ 30-maxqueue.t       2009-10-11 14:12:50.000000000 +0900
@@ -34,6 +34,7 @@
 }

 start_worker(PORT);
+sleep 1;

 my $client = Gearman::Client->new;
 isa_ok($client, 'Gearman::Client');

これでtest通りました。

kazuhoさんのESXiでは問題でてないようなので、僕のマシンだけ遅いのは仮想マシンの設定かなぁ。。

【/追記】

VMware ESXi上のUbuntu 9.04でServer::StarterとGearmanのテストが通らなくてちょっと悩んでいる。

両方とも、テストの中で、forkを使ってサーバやworkerをたてて、それに対して親プロセスから何か操作する形なので、原因は多分同じ気がしている。
だれか解決方法を知っていたら教えてください。

エラーはこんな感じ

■Server::Starter

% prove -Ilib t/01-starter.t
t/01-starter.t .. start_server (pid:3477) starting now...
starting new worker 3478
t/01-starter.t .. 5/9 
#   Failed test 'pid should have changed'
#   at /usr/local/share/perl/5.10.0/Test/Builder.pm line 844.
#          got: '3478:hello'
#     expected: anything else
received HUP, spawning a new worker
starting new worker 3479
new worker is now running, sending TERM to old workers:3478
received TERM, sending TERM to all workers:3478,3479
worker 3478 died, status:0
worker 3479 died, status:0
exitting
# Looks like you failed 1 test of 9.
t/01-starter.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/9 subtests 

Test Summary Report
-------------------
t/01-starter.t (Wstat: 256 Tests: 9 Failed: 1)
  Failed test:  9
  Non-zero exit status: 1
Files=1, Tests=9,  7 wallclock secs ( 0.03 usr  0.00 sys +  0.18 cusr  0.05 csys =  0.26 CPU)
Result: FAIL

■Gearman

[‾/develop/gearman/Gearman-1.09]% prove -Ilib t/30-maxqueue.t
t/30-maxqueue.t .. 5/6 
#   Failed test 'number of success'
#   at t/30-maxqueue.t line 58.
#          got: '1'
#     expected: '2'

#   Failed test 'number of failure'
#   at t/30-maxqueue.t line 59.
#          got: '4'
#     expected: '3'
# Looks like you failed 2 tests of 6.
t/30-maxqueue.t .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/6 subtests 

Test Summary Report
-------------------
t/30-maxqueue.t (Wstat: 512 Tests: 6 Failed: 2)
  Failed tests:  5-6
  Non-zero exit status: 2
Files=1, Tests=6,  5 wallclock secs ( 0.02 usr  0.00 sys +  0.10 cusr  0.02 csys =  0.14 CPU)
Result: FAIL

Gearmanのテストは必ず失敗するけど、Server::Starterの方は時々成功するってのもよくわからない。

このブログ記事について

このページは、Masahiro Naganoが2009年10月 8日 17:30に書いたブログ記事です。

ひとつ前のブログ記事は「「Linux-DBシステム構築/運用入門」がすごいの件」です。

次のブログ記事は「アメブロの中の人が書いたMySQLの本」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja