Quick note; the behavior in 3.0 should be the same than in 2.3 (except if it has been updated since then, didn't take time to check this.).

@Coley
From the code Ioan pointed, it seems that the priority should be managed, and for a same priority, we should have randomization. If this is not the expected or effective behavior, please open a JIRA. The fix would be for 3.0, but you could easily fix the 2.3 without having to recompile everything (simply declaring your own class).

Thx, Eric


On 05/10/2012 10:32 AM, Ioan Eugen Stan wrote:
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/ ***




--
eric | http://about.echarles.net | @echarles

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to