@Override public List<QueueEntry> getMessagesOnTheQueue() { ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); QueueEntryIterator queueListIterator = getEntries().iterator(); while (queueListIterator.advance()) { QueueEntry node = queueListIterator.getNode(); if (node != null && !node.isDeleted()) { entryList.add(node); } } return entryList; }
List<QueueEntry> getMessagesOnTheQueue(QueueEntryFilter filter) { ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); QueueEntryIterator queueListIterator = getEntries().iterator(); while (queueListIterator.advance() && !filter.filterComplete()) { QueueEntry node = queueListIterator.getNode(); MessageReference reference = node.newMessageReference(); if (reference != null) { try { if (!node.isDeleted() && filter.accept(node)) { entryList.add(node); } } finally { reference.release(); } } } return entryList; }
if (!node.isDeleted())
@Override public QueueEntry getOldestEntry() { QueueEntry oldestEntry = null; QueueEntryIterator iter = iterator(); while (iter.advance()) { QueueEntry node = iter.getNode(); if (node != null && !node.isDeleted()) { ServerMessage msg = node.getMessage(); if(msg != null && (oldestEntry == null || oldestEntry.getMessage().getMessageNumber() > msg.getMessageNumber())) { oldestEntry = node; } } } return oldestEntry; }
if (!node.isDeleted())
@Override public void visit(final QueueEntryVisitor visitor) { QueueEntryIterator queueListIterator = getEntries().iterator(); while(queueListIterator.advance()) { QueueEntry node = queueListIterator.getNode(); MessageReference reference = node.newMessageReference(); if(reference != null) { try { final boolean done = !node.isDeleted() && visitor.visit(node); if(done) { break; } } finally { reference.release(); } } } }
@Override public void reallocateMessages() { QueueEntryIterator queueListIterator = getEntries().iterator(); while (!_stopped.get() && queueListIterator.advance()) { final QueueEntry node = queueListIterator.getNode(); if (!node.isDeleted() && !node.expired()) { try { final ServerMessage message = node.getMessage(); final MessageReference messageReference = message.newReference(); try { message.getStoredMessage().reallocate(); } finally { messageReference.release(); } } catch (MessageDeletedException mde) { // Ignore } } } }
private void flowTailToDiskIfNecessary(final long maximumQueueDepthBytes, final long maximumQueueDepthMessages) { final long queueDepthBytes = _queue.getQueueDepthBytes(); final long queueDepthMessages = _queue.getQueueDepthMessages(); if ((maximumQueueDepthBytes >= 0L && queueDepthBytes > maximumQueueDepthBytes) || (maximumQueueDepthMessages >= 0L && queueDepthMessages > maximumQueueDepthMessages)) { long cumulativeDepthBytes = 0; long cumulativeDepthMessages = 0; QueueEntryIterator queueEntryIterator = _queue.queueEntryIterator(); while (queueEntryIterator.advance()) { QueueEntry node = queueEntryIterator.getNode(); if (node != null && !node.isDeleted()) { ServerMessage message = node.getMessage(); if (message != null) { cumulativeDepthMessages++; cumulativeDepthBytes += message.getSizeIncludingHeader(); if (cumulativeDepthBytes > maximumQueueDepthBytes || cumulativeDepthMessages > maximumQueueDepthMessages) { flowToDisk(message); } } } } } }