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

Benoit Tellier commented on JAMES-3403:
---------------------------------------

No not really.

https://github.com/linagora/james-project/pull/3862 reverts changes within the 
UidMSN converter but don't affect it's external behaviour.

I do not want revert the all work about JAMES-3177 but only this very commit.

Here is a micro-benchmark I did:


{code:java}
    @Test
    public void test() {
        int endExclusive = 2000;
        testee.addAll(IntStream.range(0, endExclusive)
            .mapToObj(i -> MessageUid.of(i + 1))
            .collect(Collectors.toList()));

        Stopwatch started = Stopwatch.createStarted();
        for (int i = 0; i < endExclusive; i++ ) {
            testee.getMsn(MessageUid.of(i + 1));
        }
        System.out.println(started.elapsed(TimeUnit.MILLISECONDS));
    }
{code}

Here are the results : 


||Nb items||master||fix||
|1000|1175ms| 4 ms  |
|2000|3971ms| 4 ms  |
|4000|11739ms| 7 ms  |
|10.000|Not finished| 42 ms  |
|100.000|Not finished| 112 ms  |
|1.000.000|Not finished| 526 ms  |

By the way, I added a test to the proposed PR to better describe this revert.

Of course, this revert is an emergency measure, to get back a stable IMAP on 
the master branch as quickly as possible. And if a kind contributor is willing 
to invest some efforts to implement a performant, VAVR based version of 
UidMsnConverter, that would be much appreciated ;-)



> IMAP Fetch: UidMSNConverter :: get MSN is slow
> ----------------------------------------------
>
>                 Key: JAMES-3403
>                 URL: https://issues.apache.org/jira/browse/JAMES-3403
>             Project: James Server
>          Issue Type: Bug
>          Components: IMAPServer
>    Affects Versions: master
>            Reporter: Benoit Tellier
>            Priority: Major
>             Fix For: master, 3.6.0
>
>
> # What?
> Following openpaas-1.7.15-rc2 deployment, and the use of VAVR immutable 
> datastructures in UidMsnConverter, I notice some offending slow FETCH 
> requests.
> A closer look shows Cassandra is not to blame here
> Flame graphs correlate the analysis
> On our prod set up 40k messages are enough to trigger endless FETCHs.
> # Why ?
> Fetch is calling getMSN(uid) one by one.
> Previous code was "getMSN optimized" as it uses an array as the underlying 
> data structure. O(1) upon reads * n messages.
> The later code uses a red-black tree as an underlying data structure. I'm 
> usure about the complexity here (because I am not a VAVR expert) but it is at 
> least O(log n) * n messages.
> # Short term reaction
> Revert uneeded changes added in UidMsnConverter as part of work on JAMES-3177.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to