ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Igor Rudyak (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-6252) Cassandra Cache Store Session does not retry if prepare statement failed
Date Mon, 22 Jan 2018 04:40:00 GMT

    [ https://issues.apache.org/jira/browse/IGNITE-6252?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16333871#comment-16333871
] 

Igor Rudyak commented on IGNITE-6252:
-------------------------------------

[~sunnychanclsa] The fact that line [282|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L282] resets
the *prepStatEx* to null is absolutely fine - once we did *executeAsync [line 231|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L231]* for
all prepared statements in the batch and handled _prepared statements error_ in [line 252|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L252] we
don't care about value of *prepStatEx* anymore - cause all exceptions related to _prepared
statement_ were already handled in [line 252|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L252]*.*

Then starting from [line 284|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L284] till
[line 302|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L302] we are
waiting for each *_future_* to complete and processing it in [line 290|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L290]. Such
way, each processed (not failed) _*future*_ will be tracked inside *BatchExecutionAssistant* and
at the next [attempt|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L204] it
will be [skipped|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L228].
However if we'll again run into _prepared statement error_ during _*futures*_ processing
cycle, *prepStatEx* will be initialized again in [line 298|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L298] and
finally in [line 326|https://github.com/apache/ignite/blob/6330f0bb74d6b986d040a8017f3dfbde361d5457/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java#L326] it
will be properly handled again.

> 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.0, 2.1
>            Reporter: Sunny Chan
>            Assignee: Igor Rudyak
>            Priority: Major
>
> 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.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message