From 1b50dd5adfaaa57ab09b46b4225b006ab4272d8b Mon Sep 17 00:00:00 2001 From: catbref Date: Tue, 1 Dec 2020 17:22:03 +0000 Subject: [PATCH] Modify API TransactionsResource to notify Controller after closing repository handle/session --- .../api/resource/TransactionsResource.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/qortal/api/resource/TransactionsResource.java b/src/main/java/org/qortal/api/resource/TransactionsResource.java index 77218a69..bdd7dbd0 100644 --- a/src/main/java/org/qortal/api/resource/TransactionsResource.java +++ b/src/main/java/org/qortal/api/resource/TransactionsResource.java @@ -510,14 +510,19 @@ public class TransactionsResource { if (!Controller.getInstance().isUpToDate()) throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.BLOCKCHAIN_NEEDS_SYNC); + byte[] rawBytes = Base58.decode(rawBytes58); + + TransactionData transactionData; + try { + transactionData = TransactionTransformer.fromBytes(rawBytes); + } catch (TransformationException e) { + throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.TRANSFORMATION_ERROR, e); + } + + if (transactionData == null) + throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_DATA); + try (final Repository repository = RepositoryManager.getRepository()) { - byte[] rawBytes = Base58.decode(rawBytes58); - - TransactionData transactionData = TransactionTransformer.fromBytes(rawBytes); - - if (transactionData == null) - throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_DATA); - Transaction transaction = Transaction.fromData(repository, transactionData); if (!transaction.isSignatureValid()) @@ -534,22 +539,18 @@ public class TransactionsResource { } finally { blockchainLock.unlock(); } - - // Notify controller of new transaction - Controller.getInstance().onNewTransaction(transactionData, null); - - return "true"; } catch (NumberFormatException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_DATA, e); - } catch (TransformationException e) { - throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.TRANSFORMATION_ERROR, e); - } catch (ApiException e) { - throw e; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); } catch (InterruptedException e) { throw createTransactionInvalidException(request, ValidationResult.NO_BLOCKCHAIN_LOCK); } + + // Notify controller of new transaction + Controller.getInstance().onNewTransaction(transactionData, null); + + return "true"; } @POST