[jira] [Created] (JAMES-3269) MessageFastView should be using moving averages

2020-06-23 Thread Lan Khuat (Jira)
Lan Khuat created JAMES-3269:


 Summary: MessageFastView should be using moving averages
 Key: JAMES-3269
 URL: https://issues.apache.org/jira/browse/JAMES-3269
 Project: James Server
  Issue Type: Improvement
Reporter: Lan Khuat


MessageFastViewProjection health check currently relies on total count since 
last reboot and thus, does not correctly reflect latest server state,  
especially for a long running server instance.

*DOD:* Replace the current metric with a  counter keeping track of events that 
happen within a 5 minutes time window.



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



Gradle migration proposal - take 1

2020-06-23 Thread Eugen Stan
Hello,

This is a request for early feedback on the Gradle migration.

I'm assuming we are going to adopt Gradle since IMO it does deliver on
it's promises and opens us for new possibilities.


TLDR:

The migration will be ready for review in ~2 days; when it's done,
please try it out and give feedback.

If no blockers, let's push for Gradle build by default in the next 2 weeks.

== Long version

As we discussed, I started working on a Gradle migration proposal that I
hope we make sooner rather than later.

The main goals of this migrations is to improve the developer experience
and also the change-build-test feedback loop.

See https://issues.apache.org/jira/browse/JAMES-3260 and related issues.

Please go through my observations and the code changes, build it locally
and provide feedback.

The work is IN PROGRESS but does most of what it promises.

To try out, checkout the branch and build with ./gradlew build  .


== Current status

I worked on a git branch and created a PR
https://github.com/apache/james-project/pull/217 and 
https://github.com/apache/james-project/tree/JAMES-3260-gradle-poc .

I followed the migration guide at
https://docs.gradle.org/current/userguide/migrating_from_maven.html :

- I ran the maven build scan - took 2h+ to build james and it failed at
the end

- Ran gradle init and I got the first gradle structure

- Started the build - check - update loop to make sure the whole project
builds.

At the moment I'm able to build most of the components - up to webadmin
and guice application modules.

I believe in 1-2 days we will be able to build all of James-project with
Gradle.


== We need You to help out !

I believe that Gradle delivers on it's promises to make the build faster. 

I would like for you to help out and test it.

The migration will require quite some work and collaboration.

Bellow there are some things we need, please add others, choose one and
work on it (we need to sync, so let everyone know)

- We need to make sure the current developers are onboard - please do
your part and check the build locally.

- We need a checklist to verify the builds produce similar output / the
same arifacts

- We need to make sure we can release with Gradle - OFBiz does that - we
can ask there (some others projects also do)

- We need to add ASF copyright headers to all gradle files (Intellij has
a nice feature. Also Search and replace can be of good help).

- We need documentation for developers on how to work with the new
builds system


Let's make this happen.

Please share your feedback,

-- 
Eugen Stan
+40720 898 747 / netdava.com

<>

signature.asc
Description: OpenPGP digital signature


[jira] [Created] (JAMES-3268) Reactivate MOVE and ACL capabilities in docker image

2020-06-23 Thread Jira
Rémi Kowalski created JAMES-3268:


 Summary: Reactivate MOVE and ACL capabilities in docker image
 Key: JAMES-3268
 URL: https://issues.apache.org/jira/browse/JAMES-3268
 Project: James Server
  Issue Type: Bug
  Components: docker
Affects Versions: 3.5.0
Reporter: Rémi Kowalski


On the docker image IMAP configuration, the `MOVE` and `ACL` capabilities are 
disabled.
This could have an impact on integration testing as the imap client will use 
`COPY` + `EXPUNGED` in place of `MOVE` which could lead to Quota limit when the 
quota limit is reached and we try to move a mail to the trash.



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



[jira] [Commented] (JAMES-3267) ImapRequestFrameDecoder.decode should not force the temporary file deletion

2020-06-23 Thread Gautier DI FOLCO (Jira)


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

Gautier DI FOLCO commented on JAMES-3267:
-

