private List<String> isOriginsAvailable(Collection<HashId> origins) { if (origins.size() == 0) return new ArrayList<>(); List<String> unavailableOriginsCache = nameCache.lockOriginList(origins); if (unavailableOriginsCache.size() > 0) { return unavailableOriginsCache; } List<String> unavailableOriginsLedger = ledger.isAllOriginsAvailable(origins); if (unavailableOriginsLedger.size() > 0) { nameCache.unlockOriginList(origins); return unavailableOriginsLedger; } 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.unlockOriginList(originsList);
nameCache.unlockOriginList(values1hashes); nameCache.unlockAddressList(values1); nameCache.unlockOriginList(values2hashes); nameCache.unlockAddressList(values2);