Severity: Critical
NotificationConsumerProcessingErrors -- fires when the notification-service SQS consumer is generating sustained processing errors.
- Users stop receiving notifications (email, in-app) for shared files and document updates.
- The Chaos Scenarios dashboard shows non-zero processing error rate on the notification-service panel.
- SQS queue depth grows unboundedly as failed messages re-enter after visibility timeout.
- Check notification-service consumer logs for deserialization errors:
kubectl logs -l app=notification-service --tail=100 -n otterworks | grep -i "deseriali\|timestamp\|schema" - Check whether the chaos flag
chaos:notification-service:consumer_strict_schemais set in Redis:redis-cli EXISTS chaos:notification-service:consumer_strict_schema - Inspect the payload of a stuck message and compare it with
SqsNotificationMessage(services/notification-service/src/main/kotlin/com/otterworks/notification/model/NotificationEvent.kt):Legacy producers sendaws sqs receive-message --queue-url "$SQS_QUEUE_URL" --max-number-of-messages 1 --visibility-timeout 0timestampas a Unix epoch number rather than an RFC 3339 string. - Check
ApproximateNumberOfMessages/ApproximateAgeOfOldestMessageon the queue and the depth of the-dlqqueue to size the backlog.
- If the chaos flag is set, clear it:
redis-cli DEL chaos:notification-service:consumer_strict_schema(orscripts/inject-bug.sh <ID> resetfor a tenant). - The consumer accepts both RFC 3339 and epoch
timestampvalues and deletes messages that cannot be deserialized instead of leaving them to cycle through the visibility timeout. If a new schema mismatch appears, extend the model/serializer inNotificationEvent.ktand redeploy; the backlog drains on its own once the consumer accepts the payload. - Redrive the DLQ once the consumer is healthy:
aws sqs start-message-move-task --source-arn <dlq-arn> --destination-arn <queue-arn>. - Confirm
notifications_processing_errors_totalstops increasing and the alert resolves.