Browse Source

Optimized ArbitraryDataFileRequestThread - only start a database transaction when there's something to process.

online-level-zero-accounts-api-call
CalDescent 3 years ago
parent
commit
a49218a840
  1. 100
      src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java

100
src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java

@ -42,61 +42,61 @@ public class ArbitraryDataFileRequestThread implements Runnable {
} }
private void processFileHashes(Long now) { private void processFileHashes(Long now) {
try (final Repository repository = RepositoryManager.getRepository()) { ArbitraryDataFileManager arbitraryDataFileManager = ArbitraryDataFileManager.getInstance();
ArbitraryDataFileManager arbitraryDataFileManager = ArbitraryDataFileManager.getInstance();
ArbitraryTransactionData arbitraryTransactionData = null;
ArbitraryTransactionData arbitraryTransactionData = null; byte[] signature = null;
byte[] signature = null; byte[] hash = null;
byte[] hash = null; Peer peer = null;
Peer peer = null; boolean shouldProcess = false;
boolean shouldProcess = false;
synchronized (arbitraryDataFileManager.arbitraryDataFileHashResponses) {
synchronized (arbitraryDataFileManager.arbitraryDataFileHashResponses) { Iterator iterator = arbitraryDataFileManager.arbitraryDataFileHashResponses.entrySet().iterator();
Iterator iterator = arbitraryDataFileManager.arbitraryDataFileHashResponses.entrySet().iterator(); while (iterator.hasNext()) {
while (iterator.hasNext()) { if (Controller.isStopping()) {
if (Controller.isStopping()) { return;
return; }
}
Map.Entry entry = (Map.Entry) iterator.next();
Map.Entry entry = (Map.Entry) iterator.next(); if (entry == null || entry.getKey() == null || entry.getValue() == null) {
if (entry == null || entry.getKey() == null || entry.getValue() == null) {
iterator.remove();
continue;
}
String hash58 = (String) entry.getKey();
Triple<Peer, String, Long> value = (Triple<Peer, String, Long>) entry.getValue();
if (value == null) {
iterator.remove();
continue;
}
peer = value.getA();
String signature58 = value.getB();
Long timestamp = value.getC();
if (now - timestamp >= ArbitraryDataManager.ARBITRARY_RELAY_TIMEOUT || signature58 == null || peer == null) {
// Ignore - to be deleted
iterator.remove();
continue;
}
hash = Base58.decode(hash58);
signature = Base58.decode(signature58);
// We want to process this file
shouldProcess = true;
iterator.remove(); iterator.remove();
break; continue;
} }
}
if (!shouldProcess) { String hash58 = (String) entry.getKey();
// Nothing to do Triple<Peer, String, Long> value = (Triple<Peer, String, Long>) entry.getValue();
return; if (value == null) {
iterator.remove();
continue;
}
peer = value.getA();
String signature58 = value.getB();
Long timestamp = value.getC();
if (now - timestamp >= ArbitraryDataManager.ARBITRARY_RELAY_TIMEOUT || signature58 == null || peer == null) {
// Ignore - to be deleted
iterator.remove();
continue;
}
hash = Base58.decode(hash58);
signature = Base58.decode(signature58);
// We want to process this file
shouldProcess = true;
iterator.remove();
break;
} }
}
if (!shouldProcess) {
// Nothing to do
return;
}
// Fetch the transaction data // Fetch the transaction data
try (final Repository repository = RepositoryManager.getRepository()) {
arbitraryTransactionData = ArbitraryTransactionUtils.fetchTransactionData(repository, signature); arbitraryTransactionData = ArbitraryTransactionUtils.fetchTransactionData(repository, signature);
if (arbitraryTransactionData == null) { if (arbitraryTransactionData == null) {
return; return;

Loading…
Cancel
Save