Browse Source

Fixed bug causing cache invalidation to be skipped, due to incorrect message reuse.

The "Data Management" screen should now update correctly without a core restart.
qdn-on-chain-data
CalDescent 2 years ago
parent
commit
b5cb5f1da3
  1. 21
      src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java
  2. 2
      src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java

21
src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java

@ -148,10 +148,10 @@ public class ArbitraryDataFileManager extends Thread {
if (!arbitraryDataFileRequests.containsKey(Base58.encode(hash))) { if (!arbitraryDataFileRequests.containsKey(Base58.encode(hash))) {
LOGGER.debug("Requesting data file {} from peer {}", hash58, peer); LOGGER.debug("Requesting data file {} from peer {}", hash58, peer);
Long startTime = NTP.getTime(); Long startTime = NTP.getTime();
ArbitraryDataFileMessage receivedArbitraryDataFileMessage = fetchArbitraryDataFile(peer, null, signature, hash, null); ArbitraryDataFile receivedArbitraryDataFile = fetchArbitraryDataFile(peer, null, signature, hash, null);
Long endTime = NTP.getTime(); Long endTime = NTP.getTime();
if (receivedArbitraryDataFileMessage != null && receivedArbitraryDataFileMessage.getArbitraryDataFile() != null) { if (receivedArbitraryDataFile != null) {
LOGGER.debug("Received data file {} from peer {}. Time taken: {} ms", receivedArbitraryDataFileMessage.getArbitraryDataFile().getHash58(), peer, (endTime-startTime)); LOGGER.debug("Received data file {} from peer {}. Time taken: {} ms", receivedArbitraryDataFile.getHash58(), peer, (endTime-startTime));
receivedAtLeastOneFile = true; receivedAtLeastOneFile = true;
// Remove this hash from arbitraryDataFileHashResponses now that we have received it // Remove this hash from arbitraryDataFileHashResponses now that we have received it
@ -193,11 +193,11 @@ public class ArbitraryDataFileManager extends Thread {
return receivedAtLeastOneFile; return receivedAtLeastOneFile;
} }
private ArbitraryDataFileMessage fetchArbitraryDataFile(Peer peer, Peer requestingPeer, byte[] signature, byte[] hash, Message originalMessage) throws DataException { private ArbitraryDataFile fetchArbitraryDataFile(Peer peer, Peer requestingPeer, byte[] signature, byte[] hash, Message originalMessage) throws DataException {
ArbitraryDataFile existingFile = ArbitraryDataFile.fromHash(hash, signature); ArbitraryDataFile existingFile = ArbitraryDataFile.fromHash(hash, signature);
boolean fileAlreadyExists = existingFile.exists(); boolean fileAlreadyExists = existingFile.exists();
String hash58 = Base58.encode(hash); String hash58 = Base58.encode(hash);
ArbitraryDataFileMessage arbitraryDataFileMessage; ArbitraryDataFile arbitraryDataFile;
// Fetch the file if it doesn't exist locally // Fetch the file if it doesn't exist locally
if (!fileAlreadyExists) { if (!fileAlreadyExists) {
@ -227,28 +227,27 @@ public class ArbitraryDataFileManager extends Thread {
} }
ArbitraryDataFileMessage peersArbitraryDataFileMessage = (ArbitraryDataFileMessage) response; ArbitraryDataFileMessage peersArbitraryDataFileMessage = (ArbitraryDataFileMessage) response;
arbitraryDataFileMessage = new ArbitraryDataFileMessage(signature, peersArbitraryDataFileMessage.getArbitraryDataFile()); arbitraryDataFile = peersArbitraryDataFileMessage.getArbitraryDataFile();
} else { } else {
LOGGER.debug(String.format("File hash %s already exists, so skipping the request", hash58)); LOGGER.debug(String.format("File hash %s already exists, so skipping the request", hash58));
arbitraryDataFileMessage = new ArbitraryDataFileMessage(signature, existingFile); arbitraryDataFile = existingFile;
} }
// We might want to forward the request to the peer that originally requested it // We might want to forward the request to the peer that originally requested it
this.handleArbitraryDataFileForwarding(requestingPeer, arbitraryDataFileMessage, originalMessage); this.handleArbitraryDataFileForwarding(requestingPeer, new ArbitraryDataFileMessage(signature, arbitraryDataFile), originalMessage);
boolean isRelayRequest = (requestingPeer != null); boolean isRelayRequest = (requestingPeer != null);
if (isRelayRequest) { if (isRelayRequest) {
if (!fileAlreadyExists) { if (!fileAlreadyExists) {
// File didn't exist locally before the request, and it's a forwarding request, so delete it // File didn't exist locally before the request, and it's a forwarding request, so delete it
LOGGER.debug("Deleting file {} because it was needed for forwarding only", Base58.encode(hash)); LOGGER.debug("Deleting file {} because it was needed for forwarding only", Base58.encode(hash));
ArbitraryDataFile dataFile = arbitraryDataFileMessage.getArbitraryDataFile();
// Keep trying to delete the data until it is deleted, or we reach 10 attempts // Keep trying to delete the data until it is deleted, or we reach 10 attempts
dataFile.delete(10); arbitraryDataFile.delete(10);
} }
} }
return arbitraryDataFileMessage; return arbitraryDataFile;
} }
private void handleFileListRequests(byte[] signature) { private void handleFileListRequests(byte[] signature) {

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

@ -114,7 +114,7 @@ public class ArbitraryDataFileRequestThread implements Runnable {
return; return;
} }
LOGGER.debug("Fetching file {} from peer {} via request thread...", hash58, peer); LOGGER.trace("Fetching file {} from peer {} via request thread...", hash58, peer);
arbitraryDataFileManager.fetchArbitraryDataFiles(repository, peer, signature, arbitraryTransactionData, Arrays.asList(hash)); arbitraryDataFileManager.fetchArbitraryDataFiles(repository, peer, signature, arbitraryTransactionData, Arrays.asList(hash));
} catch (DataException e) { } catch (DataException e) {

Loading…
Cancel
Save