private void sendInitialLargeMessageHeader(Message msgI, ClientProducerCredits credits) throws ActiveMQException { int creditsUsed = sessionContext.sendInitialChunkOnLargeMessage(msgI); // On the case of large messages we tried to send credits before but we would starve otherwise // we may find a way to improve the logic and always acquire the credits before // but that's the way it's been tested and been working ATM credits.acquireCredits(creditsUsed); }
private void removeEntry(final SimpleString address, final ClientProducerCredits credits) { producerCredits.remove(address); credits.releaseOutstanding(); credits.close(); }
@Override public synchronized void returnCredits(final SimpleString address) { ClientProducerCredits credits = producerCredits.get(address); if (credits != null && credits.decrementRefCount() == 0) { addToUnReferencedCache(address, credits); } }
credits.incrementRefCount(); credits.init(context);
@Override public synchronized void reset() { for (ClientProducerCredits credits : producerCredits.values()) { credits.reset(); } }
@Override public synchronized void receiveFailCredits(final SimpleString address, int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveFailCredits(credits); } }
@Override public synchronized void receiveCredits(final SimpleString address, final int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveCredits(credits); } }
@Override public synchronized void close() { windowSize = -1; for (ClientProducerCredits credits : producerCredits.values()) { credits.close(); } producerCredits.clear(); unReferencedCredits.clear(); }
credits.incrementRefCount(); credits.init(context);
@Override public synchronized void reset() { for (ClientProducerCredits credits : producerCredits.values()) { credits.reset(); } }
@Override public synchronized void receiveFailCredits(final SimpleString address, int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveFailCredits(credits); } }
@Override public synchronized void receiveCredits(final SimpleString address, final int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveCredits(credits); } }
@Override public synchronized void close() { windowSize = -1; for (ClientProducerCredits credits : producerCredits.values()) { credits.close(); } producerCredits.clear(); unReferencedCredits.clear(); }
private void sendRegularMessage(final SimpleString sendingAddress, final ICoreMessage msgI, final boolean sendBlocking, final ClientProducerCredits theCredits, final SendAcknowledgementHandler handler) throws ActiveMQException { // This will block if credits are not available // Note, that for a large message, the encode size only includes the properties + headers // Not the continuations, but this is ok since we are only interested in limiting the amount of // data in *memory* and continuations go straight to the disk logger.tracef("sendRegularMessage::%s, Blocking=%s", msgI, sendBlocking); int creditSize = sessionContext.getCreditsOnSendingFull(msgI); theCredits.acquireCredits(creditSize); sessionContext.sendFullMessage(msgI, sendBlocking, handler, address); }
private void removeEntry(final SimpleString address, final ClientProducerCredits credits) { producerCredits.remove(address); credits.releaseOutstanding(); credits.close(); }
credits.incrementRefCount(); credits.init(context);
@Override public synchronized void reset() { for (ClientProducerCredits credits : producerCredits.values()) { credits.reset(); } }
@Override public synchronized void returnCredits(final SimpleString address) { ClientProducerCredits credits = producerCredits.get(address); if (credits != null && credits.decrementRefCount() == 0) { addToUnReferencedCache(address, credits); } }
@Override public synchronized void receiveFailCredits(final SimpleString address, int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveFailCredits(credits); } }
@Override public synchronized void receiveCredits(final SimpleString address, final int credits) { ClientProducerCredits cr = producerCredits.get(address); if (cr != null) { cr.receiveCredits(credits); } }