.activeProvidedDatanodes(); count++) { dn = chooseProvidedDatanode(excludedUUids); locs.add(new DatanodeInfoWithStorage(
@Override void setState(DatanodeStorage.State state) { if (state == State.FAILED) { // The state should change to FAILED only when there are no active // datanodes with PROVIDED storage. ProvidedDescriptor dn = (ProvidedDescriptor) getDatanodeDescriptor(); if (dn.activeProvidedDatanodes() == 0) { LOG.info("Provided storage {} transitioning to state {}", this, State.FAILED); super.setState(state); } } else { super.setState(state); } }
private void processProvidedStorageReport() throws IOException { assert lock.hasWriteLock() : "Not holding write lock"; if (providedStorageInfo.getBlockReportCount() == 0 || providedDescriptor.activeProvidedDatanodes() == 0) { LOG.info("Calling process first blk report from storage: " + providedStorageInfo); // first pass; periodic refresh should call bm.processReport BlockAliasMap.Reader<BlockAlias> reader = aliasMap.getReader(null, bm.getBlockPoolId()); if (reader != null) { bm.processFirstBlockReport(providedStorageInfo, new ProvidedBlockList(reader.iterator())); } } }
@Override boolean removeBlock(BlockInfo b) { ProvidedDescriptor dn = (ProvidedDescriptor) getDatanodeDescriptor(); if (dn.activeProvidedDatanodes() == 0) { return super.removeBlock(b); } else { return false; } }
public void removeDatanode(DatanodeDescriptor dnToRemove) { if (providedEnabled) { assert lock.hasWriteLock() : "Not holding write lock"; providedDescriptor.remove(dnToRemove); // if all datanodes fail, set the block report count to 0 if (providedDescriptor.activeProvidedDatanodes() == 0) { providedStorageInfo.setBlockReportCount(0); } } }