Description
As far as I know, the design of rabbitmq MailQueue is the following:
On Enqueue:
1. put the raw message in a blobstore
2. put the reference to it into rabbitmq
3. put some metadata about it into cassandra
On Delete:
1. use cassandra to browse messages in the queue and remove the ones that match the query
On Dequeue:
1. take the next message from rabbit
2. check that the message is not deleted by calling cassandra MailQueueView.isPresent
On browse:
1. use cassandra MailQueueView to list not yet deleted messages
It looks like we don't check that the message is not deleted on dequeue.