[ https://issues.apache.org/jira/browse/MAILBOX-209?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tellier Benoit updated MAILBOX-209: ----------------------------------- Attachment: fix_cassandra_modseq_provider.patch In this patch, we first get the current modseq value. We increase it only if the value did not change. If it is the case, we can then return the incremented value. If it is not the case, we just retry. Note a tunnable max retry parameter ( to avoid being stuck ) To validate all cassandra unit tests ( mailbox mappers espacially ), it has to behave well even if the mailbox does not exist. Hence the separated table. > A data race is possible with Cassandra modseq generation > -------------------------------------------------------- > > Key: MAILBOX-209 > URL: https://issues.apache.org/jira/browse/MAILBOX-209 > Project: James Mailbox > Issue Type: Bug > Reporter: Tellier Benoit > Attachments: fix_cassandra_modseq_provider.patch > > > The Cassandra mailbox implementation proceed as follow to increase the modseq > : > - a first call to Cassandra to increase the modseq value for a given mailbox > - a second call allow us to retrieve the current value. > Note that you can not do it in a single call... > In a distributed environment, imagine that : > - for a mailbox the current modseq is n > - server A increments modseq. Modseq is n+1 > - server B increments modseq. Modseq is n+2 > - server A and B then retrieve the modseq value and have a duplicated modseq > : they for instance both can assign n+2 value to a different message. > The problem can be solved using conditionnal updates with lightweight > transactions. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org