This PR contributed to it: [https://github.com/linagora/james-project/pull/3469]

> ImapRequestFrameDecoder.decode should not force the temporary file deletion
> ---
>
> Key: JAMES-3267
> URL: https://issues.apache.org/jira/browse/JAMES-3267
> Project: James Server
>  Issue Type: Improvement
>  Components: IMAPServer
>Reporter: Gautier DI FOLCO
>Priority: Trivial
>
> ImapRequestFrameDecoder.decode relies on a temporary file to operate.
> At the end, it forcefully tries to delete it, which fails when the file does 
> not exists anymore:
>  
> {code:java}
>   org.apache.james.mailbox.exception.MailboxException: Unable to parse 
> message
>   at 
> org.apache.james.mailbox.store.StoreMessageManager.appendMessage(StoreMessageManager.java:344)
>   at 
> org.apache.james.imap.processor.AppendProcessor.appendToMailbox(AppendProcessor.java:130)
>   at 
> org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:75)
>   at 
> org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:55)
>   at 
> org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:100)
>   at 
> org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:77)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:58)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.messageReceived(ImapChannelUpstreamHandler.java:198)
>   at 
> org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>   at 
> 

[jira] [Created] (JAMES-3267) ImapRequestFrameDecoder.decode should not force the temporary file deletion

2020-06-23 Thread Gautier DI FOLCO (Jira)
Gautier DI FOLCO created JAMES-3267:
---

 Summary: ImapRequestFrameDecoder.decode should not force the 
temporary file deletion
 Key: JAMES-3267
 URL: https://issues.apache.org/jira/browse/JAMES-3267
 Project: James Server
  Issue Type: Improvement
  Components: IMAPServer
Reporter: Gautier DI FOLCO


ImapRequestFrameDecoder.decode relies on a temporary file to operate.

At the end, it forcefully tries to delete it, which fails when the file does 
not exists anymore:

 
{code:java}
org.apache.james.mailbox.exception.MailboxException: Unable to parse 
message
at 
org.apache.james.mailbox.store.StoreMessageManager.appendMessage(StoreMessageManager.java:344)
at 
org.apache.james.imap.processor.AppendProcessor.appendToMailbox(AppendProcessor.java:130)
at 
org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:75)
at 
org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:55)
at 
org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:100)
at 
org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:77)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:58)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
at 
org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.messageReceived(ImapChannelUpstreamHandler.java:198)
at 
org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at 
org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at 
org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at 
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at 
org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
at 

[jira] [Closed] (JAMES-3247) Do not throw in StoreMessageManager.appendMessage close

2020-06-23 Thread Gautier DI FOLCO (Jira)


 [ 
https://issues.apache.org/jira/browse/JAMES-3247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gautier DI FOLCO closed JAMES-3247.
---
Resolution: Not A Bug

It was not the right issue.

> Do not throw in StoreMessageManager.appendMessage close
> ---
>
> Key: JAMES-3247
> URL: https://issues.apache.org/jira/browse/JAMES-3247
> Project: James Server
>  Issue Type: Improvement
>Reporter: Gautier DI FOLCO
>Priority: Trivial
>
> From time to time, StoreMessageManager.appendMessage throws when the closes 
> happen, when the temporary file disappears:
>  
> {code:java}
> org.apache.james.mailbox.exception.MailboxException: Unable to parse message
>   at 
> org.apache.james.mailbox.store.StoreMessageManager.appendMessage(StoreMessageManager.java:344)
>   at 
> org.apache.james.imap.processor.AppendProcessor.appendToMailbox(AppendProcessor.java:130)
>   at 
> org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:75)
>   at 
> org.apache.james.imap.processor.AppendProcessor.processRequest(AppendProcessor.java:55)
>   at 
> org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:100)
>   at 
> org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractMailboxProcessor.java:77)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:58)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imap.processor.base.AbstractChainedProcessor.process(AbstractChainedProcessor.java:67)
>   at 
> org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.messageReceived(ImapChannelUpstreamHandler.java:198)
>   at 
> org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>   at 
> org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>   at 
> org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
>   at 
> 

[jira] [Created] (JAMES-3266) Distributed James: make ElasticSearch indexing optional?

2020-06-23 Thread Benoit Tellier (Jira)
Benoit Tellier created JAMES-3266:
-

 Summary: Distributed James: make ElasticSearch indexing optional?
 Key: JAMES-3266
 URL: https://issues.apache.org/jira/browse/JAMES-3266
 Project: James Server
  Issue Type: New Feature
  Components: elasticsearch, guice
Affects Versions: master
Reporter: Benoit Tellier
 Fix For: 3.6.0


{code:java}
Raphaël Ouazana-Sustowski Thu, 11 Jun 2020 09:02:24 -0700

Hi,

Here is a proposal to make ElasticSearch optional in our distributed 
product/flavor/server.


Comments are welcome.


## Why?

Some people have expressed the need of using a distributed James without 
ElasticSearch:

- in some comment here: https://issues.apache.org/jira/browse/JAMES-3086

