public void updateOnError(final T entry) { sqlDao.inTransaction(new Transaction<Void, QueueSqlDao<T>>() { @Override public Void inTransaction(final QueueSqlDao<T> transactional, final TransactionStatus status) throws Exception { transactional.updateOnError(entry.getRecordId(), clock.getUTCNow().toDate(), entry.getErrorCount(), config.getTableName()); return null; } }); }
public void moveEntryToHistoryFromTransaction(final QueueSqlDao<T> transactional, final T entry) { transactional.insertEntry(entry, config.getHistoryTableName()); transactional.removeEntry(entry.getRecordId(), config.getTableName()); }
public void insertEntryFromTransaction(final QueueSqlDao<T> transactional, final T entry) { transactional.insertEntry(entry, config.getTableName()); totalWritten.inc(); if (useInflightQueue && isQueueOpenForWrite.get()) { Long lastInsertId = transactional.getLastInsertId(); boolean success = inflightEvents.offer(lastInsertId); if (log.isDebugEnabled()) { log.debug(DB_QUEUE_LOG_ID + "Inserting entry " + lastInsertId + (success ? " into inflightQ" : " into disk") + " [" + entry.getEventJson() + "]" ); } // Q overflowed if (!success) { final boolean q = isQueueOpenForWrite.compareAndSet(true, false); if (q) { log.info(DB_QUEUE_LOG_ID + "Closing Q for write: Overflowed with recordId = " + lastInsertId); } } else { totalInflightWritten.inc(); } } }
private List<T> getEntriesFromIds(final List<Long> recordIds) { int originalSize = recordIds.size(); List<T> result = new ArrayList<T>(recordIds.size()); int nbTries = 0; do { final List<T> tmp = sqlDao.getEntriesFromIds(recordIds, config.getTableName()); if (tmp.size() > 0) { for (T cur : tmp) { recordIds.remove(cur.getRecordId()); } result.addAll(tmp); } if (result.size() < originalSize) { try { long sleepTime = INFLIGHT_ENTRIES_INITIAL_POLL_SLEEP_MS * (int) Math.pow(2, nbTries); Thread.sleep(sleepTime); log.info(DB_QUEUE_LOG_ID + "Sleeping " + sleepTime + " for IDS = " + Joiner.on(",").join(recordIds)); } catch (InterruptedException e) { log.warn(DB_QUEUE_LOG_ID + "Thread " + Thread.currentThread() + " got interrupted"); Thread.currentThread().interrupt(); return result; } } nbTries++; } while (result.size() < originalSize && nbTries < INFLIGHT_ENTRIES_POLL_MAX_RETRY); if (recordIds.size() > 0) { log.warn(DB_QUEUE_LOG_ID + " Missing inflight entries from disk, recordIds = [" + Joiner.on(",").join(recordIds) + " ]"); } return result; }
private List<T> fetchReadyEntries(int size) { final Date now = clock.getUTCNow().toDate(); final List<T> entries = sqlDao.getReadyEntries(now, Hostname.get(), size, config.getTableName()); return entries; }
private boolean claimEntry(T entry) { final Date nextAvailable = clock.getUTCNow().plus(config.getClaimedTime().getMillis()).toDate(); final boolean claimed = (sqlDao.claimEntry(entry.getRecordId(), clock.getUTCNow().toDate(), Hostname.get(), nextAvailable, config.getTableName()) == 1); if (claimed && log.isDebugEnabled()) { log.debug(DB_QUEUE_LOG_ID + "Claiming entry " + entry.getRecordId()); } return claimed; }
@Override public Void inTransaction(final QueueSqlDao<T> transactional, final TransactionStatus status) throws Exception { transactional.updateOnError(entry.getRecordId(), clock.getUTCNow().toDate(), entry.getErrorCount(), config.getTableName()); return null; } });
@Override public void removeNotification(final Long recordId) { final NotificationEventModelDao existing = dao.getSqlDao().getByRecordId(recordId, config.getTableName()); final NotificationEventModelDao removedEntry = new NotificationEventModelDao(existing, Hostname.get(), clock.getUTCNow(), PersistentQueueEntryLifecycleState.REMOVED); dao.moveEntryToHistory(removedEntry); }
public void moveEntryToHistory(final T entry) { sqlDao.inTransaction(new Transaction<Void, QueueSqlDao<T>>() { @Override public Void inTransaction(final QueueSqlDao<T> transactional, final TransactionStatus status) throws Exception { moveEntryToHistoryFromTransaction(transactional, entry); return null; } }); }
public void insertEntry(final T entry) { sqlDao.inTransaction(new Transaction<Void, QueueSqlDao<T>>() { @Override public Void inTransaction(final QueueSqlDao<T> transactional, final TransactionStatus status) throws Exception { insertEntryFromTransaction(transactional, entry); return null; } }); }