Host your own email and enhance your privacy
Fired by Prometheus rule DynamoDBThrottling — any ThrottledRequests on a Cabalmail-owned table in the last 5 min.
DynamoDB rejected one or more requests because the table or a partition exceeded its capacity. Cabalmail uses on-demand mode for cabal-addresses, so this is rare — it usually means the table just experienced a 2× burst beyond its tracked baseline (DynamoDB on-demand absorbs only up to that double) or a hot-partition read pattern.
The label table_name identifies the table.
cabal-addresses: address-creation, address-revocation, sendmail virtusertable regeneration, IMAP user→inbox lookup. Throttling here translates directly into 5xx on cabal-list / cabal-new / cabal-revoke and missed deliveries during the throttle window.aws cloudwatch get-metric-statistics --namespace AWS/DynamoDB --metric-name ConsumedReadCapacityUnits \
--dimensions Name=TableName,Value=<table> \
--start-time $(date -u -v-1H +%FT%TZ) --end-time $(date -u +%FT%TZ) \
--period 60 --statistics Sum,Maximum
A clean spike pattern is a burst (transient — ride it out). A flat baseline with throttling means a hot partition (one key getting hammered).
aws logs tail /aws/lambda/cabal-list --since 15m | head -100
Check whether one user/email is dominating reads. The ecs-reconfigure loop also scans the table — confirm it’s not stuck in a tight loop (see heartbeat-ecs-reconfigure.md).
aws dynamodb describe-table --table-name <table> --query 'Table.BillingModeSummary'.cabal-addresses rarely has any sustained load — investigate unusual traffic before reconfiguring.warning severity. Sustained throttling typically promotes to user-visible 5xx within minutes, which Lambda5xxSpike will catch as critical.