From 738f3f495785770c7eed3c2f9e0fbddcdb26ea7c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 26 Mar 2024 12:13:06 +0100 Subject: -minor db optimiations, logging --- packages/taler-wallet-core/src/db.ts | 6 --- packages/taler-wallet-core/src/exchanges.ts | 61 +++++++++++++------------ packages/taler-wallet-core/src/refresh.ts | 6 +-- packages/taler-wallet-core/src/wallet.ts | 12 ++--- packages/taler-wallet-core/src/withdraw.test.ts | 6 --- packages/taler-wallet-core/src/withdraw.ts | 16 ++----- 6 files changed, 46 insertions(+), 61 deletions(-) (limited to 'packages') diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts index 8b7aede57..997d9c90a 100644 --- a/packages/taler-wallet-core/src/db.ts +++ b/packages/taler-wallet-core/src/db.ts @@ -502,12 +502,6 @@ export interface DenominationRecord { * on the denomination. */ exchangeMasterPub: string; - - /** - * Latest list issue date of the "/keys" response - * that includes this denomination. - */ - listIssueDate: DbProtocolTimestamp; } export namespace DenominationRecord { diff --git a/packages/taler-wallet-core/src/exchanges.ts b/packages/taler-wallet-core/src/exchanges.ts index 43ab8ac4e..d501789a8 100644 --- a/packages/taler-wallet-core/src/exchanges.ts +++ b/packages/taler-wallet-core/src/exchanges.ts @@ -791,9 +791,6 @@ async function downloadExchangeKeysInfo( stampStart: timestampProtocolToDb(denomIn.stamp_start), verificationStatus: DenominationVerificationStatus.Unverified, masterSig: denomIn.master_sig, - listIssueDate: timestampProtocolToDb( - exchangeKeysJsonUnchecked.list_issue_date, - ), fees: { feeDeposit: Amounts.stringify(denomGroup.fee_deposit), feeRefresh: Amounts.stringify(denomGroup.fee_refresh), @@ -906,6 +903,8 @@ async function startUpdateExchangeEntry( }, ); + logger.trace("created exchange record"); + if (notification) { wex.ws.notify(notification); } @@ -1142,6 +1141,7 @@ async function waitReadyExchange( expectedMasterPub?: string; } = {}, ): Promise { + logger.trace(`waiting for exchange ${canonUrl} to become ready`); // FIXME: We should use Symbol.dispose magic here for cleanup! const exchangeNotifFlag = new AsyncFlag(); @@ -1263,6 +1263,7 @@ export async function updateExchangeFromUrlHandler( } if (!(updateNecessary || refreshCheckNecessary)) { + logger.trace("update not necessary, running again later"); return TaskRunResult.runAgainAt( AbsoluteTime.min(nextUpdateStamp, nextRefreshCheckStamp), ); @@ -1429,15 +1430,20 @@ export async function updateExchangeFromUrlHandler( }); } + // In the future: Filter out old denominations by index + const allOldDenoms = + await tx.denominations.indexes.byExchangeBaseUrl.getAll(); + const oldDenomByDph = new Map(); + for (const denom of allOldDenoms) { + oldDenomByDph.set(denom.denomPubHash, denom); + } + logger.trace("updating denominations in database"); const currentDenomSet = new Set( keysInfo.currentDenominations.map((x) => x.denomPubHash), ); for (const currentDenom of keysInfo.currentDenominations) { - const oldDenom = await tx.denominations.get([ - exchangeBaseUrl, - currentDenom.denomPubHash, - ]); + const oldDenom = oldDenomByDph.get(currentDenom.denomPubHash); if (oldDenom) { // FIXME: Do consistency check, report to auditor if necessary. // See https://bugs.taler.net/n/8594 @@ -1457,29 +1463,26 @@ export async function updateExchangeFromUrlHandler( // Update list issue date for all denominations, // and mark non-offered denominations as such. - await tx.denominations.indexes.byExchangeBaseUrl - .iter(r.baseUrl) - .forEachAsync(async (x) => { - if (!currentDenomSet.has(x.denomPubHash)) { - // FIXME: Here, an auditor report should be created, unless - // the denomination is really legally expired. - if (x.isOffered) { - x.isOffered = false; - logger.info( - `setting denomination ${x.denomPubHash} to offered=false`, - ); - } - } else { - x.listIssueDate = timestampProtocolToDb(keysInfo.listIssueDate); - if (!x.isOffered) { - x.isOffered = true; - logger.info( - `setting denomination ${x.denomPubHash} to offered=true`, - ); - } + for (const x of allOldDenoms) { + if (!currentDenomSet.has(x.denomPubHash)) { + // FIXME: Here, an auditor report should be created, unless + // the denomination is really legally expired. + if (x.isOffered) { + x.isOffered = false; + logger.info( + `setting denomination ${x.denomPubHash} to offered=false`, + ); } - await tx.denominations.put(x); - }); + } else { + if (!x.isOffered) { + x.isOffered = true; + logger.info( + `setting denomination ${x.denomPubHash} to offered=true`, + ); + } + } + await tx.denominations.put(x); + } logger.trace("done updating denominations in database"); diff --git a/packages/taler-wallet-core/src/refresh.ts b/packages/taler-wallet-core/src/refresh.ts index a92b3baf1..7c9ec84bd 100644 --- a/packages/taler-wallet-core/src/refresh.ts +++ b/packages/taler-wallet-core/src/refresh.ts @@ -400,9 +400,9 @@ async function provideRefreshSession( // FIXME: Use denom groups instead of querying all denominations! const availableDenoms: DenominationRecord[] = - await tx.denominations.indexes.byExchangeBaseUrl - .iter(exch.exchangeBaseUrl) - .toArray(); + await tx.denominations.indexes.byExchangeBaseUrl.getAll( + exch.exchangeBaseUrl, + ); const availableAmount = Amounts.sub( refreshGroup.inputPerCoin[coinIndex], diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index 1602eb158..e973f11e4 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -46,6 +46,7 @@ import { NotificationType, ObservabilityContext, ObservabilityEventType, + ObservableHttpClientLibrary, OpenedPromise, PartialWalletRunConfig, PrepareWithdrawExchangeRequest, @@ -144,7 +145,6 @@ import { parseTalerUri, sampleWalletCoreTransactions, setDangerousTimetravel, - ObservableHttpClientLibrary, validateIban, } from "@gnu-taler/taler-util"; import type { HttpRequestLibrary } from "@gnu-taler/taler-util/http"; @@ -521,9 +521,9 @@ async function dumpCoins(wex: WalletExecutionContext): Promise { ageCommitmentProof: c.ageCommitmentProof, spend_allocation: c.spendAllocation ? { - amount: c.spendAllocation.amount, - id: c.spendAllocation.id, - } + amount: c.spendAllocation.amount, + id: c.spendAllocation.id, + } : undefined, }); } @@ -691,7 +691,7 @@ async function dispatchRequestInternal( case WalletApiOperation.InitWallet: { const req = codecForInitRequest().decode(payload); - logger.info(`init request: ${req}`); + logger.info(`init request: ${j2s(req)}`); if (wex.ws.initCalled) { logger.warn( @@ -1526,7 +1526,7 @@ async function handleCoreApiRequest( wex = getObservedWalletExecutionContext(ws, CancellationToken.CONTINUE, oc); } else { oc = { - observe(evt) { }, + observe(evt) {}, }; wex = getNormalWalletExecutionContext(ws, CancellationToken.CONTINUE, oc); } diff --git a/packages/taler-wallet-core/src/withdraw.test.ts b/packages/taler-wallet-core/src/withdraw.test.ts index d8757d0cf..2a081b481 100644 --- a/packages/taler-wallet-core/src/withdraw.test.ts +++ b/packages/taler-wallet-core/src/withdraw.test.ts @@ -83,7 +83,6 @@ test("withdrawal selection bug repro", (t) => { verificationStatus: DenominationVerificationStatus.Unverified, currency: "KUDOS", value: "KUDOS:1000" as AmountString, - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, { denomPub: { @@ -138,7 +137,6 @@ test("withdrawal selection bug repro", (t) => { verificationStatus: DenominationVerificationStatus.Unverified, value: "KUDOS:10" as AmountString, currency: "KUDOS", - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, { denomPub: { @@ -192,7 +190,6 @@ test("withdrawal selection bug repro", (t) => { verificationStatus: DenominationVerificationStatus.Unverified, value: "KUDOS:5" as AmountString, currency: "KUDOS", - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, { denomPub: { @@ -247,7 +244,6 @@ test("withdrawal selection bug repro", (t) => { verificationStatus: DenominationVerificationStatus.Unverified, value: "KUDOS:1" as AmountString, currency: "KUDOS", - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, { denomPub: { @@ -305,7 +301,6 @@ test("withdrawal selection bug repro", (t) => { value: 0, }), currency: "KUDOS", - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, { denomPub: { @@ -359,7 +354,6 @@ test("withdrawal selection bug repro", (t) => { verificationStatus: DenominationVerificationStatus.Unverified, value: "KUDOS:2" as AmountString, currency: "KUDOS", - listIssueDate: timestampProtocolToDb({ t_s: 0 }), }, ]; diff --git a/packages/taler-wallet-core/src/withdraw.ts b/packages/taler-wallet-core/src/withdraw.ts index 9d9d2bea6..6a9d27fe8 100644 --- a/packages/taler-wallet-core/src/withdraw.ts +++ b/packages/taler-wallet-core/src/withdraw.ts @@ -463,36 +463,31 @@ export function computeWithdrawalTransactionStatus( major: TransactionMajorState.Suspended, minor: TransactionMinorState.BankConfirmTransfer, }; - case WithdrawalGroupStatus.SuspendedReady: { + case WithdrawalGroupStatus.SuspendedReady: return { major: TransactionMajorState.Suspended, minor: TransactionMinorState.WithdrawCoins, }; - } - case WithdrawalGroupStatus.PendingAml: { + case WithdrawalGroupStatus.PendingAml: return { major: TransactionMajorState.Pending, minor: TransactionMinorState.AmlRequired, }; - } - case WithdrawalGroupStatus.PendingKyc: { + case WithdrawalGroupStatus.PendingKyc: return { major: TransactionMajorState.Pending, minor: TransactionMinorState.KycRequired, }; - } - case WithdrawalGroupStatus.SuspendedAml: { + case WithdrawalGroupStatus.SuspendedAml: return { major: TransactionMajorState.Suspended, minor: TransactionMinorState.AmlRequired, }; - } - case WithdrawalGroupStatus.SuspendedKyc: { + case WithdrawalGroupStatus.SuspendedKyc: return { major: TransactionMajorState.Suspended, minor: TransactionMinorState.KycRequired, }; - } case WithdrawalGroupStatus.FailedAbortingBank: return { major: TransactionMajorState.Failed, @@ -503,7 +498,6 @@ export function computeWithdrawalTransactionStatus( major: TransactionMajorState.Aborted, minor: TransactionMinorState.Exchange, }; - case WithdrawalGroupStatus.AbortedBank: return { major: TransactionMajorState.Aborted, -- cgit v1.2.3