aboutsummaryrefslogtreecommitdiff
path: root/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-03-27 23:37:02 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-03-27 23:37:02 +0530
commit131d2b34d9d1f84782d749c9943a7da5ab9dab8a (patch)
tree7fd4a00cddd65c917623baa9a1362413b18f202c /src/operations
parent1c747ae004fcaa947a62cd23b77857161f7ff03e (diff)
generate cleaner history for recoup
Diffstat (limited to 'src/operations')
-rw-r--r--src/operations/history.ts1
-rw-r--r--src/operations/recoup.ts39
2 files changed, 23 insertions, 17 deletions
diff --git a/src/operations/history.ts b/src/operations/history.ts
index c09aa8d30..b19b9f195 100644
--- a/src/operations/history.ts
+++ b/src/operations/history.ts
@@ -492,6 +492,7 @@ export async function getHistory(
type: HistoryEventType.FundsRecouped,
timestamp: rg.timestampFinished,
eventId: makeEventId(HistoryEventType.FundsRecouped, rg.recoupGroupId),
+ numCoinsRecouped: rg.coinPubs.length,
});
}
});
diff --git a/src/operations/recoup.ts b/src/operations/recoup.ts
index de2e6c9a8..4c6eaf3b6 100644
--- a/src/operations/recoup.ts
+++ b/src/operations/recoup.ts
@@ -72,10 +72,14 @@ async function incrementRecoupRetry(
}
async function putGroupAsFinished(
+ ws: InternalWalletState,
tx: TransactionHandle,
recoupGroup: RecoupGroupRecord,
coinIdx: number,
): Promise<void> {
+ if (recoupGroup.timestampFinished) {
+ return;
+ }
recoupGroup.recoupFinishedPerCoin[coinIdx] = true;
let allFinished = true;
for (const b of recoupGroup.recoupFinishedPerCoin) {
@@ -87,6 +91,16 @@ async function putGroupAsFinished(
recoupGroup.timestampFinished = getTimestampNow();
recoupGroup.retryInfo = initRetryInfo(false);
recoupGroup.lastError = undefined;
+ if (recoupGroup.scheduleRefreshCoins.length > 0) {
+ const refreshGroupId = await createRefreshGroup(
+ tx,
+ recoupGroup.scheduleRefreshCoins.map((x) => ({ coinPub: x })),
+ RefreshReason.Recoup,
+ );
+ processRefreshGroup(ws, refreshGroupId.refreshGroupId).then((e) => {
+ console.error("error while refreshing after recoup", e);
+ });
+ }
}
await tx.put(Stores.recoupGroups, recoupGroup);
}
@@ -108,7 +122,7 @@ async function recoupTipCoin(
if (recoupGroup.recoupFinishedPerCoin[coinIdx]) {
return;
}
- await putGroupAsFinished(tx, recoupGroup, coinIdx);
+ await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
});
}
@@ -179,7 +193,7 @@ async function recoupWithdrawCoin(
updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
await tx.put(Stores.coins, updatedCoin);
await tx.put(Stores.reserves, updatedReserve);
- await putGroupAsFinished(tx, recoupGroup, coinIdx);
+ await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
},
);
@@ -227,7 +241,7 @@ async function recoupRefreshCoin(
return;
}
- const refreshGroupId = await ws.db.runWithWriteTransaction(
+ await ws.db.runWithWriteTransaction(
[Stores.coins, Stores.reserves, Stores.recoupGroups, Stores.refreshGroups],
async (tx) => {
const recoupGroup = await tx.get(Stores.recoupGroups, recoupGroupId);
@@ -254,22 +268,12 @@ async function recoupRefreshCoin(
"recoup: setting old coin amount to",
Amounts.toString(oldCoin.currentAmount),
);
+ recoupGroup.scheduleRefreshCoins.push(oldCoin.coinPub);
await tx.put(Stores.coins, revokedCoin);
await tx.put(Stores.coins, oldCoin);
- await putGroupAsFinished(tx, recoupGroup, coinIdx);
- return await createRefreshGroup(
- tx,
- [{ coinPub: oldCoin.coinPub }],
- RefreshReason.Recoup,
- );
+ await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
},
);
-
- if (refreshGroupId) {
- processRefreshGroup(ws, refreshGroupId.refreshGroupId).then((e) => {
- console.error("error while refreshing after recoup", e);
- });
- }
}
async function resetRecoupGroupRetry(
@@ -340,17 +344,18 @@ export async function createRecoupGroup(
recoupFinishedPerCoin: coinPubs.map(() => false),
// Will be populated later
oldAmountPerCoin: [],
+ scheduleRefreshCoins: [],
};
for (let coinIdx = 0; coinIdx < coinPubs.length; coinIdx++) {
const coinPub = coinPubs[coinIdx];
const coin = await tx.get(Stores.coins, coinPub);
if (!coin) {
- await putGroupAsFinished(tx, recoupGroup, coinIdx);
+ await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
continue;
}
if (Amounts.isZero(coin.currentAmount)) {
- await putGroupAsFinished(tx, recoupGroup, coinIdx);
+ await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
continue;
}
recoupGroup.oldAmountPerCoin[coinIdx] = coin.currentAmount;