mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Add accountAgeWitnessCache
The accountAgeWitnessMap is very large (70k items) and access is a bit expensive. We usually only access less than 100 items, those who have offers online. So we use a cache for a fast lookup and only if not found there we use the accountAgeWitnessMap and put then the new item into our cache.
This commit is contained in:
parent
f61e62c7c0
commit
1314fd61a5
1 changed files with 29 additions and 7 deletions
|
@ -138,9 +138,13 @@ public class AccountAgeWitnessService {
|
|||
@Getter
|
||||
private final AccountAgeWitnessUtils accountAgeWitnessUtils;
|
||||
|
||||
@Getter
|
||||
private final Map<P2PDataStorage.ByteArray, AccountAgeWitness> accountAgeWitnessMap = new HashMap<>();
|
||||
|
||||
// The accountAgeWitnessMap is very large (70k items) and access is a bit expensive. We usually only access less
|
||||
// than 100 items, those who have offers online. So we use a cache for a fast lookup and only if
|
||||
// not found there we use the accountAgeWitnessMap and put then the new item into our cache.
|
||||
private final Map<P2PDataStorage.ByteArray, AccountAgeWitness> accountAgeWitnessCache = new HashMap<>();
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor
|
||||
|
@ -233,8 +237,17 @@ public class AccountAgeWitnessService {
|
|||
|
||||
public void publishMyAccountAgeWitness(PaymentAccountPayload paymentAccountPayload) {
|
||||
AccountAgeWitness accountAgeWitness = getMyWitness(paymentAccountPayload);
|
||||
if (!accountAgeWitnessMap.containsKey(accountAgeWitness.getHashAsByteArray()))
|
||||
P2PDataStorage.ByteArray hash = accountAgeWitness.getHashAsByteArray();
|
||||
|
||||
// We use first our fast lookup cache. If its in accountAgeWitnessCache it is also in accountAgeWitnessMap
|
||||
// and we do not publish.
|
||||
if (accountAgeWitnessCache.containsKey(hash)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!accountAgeWitnessMap.containsKey(hash)) {
|
||||
p2PService.addPersistableNetworkPayload(accountAgeWitness, false);
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] getPeerAccountAgeWitnessHash(Trade trade) {
|
||||
|
@ -284,12 +297,21 @@ public class AccountAgeWitnessService {
|
|||
private Optional<AccountAgeWitness> getWitnessByHash(byte[] hash) {
|
||||
P2PDataStorage.ByteArray hashAsByteArray = new P2PDataStorage.ByteArray(hash);
|
||||
|
||||
final boolean containsKey = accountAgeWitnessMap.containsKey(hashAsByteArray);
|
||||
if (!containsKey)
|
||||
log.debug("hash not found in accountAgeWitnessMap");
|
||||
// First we look up in our fast lookup cache
|
||||
if (accountAgeWitnessCache.containsKey(hashAsByteArray)) {
|
||||
return Optional.of(accountAgeWitnessCache.get(hashAsByteArray));
|
||||
}
|
||||
|
||||
return accountAgeWitnessMap.containsKey(hashAsByteArray) ?
|
||||
Optional.of(accountAgeWitnessMap.get(hashAsByteArray)) : Optional.empty();
|
||||
if (accountAgeWitnessMap.containsKey(hashAsByteArray)) {
|
||||
AccountAgeWitness accountAgeWitness = accountAgeWitnessMap.get(hashAsByteArray);
|
||||
|
||||
// We add it to our fast lookup cache
|
||||
accountAgeWitnessCache.put(hashAsByteArray, accountAgeWitness);
|
||||
|
||||
return Optional.of(accountAgeWitness);
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
private Optional<AccountAgeWitness> getWitnessByHashAsHex(String hashAsHex) {
|
||||
|
|
Loading…
Add table
Reference in a new issue