Source:
<code>protected void performDelete(ClientInterface cl, TTLTask task) { CountDownLatch latch = new CountDownLatch(1); final ProcedureCallback cb = new ProcedureCallback() { @Override public void clientCallback(ClientResponse resp) throws Exception { if (resp.getStatus() != ClientResponse.SUCCESS) { hostLog.warn(String.format("Fail to execute TTL on table: %s, column: %s, status: %s", task.tableName, task.getColumnName(), resp.getStatusString())); } if (resp.getResults() != null && resp.getResults().length > 0) { VoltTable t = resp.getResults()[0]; t.advanceRow(); String error = t.getString("MESSAGE"); if (!error.isEmpty()) { String drLimitError = ""; if (error.indexOf(TTLManager.DR_LIMIT_MSG) > -1) { drLimitError = "TTL is disabled for this table."; task.cancel(); ScheduledFuture<?> fut = m_futures.get(task.tableName); if (fut != null) { fut.cancel(false); m_futures.remove(task.tableName); } } hostLog.warn("Errors occured on TTL table " + task.tableName + ": " + error + " " + drLimitError); } else { task.stats.update(t.getLong("ROWS_DELETED"), t.getLong("ROWS_LEFT"), t.getLong("LAST_DELETE_TIMESTAMP")); } } latch.countDown(); } }; cl.getDispatcher().getInternelAdapterNT().callProcedure(cl.getInternalUser(), true, 1000 * 120, cb, <START> "@LowImpactDelete", new Object[] {task.tableName, task.getColumnName(), task.getValue(), "<", task.getBatchSize(), <END> TIMEOUT, task.getMaxFrequency(), INTERVAL}); try { latch.await(1, TimeUnit.MINUTES); } catch (InterruptedException e) { hostLog.warn("TTL waiting interrupted" + e.getMessage()); } }</code><technical_language>comparator <=, I remember change in a separate pull request</technical_language>

Target:
protected void performDelete(ClientInterface cl, TTLTask task) { CountDownLatch latch = new CountDownLatch(1); final ProcedureCallback cb = new ProcedureCallback() { @Override public void clientCallback(ClientResponse resp) throws Exception { if (resp.getStatus() != ClientResponse.SUCCESS) { hostLog.warn(String.format("Fail to execute TTL on table: %s, column: %s, status: %s", task.tableName, task.getColumnName(), resp.getStatusString())); } if (resp.getResults() != null && resp.getResults().length > 0) { VoltTable t = resp.getResults()[0]; t.advanceRow(); String error = t.getString("MESSAGE"); if (!error.isEmpty()) { String drLimitError = ""; if (error.indexOf(TTLManager.DR_LIMIT_MSG) > -1) { drLimitError = "The transaction exceeds DR Buffer Limit of " + MpTransactionState.DR_MAX_AGGREGATE_BUFFERSIZE + " TTL is disabled for the table. Please change BATCH_SIZE to a smaller value."; task.cancel(); ScheduledFuture<?> fut = m_futures.get(task.tableName); if (fut != null) { fut.cancel(false); m_futures.remove(task.tableName); } } hostLog.warn("Errors occured on TTL table " + task.tableName + ": " + error + " " + drLimitError); } else { task.stats.update(t.getLong("ROWS_DELETED"), t.getLong("ROWS_LEFT"), t.getLong("LAST_DELETE_TIMESTAMP")); } } latch.countDown(); } }; cl.getDispatcher().getInternelAdapterNT().callProcedure(cl.getInternalUser(), true, 1000 * 120, cb, "@LowImpactDeleteNT", new Object[] {task.tableName, task.getColumnName(), task.getValue(), "<=", task.getBatchSize(), TIMEOUT, task.getMaxFrequency(), INTERVAL}); try { latch.await(1, TimeUnit.MINUTES); } catch (InterruptedException e) { hostLog.warn("TTL waiting interrupted" + e.getMessage()); } }