Details
-
Bug
-
Status: Open
-
Low
-
Resolution: Unresolved
-
None
-
Low
Description
Every now and then I see a ResultSet for one of my CAS queries that contain wasApplied=false, but does not contain my value column.
I just now found another occurrence, which causes the following exception in the driver:
... Caused by: com.mycompany.MyDataaccessException: checkLock(ResultSet[ exhausted: true, Columns[[applied](boolean)]]) at com.mycompany.MyDAO._checkLock(MyDAO.java:408) at com.mycompany.MyDAO._releaseLock(MyDAO.java:314) ... 16 more Caused by: java.lang.IllegalArgumentException: value is not a column defined in this metadata at com.datastax.driver.core.ColumnDefinitions.getAllIdx(ColumnDefinitions.java:266) at com.datastax.driver.core.ColumnDefinitions.getFirstIdx(ColumnDefinitions.java:272) at com.datastax.driver.core.ArrayBackedRow.getIndexOf(ArrayBackedRow.java:81) at com.datastax.driver.core.AbstractGettableData.getBytes(AbstractGettableData.java:151) at com.mycompany.MyDAO._checkLock(MyDAO.java:383) ... 17 more
The query the application was doing:
delete from "Lock" where lockname=:lockname and id=:id if value=:value;
I did some debugging recently and was able to track these ResultSets to StorageProxy.cas() to the "CAS precondition does not match current values {}" return statement.
I saw this happening with Cassandra 3.0.10 and earlier versions.