From 46c64ae386757c650881f9132940cd63d604339d Mon Sep 17 00:00:00 2001 From: Marcin Gordel Date: Mon, 10 Jun 2024 17:45:44 +0200 Subject: [PATCH] fix(lease-process): fixed finalizing already terminated agreements --- src/lease-process/lease-process.ts | 4 ++- src/market/agreement/agreement.ts | 7 ++++- src/payment/agreement_payment_process.ts | 38 ++++++++++++++---------- src/payment/payment.module.ts | 2 +- 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/lease-process/lease-process.ts b/src/lease-process/lease-process.ts index 29da1fb3d..489862c04 100644 --- a/src/lease-process/lease-process.ts +++ b/src/lease-process/lease-process.ts @@ -59,7 +59,9 @@ export class LeaseProcess { this.logger.debug("Waiting for payment process of agreement to finish", { agreementId: this.agreement.id }); if (this.currentWorkContext) { await this.activityModule.destroyActivity(this.currentWorkContext.activity); - await this.marketModule.terminateAgreement(this.agreement); + if ((await this.fetchAgreementState()) !== "Terminated") { + await this.marketModule.terminateAgreement(this.agreement); + } } await waitForCondition(() => this.paymentProcess.isFinished()); this.logger.debug("Payment process for agreement finalized", { agreementId: this.agreement.id }); diff --git a/src/market/agreement/agreement.ts b/src/market/agreement/agreement.ts index 756dc8f00..3ea992aa5 100644 --- a/src/market/agreement/agreement.ts +++ b/src/market/agreement/agreement.ts @@ -64,8 +64,13 @@ export class Agreement { * @description if the final state is true, agreement will not change state further anymore * @return boolean */ - async isFinalState(): Promise { + isFinalState(): boolean { const state = this.getState(); return state !== "Pending" && state !== "Proposal"; } + + canBeTerminated(): boolean { + const state = this.getState(); + return state !== "Rejected" && state !== "Cancelled" && state !== "Terminated"; + } } diff --git a/src/payment/agreement_payment_process.ts b/src/payment/agreement_payment_process.ts index 7c5e3eb5c..c57e1078d 100644 --- a/src/payment/agreement_payment_process.ts +++ b/src/payment/agreement_payment_process.ts @@ -187,14 +187,17 @@ export class AgreementPaymentProcess { await this.paymentModule.rejectDebitNote(debitNote, rejectMessage); this.logger.warn(`DebitNote rejected`, { reason: rejectMessage }); } catch (error) { - const message = getMessageFromApiError(error); - throw new GolemPaymentError( - `Unable to reject debit note ${debitNote.id}. ${message}`, - PaymentErrorCode.DebitNoteRejectionFailed, - undefined, - debitNote.provider, - error, - ); + this.logger.warn(`DebitNote rejected`, { reason: rejectMessage }); + // TODO: this endpoint is not implemented in Yagna, it always responds 501:NotImplemented. + // Until it is implemented ny Yagna, it only logs as a warning + // const message = getMessageFromApiError(error); + // throw new GolemPaymentError( + // `Unable to reject debit note ${debitNote.id}. ${message}`, + // PaymentErrorCode.DebitNoteRejectionFailed, + // undefined, + // debitNote.provider, + // error, + // ); } } @@ -282,14 +285,17 @@ export class AgreementPaymentProcess { await this.paymentModule.rejectInvoice(invoice, message); this.logger.warn(`Invoice rejected`, { reason: message }); } catch (error) { - const message = getMessageFromApiError(error); - throw new GolemPaymentError( - `Unable to reject invoice ${invoice.id} ${message}`, - PaymentErrorCode.InvoiceRejectionFailed, - undefined, - invoice.provider, - error, - ); + this.logger.warn(`Invoice rejected`, { reason: message }); + // TODO: this endpoint is not implemented in Yagna, it always responds 501:NotImplemented. + // Until it is implemented ny Yagna, it only logs as a warning + // const message = getMessageFromApiError(error); + // throw new GolemPaymentError( + // `Unable to reject invoice ${invoice.id} ${message}`, + // PaymentErrorCode.InvoiceRejectionFailed, + // undefined, + // invoice.provider, + // error, + // ); } } diff --git a/src/payment/payment.module.ts b/src/payment/payment.module.ts index 54d9c0448..0af322ae3 100644 --- a/src/payment/payment.module.ts +++ b/src/payment/payment.module.ts @@ -210,7 +210,7 @@ export class PaymentModuleImpl implements PaymentModule { this.events.emit("debitNoteRejected", rejectedDebitNote); return rejectedDebitNote; } catch (error) { - this.events.emit("errorAcceptingDebitNote", debitNote, error); + this.events.emit("errorRejectingDebitNote", debitNote, error); throw error; } }