synchronized void addAck(final MessageReference ref) { refsToAck.add(ref); if (ref.isPaged()) { if (pagedMessagesToPostACK == null) { pagedMessagesToPostACK = new ArrayList<>(); } pagedMessagesToPostACK.add(ref); //here we do something to prevent page file //from being deleted until the operation is done. ((PagedReference)ref).addPendingFlag(); } }
@Override public boolean contains(PagedReference ref) throws Exception { // We first verify if the message was routed to this queue boolean routed = false; for (long idRef : ref.getPagedMessage().getQueueIDs()) { if (idRef == this.cursorId) { routed = true; break; } } if (!routed) { return false; } else { // if it's been routed here, we have to verify if it was acked return !getPageInfo(ref.getPosition()).isAck(ref.getPosition()); } }
private long getPersistentSize(PagedReference ref) { try { return ref != null && ref.getPersistentSize() > 0 ? ref.getPersistentSize() : 0; } catch (ActiveMQException e) { logger.warn("Error computing persistent size of message: " + ref, e); return 0; } } }
@Override public void afterCommit(final Transaction tx) { for (MessageReference ref : refsToAck) { synchronized (ref.getQueue()) { queue.postAcknowledge(ref); } } if (pagedMessagesToPostACK != null) { for (MessageReference refmsg : pagedMessagesToPostACK) { ((PagedReference)refmsg).removePendingFlag(); if (((PagedReference) refmsg).isLargeMessage()) { decrementRefCount(refmsg); } } } }
tmpPosition = message.getPosition(); valid = routed(message.getPagedMessage()); if (!valid) { ignored = true; PageCursorInfo info = getPageInfo(message.getPosition().getPageNr()); if (!browsing && info != null && (info.isRemoved(message.getPosition()) || info.getCompleteInfo() != null)) { continue; if (info != null && info.isAck(message.getPosition())) { continue; if (valid && message.getPagedMessage().getTransactionID() >= 0) { PageTransactionInfo tx = pageStore.getPagingManager().getTransaction(message.getPagedMessage().getTransactionID()); if (tx == null) { ActiveMQServerLogger.LOGGER.pageSubscriptionCouldntLoad(message.getPagedMessage().getTransactionID(), message.getPosition(), pageStore.getAddress(), queue.getName()); valid = false; ignored = true; } else { if (tx.deliverAfterCommit(CursorIterator.this, PageSubscriptionImpl.this, message.getPosition())) { valid = false; ignored = false; if (!browsing && info != null && info.isRemoved(message.getPosition())) { valid = false; position = message.getPosition();
@Override public void remove() { deliveredCount.incrementAndGet(); PagedReference delivery = currentDelivery; if (delivery != null) { PageCursorInfo info = PageSubscriptionImpl.this.getPageInfo(delivery.getPosition()); if (info != null) { info.remove(delivery.getPosition()); } } }
private PageTransactionInfo getPageTransaction(final PagedReference reference) throws ActiveMQException { if (reference.getTransactionID() >= 0) { return pageStore.getPagingManager().getTransaction(reference.getTransactionID()); } else { return null; } }
((PagedReference)refmsg).removePendingFlag();
pageIterator.remove(); if (filter1 == null || filter1.match(reference.getMessage())) { count++; txCount++;
MessageReference msg = messagesIterator.next(); if (msg.isPaged()) { previouslyBrowsed.add(((PagedReference) msg).getPosition()); lastIterator = getPagingIterator(); PagedReference ref = getPagingIterator().next(); if (previouslyBrowsed.contains(ref.getPosition())) { continue;
@Override public void ackTx(final Transaction tx, final PagedReference reference) throws Exception { //pre-calculate persistentSize final long persistentSize = getPersistentSize(reference); confirmPosition(tx, reference.getPosition(), persistentSize); counter.increment(tx, -1, -persistentSize); PageTransactionInfo txInfo = getPageTransaction(reference); if (txInfo != null) { txInfo.storeUpdate(store, pageStore.getPagingManager(), tx); } }