diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-09-04 02:20:20 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-09-04 02:20:20 +0530 |
commit | 9ec6018efef9b45ee42ccda33ed7093881534141 (patch) | |
tree | 3b7b0a8bb78cb959531f965152c8307607a05d92 /packages/taler-wallet-core/src/operations | |
parent | 54c0d1c2589951be26a83575b77dbb80f3a08b79 (diff) | |
download | wallet-core-9ec6018efef9b45ee42ccda33ed7093881534141.tar.xz |
test recoup, fix bug in reserve state machine, fix bug in recoup-refresh
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r-- | packages/taler-wallet-core/src/operations/recoup.ts | 9 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/operations/reserves.ts | 31 |
2 files changed, 31 insertions, 9 deletions
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts index 0e4ce18d3..91579f602 100644 --- a/packages/taler-wallet-core/src/operations/recoup.ts +++ b/packages/taler-wallet-core/src/operations/recoup.ts @@ -201,6 +201,7 @@ async function recoupWithdrawCoin( const currency = updatedCoin.currentAmount.currency; updatedCoin.currentAmount = Amounts.getZero(currency); updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS; + updatedReserve.retryInfo = initRetryInfo(); await tx.put(Stores.coins, updatedCoin); await tx.put(Stores.reserves, updatedReserve); await putGroupAsFinished(ws, tx, recoupGroup, coinIdx); @@ -253,7 +254,13 @@ async function recoupRefreshCoin( } await ws.db.runWithWriteTransaction( - [Stores.coins, Stores.reserves, Stores.recoupGroups, Stores.refreshGroups], + [ + Stores.coins, + Stores.denominations, + Stores.reserves, + Stores.recoupGroups, + Stores.refreshGroups, + ], async (tx) => { const recoupGroup = await tx.get(Stores.recoupGroups, recoupGroupId); if (!recoupGroup) { diff --git a/packages/taler-wallet-core/src/operations/reserves.ts b/packages/taler-wallet-core/src/operations/reserves.ts index 439eb34a6..a28c2e0cf 100644 --- a/packages/taler-wallet-core/src/operations/reserves.ts +++ b/packages/taler-wallet-core/src/operations/reserves.ts @@ -74,6 +74,7 @@ import { import { reconcileReserveHistory, summarizeReserveHistory, + ReserveHistorySummary, } from "../util/reserveHistoryUtil"; import { TransactionHandle } from "../util/query"; import { addPaytoQueryParams } from "../util/payto"; @@ -162,6 +163,7 @@ export async function createReserve( retryInfo: initRetryInfo(), lastError: undefined, currency: req.amount.currency, + requestedQuery: false, }; const reserveHistoryRecord: ReserveHistoryRecord = { @@ -285,13 +287,12 @@ export async function forceQueryReserve( // Only force status query where it makes sense switch (reserve.reserveStatus) { case ReserveRecordStatus.DORMANT: - case ReserveRecordStatus.WITHDRAWING: - case ReserveRecordStatus.QUERYING_STATUS: + reserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS; break; default: + reserve.requestedQuery = true; return; } - reserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS; reserve.retryInfo = initRetryInfo(); await tx.put(Stores.reserves, reserve); }); @@ -551,6 +552,7 @@ async function updateReserve( const balance = Amounts.parseOrThrow(reserveInfo.balance); const currency = balance.currency; + let updateSummary: ReserveHistorySummary | undefined; await ws.db.runWithWriteTransaction( [Stores.reserves, Stores.reserveUpdatedEvents, Stores.reserveHistory], async (tx) => { @@ -578,7 +580,7 @@ async function updateReserve( reserveInfo.history, ); - const summary = summarizeReserveHistory( + updateSummary = summarizeReserveHistory( reconciled.updatedLocalHistory, currency, ); @@ -591,16 +593,24 @@ async function updateReserve( reservePub: r.reservePub, timestamp: getTimestampNow(), amountReserveBalance: Amounts.stringify(balance), - amountExpected: Amounts.stringify(summary.awaitedReserveAmount), + amountExpected: Amounts.stringify(updateSummary.awaitedReserveAmount), newHistoryTransactions, reserveUpdateId, }; await tx.put(Stores.reserveUpdatedEvents, reserveUpdate); + logger.trace("setting reserve status to 'withdrawing' after query"); r.reserveStatus = ReserveRecordStatus.WITHDRAWING; r.retryInfo = initRetryInfo(); } else { - r.reserveStatus = ReserveRecordStatus.DORMANT; - r.retryInfo = initRetryInfo(false); + logger.trace("setting reserve status to 'dormant' after query"); + if (r.requestedQuery) { + r.reserveStatus = ReserveRecordStatus.QUERYING_STATUS; + r.requestedQuery = false; + r.retryInfo = initRetryInfo(); + } else { + r.reserveStatus = ReserveRecordStatus.DORMANT; + r.retryInfo = initRetryInfo(false); + } } r.lastSuccessfulStatusQuery = getTimestampNow(); hist.reserveTransactions = reconciled.updatedLocalHistory; @@ -609,7 +619,11 @@ async function updateReserve( await tx.put(Stores.reserveHistory, hist); }, ); - ws.notify({ type: NotificationType.ReserveUpdated }); + 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}`); + } return { ready: true }; } @@ -782,6 +796,7 @@ async function depleteReserve( }); } } + logger.trace("setting reserve status to dormant after depletion"); newReserve.reserveStatus = ReserveRecordStatus.DORMANT; newReserve.retryInfo = initRetryInfo(false); |