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
[email protected]
https://lists.sourceforge.net/lists/listinfo/amavis-user
AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3
AMaViS-HowTos:http://www.amavis.org/howto/