Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
-
Low
Description
I'm developing a tool for atomicity violation detection and I think it have found two atomicity violations in cassandra.
In org.apache.cassandra.streaming.StreamSession there might be an atomicity violation in method addTransferFiles(), lines 310-314:
310: StreamTransferTask task = transfers.get(cfId); if (task == null) { task = new StreamTransferTask(this, cfId); 314: transfers.put(cfId, task); }
A concurrent thread can insert a transfer with the same uuid creating two StreamTransferTask, and only one get into "transfers".
In org.apache.cassandra.thrift.ThriftSessionManager, a simular situation can occur in method currentSession(), lines 57-61:
57: ThriftClientState cState = activeSocketSessions.get(socket); if (cState == null) { cState = new ThriftClientState(socket); 51: activeSocketSessions.put(socket, cState); }