Refine search
public Object get(final int index) { switch(index) { case 0: return _transactionalState.getTxnId(); case 1: return _transactionalState.getOutcome(); } throw new IllegalStateException("Unknown index " + index); }
@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(); }); }
@Override public void onSuccess() { current = txId; cachedAcceptedState = new TransactionalState(); cachedAcceptedState.setOutcome(Accepted.getInstance()); cachedAcceptedState.setTxnId(getAmqpTransactionId()); cachedTransactedState = new TransactionalState(); cachedTransactedState.setTxnId(getAmqpTransactionId()); request.onSuccess(); }
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { Object message = delivery.getContext(); DeliveryState remoteState = delivery.getRemoteState(); if (txState.getOutcome() != null) { Outcome outcome = txState.getOutcome(); if (outcome instanceof Accepted) { if (!delivery.remotelySettled()) { TransactionalState txAccepted = new TransactionalState(); txAccepted.setOutcome(Accepted.getInstance()); txAccepted.setTxnId(txState.getTxnId()); delivery.disposition(txAccepted);
ProtonTransactionImpl tx = (ProtonTransactionImpl) this.sessionSPI.getTransaction(txState.getTxnId(), false); if (txState.getOutcome() != null) { settleImmediate = false; Outcome outcome = txState.getOutcome(); if (outcome instanceof Accepted) { if (!delivery.remotelySettled()) { TransactionalState txAccepted = new TransactionalState(); txAccepted.setOutcome(Accepted.getInstance()); txAccepted.setTxnId(txState.getTxnId()); delivery.disposition(txAccepted); delivery.settle();
@Override public void onMessage(Delivery delivery) throws ActiveMQAMQPException { try { Receiver receiver = ((Receiver) delivery.getLink()); if (delivery.isAborted()) { delivery.settle(); if (delivery.getRemoteState() instanceof TransactionalState) { TransactionalState txState = (TransactionalState) delivery.getRemoteState(); tx = this.sessionSPI.getTransaction(txState.getTxnId(), false);
@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); }
@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); } } });
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; tagGenerator.returnTag(delivery.getTag()); delivery.settle(); toRemove.add(delivery);
byte[] deliveryTag = delivery.getTag(); String deliveryTagAsString = StringUtil.convertBytesToString(delivery.getTag()); TRACE_LOGGER.debug("Received a delivery '{}' from '{}'", deliveryTagAsString, this.receivePath); if(deliveryTag == null || deliveryTag.length == 0 || !this.tagsToDeliveriesMap.containsKey(deliveryTagAsString)) remoteOutcome = (Outcome)remoteState; } else if (remoteState instanceof TransactionalState) { remoteOutcome = ((TransactionalState)remoteState).getOutcome(); matchingUpdateWorkItemDeliveryState = (DeliveryState)((TransactionalState) matchingUpdateWorkItemDeliveryState).getOutcome();
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 public void inspectDeliveryUpdate(Sender sender, Delivery delivery) { if (delivery.remotelySettled()) { LOG.info("Receiver got delivery update for: {}", delivery); if (!(delivery.getRemoteState() instanceof TransactionalState)) { markAsInvalid("Transactionally acquire work no tagged as being in a transaction."); } else { TransactionalState txState = (TransactionalState) delivery.getRemoteState(); if (!(txState.getOutcome() instanceof Accepted)) { markAsInvalid("Transaction state lacks any outcome"); } else if (txState.getTxnId() == null) { markAsInvalid("Transaction state lacks any TX Id"); } else { TransactionalState txState = (TransactionalState) delivery.getLocalState(); if (!(txState.getOutcome() instanceof Accepted)) { markAsInvalid("Transaction state lacks any outcome"); } else if (txState.getTxnId() == null) { markAsInvalid("Transaction state lacks any TX Id"); TransactionalState remoteTxState = (TransactionalState) delivery.getRemoteState(); if (!localTxState.getTxnId().equals(remoteTxState)) { markAsInvalid("Message not enrolled in expected transaction");
delivery.setMessageFormat(DeliveryImpl.DEFAULT_MESSAGE_FORMAT); TransactionContext transaction = requestToBeSent.getTransaction(); if (transaction != TransactionContext.NULL_TXN) { TransactionalState transactionalState = new TransactionalState(); transactionalState.setTxnId(new Binary(transaction.getTransactionId().array())); delivery.disposition(transactionalState); delivery.settle(); this.availableCredit.decrementAndGet(); TRACE_LOGGER.debug("RequestResonseLink {} internal sender sent a request. available credit :{}", this.parent.linkPath, this.availableCredit.get());
@Override protected void processDelivery(final Delivery delivery, Buffer deliveryBytes) throws Exception { if (!isClosed()) { EncodedMessage em = new EncodedMessage(delivery.getMessageFormat(), deliveryBytes.data, deliveryBytes.offset, deliveryBytes.length); condition.setDescription("Missing to field for message sent to an anonymous producer"); rejected.setError(condition); delivery.disposition(rejected); return; message.getMessageId(), getProducerId() + ":" + messageId.getProducerSequenceId()); final DeliveryState remoteState = delivery.getRemoteState(); if (remoteState != null && remoteState instanceof TransactionalState) { TransactionalState txState = (TransactionalState) remoteState; TransactionId txId = new LocalTransactionId(session.getConnection().getConnectionId(), toLong(txState.getTxnId())); session.enlist(txId); message.setTransactionId(txId);
delivery.setMessageFormat(sendData.getMessageFormat()); TransactionalState transactionalState = new TransactionalState(); transactionalState.setTxnId(new Binary(transaction.getTransactionId().array())); delivery.disposition(transactionalState); delivery.free();
@Override public void onSendComplete(final Delivery delivery) DeliveryState outcome = delivery.getRemoteState(); final String deliveryTag = new String(delivery.getTag()); Outcome transactionalOutcome = ((TransactionalState) outcome).getOutcome(); if (transactionalOutcome instanceof DeliveryState) { outcome = (DeliveryState) transactionalOutcome;
public int size() { return _transactionalState.getOutcome() != null ? 2 : 1; }
@Override public void delivery(Delivery delivery) throws Exception { MessageDispatch md = (MessageDispatch) delivery.getContext(); DeliveryState state = delivery.getRemoteState(); if (txState.getOutcome() != null) { Outcome outcome = txState.getOutcome(); if (outcome instanceof Accepted) { TransactionId txId = new LocalTransactionId(session.getConnection().getConnectionId(), toLong(txState.getTxnId())); dispatchedInTx.addFirst(delivery); if (!delivery.remotelySettled()) { TransactionalState txAccepted = new TransactionalState(); txAccepted.setOutcome(Accepted.getInstance()); txAccepted.setTxnId(txState.getTxnId()); delivery.disposition(txAccepted);
public TransactionalState newInstance(Object described) { List l = (List) described; TransactionalState o = new TransactionalState(); if(l.isEmpty()) { throw new DecodeException("The txn-id field cannot be omitted"); } switch(2 - l.size()) { case 0: o.setOutcome( (Outcome) l.get( 1 ) ); case 1: o.setTxnId( (Binary) l.get( 0 ) ); } return o; }
@Override protected void processDelivery(final Delivery delivery, Buffer deliveryBytes) throws Exception { if (!isClosed()) { EncodedMessage em = new EncodedMessage(delivery.getMessageFormat(), deliveryBytes.data, deliveryBytes.offset, deliveryBytes.length); condition.setDescription("Missing to field for message sent to an anonymous producer"); rejected.setError(condition); delivery.disposition(rejected); return; message.getMessageId(), getProducerId() + ":" + messageId.getProducerSequenceId()); final DeliveryState remoteState = delivery.getRemoteState(); if (remoteState != null && remoteState instanceof TransactionalState) { TransactionalState txState = (TransactionalState) remoteState; TransactionId txId = new LocalTransactionId(session.getConnection().getConnectionId(), toLong(txState.getTxnId())); session.enlist(txId); message.setTransactionId(txId);