From 19e28d817be8a26500f89979bbc21041f6446654 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Thu, 22 Jul 2021 17:45:59 +0100 Subject: [PATCH] Fix retry Adding multiple contracts had broken the retry loop Signed-off-by: James Taylor --- asset-transfer-basic/rest-api-typescript/src/fabric.ts | 6 +++++- asset-transfer-basic/rest-api-typescript/src/index.ts | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/asset-transfer-basic/rest-api-typescript/src/fabric.ts b/asset-transfer-basic/rest-api-typescript/src/fabric.ts index 2419d0e1..44066d65 100644 --- a/asset-transfer-basic/rest-api-typescript/src/fabric.ts +++ b/asset-transfer-basic/rest-api-typescript/src/fabric.ts @@ -160,6 +160,10 @@ export const startRetryLoop = (contract: Contract, redis: Redis): void => { pendingTransactionCount ); + // TODO pick a random transaction instead to reduce chances of + // clashing with other instances? Currently no zrandmember + // command though... + // https://github.com/luin/ioredis/issues/1374 const transactionIds = await (redis as Redis).zrange( 'index:txn:timestamp', -1, @@ -309,7 +313,7 @@ const retryTransaction = async ( await clearTransactionDetails(redis, transactionId); } catch (err) { if (isDuplicateTransaction(err)) { - logger.debug('Transaction %s has already been committed', transactionId); + logger.warn('Transaction %s has already been committed', transactionId); await clearTransactionDetails(redis, transactionId); } else { // TODO check for retry limit and update timestamp diff --git a/asset-transfer-basic/rest-api-typescript/src/index.ts b/asset-transfer-basic/rest-api-typescript/src/index.ts index b91a6c3f..12e167c0 100644 --- a/asset-transfer-basic/rest-api-typescript/src/index.ts +++ b/asset-transfer-basic/rest-api-typescript/src/index.ts @@ -12,7 +12,7 @@ import { createServer } from './server'; async function main() { const app = await createServer(); - const contract: Contract = app.get('contract'); + const contract: Contract = app.get('contracts').contract; const redis: Redis = app.get('redis'); startRetryLoop(contract, redis);