Hi again,
First have a look at RemoteDelivery mailet that sends the email (check the deliver method). It calls getGatewaySMTPHostAddresses which calls the stuff from DNSServer.java. http://svn.apache.org/repos/asf/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java If you read the javadoc you should notice some randomization in the MX records. 2012/5/10 Ioan Eugen Stan <[email protected]>: > Hi Cole, > > I have no experience with 2.3 branch but the code responsible for > routing is loacated in: > http://svn.apache.org/repos/asf/james/server/branches/v2.3/src/java/org/apache/james/dnsserver/DNSServer.java > . Namely: getSMTPHostAddresses, findMXRecords and findMXRecordsRaw. > The javadoc for findMXRecords shows: > > Sorting is done in findMXRecordsRaw: > > public List findMXRecordsRaw(String hostname) { > Record answers[] = lookup(hostname, Type.MX); > List servers = new ArrayList(); > if (answers == null) { > return servers; > } > > MXRecord mxAnswers[] = new MXRecord[answers.length]; > for (int i = 0; i < answers.length; i++) { > mxAnswers[i] = (MXRecord)answers[i]; > } > > Arrays.sort(mxAnswers, mxComparator); > > for (int i = 0; i < mxAnswers.length; i++) { > servers.add(mxAnswers[i].getTarget ().toString ()); > getLogger().debug(new StringBuffer("Found MX record > ").append(mxAnswers[i].getTarget ().toString ()).toString()); > } > return servers; > } > > > MX sorting and randomization is done via: > > /* RFC 2821 section 5 requires that we sort the MX records by their > * preference, and introduce a randomization. This Comparator does > * comparisons as normal unless the values are equal, in which case > * it "tosses a coin", randomly speaking. > * > * This way MX record w/preference 0 appears before MX record > * w/preference 1, but a bunch of MX records with the same preference > * would appear in different orders each time. > * > * Reminder for maintainers: the return value on a Comparator can > * be counter-intuitive for those who aren't used to the old C > * strcmp function: > * > * < 0 ==> a < b > * = 0 ==> a = b > * > 0 ==> a > b > */ > private static class MXRecordComparator implements Comparator { > private final static Random random = new Random(); > public int compare (Object a, Object b) { > int pa = ((MXRecord)a).getPriority(); > int pb = ((MXRecord)b).getPriority(); > return (pa == pb) ? (512 - random.nextInt(1024)) : pa - pb; > } > } > > > Most likely the problems come from here. Hope this helps, > > Cheers, > > 2012/5/9 Cole Ferrier <[email protected]>: >> Recycle of James did not work, it is still equally using all 6 of the mail >> servers, even though they are at a different preference levels. >> >> Any Ideas? >> >> Cole >> >> On Tue, May 8, 2012 at 3:03 PM, Cole Ferrier <[email protected]> wrote: >> >>> talking with our internal mail system people, all 6 servers had a priority >>> of 10 the last time apache James was restarted. >>> >>> Does James cache this data for the life of it running? or is there a time >>> to live? or? >>> >>> I will schedule a recycle of james to see if it stops using the servers >>> that now have a lower preference. >>> >>> Let me know if you have any ideas in the mean time. >>> >>> Cole >>> >>> >>> On Tue, May 8, 2012 at 9:42 AM, Cole Ferrier <[email protected]> wrote: >>> >>>> We have an internal mail system that has 6 MX records 3 at priority 10 >>>> (new servers recently added) and 3 at priority 20 (old servers that where >>>> previously at 10). >>>> >>>> and it appears that apache james 2.3 is sending mail to all of them about >>>> equally? >>>> >>>> i was instructed that it should only connect to the 20's when all of the >>>> 10s are unavailable? >>>> >>>> any help would be appreciated? >>>> >>>> (or is there any need to restart James? aka, how long does it cache its >>>> data about the MX preferences?) >>>> >>>> Cole >>>> >>> >>> > > > > -- > Ioan Eugen Stan > http://ieugen.blogspot.com/ *** http://bucharest-jug.github.com/ *** -- Ioan Eugen Stan http://ieugen.blogspot.com/ *** http://bucharest-jug.github.com/ *** --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
