void commitAddressStatus(AddressStatus newStatus) { lock.lock(); try { /*AddressStatus updatingStatus = statusPendingUpdates.get(newStatus.getAddress()); if (updatingStatus != null && updatingStatus.equals(newStatus)) { statusPendingUpdates.remove(newStatus.getAddress()); }*/ addressesStatus.put(newStatus.getAddress(), newStatus.getStatus()); } finally { lock.unlock(); } // Skip saving null statuses if (newStatus.getStatus() != null) { walletSaveLater(); } }
private boolean isAddressStatusChanged(AddressStatus addressStatus) { lock.lock(); try { AbstractAddress address = addressStatus.getAddress(); String newStatus = addressStatus.getStatus(); if (addressesStatus.containsKey(address)) { String previousStatus = addressesStatus.get(address); if (previousStatus == null) { return newStatus != null; // Status changed if newStatus is not null } else { return !previousStatus.equals(newStatus); } } else { // Unused address, just mark it that we watch it if (newStatus == null) { commitAddressStatus(addressStatus); return false; } else { return true; } } } finally { lock.unlock(); } }
private boolean isAddressStatusChanged(AddressStatus addressStatus) { lock.lock(); try { AbstractAddress address = addressStatus.getAddress(); String newStatus = addressStatus.getStatus(); if (addressesStatus.containsKey(address)) { String previousStatus = addressesStatus.get(address); if (previousStatus == null) { return newStatus != null; // Status changed if newStatus is not null } else { return !previousStatus.equals(newStatus); } } else { // Unused address, just mark it that we watch it if (newStatus == null) { commitAddressStatus(addressStatus); return false; } else { return true; } } } finally { lock.unlock(); } }
@Override public void onAddressStatusUpdate(AddressStatus status) { log.debug("Got a status {}", status); lock.lock(); try { if (status.getStatus() != null) { if (isAddressStatusChanged(status)) { this.balance = Value.valueOf(this.type, Long.valueOf(status.getStatus())); //if (registerStatusForUpdate(status)) { log.info("Must get transactions for address {}, status {}", status.getAddress(), status.getStatus()); if (blockchainConnection != null) { blockchainConnection.getHistoryTx(status, this); } } //} else { // log.info("Status {} already updating", status.getStatus()); //} } else { commitAddressStatus(status); } } finally { lock.unlock(); } }
/** * Sets that the specified status is currently updating i.e. getting transactions. * * Returns true if registered successfully or false if status already updating */ @VisibleForTesting boolean registerStatusForUpdate(AddressStatus status) { checkNotNull(status.getStatus()); lock.lock(); try { // If current address is updating if (statusPendingUpdates.containsKey(status.getAddress())) { AddressStatus updatingAddressStatus = statusPendingUpdates.get(status.getAddress()); String updatingStatus = updatingAddressStatus.getStatus(); // If the same status is updating, don't update again if (updatingStatus != null && updatingStatus.equals(status.getStatus())) { return false; } else { // Status is newer, so replace the updating status statusPendingUpdates.put(status.getAddress(), status); return true; } } else { // This status is new statusPendingUpdates.put(status.getAddress(), status); return true; } } finally { lock.unlock(); } }
void commitAddressStatus(AddressStatus newStatus) { if (!newStatus.canCommitStatus()) { log.warn("Tried to commit an address status with a non applied state: {}:{}", newStatus.getAddress(), newStatus.getStatus()); return; } lock.lock(); try { AddressStatus updatingStatus = statusPendingUpdates.get(newStatus.getAddress()); if (updatingStatus != null && updatingStatus.equals(newStatus)) { statusPendingUpdates.remove(newStatus.getAddress()); } addressesStatus.put(newStatus.getAddress(), newStatus.getStatus()); queueOnConnectivity(); } finally { lock.unlock(); } // Skip saving null statuses if (newStatus.getStatus() != null) { walletSaveLater(); } }
if (status.getStatus() == null) continue; assertEquals(status, newPocket.getAddressStatus(status.getAddress()));