Murilo,

> I'd like to know how mail IDs are created by amavis. I mean I'd like
> to have two 2 mysql servers replicating as master-master, so the field
> msgs.mail_id cannot be duplicated.

Entropy is being collected from passing mail and other system sources
readily available to amavisd, then a mail_id is generated from this
random source. Next the save_info_preliminary tries to insert
a record into a table 'msgs' with this generated mail_id:

    'ins_msg' =>
      'INSERT INTO msgs (partition_tag, mail_id, secret_id, am_id,'.
      ' time_num, time_iso, sid, policy, client_addr, size, host)'.
      ' VALUES (?,?,?,?,?,?,?,?,?,?,?)',

In an unlikely but possible case that the insertion fails, the probable
cause is there was a clash with an existing mail_id, so another random
mail_id is generated and the procedure repeats up to five times, which
ensures that each mail_id in a database is unique within the range of
records currently kept in a database (within the same partition_tag).

    # create unique mail_id and save preliminary info. to SQL (if enabled)
    for (my($attempt)=5;;) {  # sanity limit on retries
      my($secret_id);
      ($mail_id,$secret_id) = generate_mail_id();
      $msginfo->secret_id($secret_id);  $secret_id = '';
      $msginfo->mail_id($mail_id);  # assign a long-term unique id to the msg
      if (!$sql_storage) {
        last;  # no need to store and no way to check for uniqueness
      } else {
        # attempt to save a message placeholder to SQL, ensuring it is unique
        $which_section = 'sql-enter';
        $sql_storage->save_info_preliminary($conn,$msginfo)  and last;
        if (--$attempt <= 0) {
          do_log(-2,"ERROR sql_storage: too many retries ".
                    "on storing preliminary, info not saved");
          last;
        } else {
          snmp_count('GenMailIdRetries');
          do_log(2,"sql_storage: retrying preliminary, %d attempts remain",
                   $attempt);
          sleep(int(1+rand(3)));
          add_entropy(Time::HiRes::gettimeofday,$$,$attempt);
        }
      }
    };


Mark

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
AMaViS-user mailing list
AMaViS-user@lists.sourceforge.net 
https://lists.sourceforge.net/lists/listinfo/amavis-user 
 AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3 
 AMaViS-HowTos:http://www.amavis.org/howto/ 

Reply via email to