- one of our customers plan to deploy a distributed James server for serving 
POP3 encrypted emails. This deployment does not rely on searching features. 
However as part of current Distributed James server he is forced to rely on 
ElasticSearch email indexing.


This results in wasted resources as maintaining an ElasticSearch cluster to 
keep up with the volume is expensive. Maintaining an ElasticSearch cluster when 
not needed is costly at several levels:

- cost of infrastructure to deploy it
- cost of people having to maintain it
- performance cost on James to unnecessarily index data

## How ?

Scanning search is a search implementation that is running on top of any 
mailbox implementation, even distributed ones and does not require to index 
data.

Scanning Search is tested both at the component level (unit test) but also 
passes IMAP (MPT) tests on top of Cassandra implementation, as well as JMAP 
memory tests, thus delivers correct results. Of course it does not support full 
text search.

We should allow Distributed James to optionally rely on scanning search instead 
of ElasticSearch.

 - Scanning search should be advised for deployments rarely searching data

 - ElasticSearch should be advised when search is frequent or requires high 
performance

We could use module choosing [1] to choose between scanning search and 
ElasticSearch.

To be noted that scanning search introduces no other dependencies as it is part 
of mailbox-store thus causes no risk of library clashes.

To be noted also that metric collection and log collection using ElasticSearch 
is unaffected.

## Alternative

The alternative would be to build a different product/flavor/server than the 
distributed one, where the only difference with the distributed one is that 
indexing will rely on scanning instead of ElasticSearch.

The maintenance cost of such a product/flavor/server is higher than of a 
configuration option (Docker images to release, time and energy to run 
integration tests on it).

Such a product/flavor is hard to brand because even if it answers a need, it is 
not so far of the distributed one, and does not answer needs that are very far 
from it neither.

The advantage is that is would allow to more fine tune this solution to answer 
to the exact needs.


## Work in Progress

See pull request: https://github.com/linagora/james-project/pull/3425

Regards,

Raphaël.

[1] 
https://github.com/apache/james-project/blob/master/src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md

{code}




Mailing list thread: 
https://www.mail-archive.com/server-dev@james.apache.org/msg66319.html

PR: https://github.com/linagora/james-project/pull/3425



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



Re: Distributed James: make ElasticSearch indexing optional?

2020-06-23 Thread Eugen Stan
Hi,

I've looking again at this thread and I see strong arguments over a
technical issue.

The proposal in question is whether we should add a configuration switch
to OPT-IN/OUT of a large, useful dependency.

This is a technical decision that has implications mostly for users and
less for developers - since the code seems simple to follow.


@Matthieu: To me it appears like this:

- It means that users can do it via a configuration switch, if they
chose too.

- It does not mean it should be disabled by default ( it's for another
discussion)

- The configuration code looks easy to maintain


Let's leave what users will want or not out of the discussion since we
can't speak for them anyway.

We can only say what we would do as users or what the users we worked
with already did.


Looking at the code size and changes for this feature and the benefits
of having the option to disable search (faster initial setup, solution
for niche use-cases ) I think the PR can be merged.




La 23.06.2020 11:38, Matthieu Baechler a scris:
> Hi,
>
> On Wed, 2020-06-17 at 17:53 +0200, Raphaël Ouazana-Sustowski wrote:
>> Hi Matthieu,
>>
>> I don't see much new arguments in your last answer.
> It's weird because I think I didn't really repeat what I said
> previously.
>
>>  I can answer your 
>> questions one by one, but I would like to go forward.
> It's your freedom of course, it's a bit sad that such a debate don't
> end in a consensus but it happens.
>
>> Would it make a consensus for you if we work on merging the current
>> PR, 
>> with always the option to revert it and go to a product if needed?
> No, that's not what I call consensus as it doesn't take into account my
> opinion.
>
>> Or do you prefer that we ask for a vote?
> Feel free to do it or not. I won't stand in your way.
>
> Cheers,
>
> -- Matthieu Baechler
>
>
> -
> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
> For additional commands, e-mail: server-dev-h...@james.apache.org
>
-- 
Eugen Stan
+40720 898 747 / netdava.com

<>

signature.asc
Description: OpenPGP digital signature


Re: Distributed James: make ElasticSearch indexing optional?

2020-06-23 Thread Matthieu Baechler
Hi,

On Wed, 2020-06-17 at 17:53 +0200, Raphaël Ouazana-Sustowski wrote:
> Hi Matthieu,
> 
> I don't see much new arguments in your last answer.

It's weird because I think I didn't really repeat what I said
previously.

>  I can answer your 
> questions one by one, but I would like to go forward.

