int expectedPerValue = session.getNumKeys() / values.size(), received = 0;
while (received < expectedPerValue)
{
TimerContext context = session.latency.time();
boolean success = false;
String exceptionMessage = null;
CqlResult results = null;
String formattedQuery = null;
List<String> queryParms = Collections.singletonList(getUnQuotedCqlBlob(startOffset));
for (int t = 0; t < session.getRetryTimes(); t++)
{
if (success)
break;
try
{
if (session.usePreparedStatements())
{
Integer stmntId = getPreparedStatement(client, cqlQuery);
if (session.cqlVersion.startsWith("3"))
results = client.execute_prepared_cql3_query(stmntId, queryParamsAsByteBuffer(queryParms), session.getConsistencyLevel());
else
results = client.execute_prepared_cql_query(stmntId, queryParamsAsByteBuffer(queryParms));
}
else
{
if (formattedQuery == null)
formattedQuery = formatCqlQuery(cqlQuery, queryParms);
if (session.cqlVersion.startsWith("3"))
results = client.execute_cql3_query(ByteBuffer.wrap(formattedQuery.getBytes()), Compression.NONE, session.getConsistencyLevel());
else
results = client.execute_cql_query(ByteBuffer.wrap(formattedQuery.getBytes()), Compression.NONE);
}
success = (results.rows.size() != 0);
}
catch (Exception e)
{
exceptionMessage = getExceptionMessage(e);
success = false;
}
}
if (!success)
{
error(String.format("Operation [%d] retried %d times - error executing indexed range query with offset %s %s%n",
index,
session.getRetryTimes(),
startOffset,
(exceptionMessage == null) ? "" : "(" + exceptionMessage + ")"));
}
received += results.rows.size();
// convert max key found back to an integer, and increment it
startOffset = String.format(format, (1 + getMaxKey(results.rows)));
session.operations.getAndIncrement();
session.keys.getAndAdd(results.rows.size());
context.stop();
}
}