tracでnotificationメールが発信されない

という現象。環境は別サーバから引っ越してきたもので、0.1.3あたりから1.2.1へ移行したもの。
現象としては

  • チケットを新規作成したときや、変更したときにnotificationメールが発信されない。
  • チケット件数は12000件ほどだが、全件削除しても現象は解消されない。
  • 初めてログインするユーザでは現象がおきない。
  • tracインスタンスを新規に作成、conf/trac.iniをコピーして環境を作成すると現象は起きない。
  • 上記の環境に db/trac.db をコピーすると現象が発生する。

ってなことで、configurationの問題ではなく、dbで保持している情報の問題だと推測。
tracのDBには以下のようなテーブルがあります。

attachment          
notify_subscription 
session_attribute  
auth_cookie         
notify_watch        
system             
cache               
permission          
ticket             
component           
report              
ticket_change      
enum                
repository          
ticket_custom      
milestone           
revision            
version            
node_change         
session             
wiki

チケットやwikiの実体(wiki,ticket,ticket_custom)は関係ない。そうするとユーザの情報だからsessionやsession_attributeが怪しい。
初めて利用するユーザでは現象が起きないことから、移行時、あるいはバージョンの違いでこのあたりの情報が正常にselect、insertできてないのではと推測。
ということで全件削除。

$ sqlite3 ./trac.db
sqlite> delete from session ;
sqlite> delete from session_attribute ;
sqlite> vacuum ;

最後のvacuumはおまけ。
これで現象が解消しました。