[
https://issues.apache.org/jira/browse/JAMES-4140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benoit Tellier closed JAMES-4140.
---------------------------------
Resolution: Fixed
Merged
> Ability to shape IMAP applicative traffic
> -----------------------------------------
>
> Key: JAMES-4140
> URL: https://issues.apache.org/jira/browse/JAMES-4140
> Project: James Server
> Issue Type: Improvement
> Components: IMAPServer
> Reporter: Benoit Tellier
> Priority: Major
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> h2. Why?
> Some clients (Outlook) resynchronizes with an infinite loop on folders,
> SELECTing them all one by one.
> This naive implementation results in an absurdly high workload.
> Optimizing the given commands would not be a solution as it would only result
> in a higher workload as requests would be even more frequent.
> Additionnally, being able to regulate traffic, imposing delays to clients
> that exceeds their QoS, seems like a desirable feature of a production-ready
> email server.
> h2. How?
> Implement a Netty ChannelInboundHandlerAdapter to be placed between IMAP
> command parsing and execution adding delays prior command execution as needed.
> h3. Configuration proposal
> The user can declare the list of commands on which throttling needs to be
> tracked and for each:
> - `thresholdCount`: below this number of occurrence, no throttling is
> applied. Integer.
> - `additionalDelayPerOperation`: delay to be applied when exceeding the
> threshold. The delay is cumulative and thus
> would always increase. Duration.
> - `observationPeriod`: the count of observed commands is reset after this
> period thus stopping delays. Duration.
> - `maxDelay`: maximum value the client will be delayed for.
> Sample configuration:
> {code:xml}
> <imapserver>
> <!-- ... -->
> <perSessionCommandThrottling>
> <select>
> <thresholdCount>25</thresholdCount>
> <additionalDelayPerOperation>2ms</additionalDelayPerOperation>
> <observationPeriod>10m</observationPeriod>
> <maxDelay>1s</maxDelay>
> </select>
> <append>
> <thresholdCount>5</thresholdCount>
> <additionalDelayPerOperation>10ms</additionalDelayPerOperation>
> <observationPeriod>5m</observationPeriod>
> <maxDelay>2s</maxDelay>
> </append>
> </perSessionCommandThrottling>
> </imapserver>
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]