private List<String> isAddressesAvailable(Collection<String> addresses) { if (addresses.size() == 0) return new ArrayList<>(); List<String> unavailableAddressesCache = nameCache.lockAddressList(addresses); if (unavailableAddressesCache.size() > 0) { return unavailableAddressesCache; } List<String> unavailableAddressesLedger = ledger.isAllAddressesAvailable(addresses); if (unavailableAddressesLedger.size() > 0) { nameCache.unlockAddressList(addresses); return unavailableAddressesLedger; } return new ArrayList<>(); }
@Override public List<ErrorRecord> tryAllocate(Collection<String> reducedNamesToAllocate, Collection<HashId> originsToAllocate, Collection<String> addressesToAllocate) { List<String> namesErrors = isNamesAvailable(reducedNamesToAllocate); List<String> originsErrors = isOriginsAvailable(originsToAllocate); List<String> addressesErros = isAddressesAvailable(addressesToAllocate); boolean checkResult = namesErrors.isEmpty() && originsErrors.isEmpty() && addressesErros.isEmpty(); if (!checkResult) { if (namesErrors.isEmpty()) nameCache.unlockNameList(reducedNamesToAllocate); if (originsErrors.isEmpty()) nameCache.unlockOriginList(originsToAllocate); if (addressesErros.isEmpty()) nameCache.unlockAddressList(addressesToAllocate); } List<ErrorRecord> res = new ArrayList<>(); for (String s : namesErrors) res.add(new ErrorRecord(Errors.FAILED_CHECK, "names", "name '"+s+"' is not available")); for (String s : originsErrors) res.add(new ErrorRecord(Errors.FAILED_CHECK, "origins", "origin '"+s+"' is not available")); for (String s : addressesErros) res.add(new ErrorRecord(Errors.FAILED_CHECK, "addresses", "address '"+s+"' is not available")); return res; }
nameCache.unlockAddressList(addressList); nameCache.unlockNameList(nameList); nameCache.unlockOriginList(originsList);
nameCache.unlockAddressList(values1); nameCache.unlockAddressList(values2);