public void commit() { _transaction.commit(); getAMQPConnection().incrementTransactionBeginCounter(); }
private void dequeueEntry(final QueueEntry node, ServerTransaction txn) { txn.dequeue(node.getEnqueueRecord(), new ServerTransaction.Action() { @Override public void postCommit() { node.delete(); } @Override public void onRollback() { } }); }
public long getTransactionStartTimeLong() { ServerTransaction serverTransaction = _transaction; if (serverTransaction.isTransactional()) { return serverTransaction.getTransactionStartTime(); } else { return 0L; } }
public long getTransactionUpdateTimeLong() { ServerTransaction serverTransaction = _transaction; if (serverTransaction.isTransactional()) { return serverTransaction.getTransactionUpdateTime(); } else { return 0L; } }
private void rollbackOpenTransactions() { for(Map.Entry<Integer, ServerTransaction> entry : _createdTransactions.entrySet()) { entry.getValue().rollback(); AMQPConnection_1_0<?> connection = getSession().getConnection(); connection.decrementTransactionOpenCounter(); connection.incrementTransactionRollbackCounter(); connection.removeTransaction(entry.getKey()); } _createdTransactions.clear(); } }
txn.dequeue(_queueEntry.getEnqueueRecord(), new ServerTransaction.Action() txn.addPostTransactionAction(new ServerTransaction.Action() txn.addPostTransactionAction(new ServerTransaction.Action() txn.addPostTransactionAction(new ServerTransaction.Action() txn.addPostTransactionAction(new ServerTransaction.Action()
@Override public Date getOldestTransactionStartTime() { long oldest = Long.MAX_VALUE; Iterator<ServerTransaction> iterator = getOpenTransactions(); while (iterator.hasNext()) { final ServerTransaction value = iterator.next(); if (value instanceof LocalTransaction) { long transactionStartTimeLong = value.getTransactionStartTime(); if (transactionStartTimeLong > 0 && oldest > transactionStartTimeLong) { oldest = transactionStartTimeLong; } } } return oldest == Long.MAX_VALUE ? null : new Date(oldest); }
public boolean isTransactional() { return _transaction.isTransactional(); }
txn.addPostTransactionAction(new ServerTransaction.Action()
public void rollback() { _transaction.rollback(); AMQPConnection_0_10 amqpConnection = getAMQPConnection(); amqpConnection.incrementTransactionRollbackCounter(); amqpConnection.incrementTransactionBeginCounter(); }
@Override public long getTransactionUpdateTimeLong() { ServerTransaction serverTransaction = _transaction; if (serverTransaction.isTransactional()) { return serverTransaction.getTransactionUpdateTime(); } else { return 0L; } }
boolean isTransactional() { return _transaction.isTransactional(); }
false))); _transaction.addPostTransactionAction(new WriteReturnAction(errorCode, errorMessage, amqMessage));
private void commit(final Runnable immediateAction, boolean async) { if(async && _transaction instanceof LocalTransaction) { ((LocalTransaction)_transaction).commitAsync(new Runnable() { @Override public void run() { try { immediateAction.run(); } finally { _connection.incrementTransactionBeginCounter(); } } }); } else { _transaction.commit(immediateAction); _connection.incrementTransactionBeginCounter(); } }
@Override public void receiveBasicAck(final long deliveryTag, final boolean multiple) { if(LOGGER.isDebugEnabled()) { LOGGER.debug("RECV[" + _channelId + "] BasicAck[" +" deliveryTag: " + deliveryTag + " multiple: " + multiple + " ]"); } Collection<MessageConsumerAssociation> ackedMessages = _unacknowledgedMessageMap.acknowledge(deliveryTag, multiple); if (!ackedMessages.isEmpty()) { final Collection<MessageInstance> messages = Collections2.transform(ackedMessages, MESSAGE_INSTANCE_FUNCTION); _transaction.dequeue(messages, new MessageAcknowledgeAction(ackedMessages)); } /* The AMQP 0-9-1 spec requires to raise a channel exception "precondition-failed" when delivery tag is not valid: {quote} The server MUST validate that a non-zero delivery-tag refers to a delivered message, and raise a channel exception if this is not the case. On a transacted channel, this check MUST be done immediately and not delayed until a Tx.Commit. Specifically, a client MUST not acknowledge the same message more than once. {quote} The current broker behaviour is spec incompliant but it is kept for backward compatibility. It should close the channel as below: if (ackedMessages.isEmpty()) closeChannel(ErrorCodes.NOT_ALLOWED, "precondition-failed: Delivery tag '%d' is not valid."); */ }
private Error forceRollback(final ServerTransaction txn, final AMQPConnection_1_0<?> connection) { txn.rollback(); connection.incrementTransactionRollbackCounter(); final Error error = new Error(); error.setCondition(TransactionError.TRANSACTION_ROLLBACK); error.setDescription("The transaction was rolled back due to an earlier issue (e.g. a published message was sent settled but could not be enqueued)"); return error; }
@Override public long getTransactionStartTimeLong() { ServerTransaction serverTransaction = _transaction; if (serverTransaction.isTransactional()) { return serverTransaction.getTransactionStartTime(); } else { return 0L; } }