土曜日, 4月 26, 2008

[PostgreSQL] PgQ続き(リトライ他)

ジョブの戻し方おいて、リトライキューやフェイルキューにちゃんと入るかの実験、、をしていたらSkyTools(v2.1.6)にバグ発見(但しもうCVSでは修正されていました)。

こけさせるconsumer.pyは以下のようなやつで。

#!/usr/bin/python
import sys, os, pgq, skytools
import syslog

class Mailer(pgq.Consumer):
def sendWelcomeMail(self, params):
syslog.openlog("skycon")
syslog.syslog(params)
syslog.closelog()
return False

def process_batch(self, src_db, batch_id, ev_list):
for ev in ev_list:
d = ev.data
self.log.debug ("event: %s | type: %s | extra1: %s" % (d, ev.type, ev.extra1))
if not self.sendWelcomeMail(d):
ev.tag_retry()
else:
ev.tag_done()

if __name__ == '__main__':
script = Mailer("mailer_daemon","src_db",sys.argv[1:])
script.start()

これによりリトライキューに入ることを確認。

tf0054=# select * from pgq.retry_queue;
-[ RECORD 1 ]--+------------------------------
ev_retry_after | 2008-04-26 01:30:40.307409+09
ev_id | 15
ev_time | 2008-04-26 01:15:17.024847+09
ev_txid |
ev_owner | 1
ev_retry | 1
ev_type | welcome_email
ev_data | root@gmail.com
ev_extra1 |
ev_extra2 |
ev_extra3 |
ev_extra4 |

tf0054=#

ちなみに、consumerが稼動した最終時刻をみるためには以下。

tf0054=# select * from pgq.subscription;
-[ RECORD 1 ]-+------------------------------
sub_id | 1
sub_queue | 1
sub_consumer | 1
sub_last_tick | 2118
sub_active | 2008-04-26 06:38:03.550572+09
sub_batch |
sub_next_tick |

tf0054=#

というか日本語でも英語でも、Skytools全体がそうですが、特にconsumerのサンプルがまったくなくて困惑です(tag_retryなんてものクラス説明から見つけた)。

0 件のコメント: