Refine search
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { connection.requireInHandler(); Receiver receiver = ((Receiver) delivery.getLink()); if (receiver.current() != delivery) { return; } if (delivery.isAborted()) { // Aborting implicitly remotely settles, so advance // receiver to the next delivery and settle locally. receiver.advance(); delivery.settle(); // Replenish the credit if not doing a drain if (!receiver.getDrain()) { receiver.flow(1); } return; } else if (delivery.isPartial()) { return; } ReadableBuffer data = receiver.recv(); receiver.advance(); Transaction tx = null; if (delivery.getRemoteState() instanceof TransactionalState) { TransactionalState txState = (TransactionalState) delivery.getRemoteState(); tx = this.sessionSPI.getTransaction(txState.getTxnId(), false); } final Transaction txUsed = tx; actualDelivery(delivery, receiver, data, txUsed); }
public boolean isReadable() { return delivery.isReadable(); }
/** * Sends acknowledgement of this message using the provided ACK_TYPE. * @param ackType acknowledgement type to send */ public void acknowledge(ACK_TYPE ackType) { switch(ackType) { // Codes_SRS_AMQPSMESSAGE_14_001: [If the ACK_TYPE is COMPLETE, the function shall set an Accepted disposition on the private Delivery object.] case COMPLETE: _delivery.disposition(Accepted.getInstance()); break; // Codes_SRS_AMQPSMESSAGE_14_002: [If the ACK_TYPE is ABANDON, the function shall set a Released disposition on the private Delivery object.] case ABANDON: _delivery.disposition(Released.getInstance()); break; // Codes_SRS_AMQPSMESSAGE_14_003: [If the ACK_TYPE is REJECT, the function shall set a Rejected disposition on the private Delivery object.] case REJECT: _delivery.disposition(new Rejected()); break; default: //This should never happen throw new IllegalStateException("Invalid ack type given. Type "+ ackType +" does not exist."); } // Codes_SRS_AMQPSMESSAGE_14_005: [The function shall settle the delivery after setting the proper disposition.] _delivery.settle(); }
public void apply(Delivery d) { if (d.getLocalState() == null) { d.disposition(d.getRemoteState()); } d.settle(); } };
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { if (delivery.getRemoteState() instanceof Accepted) { if (delivery.getContext() instanceof FutureRunnable) { ((FutureRunnable) delivery.getContext()).countDown(); } } }
@Override public void settle() { if( !delivery.isSettled() ) { delivery.disposition(new Accepted()); delivery.settle(); } drain(); } };
@Override public void onResponse(AmqpProtocolConverter converter, Response response) throws IOException { if (!delivery.remotelySettled()) { if (response.isException()) { ExceptionResponse error = (ExceptionResponse) response; Rejected rejected = new Rejected(); ErrorCondition condition = new ErrorCondition(); rejected.setError(condition); delivery.disposition(rejected); } else { final DeliveryState remoteState = delivery.getRemoteState(); if (remoteState != null && remoteState instanceof TransactionalState) { TransactionalState txAccepted = new TransactionalState(); txAccepted.setOutcome(Accepted.getInstance()); txAccepted.setTxnId(((TransactionalState) remoteState).getTxnId()); delivery.disposition(txAccepted); } else { delivery.disposition(Accepted.getInstance()); if (getEndpoint().getCredit() + --sendsInFlight <= (getConfiguredReceiverCredit() * .3)) { LOG.trace("Sending more credit ({}) to producer: {}", getConfiguredReceiverCredit() * .7, getProducerId()); getEndpoint().flow((int) (getConfiguredReceiverCredit() * .7)); delivery.settle(); session.pumpProtonToSocket();
Delivery delivery = recv.current(); if (delivery.isReadable() && !delivery.isPartial() && delivery.getLink().getName().equals(RECEIVE_TAG)) int size = delivery.pending(); byte[] buffer = new byte[size]; int read = recv.recv(buffer, 0, buffer.length); recv.advance(); delivery.disposition(Accepted.getInstance()); delivery.settle();
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { try { Receiver receiver = ((Receiver) delivery.getLink()); if (receiver.current() != delivery) { return; if (delivery.isAborted()) { receiver.advance(); delivery.settle(); } else if (delivery.isPartial()) { return; receiver.advance(); if (delivery.getRemoteState() instanceof TransactionalState) { TransactionalState txState = (TransactionalState) delivery.getRemoteState(); tx = this.sessionSPI.getTransaction(txState.getTxnId(), false); sessionSPI.serverSend(this, tx, receiver, delivery, address, delivery.getMessageFormat(), data); rejected.setError(condition); delivery.disposition(rejected); delivery.settle(); flow();
@Override public void done() { connection.runLater(() -> { if (delivery.getRemoteState() instanceof TransactionalState) { TransactionalState txAccepted = new TransactionalState(); txAccepted.setOutcome(Accepted.getInstance()); txAccepted.setTxnId(((TransactionalState) delivery.getRemoteState()).getTxnId()); delivery.disposition(txAccepted); } else { delivery.disposition(Accepted.getInstance()); } delivery.settle(); context.flow(); connection.flush(); }); }
Delivery delivery = receiveLink.current(); if (delivery.isReadable() && !delivery.isPartial()) { int size = delivery.pending(); byte[] buffer = new byte[size]; int read = receiveLink.recv(buffer, 0, buffer.length); receiveLink.advance(); DeliveryState remoteState = d.getRemoteState(); boolean state = remoteState.equals(Accepted.getInstance());
SendRequest sr = engineConnection.inProgressOutboundDeliveries.remove(delivery); Exception exception = null; if (delivery.getRemoteState() instanceof Rejected) { final Rejected rejected = (Rejected) delivery.getRemoteState(); final ErrorCondition error = rejected.getError(); if (error == null || error.getDescription() == null) { exception = new Exception("Message was rejected"); exception = new Exception(error.getDescription()); } else if (delivery.getRemoteState() instanceof Released) { exception = new Exception("Message was released"); } else if (delivery.getRemoteState() instanceof Modified) { exception = new Exception("Message was modified"); } else if (delivery.isReadable() && !delivery.isPartial()) { // Assuming link instanceof Receiver... Receiver receiver = (Receiver)event.getLink(); int amount = delivery.pending(); byte[] data = new byte[amount]; receiver.recv(data, 0, amount); receiver.advance(); QOS qos = delivery.remotelySettled() ? QOS.AT_MOST_ONCE : QOS.AT_LEAST_ONCE; subData.subscriber.tell(new DeliveryRequest(data, qos, event.getLink().getName(), delivery, event.getConnection()), this);
private int pumpIn(String address, Receiver receiver) Delivery delivery = receiver.current(); if (delivery.isReadable() && !delivery.isPartial()) int size = delivery.pending(); byte[] buffer = new byte[size]; int read = receiver.recv( buffer, 0, buffer.length ); if (read != size) { throw new IllegalStateException(); receiver.advance();
Receiver receiver; try { receiver = ((Receiver) delivery.getLink()); if (!delivery.isReadable()) { return; if (delivery.isPartial()) { return; readDelivery(receiver, buffer); receiver.advance(); sessionSPI.serverSend(receiver, delivery, address, delivery.getMessageFormat(), buffer); Rejected rejected = new Rejected(); ErrorCondition condition = new ErrorCondition(); condition.setCondition(Symbol.valueOf("failed")); condition.setDescription(e.getMessage()); rejected.setError(condition); delivery.disposition(rejected);
@Override public void onDelivery(Event event) { Delivery delivery = event.getDelivery(); while (delivery != null) { Sender sender = (Sender) delivery.getLink(); TRACE_LOGGER.debug("onDelivery: linkName:{}, unsettled:{}, credit:{}, deliveryState:{}, delivery.isBuffered:{}, delivery.tag:{}", sender.getName(), sender.getUnsettled(), sender.getRemoteCredit(), delivery.getRemoteState(), delivery.isBuffered(), delivery.getTag()); msgSender.onSendComplete(delivery); delivery.settle(); delivery = sender.current(); } }
private void doSend(AmqpMessage message, AsyncResult request, AmqpTransactionId txId) throws Exception { LOG.trace("Producer sending message: {}", message); Delivery delivery = null; if (presettle) { delivery = getEndpoint().delivery(EMPTY_BYTE_ARRAY, 0, 0); } else { byte[] tag = tagGenerator.getNextTag(); delivery = getEndpoint().delivery(tag, 0, tag.length); } delivery.setContext(request); Binary amqpTxId = null; if (txId != null) { amqpTxId = txId.getRemoteTxId(); } else if (session.isInTransaction()) { amqpTxId = session.getTransactionId().getRemoteTxId(); } if (amqpTxId != null) { TransactionalState state = new TransactionalState(); state.setTxnId(amqpTxId); delivery.disposition(state); } encodeAndSend(message.getWrappedMessage(), delivery); if (presettle) { delivery.settle(); request.onSuccess(); } else { pending.add(delivery); getEndpoint().advance(); } }
@Override protected void processDelivery(Delivery delivery) { final MessageDelivery md = (MessageDelivery) delivery.getContext(); if( delivery.remotelySettled() ) { if( delivery.getTag().length > 0 ) { checkinTag(delivery.getTag()); final DeliveryState state = delivery.getRemoteState(); if( state==null || state instanceof Accepted) { if( !delivery.remotelySettled() ) { delivery.disposition(new Accepted()); delivery.settle();
@Override public void run() { checkClosed(); try { if (!delivery.isSettled()) { if (session.isInTransaction()) { Binary txnId = session.getTransactionId().getRemoteTxId(); if (txnId != null) { TransactionalState txState = new TransactionalState(); txState.setOutcome(Accepted.getInstance()); txState.setTxnId(txnId); delivery.disposition(txState); session.getTransactionContext().registerTxConsumer(AmqpReceiver.this); } } else { delivery.disposition(Accepted.getInstance()); } if (settle) { delivery.settle(); } } session.pumpToProtonTransport(request); request.onSuccess(); } catch (Exception e) { request.onFailure(e); } } });
Delivery delivery = this.receiverLink.current(); if (linkName.equals(this.receiverLinkTag) && (delivery != null) && delivery.isReadable() && !delivery.isPartial()) int size = delivery.pending(); byte[] buffer = new byte[size]; int read = this.receiverLink.recv(buffer, 0, buffer.length); this.receiverLink.advance();
DeliveryState state = delivery.getRemoteState(); if (state == null) { continue; if (state instanceof TransactionalState) { LOG.trace("State of delivery is Transactional, retrieving outcome: {}", state); outcome = ((TransactionalState) state).getOutcome(); } else if (state instanceof Outcome) { outcome = (Outcome) state; AsyncResult request = (AsyncResult) delivery.getContext(); Exception deliveryError = null; ErrorCondition remoteError = ((Rejected) outcome).getError(); if (remoteError == null) { remoteError = getEndpoint().getRemoteCondition(); tagGenerator.returnTag(delivery.getTag()); delivery.settle(); toRemove.add(delivery);