From 9c483435818f717220c4d2d172ba4420df05904d Mon Sep 17 00:00:00 2001 From: catbref Date: Wed, 20 May 2020 07:33:21 +0100 Subject: [PATCH] Potential fix for rare HSQLDB "serialization failure" in Transaction.importAsUnconfirmed() --- src/main/java/org/qortal/transaction/Transaction.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/qortal/transaction/Transaction.java b/src/main/java/org/qortal/transaction/Transaction.java index 761d9064..06a699aa 100644 --- a/src/main/java/org/qortal/transaction/Transaction.java +++ b/src/main/java/org/qortal/transaction/Transaction.java @@ -782,6 +782,16 @@ public abstract class Transaction { if (validationResult != ValidationResult.OK) return validationResult; + /* + * We call discardChanges() to restart repository 'transaction', discarding any + * transactional table locks, hence reducing possibility of deadlock or + * "serialization failure" with HSQLDB due to reads. + * + * We should be OK to proceed after validation check as we're protected by + * BLOCKCHAIN_LOCK so no other thread will be writing the same transaction. + */ + repository.discardChanges(); + repository.getTransactionRepository().save(transactionData); repository.getTransactionRepository().unconfirmTransaction(transactionData); repository.saveChanges();