[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: don't unnecessarily repeat re
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: don't unnecessarily repeat reserve processing after recoup |
Date: |
Thu, 03 Sep 2020 23:40:41 +0200 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository wallet-core.
The following commit(s) were added to refs/heads/master by this push:
new c7a2abed don't unnecessarily repeat reserve processing after recoup
c7a2abed is described below
commit c7a2abedbabe9142ce9a15902f90a5d1f4b36f05
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Fri Sep 4 03:10:36 2020 +0530
don't unnecessarily repeat reserve processing after recoup
---
.../taler-wallet-core/src/operations/recoup.ts | 33 +++++++++++++++++-----
.../taler-wallet-core/src/operations/reserves.ts | 12 ++++++--
2 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts
b/packages/taler-wallet-core/src/operations/recoup.ts
index 91579f60..eb268f18 100644
--- a/packages/taler-wallet-core/src/operations/recoup.ts
+++ b/packages/taler-wallet-core/src/operations/recoup.ts
@@ -40,7 +40,7 @@ import {
import { codecForRecoupConfirmation } from "../types/talerTypes";
import { NotificationType } from "../types/notifications";
-import { forceQueryReserve, getReserveRequestTimeout } from "./reserves";
+import { forceQueryReserve, getReserveRequestTimeout, processReserve } from
"./reserves";
import { Amounts } from "../util/amounts";
import { createRefreshGroup, processRefreshGroup } from "./refresh";
@@ -200,8 +200,13 @@ async function recoupWithdrawCoin(
updatedCoin.status = CoinStatus.Dormant;
const currency = updatedCoin.currentAmount.currency;
updatedCoin.currentAmount = Amounts.getZero(currency);
- updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
- updatedReserve.retryInfo = initRetryInfo();
+ if (updatedReserve.reserveStatus === ReserveRecordStatus.DORMANT) {
+ updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
+ updatedReserve.retryInfo = initRetryInfo();
+ } else {
+ updatedReserve.requestedQuery = true;
+ updatedReserve.retryInfo = initRetryInfo();
+ }
await tx.put(Stores.coins, updatedCoin);
await tx.put(Stores.reserves, updatedReserve);
await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
@@ -211,10 +216,6 @@ async function recoupWithdrawCoin(
ws.notify({
type: NotificationType.RecoupFinished,
});
-
- forceQueryReserve(ws, reserve.reservePub).catch((e) => {
- logger.error("re-querying reserve after recoup failed:", e);
- });
}
async function recoupRefreshCoin(
@@ -341,6 +342,24 @@ async function processRecoupGroupImpl(
processRecoup(ws, recoupGroupId, i),
);
await Promise.all(ps);
+
+ const reserveSet = new Set<string>();
+ for (let i = 0; i < recoupGroup.coinPubs.length; i++) {
+ const coinPub = recoupGroup.coinPubs[i];
+ const coin = await ws.db.get(Stores.coins, coinPub);
+ if (!coin) {
+ throw Error(`Coin ${coinPub} not found, can't request payback`);
+ }
+ if (coin.coinSource.type === CoinSourceType.Withdraw) {
+ reserveSet.add(coin.coinSource.reservePub);
+ }
+ }
+
+ for (const r of reserveSet.values()) {
+ processReserve(ws, r).catch((e) => {
+ logger.error(`processing reserve ${r} after recoup failed`);
+ });
+ }
}
export async function createRecoupGroup(
diff --git a/packages/taler-wallet-core/src/operations/reserves.ts
b/packages/taler-wallet-core/src/operations/reserves.ts
index a28c2e0c..69942fe9 100644
--- a/packages/taler-wallet-core/src/operations/reserves.ts
+++ b/packages/taler-wallet-core/src/operations/reserves.ts
@@ -291,7 +291,7 @@ export async function forceQueryReserve(
break;
default:
reserve.requestedQuery = true;
- return;
+ break;
}
reserve.retryInfo = initRetryInfo();
await tx.put(Stores.reserves, reserve);
@@ -601,13 +601,17 @@ async function updateReserve(
logger.trace("setting reserve status to 'withdrawing' after query");
r.reserveStatus = ReserveRecordStatus.WITHDRAWING;
r.retryInfo = initRetryInfo();
+ r.requestedQuery = false;
} else {
- logger.trace("setting reserve status to 'dormant' after query");
if (r.requestedQuery) {
+ logger.trace(
+ "setting reserve status to 'querying-status' (requested query)
after query",
+ );
r.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
r.requestedQuery = false;
r.retryInfo = initRetryInfo();
} else {
+ logger.trace("setting reserve status to 'dormant' after query");
r.reserveStatus = ReserveRecordStatus.DORMANT;
r.retryInfo = initRetryInfo(false);
}
@@ -622,7 +626,9 @@ async function updateReserve(
ws.notify({ type: NotificationType.ReserveUpdated, updateSummary });
const reserve2 = await ws.db.get(Stores.reserves, reservePub);
if (reserve2) {
- logger.trace(`after db transaction, reserve status is
${reserve2.reserveStatus}`);
+ logger.trace(
+ `after db transaction, reserve status is ${reserve2.reserveStatus}`,
+ );
}
return { ready: true };
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: don't unnecessarily repeat reserve processing after recoup,
gnunet <=