private PreparedStatement prepareStatement()

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);
    }