Benoit Tellier created JAMES-4140:
-------------------------------------
Summary: 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
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]