Browse Source

Use a separate repository instance when updating caches.

arbitrary-resources-cache
CalDescent 1 year ago
parent
commit
537779b152
  1. 8
      src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java
  2. 14
      src/main/java/org/qortal/transaction/ArbitraryTransaction.java

8
src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java

@ -82,8 +82,8 @@ public class ArbitraryDataCacheManager extends Thread {
// Update arbitrary resource caches // Update arbitrary resource caches
try { try {
ArbitraryTransaction arbitraryTransaction = new ArbitraryTransaction(repository, transactionData); ArbitraryTransaction arbitraryTransaction = new ArbitraryTransaction(repository, transactionData);
arbitraryTransaction.updateArbitraryResourceCache(); arbitraryTransaction.updateArbitraryResourceCache(repository);
arbitraryTransaction.updateArbitraryMetadataCache(); arbitraryTransaction.updateArbitraryMetadataCache(repository);
repository.saveChanges(); repository.saveChanges();
LOGGER.debug(() -> String.format("Finished processing transaction %.8s in arbitrary resource queue...", Base58.encode(transactionData.getSignature()))); LOGGER.debug(() -> String.format("Finished processing transaction %.8s in arbitrary resource queue...", Base58.encode(transactionData.getSignature())));
@ -166,8 +166,8 @@ public class ArbitraryDataCacheManager extends Thread {
// Update arbitrary resource caches // Update arbitrary resource caches
ArbitraryTransaction arbitraryTransaction = new ArbitraryTransaction(repository, transactionData); ArbitraryTransaction arbitraryTransaction = new ArbitraryTransaction(repository, transactionData);
arbitraryTransaction.updateArbitraryResourceCache(); arbitraryTransaction.updateArbitraryResourceCache(repository);
arbitraryTransaction.updateArbitraryMetadataCache(); arbitraryTransaction.updateArbitraryMetadataCache(repository);
} }
offset += batchSize; offset += batchSize;
} }

14
src/main/java/org/qortal/transaction/ArbitraryTransaction.java

@ -28,6 +28,7 @@ import org.qortal.payment.Payment;
import org.qortal.repository.DataException; import org.qortal.repository.DataException;
import org.qortal.repository.Repository; import org.qortal.repository.Repository;
import org.qortal.arbitrary.ArbitraryDataFile; import org.qortal.arbitrary.ArbitraryDataFile;
import org.qortal.repository.RepositoryManager;
import org.qortal.transform.TransformationException; import org.qortal.transform.TransformationException;
import org.qortal.transform.Transformer; import org.qortal.transform.Transformer;
import org.qortal.transform.transaction.ArbitraryTransactionTransformer; import org.qortal.transform.transaction.ArbitraryTransactionTransformer;
@ -277,7 +278,8 @@ public class ArbitraryTransaction extends Transaction {
} }
private void updateCaches() { private void updateCaches() {
try { // Very important to use a separate repository instance from the one being used for validation/processing
try (final Repository repository = RepositoryManager.getRepository()) {
// If the data is local, we need to perform a few actions // If the data is local, we need to perform a few actions
if (isDataLocal()) { if (isDataLocal()) {
@ -288,8 +290,10 @@ public class ArbitraryTransaction extends Transaction {
} }
// Add/update arbitrary resource caches // Add/update arbitrary resource caches
this.updateArbitraryResourceCache(); this.updateArbitraryResourceCache(repository);
this.updateArbitraryMetadataCache(); this.updateArbitraryMetadataCache(repository);
repository.saveChanges();
} catch (Exception e) { } catch (Exception e) {
// Log and ignore all exceptions. The cache is updated from other places too, and can be rebuilt if needed. // Log and ignore all exceptions. The cache is updated from other places too, and can be rebuilt if needed.
@ -343,7 +347,7 @@ public class ArbitraryTransaction extends Transaction {
* *
* @throws DataException * @throws DataException
*/ */
public void updateArbitraryResourceCache() throws DataException { public void updateArbitraryResourceCache(Repository repository) throws DataException {
// Don't cache resources without a name (such as auto updates) // Don't cache resources without a name (such as auto updates)
if (arbitraryTransactionData.getName() == null) { if (arbitraryTransactionData.getName() == null) {
return; return;
@ -412,7 +416,7 @@ public class ArbitraryTransaction extends Transaction {
repository.getArbitraryRepository().setStatus(arbitraryResourceData, status); repository.getArbitraryRepository().setStatus(arbitraryResourceData, status);
} }
public void updateArbitraryMetadataCache() throws DataException { public void updateArbitraryMetadataCache(Repository repository) throws DataException {
// Get the latest transaction // Get the latest transaction
ArbitraryTransactionData latestTransactionData = repository.getArbitraryRepository().getLatestTransaction(arbitraryTransactionData.getName(), arbitraryTransactionData.getService(), null, arbitraryTransactionData.getIdentifier()); ArbitraryTransactionData latestTransactionData = repository.getArbitraryRepository().getLatestTransaction(arbitraryTransactionData.getName(), arbitraryTransactionData.getService(), null, arbitraryTransactionData.getIdentifier());
if (latestTransactionData == null) { if (latestTransactionData == null) {

Loading…
Cancel
Save