[
https://issues.apache.org/jira/browse/JAMES-3743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benoit Tellier closed JAMES-3743.
---------------------------------
Resolution: Fixed
> Mailbox/get failure upon negative quotas
> ----------------------------------------
>
> Key: JAMES-3743
> URL: https://issues.apache.org/jira/browse/JAMES-3743
> Project: James Server
> Issue Type: Improvement
> Components: JMAP, mailbox
> Affects Versions: 3.7.0
> Reporter: Benoit Tellier
> Assignee: Antoine Duprat
> Priority: Major
> Fix For: 3.8.0
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Spotted on one of my production instances:
> {code:java}
> {
> "using": [ ... ],
> "methodCalls": [
> [
> "Mailbox/get",
> {
> "accountId":
> "6cfe53f5858a153a4f70ec455169ccbf9d10d2d47ab75561fc86c75aaf6fcd8a",
> "ids": null
> },
> "0"
> ]
> ]
> }
> {code}
> Failed with:
> {code:java}
> {
> "sessionState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943",
> "methodResponses": [
> [
> "error",
> {
> "type": "invalidArguments",
> "description": "Left predicate of (!(-53 < 0) && !(-53 >
> 9007199254740992)) failed: Predicate (-53 < 0) did not fail."
> },
> "0"
> ]
> ]
> }
> {code}
> The message matches the validation error of UnsignedInt class. It backs some
> types of the returned mailbox response: quota but also counters.
> Further investigations showed this was due to one user quota being negative:
> {code:java}
> linagora@cqlsh> select * from linagora_james.currentquota WHERE quotaroot =
> '#private&[email protected]';
> quotaroot | messagecount | storage
> -------------------------------+--------------+----------
> #private&[email protected] | -46 | 54491982
> {code}
> An attempt to recompute quota failed:
> {code:java}
> curl -XPOST http://127.0.0.1:8000/quota/users?task=RecomputeCurrentQuotas
> {
> "additionalInformation": {
> "type": "recompute-current-quotas",
> "processedQuotaRoots": 219,
> "failedQuotaRoots": [
> "#private&[email protected]@linagora.com"
> ],
> "runningOptions": {
> "usersPerSecond": 1
> },
> "timestamp": "2022-04-06T05:13:12.462107Z"
> },
> "status": "failed",
> "submittedFrom": "128593e93459",
> "executedOn": "128593e93459",
> "cancelledFrom": null,
> "submitDate": "2022-04-06T05:06:26.916+0000",
> "taskId": "5199b2b5-570f-4d78-ab14-b0fc0b60cf42",
> "startedDate": "2022-04-06T05:06:27.024+0000",
> "failedDate": "2022-04-06T05:13:12.513+0000",
> "type": "recompute-current-quotas"
> }
> {code}
> We thus had to fix the value to a non negative value before re-running the
> task.
> h3. Additional notes
> Quota correctness is out of scope for this issue. Cassandra counters are
> likely poorly suited for the job. Counters are anyway non idempotant
> entities, which causes correctness issues in the face of retries.
> h3. Expected behaviour
> -> Recompute quota should not fail on existing negative value.
> -> Also, the mailbox layer likely should sanitize the values before handing
> it to upper applicatives layers.
> h3. Definition of done
> -> Unit test for negative quota recomputation
> -> Unit test for quota sanitation
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]