forked from Qortal/qortal
Use a separate repository instance when updating caches.
This commit is contained in:
parent
c0eeef546a
commit
537779b152
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user