From 918a331609fc2bfd6dba3570d306396f20b22a4e Mon Sep 17 00:00:00 2001 From: catbref Date: Wed, 30 Dec 2020 12:43:41 +0000 Subject: [PATCH] Transaction.importAsUnconfirmed() now BLOCKS for blockchain lock, instead of non-blocking try() This is a serious change as it affects many callers. Controller.onNetworkTransactionMessager() -- should be OK to block as it's only one EPC thread TransactionsResource.processTransaction() -- should be OK to block as it's only one Jetty thread AND has its own 30s timeout wrapper anyway Implementations of AcctTradeBot.progress() e.g. BitcoinACCTv1TradeBot.progress() & LitecoinACCTv1TradeBot.progress() TradeBot.updatePresence() -- these are called via BlockMinter/Synchronizer when blockchain lock is already held, so will are unaffected AcctTradeBot.createTrade() and AcctTradeBot.startResponse() -- these are called via API and previously would only perform non-blocking blockchainLock.try() but now perform blocking blockchainLock.lock() thus preventing NO_BLOCKCHAIN_LOCK when creating/responding to trades especially after a (wasted) MESSAGE PoW compute but with potential downside that API response might be delayed e.g. by a very slow sync round Future work could look into removing the need for blockchain lock when calling Transaction.importAsUnconfirmed(). --- src/main/java/org/qortal/transaction/Transaction.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/qortal/transaction/Transaction.java b/src/main/java/org/qortal/transaction/Transaction.java index 80c064a2..2236e353 100644 --- a/src/main/java/org/qortal/transaction/Transaction.java +++ b/src/main/java/org/qortal/transaction/Transaction.java @@ -765,7 +765,7 @@ public abstract class Transaction { /** * Import into our repository as a new, unconfirmed transaction. *

- * @implSpec tries to obtain blockchain lock + * @implSpec blocks to obtain blockchain lock *

* If transaction is valid, then: *