previouslyDeliveredMessages = new PreviouslyDeliveredMap<MessageId, Boolean>(session.getTransactionContext().getTransactionId()); previouslyDeliveredMessages.put(delivered.getMessage().getMessageId(), false);
private void waitForRedeliveries() { if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null) { long expiry = System.currentTimeMillis() + failoverRedeliveryWaitPeriod; int numberNotReplayed; do { numberNotReplayed = 0; synchronized(deliveredMessages) { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; } } } } if (numberNotReplayed > 0) { LOG.info("waiting for redelivery of {} in transaction: {}, to consumer: {}", numberNotReplayed, this.getConsumerId(), previouslyDeliveredMessages.transactionId); try { Thread.sleep(Math.max(500, failoverRedeliveryWaitPeriod/4)); } catch (InterruptedException outOfhere) { break; } } } while (numberNotReplayed > 0 && expiry - System.currentTimeMillis() < 0); } }
synchronized (deliveredMessages) { if (previouslyDeliveredMessages != null) { previouslyDeliveredMessages.put(md.getMessage().getMessageId(), true); } else {
previouslyDeliveredMessages = new PreviouslyDeliveredMap<MessageId, Boolean>(session.getTransactionContext().getTransactionId()); previouslyDeliveredMessages.put(delivered.getMessage().getMessageId(), false);
previouslyDeliveredMessages = new PreviouslyDeliveredMap<MessageId, Boolean>(session.getTransactionContext().getTransactionId()); previouslyDeliveredMessages.put(delivered.getMessage().getMessageId(), false);
previouslyDeliveredMessages = new PreviouslyDeliveredMap<MessageId, Boolean>(session.getTransactionContext().getTransactionId()); previouslyDeliveredMessages.put(delivered.getMessage().getMessageId(), false);
private void waitForRedeliveries() { if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null) { long expiry = System.currentTimeMillis() + failoverRedeliveryWaitPeriod; int numberNotReplayed; do { numberNotReplayed = 0; synchronized(deliveredMessages) { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; } } } } if (numberNotReplayed > 0) { LOG.info("waiting for redelivery of " + numberNotReplayed + " in transaction: " + previouslyDeliveredMessages.transactionId + ", to consumer :" + this.getConsumerId()); try { Thread.sleep(Math.max(500, failoverRedeliveryWaitPeriod/4)); } catch (InterruptedException outOfhere) { break; } } } while (numberNotReplayed > 0 && expiry < System.currentTimeMillis()); } }
private void clearDispatchList() { if (clearDispatchList) { synchronized (deliveredMessages) { if (clearDispatchList) { if (!deliveredMessages.isEmpty()) { if (session.isTransacted()) { if (LOG.isDebugEnabled()) { LOG.debug(getConsumerId() + " tracking existing transacted delivered list (" + deliveredMessages.size() + ") on transport interrupt"); } if (previouslyDeliveredMessages == null) { previouslyDeliveredMessages = new PreviouslyDeliveredMap<MessageId, Boolean>(session.getTransactionContext().getTransactionId()); } for (MessageDispatch delivered : deliveredMessages) { previouslyDeliveredMessages.put(delivered.getMessage().getMessageId(), false); } } else { if (LOG.isDebugEnabled()) { LOG.debug(getConsumerId() + " clearing delivered list (" + deliveredMessages.size() + ") on transport interrupt"); } deliveredMessages.clear(); pendingAck = null; } } clearDispatchList = false; } } } }
private void waitForRedeliveries() { if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null) { long expiry = System.currentTimeMillis() + failoverRedeliveryWaitPeriod; int numberNotReplayed; do { numberNotReplayed = 0; synchronized(deliveredMessages) { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; } } } } if (numberNotReplayed > 0) { LOG.info("waiting for redelivery of {} in transaction: {}, to consumer: {}", numberNotReplayed, this.getConsumerId(), previouslyDeliveredMessages.transactionId); try { Thread.sleep(Math.max(500, failoverRedeliveryWaitPeriod/4)); } catch (InterruptedException outOfhere) { break; } } } while (numberNotReplayed > 0 && expiry - System.currentTimeMillis() < 0); } }
private void waitForRedeliveries() { if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null) { long expiry = System.currentTimeMillis() + failoverRedeliveryWaitPeriod; int numberNotReplayed; do { numberNotReplayed = 0; synchronized(deliveredMessages) { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; } } } } if (numberNotReplayed > 0) { LOG.info("waiting for redelivery of {} in transaction: {}, to consumer: {}", numberNotReplayed, this.getConsumerId(), previouslyDeliveredMessages.transactionId); try { Thread.sleep(Math.max(500, failoverRedeliveryWaitPeriod/4)); } catch (InterruptedException outOfhere) { break; } } } while (numberNotReplayed > 0 && expiry - System.currentTimeMillis() < 0); } }
private void rollbackOnFailedRecoveryRedelivery() throws JMSException { if (previouslyDeliveredMessages != null) { // if any previously delivered messages was not re-delivered, transaction is invalid and must rollback // as messages have been dispatched else where. int numberNotReplayed = 0; for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; if (LOG.isDebugEnabled()) { LOG.debug("previously delivered message has not been replayed in transaction: " + previouslyDeliveredMessages.transactionId + " , messageId: " + entry.getKey()); } } } if (numberNotReplayed > 0) { String message = "rolling back transaction (" + previouslyDeliveredMessages.transactionId + ") post failover recovery. " + numberNotReplayed + " previously delivered message(s) not replayed to consumer: " + this.getConsumerId(); LOG.warn(message); throw new TransactionRolledBackException(message); } } }
private void waitForRedeliveries() { if (failoverRedeliveryWaitPeriod > 0 && previouslyDeliveredMessages != null) { long expiry = System.currentTimeMillis() + failoverRedeliveryWaitPeriod; int numberNotReplayed; do { numberNotReplayed = 0; synchronized(deliveredMessages) { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; } } } } if (numberNotReplayed > 0) { LOG.info("waiting for redelivery of {} in transaction: {}, to consumer: {}", numberNotReplayed, this.getConsumerId(), previouslyDeliveredMessages.transactionId); try { Thread.sleep(Math.max(500, failoverRedeliveryWaitPeriod/4)); } catch (InterruptedException outOfhere) { break; } } } while (numberNotReplayed > 0 && expiry - System.currentTimeMillis() < 0); } }
private void rollbackOnFailedRecoveryRedelivery() throws JMSException { if (previouslyDeliveredMessages != null) { // if any previously delivered messages was not re-delivered, transaction is invalid and must rollback // as messages have been dispatched else where. int numberNotReplayed = 0; for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; LOG.debug("previously delivered message has not been replayed in transaction: {}, messageId: {}", previouslyDeliveredMessages.transactionId, entry.getKey()); } } if (numberNotReplayed > 0) { String message = "rolling back transaction (" + previouslyDeliveredMessages.transactionId + ") post failover recovery. " + numberNotReplayed + " previously delivered message(s) not replayed to consumer: " + this.getConsumerId(); LOG.warn(message); throw new TransactionRolledBackException(message); } } }
private void rollbackOnFailedRecoveryRedelivery() throws JMSException { if (previouslyDeliveredMessages != null) { // if any previously delivered messages was not re-delivered, transaction is invalid and must rollback // as messages have been dispatched else where. int numberNotReplayed = 0; for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; LOG.debug("previously delivered message has not been replayed in transaction: {}, messageId: {}", previouslyDeliveredMessages.transactionId, entry.getKey()); } } if (numberNotReplayed > 0) { String message = "rolling back transaction (" + previouslyDeliveredMessages.transactionId + ") post failover recovery. " + numberNotReplayed + " previously delivered message(s) not replayed to consumer: " + this.getConsumerId(); LOG.warn(message); throw new TransactionRolledBackException(message); } } }
private void rollbackOnFailedRecoveryRedelivery() throws JMSException { if (previouslyDeliveredMessages != null) { // if any previously delivered messages was not re-delivered, transaction is invalid and must rollback // as messages have been dispatched else where. int numberNotReplayed = 0; for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { numberNotReplayed++; LOG.debug("previously delivered message has not been replayed in transaction: {}, messageId: {}", previouslyDeliveredMessages.transactionId, entry.getKey()); } } if (numberNotReplayed > 0) { String message = "rolling back transaction (" + previouslyDeliveredMessages.transactionId + ") post failover recovery. " + numberNotReplayed + " previously delivered message(s) not replayed to consumer: " + this.getConsumerId(); LOG.warn(message); throw new TransactionRolledBackException(message); } } }
private boolean redeliveryExpectedInCurrentTransaction(MessageDispatch md, boolean markReceipt) { if (session.isTransacted()) { synchronized (deliveredMessages) { if (previouslyDeliveredMessages != null) { if (previouslyDeliveredMessages.containsKey(md.getMessage().getMessageId())) { if (markReceipt) { previouslyDeliveredMessages.put(md.getMessage().getMessageId(), true); } return true; } } } } return false; }
private boolean redeliveryExpectedInCurrentTransaction(MessageDispatch md, boolean markReceipt) { if (session.isTransacted()) { synchronized (deliveredMessages) { if (previouslyDeliveredMessages != null) { if (previouslyDeliveredMessages.containsKey(md.getMessage().getMessageId())) { if (markReceipt) { previouslyDeliveredMessages.put(md.getMessage().getMessageId(), true); } return true; } } } } return false; }
private void clearPreviouslyDelivered() { if (previouslyDeliveredMessages != null) { previouslyDeliveredMessages.clear(); previouslyDeliveredMessages = null; } }
private void rollbackPreviouslyDeliveredAndNotRedelivered() { if (previouslyDeliveredMessages != null) { for (Entry<MessageId, Boolean> entry: previouslyDeliveredMessages.entrySet()) { if (!entry.getValue()) { removeFromDeliveredMessages(entry.getKey()); } } clearPreviouslyDelivered(); } }
private boolean redeliveryExpectedInCurrentTransaction(MessageDispatch md, boolean markReceipt) { if (session.isTransacted()) { synchronized (deliveredMessages) { if (previouslyDeliveredMessages != null) { if (previouslyDeliveredMessages.containsKey(md.getMessage().getMessageId())) { if (markReceipt) { previouslyDeliveredMessages.put(md.getMessage().getMessageId(), true); } return true; } } } } return false; }