-
Type:
Bug
-
Status: Resolved
-
Priority:
Low
-
Resolution: Fixed
-
Fix Version/s: 2.1.9, 2.2.1, 3.0 alpha 1
-
Component/s: Legacy/Streaming and Messaging
-
Labels:None
-
Severity:Low
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); }