Sunny Chan created IGNITE-6252:
----------------------------------
Summary: Cassandra Cache Store Session does not retry if prepare
statement failed
Key: IGNITE-6252
URL: https://issues.apache.org/jira/browse/IGNITE-6252
Project: Ignite
Issue Type: Bug
Components: cassandra
Affects Versions: 2.1, 2.0
Reporter: Sunny Chan
During our testing, we have found that certain warning about prepared statement:
2017-08-31 11:27:19.479
org.apache.ignite.cache.store.cassandra.CassandraCacheStore
flusher-0-#265%xxxx% WARN CassandraCacheStore - Prepared statement cluster
error detected, refreshing Cassandra session
com.datastax.driver.core.exceptions.InvalidQueryException: Tried to execute
unknown prepared query : 0xc7647611fd755386ef63478ee7de577b. You may have used
a PreparedStatement that was created with another Cluster instance.
We notice that after this warning occurs some of the data didn't persist
properly in cassandra cache. After further examining the Ignite's
CassandraSessionImpl code in method execute(BatchExecutionAssistance,Iterable),
we found that at around [line
283|https://github.com/apache/ignite/blob/86bd544a557663bce497134f7826be6b24d53330/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L283],
if the prepare statement fails in the asnyc call, it will not retry the
operation as the error is stored in [line
269|https://github.com/apache/ignite/blob/86bd544a557663bce497134f7826be6b24d53330/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L269]
and cleared in [line
277|https://github.com/apache/ignite/blob/86bd544a557663bce497134f7826be6b24d53330/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L277]
but it was not checked again after going through the [ResultSetFuture
|https://github.com/apache/ignite/blob/86bd544a557663bce497134f7826be6b24d53330/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L307].
I believe in line 307 you should check for error != null such that any failure
will be retry. Also potentially in line 312 we will need to check
isTableAbsenceError(error).
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)