Qudoを使ってリトライ成功時に、リトライ前のexception_logを消したい
enqueue.pl
use strict; use warnings; use Qudo; my $qudo = Qudo->new( driver_class => 'Skinny', # optional. databases => [+{ dsn => 'dbi:SQLite:qudo.db', username => '', password => '', }], ); $qudo->enqueue("Worker::Test", { arg => 'hello', run_after => 30}) ;
manage.pl
use Qudo; use Worker::Test; my $qudo = Qudo->new( driver_class => 'Skinny', # optional. databases => [+{ dsn => 'dbi:SQLite:qudo.db', username => '', password => '', }], manager_abilities => [qw/Worker::Test/], ); $qudo->work(); # boot manager
Test.pm(ワーカー)
package Worker::Test; use strict; use warnings; use Data::Dumper; use base 'Qudo::Worker'; sub max_retries {1} sub work { my ($class, $job) = @_; print $class; #print $user->email; print Dumper($job->arg); #print $user->email; #1回目失敗、2回目成功を疑似的に作り出している if( $job->retry_cnt == 1){ $job->completed; # finished job! } } 1;
qudoコマンドでテーブルを用意する
$ qudo --db qudo.db --user root --pass password --rdbms SQLite
キューにワーカーを突っ込む
$ perl enqueue.pl
テーブルの確認
$ sqlite3.exe qudo.db SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from job; 5|1|hello||1388028503|0|1388028533|0|0
ワーカーの実行
perl -Ilib manage.pl
再度テーブルの確認
$ sqlite3.exe qudo.db SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from job; sqlite>
やりたいこと
上記の例では、1回目は失敗、2回目は成功($job->completed) するのですが、1回目の失敗時点でexception_logテーブルにINSERTされるけど 2回目成功したときには、exception_logテーブルの1回目の失敗履歴を消し去りたい。 できるかな??
まぁ、リトライ回数0で使っている分なら特に気を使う必要はないんだけど・・・