It's your freedom of course, it's a bit sad that such a debate don't
end in a consensus but it happens.

> Would it make a consensus for you if we work on merging the current
> PR, 
> with always the option to revert it and go to a product if needed?

No, that's not what I call consensus as it doesn't take into account my
opinion.

> Or do you prefer that we ask for a vote?

Feel free to do it or not. I won't stand in your way.

Cheers,

-- Matthieu Baechler


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



[jira] [Commented] (JAMES-3265) Investigate Slow IMAP SELECT (26 minutes +)

2020-06-23 Thread Benoit Tellier (Jira)


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

Benoit Tellier commented on JAMES-3265:
---

https://github.com/linagora/james-project/pull/3468 is a proposed fix

> Investigate Slow IMAP SELECT (26 minutes +)
> ---
>
> Key: JAMES-3265
> URL: https://issues.apache.org/jira/browse/JAMES-3265
> Project: James Server
>  Issue Type: Task
>  Components: cassandra, IMAPServer
>Affects Versions: master
>Reporter: Benoit Tellier
>Priority: Major
>  Labels: perf
> Fix For: 3.6.0
>
> Attachments: Capture_d_écran_de_2020-06-22_11-42-01.png, 
> Capture_d_écran_de_2020-06-22_11-48-28.png
>
>
> Using glowroot APM on Linagora run instances, I noticed some select commands 
> takes around 20 minutes.
> A performance review shows thousands of MODSEQ updates undermines the 
> performance.
> {code:java}
> Transaction type: IMAP
> Transaction name: IMAP processor : 
> org.apache.james.imap.processor.SelectProcessor
> Start: 2020-06-22 2:28:04.433 am (+07:00)
> Duration: 1,618,718.3 milliseconds
> {code}
> I noticed a high allocation of new ModSeq (28.000 instead of 1) due to uid 
> set disjonction.
> I believe a solution would be to implement a new MessageMapper method:
> Mono removeRecentFlags(Mailbox mbox);
> That would enable some Cassandra query optimizations...
> # DOD 
>  - unlock significant performance improvments for such queries (x100)
> Attached you will find the query stats and flame graph backing up the 
> analysis.



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



[jira] [Created] (JAMES-3265) Investigate Slow IMAP SELECT (26 minutes +)

2020-06-23 Thread Benoit Tellier (Jira)
Benoit Tellier created JAMES-3265:
-

 Summary: Investigate Slow IMAP SELECT (26 minutes +)
 Key: JAMES-3265
 URL: https://issues.apache.org/jira/browse/JAMES-3265
 Project: James Server
  Issue Type: Task
  Components: cassandra, IMAPServer
Affects Versions: master
Reporter: Benoit Tellier
 Fix For: 3.6.0
 Attachments: Capture_d_écran_de_2020-06-22_11-42-01.png, 
Capture_d_écran_de_2020-06-22_11-48-28.png

Using glowroot APM on Linagora run instances, I noticed some select commands 
takes around 20 minutes.

A performance review shows thousands of MODSEQ updates undermines the 
performance.

{code:java}
Transaction type: IMAP
Transaction name: IMAP processor : 
org.apache.james.imap.processor.SelectProcessor
Start: 2020-06-22 2:28:04.433 am (+07:00)
Duration: 1,618,718.3 milliseconds
{code}

I noticed a high allocation of new ModSeq (28.000 instead of 1) due to uid set 
disjonction.

I believe a solution would be to implement a new MessageMapper method:

Mono removeRecentFlags(Mailbox mbox);

That would enable some Cassandra query optimizations...

# DOD 

 - unlock significant performance improvments for such queries (x100)


Attached you will find the query stats and flame graph backing up the analysis.



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



[jira] [Created] (JAMES-3264) MAILBOX details are read 3 times upon indexing

2020-06-23 Thread Jira
Nguyễn Việt Đức created JAMES-3264:
--

 Summary: MAILBOX details are read 3 times upon indexing
 Key: JAMES-3264
 URL: https://issues.apache.org/jira/browse/JAMES-3264
 Project: James Server
  Issue Type: Improvement
Reporter: Nguyễn Việt Đức


!https://ci.linagora.com/linagora/lgs/openpaas/james/uploads/e66e59cdfb7bf1e09e103a71ebad7b89/Capture_d_%C3%A9cran_de_2020-06-22_12-05-54.png!

We can notice 3 mailbox reads for each indexed message

This is too much, we should reduce this to a single mailbox read.

*Definition of done*
 * Indexing a mail do the same count (or less) of mailbox reads (compared to 
messages reads)



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