public synchronized void injectBlocks(String bpid, Iterable<? extends Block> injectBlocks) throws IOException { ExtendedBlock blk = new ExtendedBlock(); if (injectBlocks != null) { for (Block b: injectBlocks) { // if any blocks in list is bad, reject list if (b == null) { throw new NullPointerException("Null blocks in block list"); } blk.set(bpid, b); if (isValidBlock(blk)) { DataNode.LOG.error("Block already exists in block list; trying to add <" + b + "> but already have <" + getBlockMap(blk).get(blk.getLocalBlock()).theBlock + ">; skipping"); } } List<Map<Block, BInfo>> blockMaps = new ArrayList<>(); for (SimulatedStorage storage : storages) { storage.addBlockPool(bpid); blockMaps.add(storage.getBlockMap(bpid)); } for (Block b: injectBlocks) { BInfo binfo = new BInfo(bpid, b, false); blockMaps.get((int) (b.getBlockId() % storages.size())).put(binfo.theBlock, binfo); } } }
public synchronized void injectBlocks(String bpid, Iterable<? extends Block> injectBlocks) throws IOException { ExtendedBlock blk = new ExtendedBlock(); if (injectBlocks != null) { for (Block b: injectBlocks) { // if any blocks in list is bad, reject list if (b == null) { throw new NullPointerException("Null blocks in block list"); } blk.set(bpid, b); if (isValidBlock(blk)) { throw new IOException("Block already exists in block list"); } } Map<Block, BInfo> map = blockMap.get(bpid); if (map == null) { map = new HashMap<Block, BInfo>(); blockMap.put(bpid, map); } for (Block b: injectBlocks) { BInfo binfo = new BInfo(bpid, b, false); map.put(binfo.theBlock, binfo); } } }