in cassandra/src/main/java/org/apache/ignite/activestore/impl/cassandra/session/CassandraSessionImpl.java [709:758]
private PreparedStatement prepareStatement(String statement, KeyValuePersistenceSettings settings,
boolean tblExistenceRequired, boolean createMissingTable) {
int attempt = 0;
Throwable error = null;
String errorMsg = "Failed to prepare Cassandra CQL statement: " + statement;
RandomSleeper sleeper = newSleeper();
incrementSessionRefs();
try {
synchronized (sesStatements) {
if (sesStatements.containsKey(statement)) {
return sesStatements.get(statement);
}
}
while (attempt < CQL_EXECUTION_ATTEMPTS_COUNT) {
try {
PreparedStatement prepStatement = session().prepare(statement);
synchronized (sesStatements) {
sesStatements.put(statement, prepStatement);
}
return prepStatement;
}
catch (Throwable e) {
if (CassandraHelper.isTableAbsenceError(e)) {
if (!tblExistenceRequired) {
return null;
}
if (createMissingTable) {
handleTableAbsenceError(settings);
}
else {
throw new IgniteException(errorMsg, e);
}
}
else if (CassandraHelper.isHostsAvailabilityError(e)) {
handleHostsAvailabilityError(e, attempt, errorMsg);
}
else {
throw new IgniteException(errorMsg, e);
}
error = e;
}
sleeper.sleep();
attempt++;
}
}
finally {
decrementSessionRefs();
}
throw new IgniteException(errorMsg, error);
}