forked from Qortal/qortal
Optimized ArbitraryDataFileRequestThread - only start a database transaction when there's something to process.
This commit is contained in:
parent
b6d633ab24
commit
a49218a840
@ -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();
|
|
||||||
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();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!shouldProcess) {
|
Map.Entry entry = (Map.Entry) iterator.next();
|
||||||
// Nothing to do
|
if (entry == null || entry.getKey() == null || entry.getValue() == null) {
|
||||||
return;
|
iterator.remove();
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch the transaction data
|
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();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shouldProcess) {
|
||||||
|
// Nothing to do
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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…
x
Reference in New Issue
Block a user