Automatically delete cached resources & metadata if there is no longer a latest transaction.

This commit is contained in:
CalDescent 2023-05-12 20:08:53 +01:00
parent b661d39844
commit 36a731255a
2 changed files with 14 additions and 36 deletions

View File

@ -546,32 +546,9 @@ public class ArbitraryDataManager extends Thread {
return;
}
Service service = arbitraryTransactionData.getService();
String name = arbitraryTransactionData.getName();
String identifier = arbitraryTransactionData.getIdentifier();
// Add to queue for update/deletion
ArbitraryDataCacheManager.getInstance().addToUpdateQueue(arbitraryTransactionData);
ArbitraryResourceData arbitraryResourceData = new ArbitraryResourceData();
arbitraryResourceData.service = service;
arbitraryResourceData.name = name;
arbitraryResourceData.identifier = identifier;
try (final Repository repository = RepositoryManager.getRepository()) {
// Find next oldest transaction (which is now the latest transaction)
ArbitraryTransactionData latestTransactionData = repository.getArbitraryRepository().getLatestTransaction(name, service, null, identifier);
if (latestTransactionData == null) {
// There are no transactions anymore, so we can delete from the cache entirely (this deletes metadata too)
repository.getArbitraryRepository().delete(arbitraryResourceData);
}
else {
// We found the next oldest transaction, so add to queue for processing
ArbitraryDataCacheManager.getInstance().addToUpdateQueue(arbitraryTransactionData);
}
;
repository.saveChanges();
} catch (DataException e) {
// Not much we can do, so ignore for now
}
}
public int getPowDifficulty() {

View File

@ -357,13 +357,6 @@ public class ArbitraryTransaction extends Transaction {
return;
}
// Get the latest transaction
ArbitraryTransactionData latestTransactionData = repository.getArbitraryRepository().getLatestTransaction(arbitraryTransactionData.getName(), arbitraryTransactionData.getService(), null, arbitraryTransactionData.getIdentifier());
if (latestTransactionData == null) {
// We don't have a latest transaction, so give up
return;
}
Service service = arbitraryTransactionData.getService();
String name = arbitraryTransactionData.getName();
String identifier = arbitraryTransactionData.getIdentifier();
@ -378,15 +371,23 @@ public class ArbitraryTransaction extends Transaction {
identifier = "default";
}
// Get existing cached entry if it exists
ArbitraryResourceData existingArbitraryResourceData = repository.getArbitraryRepository()
.getArbitraryResource(service, name, identifier);
ArbitraryResourceData arbitraryResourceData = new ArbitraryResourceData();
arbitraryResourceData.service = service;
arbitraryResourceData.name = name;
arbitraryResourceData.identifier = identifier;
// Get the latest transaction
ArbitraryTransactionData latestTransactionData = repository.getArbitraryRepository().getLatestTransaction(arbitraryTransactionData.getName(), arbitraryTransactionData.getService(), null, arbitraryTransactionData.getIdentifier());
if (latestTransactionData == null) {
// We don't have a latest transaction, so delete from cache
repository.getArbitraryRepository().delete(arbitraryResourceData);
return;
}
// Get existing cached entry if it exists
ArbitraryResourceData existingArbitraryResourceData = repository.getArbitraryRepository()
.getArbitraryResource(service, name, identifier);
// Check for existing cached data
if (existingArbitraryResourceData == null) {
// Nothing exists yet, so set everything from the newest transaction