From d1920b6e38925b9e21fd3de59ab634a9d13f6b87 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Sat, 14 Mar 2015 10:04:17 +0100 Subject: [PATCH] Handle error cases in trade process --- .../src/main/java/io/bitsquare/trade/Trade.java | 1 + .../availability/tasks/GetPeerAddress.java | 2 +- .../ProcessReportOfferAvailabilityMessage.java | 2 +- .../tasks/RequestIsOfferAvailable.java | 2 +- .../tasks/AddOfferToRemoteOfferBook.java | 3 ++- .../tasks/BroadcastCreateOfferFeeTx.java | 2 +- .../placeoffer/tasks/CreateOfferFeeTx.java | 3 ++- .../placeoffer/tasks/ValidateOffer.java | 3 ++- .../trade/offerer/tasks/CreateDepositTx.java | 2 +- .../tasks/ProcessPayoutTxPublishedMessage.java | 2 +- ...ssRequestOffererPublishDepositTxMessage.java | 2 +- .../tasks/ProcessRequestTakeOfferMessage.java | 3 ++- .../tasks/ProcessTakeOfferFeePayedMessage.java | 2 +- .../tasks/RespondToTakeOfferRequest.java | 2 +- .../tasks/SendBankTransferInitedMessage.java | 2 +- .../offerer/tasks/SendDepositTxIdToTaker.java | 2 +- .../tasks/SendTakerDepositPaymentRequest.java | 2 +- .../SetupListenerForBlockChainConfirmation.java | 2 +- .../offerer/tasks/SignAndPublishDepositTx.java | 2 +- .../trade/offerer/tasks/SignPayoutTx.java | 2 +- .../offerer/tasks/VerifyAndSignContract.java | 2 +- .../tasks/VerifyTakeOfferFeePayment.java | 2 +- .../trade/offerer/tasks/VerifyTakerAccount.java | 2 +- .../taker/tasks/CreateAndSignContract.java | 2 +- .../trade/taker/tasks/GetPeerAddress.java | 2 +- .../protocol/trade/taker/tasks/PayDeposit.java | 2 +- .../trade/taker/tasks/PayTakeOfferFee.java | 8 ++++++-- .../tasks/ProcessBankTransferInitedMessage.java | 2 +- .../tasks/ProcessDepositTxPublishedMessage.java | 2 +- ...ProcessRespondToTakeOfferRequestMessage.java | 3 ++- ...rocessTakerDepositPaymentRequestMessage.java | 2 +- .../trade/taker/tasks/RequestTakeOffer.java | 2 +- .../taker/tasks/SendPayoutTxToOfferer.java | 2 +- .../tasks/SendSignedTakerDepositTxAsHex.java | 2 +- .../tasks/SendTakeOfferFeePayedMessage.java | 17 +++++++++++++++-- .../taker/tasks/SignAndPublishPayoutTx.java | 2 +- .../trade/taker/tasks/TakerCommitDepositTx.java | 2 +- .../taker/tasks/VerifyOfferFeePayment.java | 2 +- .../trade/taker/tasks/VerifyOffererAccount.java | 2 +- .../java/io/bitsquare/util/taskrunner/Task.java | 4 ++-- 40 files changed, 65 insertions(+), 42 deletions(-) diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index 23799e39cd..f97b397572 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -41,6 +41,7 @@ public class Trade implements Serializable { OPEN, OFFERER_ACCEPTED, OFFERER_REJECTED, /* For taker only*/ + TAKE_OFFER_FEE_PAID, DEPOSIT_PUBLISHED, DEPOSIT_CONFIRMED, FIAT_PAYMENT_STARTED, diff --git a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java index 853e69ed26..69d5d2d282 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java @@ -55,7 +55,7 @@ public class GetPeerAddress extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { model.getOffer().setState(Offer.State.OFFERER_OFFLINE); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java index d92b44dc1b..82b1825e11 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java @@ -51,7 +51,7 @@ public class ProcessReportOfferAvailabilityMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java index 20ca4b0439..5a342ccf79 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java @@ -44,6 +44,7 @@ public class AddOfferToRemoteOfferBook extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { + // do nothing } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java index be5a103847..e52d896f70 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java @@ -103,7 +103,7 @@ public class BroadcastCreateOfferFeeTx extends Task { } } - protected void rollBackOnFault() { + protected void applyStateOnFault() { if (!removeOfferFailed && !addOfferFailed) { // If broadcast fails we need to remove offer from offerbook model.getOfferBookService().removeOffer(model.getOffer(), diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java index 9329a7744f..42c4b518ad 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java @@ -49,6 +49,7 @@ public class CreateOfferFeeTx extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { + // do nothing } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java index d995079d33..650e1f258e 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java @@ -43,6 +43,7 @@ public class ValidateOffer extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { + // do nothing } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java index 4b828e588c..e4334165a4 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java @@ -63,6 +63,6 @@ public class CreateDepositTx extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java index 0e11ded019..73c77f3c7d 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java @@ -55,6 +55,6 @@ public class ProcessPayoutTxPublishedMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java index 63bb2a6948..79263779c4 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java @@ -58,6 +58,6 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { + // do nothing } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java index c81d1d0115..a5315543be 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java @@ -54,6 +54,6 @@ public class ProcessTakeOfferFeePayedMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java index 1b489b74a6..c28c84887c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java @@ -64,7 +64,7 @@ public class RespondToTakeOfferRequest extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { if (offerIsAvailable && model.getOpenOffer().getState() == OpenOffer.State.OFFER_ACCEPTED) { model.getOpenOffer().setState(OpenOffer.State.OPEN); model.setTrade(null); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java index 5c4520924e..55014fdbec 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java @@ -58,6 +58,6 @@ public class SendBankTransferInitedMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java index af4a2bcf43..78ca233b59 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java @@ -55,6 +55,6 @@ public class SendDepositTxIdToTaker extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java index bcd0c0c4fd..5107dcc77d 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java @@ -58,6 +58,6 @@ public class SendTakerDepositPaymentRequest extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java index bd778035a2..fb199b1dd3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java @@ -57,6 +57,6 @@ public class SetupListenerForBlockChainConfirmation extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java index b89d2ce665..6e439e02df 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java @@ -64,7 +64,7 @@ public class SignPayoutTx extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java index 41f04f4e8d..19446f9dc7 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java @@ -59,6 +59,6 @@ public class VerifyAndSignContract extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index 0ecc550f77..108545103f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java @@ -43,6 +43,6 @@ public class VerifyTakeOfferFeePayment extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java index 11d3d4994b..3381a90dd2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java @@ -49,6 +49,6 @@ public class VerifyTakerAccount extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index 2c4810438a..e5d6ffad1b 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -58,6 +58,6 @@ public class CreateAndSignContract extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java index 2dfb7687f1..f0272f47a3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java @@ -55,7 +55,7 @@ public class GetPeerAddress extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index cd327512e4..ea97eb583e 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -58,6 +58,6 @@ public class PayDeposit extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java index b26866a65e..8a78f8950f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java @@ -47,6 +47,8 @@ public class PayTakeOfferFee extends Task { public void onSuccess(Transaction transaction) { log.debug("Take offer fee paid successfully. Transaction ID = " + transaction.getHashAsString()); model.getTrade().setTakeOfferFeeTxID(transaction.getHashAsString()); + model.getTrade().setState(Trade.State.TAKE_OFFER_FEE_PAID); + complete(); } @@ -61,8 +63,10 @@ public class PayTakeOfferFee extends Task { } @Override - protected void rollBackOnFault() { - // in error case take offer can be repeated so we reset the trade state + protected void applyStateOnFault() { + // As long as the take offer fee was not paid nothing critical happens. + // The take offer process can be repeated so we reset the trade state. + appendToErrorMessage("Take offer fee payment failed. Maybe your network connection was lost. Please try again."); model.getTrade().setState(Trade.State.OPEN); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java index 8b661ef875..0e1969513c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java @@ -55,6 +55,6 @@ public class ProcessBankTransferInitedMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java index 2e7a5253f9..496b971743 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java @@ -49,6 +49,6 @@ public class ProcessDepositTxPublishedMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java index 83b7f2ded2..2cff739838 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java @@ -54,6 +54,7 @@ public class ProcessRespondToTakeOfferRequestMessage extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java index 9d6cf6106a..5f398e05b1 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java @@ -51,6 +51,6 @@ public class SendPayoutTxToOfferer extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index 461d8baa87..aed13f38ad 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -69,6 +69,6 @@ public class SendSignedTakerDepositTxAsHex extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java index 83106c3f4c..028deb61cf 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java @@ -33,6 +33,8 @@ public class SendTakeOfferFeePayedMessage extends Task { super(taskHandler, model); } + public int retryCounter = 0; + @Override protected void doRun() { TakeOfferFeePayedMessage msg = new TakeOfferFeePayedMessage( @@ -43,6 +45,7 @@ public class SendTakeOfferFeePayedMessage extends Task { ); model.getTradeMessageService().sendMessage(model.getPeer(), msg, new SendMessageListener() { + @Override public void handleResult() { log.trace("Sending TakeOfferFeePayedMessage succeeded."); @@ -51,12 +54,22 @@ public class SendTakeOfferFeePayedMessage extends Task { @Override public void handleFault() { - failed(); + // Take offer fee is already paid, so we need to try to get that trade to succeed. + // We try to repeat once and if that fails as well we persist the state for a later retry. + if (retryCounter == 0) { + retryCounter++; + doRun(); + } + else { + failed(); + } } }); } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { + appendToErrorMessage("Sending TakeOfferFeePayedMessage to offerer failed. Maybe the network connection was lost or the offerer lost his connection. " + + "We persisted the state of the trade, please try again later or cancel that trade."); } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index f2aba8e64a..f52901dd77 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -74,6 +74,6 @@ public class SignAndPublishPayoutTx extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java index 459a79dd9b..4580d890c3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java @@ -45,6 +45,6 @@ public class TakerCommitDepositTx extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java index cc5101138f..e18fbf2719 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java @@ -42,6 +42,6 @@ public class VerifyOfferFeePayment extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java index e1b990cb0e..80f3fd8038 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java @@ -47,6 +47,6 @@ public class VerifyOffererAccount extends Task { } @Override - protected void rollBackOnFault() { + protected void applyStateOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/util/taskrunner/Task.java b/core/src/main/java/io/bitsquare/util/taskrunner/Task.java index 5f23045959..f8e8a660b6 100644 --- a/core/src/main/java/io/bitsquare/util/taskrunner/Task.java +++ b/core/src/main/java/io/bitsquare/util/taskrunner/Task.java @@ -47,7 +47,7 @@ public abstract class Task { abstract protected void doRun(); - abstract protected void rollBackOnFault(); + abstract protected void applyStateOnFault(); private void interceptBeforeRun() { if (getClass() == taskToInterceptBeforeRun) @@ -88,7 +88,7 @@ public abstract class Task { } protected void failed() { - rollBackOnFault(); + applyStateOnFault(); taskHandler.handleErrorMessage(errorMessage); }