improve error message on payment received nack max attempts

This commit is contained in:
woodser 2025-11-22 10:18:16 -05:00
parent 4906c8e0cd
commit 3f7b97f4d0
No known key found for this signature in database
GPG key ID: 55A10DD48ADEE5EF

View file

@ -119,8 +119,6 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
private int reprocessPaymentReceivedMessageCount; private int reprocessPaymentReceivedMessageCount;
private boolean makerInitTradeRequestHasBeenNacked = false; private boolean makerInitTradeRequestHasBeenNacked = false;
private PaymentReceivedMessage lastAckedPaymentReceivedMessage = null; private PaymentReceivedMessage lastAckedPaymentReceivedMessage = null;
private static int MAX_PAYMENT_RECEIVED_NACKS = 6;
private int numPaymentReceivedNacks = 0; private int numPaymentReceivedNacks = 0;
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
@ -960,7 +958,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
if (ackMessage.getUpdatedMultisigHex() != null) { if (ackMessage.getUpdatedMultisigHex() != null) {
trade.getBuyer().setUpdatedMultisigHex(ackMessage.getUpdatedMultisigHex()); trade.getBuyer().setUpdatedMultisigHex(ackMessage.getUpdatedMultisigHex());
processModel.getTradeManager().persistNow(null); processModel.getTradeManager().persistNow(null);
boolean autoResent = onPaymentReceivedNack(true, peer); boolean autoResent = onPaymentReceivedNack(true, peer, ackMessage);
if (autoResent) return; // skip remaining processing if auto resent if (autoResent) return; // skip remaining processing if auto resent
} }
} }
@ -979,7 +977,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
if (ackMessage.getUpdatedMultisigHex() != null) { if (ackMessage.getUpdatedMultisigHex() != null) {
trade.getArbitrator().setUpdatedMultisigHex(ackMessage.getUpdatedMultisigHex()); trade.getArbitrator().setUpdatedMultisigHex(ackMessage.getUpdatedMultisigHex());
processModel.getTradeManager().persistNow(null); processModel.getTradeManager().persistNow(null);
boolean autoResent = onPaymentReceivedNack(true, peer); boolean autoResent = onPaymentReceivedNack(true, peer, ackMessage);
if (autoResent) return; // skip remaining processing if auto resent if (autoResent) return; // skip remaining processing if auto resent
} }
} }
@ -1025,12 +1023,12 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
return ackMessage.getErrorMessage() != null && ackMessage.getErrorMessage().contains(SEND_INIT_TRADE_REQUEST_FAILED); // ignore if arbitrator's request failed to taker return ackMessage.getErrorMessage() != null && ackMessage.getErrorMessage().contains(SEND_INIT_TRADE_REQUEST_FAILED); // ignore if arbitrator's request failed to taker
} }
private boolean onPaymentReceivedNack(boolean syncAndPoll, TradePeer peer) { private boolean onPaymentReceivedNack(boolean syncAndPoll, TradePeer peer, AckMessage ackMessage) {
// prevent infinite nack loop with max attempts // prevent infinite nack loop with max attempts
numPaymentReceivedNacks++; numPaymentReceivedNacks++;
if (numPaymentReceivedNacks > MAX_PAYMENT_RECEIVED_NACKS) { if (numPaymentReceivedNacks > MAX_ATTEMPTS) {
String errorMsg = "The maximum number of attempts to process the payment confirmation has been reached for " + trade.getClass().getSimpleName() + " " + trade.getId() + ". Restart the application to try again."; String errorMsg = "Failed to process the payment confirmation after " + MAX_ATTEMPTS + " attempts for " + trade.getClass().getSimpleName() + " " + trade.getId() + ". Restart the application to try again.\n\nMessage from peer:\n" + ackMessage.getErrorMessage();
log.warn(errorMsg); log.warn(errorMsg);
trade.setErrorMessage(errorMsg); trade.setErrorMessage(errorMsg);
return false; return false;