[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp:03124] セカンダ リでドメイン別に maximal_queue_lifetime を変えるには



こんにちは、やまぐちです。

postfix で複数のドメインのセカンダリを運用する時に、ドメイン毎に
maximal_queue_lifetime を変更したいと思っているんですが、ちょっと調べた
ところ難しそうでした。

思いついた案を以下に4つ上げますが、実現の可能性やアイデアなど皆様のお知
恵をおかしください。

1.main.cf の maximal_queue_lifetime をそれぞれ変えた複数のサーバをたて
て別々に処理する。
        ⇒できることは明らかですが、運用の手間が大きいです。

2.いったん全て HOLD して個別に postsuper で処理する
        ⇒スクリプトを定期的に実行すればできるかもと思いますが、どんなも
        のでしょう。少なくとも処理は重そうです。

3.Filter を使って実装する
        ⇒これも出来そうですが、どのぐらいのパフォーマンスが出るか疑問。

4.qmgr/nqmgr を改造する
        ⇒一応ソースをざっとみましたが、以下のような方針でやれば改造でき
        そうに思えました。皆様のご意見をお聞かせてください。

  ・処理してる場所は1個所なのは確認
          src/qmgr/qmgr_active.c lines 368
                 if (event_time() >= message->arrival_time + var_max_queue_time) {
    この var_max_queue_time をRecipientドメインをキーにして時間を返す関
    数にすればよさそう

  ・では Recipient はどの変数を見れば良いのかというと、複数のRecipientが
    存在する場合もあるので以下のように構造体をなめればよさそう。
          for (count==0; count < &message->rcpt_list.len; count++) {
                  &message->rcpt_list.info[count]->address;
          }
  ・複数の Recipient がいる場合はその最大の値で比較するという方針

  ・Hash などの外部テーブルを参照するようにしたいが、その方法は、
          src/global/maps.c:maps_create() でプロセス最初にマップをオープン?
          src/global/maps.c:maps_find() で検索?
          src/global/maps.c:maps_free() をプロセス最後に呼んでクローズ?
          ../virtual/virtual.c が参考になりそう

  ・マップ名は src/qmgr/qmgr.c の以下の部分で自動的に main.cf から
    読み込めそう
    trigger_server_main(argc, argv, qmgr_trigger_event,
          MAIL_SERVER_STR_TABLE, str_table,
          0);
    ただしマップ名称を以下に追加しておく
    static CONFIG_STR_TABLE str_table[] = {
    };

以上です。ご意見おまちしてます。
-- 
lst <lst@xxxxxxxxxxxxx>

Follow-Ups
[postfix-jp:03125] Re: セカン ダリでドメイン別に maximal_queue_lifetime を変えるには, IKEDA Nozomu

[検索ページ] [Postfix-JP ML Home]