james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <server-...@james.apache.org>
Subject [jira] [Commented] (JAMES-2309) Long overflow in JMS delays
Date Fri, 06 Jul 2018 08:27:00 GMT

    [ https://issues.apache.org/jira/browse/JAMES-2309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16534570#comment-16534570
] 

ASF GitHub Bot commented on JAMES-2309:
---------------------------------------

Github user chibenwa commented on a diff in the pull request:

    https://github.com/apache/james-project/pull/125#discussion_r200583063
  
    --- Diff: server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
---
    @@ -249,10 +249,17 @@ public void enQueue(Mail mail, long delay, TimeUnit unit) throws
MailQueueExcept
     
         public long computeNextDeliveryTimestamp(long delay, TimeUnit unit) {
             if (delay > 0) {
    -            return ZonedDateTime.now()
    -                .plus(delay, Temporals.chronoUnit(unit))
    -                .toInstant()
    -                .toEpochMilli();
    +            try {
    +                return ZonedDateTime.now()
    +                    .plus(delay, Temporals.chronoUnit(unit))
    +                    .toInstant()
    +                    .toEpochMilli();
    +            } catch (ArithmeticException e) {
    +                LOGGER.warn("The {} was caused by conversation {}({}) followed by addition
to current timestamp. Falling back to Long.MAX_VALUE.",
    +                        e.getMessage(), delay, unit.name());
    --- End diff --
    
    Generally, when logging an exception, we also log it's stacktrace. That way we are able
to directly jump to the incriminated code section.
    
    I'd propose:
    
    ```
    LOGGER.warn("Exception encountered  while computed JMS next delivery (delay {} {})", delay,
unit.name(), e);
    ```


> Long overflow in JMS delays
> ---------------------------
>
>                 Key: JAMES-2309
>                 URL: https://issues.apache.org/jira/browse/JAMES-2309
>             Project: James Server
>          Issue Type: Bug
>          Components: Queue
>            Reporter: Tellier Benoit
>            Priority: Major
>              Labels: bug
>
> When using a Long.MAX delay value:
>  - TimeUnit delay conversion to ms detect the overflow and fallback to maximum value
>  - But nextDeliverycalculation in *{color:#ffc66d}getJMSProperties{color}* adds  that
value to current time. And that computation DO overflow.
> See DelayedMailQueueTest :: *{color:#ffc66d}enqueueWithVeryLongDelayShouldDelayMail{color}*
> The consequence is that a delayed mail is directly delivered. Correct behaviour would
be to keep preserving Long.MAX value.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message