@Override public void restoreCredit(final QueueEntry queueEntry) { _target.restoreCredit(queueEntry.getMessage()); }
@Override public boolean accept(QueueEntry entry) { _complete = entry.getMessage().getMessageNumber() == messageId; return _complete; }
@Override public boolean allocateCredit(final QueueEntry msg) { return _target.allocateCredit(msg.getMessage()); }
public boolean visit(QueueEntry entry) { if(entry.getMessage().getMessageNumber() == _messageNumber) { _entry = entry; return true; } return false; }
@Override public void copy(QueueEntry entry, final Queue<?> queue) { final ServerMessage message = entry.getMessage(); txn.enqueue(queue, message, new ServerTransaction.EnqueueAction() { @Override public void postCommit(MessageEnqueueRecord... records) { queue.enqueue(message, null, records[0]); } @Override public void onRollback() { } }); }
@Override public QueueEntry getOldestEntry() { QueueEntry oldest = null; for(PriorityQueueEntrySubList subList : _priorityLists) { QueueEntry subListOldest = subList.getOldestEntry(); if(oldest == null || (subListOldest != null && subListOldest.getMessage().getMessageNumber() < oldest.getMessage().getMessageNumber())) { oldest = subListOldest; } } return oldest; }
private void updateExpiration(final QueueEntry entry) { long expiration = calculateExpiration(entry.getMessage()); if (expiration > 0) { entry.setExpiration(expiration); } }
private Object getGroupValue(final QueueEntry entry) { final AMQMessageHeader messageHeader = entry.getMessage().getMessageHeader(); return _groupId == null ? messageHeader.getGroupId() : messageHeader.getHeader(_groupId); }
@Override public boolean visit(final QueueEntry entry) { final ServerMessage message = entry.getMessage(); boolean stop = false; if (message != null) { final long messageId = message.getMessageNumber(); if ((_messageIds == null || _messageIds.remove(messageId)) && (_filter == null || _filter.matches(entry.asFilterable()))) { stop = updateEntry(entry, txn); _modifiedMessageIds.add(messageId); if (_limit > 0) { _limit--; } } } return stop || _limit == 0 || (_messageIds != null && _messageIds.isEmpty()); } });
private Object getKey(QueueEntry entry) { ServerMessage message = entry.getMessage(); AMQMessageHeader messageHeader = message == null ? null : message.getMessageHeader(); Object groupVal = messageHeader == null ? _defaultGroup : _groupId == null ? messageHeader.getGroupId() : messageHeader.getHeader(_groupId); if(groupVal == null) { groupVal = _defaultGroup; } return groupVal; }
private void flowNewEntryToDiskIfNecessary(final QueueEntry newlyEnqueued, 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)) { ServerMessage message = newlyEnqueued.getMessage(); if (message != null) { flowToDisk(message); } } }
@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; }
@Override protected boolean updateEntry(QueueEntry entry, QueueManagingVirtualHost.Transaction txn) { ServerMessage message = entry.getMessage(); _pendingQueueDepthMessages++; _pendingQueueDepthBytes += message == null ? 0 : message.getSizeIncludingHeader(); boolean underfull = isUnderfull(); if (message != null && !message.isReferenced(_destinationQueue) && underfull) { performOperation(entry, txn, _destinationQueue); } return !underfull; }
public CompositeData viewMessageContent(long messageId) throws IOException, JMException { QueueEntry entry = getMessage(messageId); if(entry == null) { throw new OperationsException("AMQMessage with message id = " + messageId + " is not in the " + _queue.getName()); } ServerMessage serverMsg = entry.getMessage(); final int bodySize = (int) serverMsg.getSize(); byte[] msgContent = new byte[bodySize]; ByteBuffer buf = ByteBuffer.wrap(msgContent); int stored = serverMsg.getContent(buf); if(bodySize != stored) { LOGGER.error(String.format("An unexpected amount of content was retrieved " + "(expected %d, got %d bytes) when viewing content for message with ID %d " + "on queue '%s' in virtual host '%s'", bodySize, stored, messageId, _queue.getName(), _vhostMBean.getName())); } AMQMessageHeader header = serverMsg.getMessageHeader(); String mimeType = null, encoding = null; if (header != null) { mimeType = header.getMimeType(); encoding = header.getEncoding(); } Object[] itemValues = { messageId, mimeType, encoding, msgContent }; return new CompositeDataSupport(MSG_CONTENT_TYPE, VIEW_MSG_COMPOSITE_ITEM_NAMES_ARRAY, itemValues); }
void updateStatsOnEnqueue(QueueEntry entry) { final long sizeWithHeader = entry.getSizeWithHeader(); final QueueStatistics queueStatistics = _queueStatistics; queueStatistics.addToAvailable(sizeWithHeader); queueStatistics.addToQueue(sizeWithHeader); queueStatistics.addToEnqueued(sizeWithHeader); if(_forcePersistent || (_respectPersistent && entry.getMessage().isPersistent())) { queueStatistics.addToPersistentEnqueued(sizeWithHeader); } }
@Override public long getOldestMessageArrivalTime() { long oldestMessageArrivalTime = -1L; while(oldestMessageArrivalTime == -1L) { QueueEntryList entries = getEntries(); QueueEntry entry = entries == null ? null : entries.getOldestEntry(); if (entry != null) { ServerMessage message = entry.getMessage(); if(message != null) { try(MessageReference reference = message.newReference()) { oldestMessageArrivalTime = reference.getMessage().getArrivalTime(); } catch (MessageDeletedException e) { // ignore - the oldest message was deleted after it was discovered - we need to find the new oldest message } } } else { oldestMessageArrivalTime = 0; } } return oldestMessageArrivalTime; }
if (!node.isDeleted()) ServerMessage msg = node.getMessage(); if (msg != null)
private void expireEntry(final QueueEntry node) { ExpiryPolicy expiryPolicy = getExpiryPolicy(); long sizeWithHeader = node.getSizeWithHeader(); switch (expiryPolicy) { case DELETE: deleteEntry(node, () -> _queueStatistics.addToExpired(sizeWithHeader) ); break; case ROUTE_TO_ALTERNATE: routeToAlternate(node, () -> _queueStatistics.addToExpired(sizeWithHeader), q -> !((q instanceof AbstractQueue) && ((AbstractQueue) q).wouldExpire(node.getMessage()))); break; default: throw new ServerScopedRuntimeException("Unknown expiry policy: " + expiryPolicy + " this is a coding error inside Qpid"); } }
@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 } } } }
protected void doEnqueue(final ServerMessage message, final Action<? super MessageInstance> action, MessageEnqueueRecord enqueueRecord) { final QueueEntry entry = getEntries().add(message, enqueueRecord); updateExpiration(entry); try { if (entry.isAvailable()) { checkConsumersNotAheadOfDelivery(entry); notifyConsumers(entry); } checkForNotificationOnNewMessage(entry.getMessage()); } finally { if(action != null) { action.performAction(entry); } RejectPolicyHandler rejectPolicyHandler = _rejectPolicyHandler; if (rejectPolicyHandler != null) { rejectPolicyHandler.postEnqueue(entry); } _postEnqueueOverflowPolicyHandler.checkOverflow(entry); } }