Benoit Tellier created JAMES-3743: ------------------------------------- Summary: 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 Fix For: 3.8.0
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&x...@linagora.com'; quotaroot | messagecount | storage -------------------------------+--------------+---------- #private&x...@linagora.com | -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&x...@linagora.com@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: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org