mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 23:18:17 +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
|
@Getter
|
||||||
private final AccountAgeWitnessUtils accountAgeWitnessUtils;
|
private final AccountAgeWitnessUtils accountAgeWitnessUtils;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final Map<P2PDataStorage.ByteArray, AccountAgeWitness> accountAgeWitnessMap = new HashMap<>();
|
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
|
// Constructor
|
||||||
|
@ -233,8 +237,17 @@ public class AccountAgeWitnessService {
|
||||||
|
|
||||||
public void publishMyAccountAgeWitness(PaymentAccountPayload paymentAccountPayload) {
|
public void publishMyAccountAgeWitness(PaymentAccountPayload paymentAccountPayload) {
|
||||||
AccountAgeWitness accountAgeWitness = getMyWitness(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);
|
p2PService.addPersistableNetworkPayload(accountAgeWitness, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getPeerAccountAgeWitnessHash(Trade trade) {
|
public byte[] getPeerAccountAgeWitnessHash(Trade trade) {
|
||||||
|
@ -284,12 +297,21 @@ public class AccountAgeWitnessService {
|
||||||
private Optional<AccountAgeWitness> getWitnessByHash(byte[] hash) {
|
private Optional<AccountAgeWitness> getWitnessByHash(byte[] hash) {
|
||||||
P2PDataStorage.ByteArray hashAsByteArray = new P2PDataStorage.ByteArray(hash);
|
P2PDataStorage.ByteArray hashAsByteArray = new P2PDataStorage.ByteArray(hash);
|
||||||
|
|
||||||
final boolean containsKey = accountAgeWitnessMap.containsKey(hashAsByteArray);
|
// First we look up in our fast lookup cache
|
||||||
if (!containsKey)
|
if (accountAgeWitnessCache.containsKey(hashAsByteArray)) {
|
||||||
log.debug("hash not found in accountAgeWitnessMap");
|
return Optional.of(accountAgeWitnessCache.get(hashAsByteArray));
|
||||||
|
}
|
||||||
|
|
||||||
return accountAgeWitnessMap.containsKey(hashAsByteArray) ?
|
if (accountAgeWitnessMap.containsKey(hashAsByteArray)) {
|
||||||
Optional.of(accountAgeWitnessMap.get(hashAsByteArray)) : Optional.empty();
|
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) {
|
private Optional<AccountAgeWitness> getWitnessByHashAsHex(String hashAsHex) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue