Hi again,

I took a look at the code in James 3 to see if there are ig changes
and I have found https://issues.apache.org/jira/browse/JAMES-913 .
Take a look and see if this will help you.

Bye,

2012/5/10 Eric Charles <[email protected]>:
> 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]
>



-- 
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]

Reply via email to