diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java index 5a7936e3..b904b3cd 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java @@ -146,6 +146,9 @@ public class ArbitraryDataCleanupManager extends Thread { arbitraryTransactionData.getName(), Base58.encode(signature))); ArbitraryTransactionUtils.deleteCompleteFileAndChunks(arbitraryTransactionData); + + // We should also remove peers for this transaction from the lookup table to save space + this.removePeersHostingTransactionData(repository, arbitraryTransactionData); continue; } @@ -187,6 +190,16 @@ public class ArbitraryDataCleanupManager extends Thread { } } + private void removePeersHostingTransactionData(Repository repository, ArbitraryTransactionData transactionData) { + byte[] signature = transactionData.getSignature(); + try { + repository.getArbitraryRepository().deleteArbitraryPeersWithSignature(signature); + repository.saveChanges(); + } catch (DataException e) { + LOGGER.debug("Unable to delete peers from lookup table for signature: {}", Base58.encode(signature)); + } + } + private void cleanupTempDirectory(String folder, long now, long minAge) { String baseDir = Settings.getInstance().getTempDataPath(); Path tempDir = Paths.get(baseDir, folder); diff --git a/src/main/java/org/qortal/repository/ArbitraryRepository.java b/src/main/java/org/qortal/repository/ArbitraryRepository.java index 608d475c..a013ae33 100644 --- a/src/main/java/org/qortal/repository/ArbitraryRepository.java +++ b/src/main/java/org/qortal/repository/ArbitraryRepository.java @@ -33,4 +33,6 @@ public interface ArbitraryRepository { public void delete(ArbitraryPeerData arbitraryPeerData) throws DataException; + public void deleteArbitraryPeersWithSignature(byte[] signature) throws DataException; + } diff --git a/src/main/java/org/qortal/repository/hsqldb/HSQLDBArbitraryRepository.java b/src/main/java/org/qortal/repository/hsqldb/HSQLDBArbitraryRepository.java index 2a5312c6..a07c77e0 100644 --- a/src/main/java/org/qortal/repository/hsqldb/HSQLDBArbitraryRepository.java +++ b/src/main/java/org/qortal/repository/hsqldb/HSQLDBArbitraryRepository.java @@ -444,4 +444,16 @@ public class HSQLDBArbitraryRepository implements ArbitraryRepository { throw new DataException("Unable to delete arbitrary peer data from repository", e); } } + + @Override + public void deleteArbitraryPeersWithSignature(byte[] signature) throws DataException { + byte[] hash = Crypto.digest(signature); + try { + // Remove all records of peers hosting supplied signature + this.repository.delete("ArbitraryPeers", "hash = ?", hash); + + } catch (SQLException e) { + throw new DataException("Unable to delete arbitrary peer data from repository", e); + } + } }