@Override public Block write(Block block) { int bufferId = assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel()); BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel()); return region.write(block); }
@Override public List<Block> getBlocksInTheSameRegion(Block block) { int bufferId = assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel()); BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel()); return region.getBufferedBlocks(); }
@Override public Block remove(Block block) { if (block == null) return null; int bufferId = assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel()); BufferRegion region = getBufferRegion(bufferId, block.getReplicaLevel()); return region.remove(block.getBlockId()); }
@Override public List<Block> getBlocksCorrespondingToSpecifiedDisk(int diskId) { List<Block> result = new ArrayList<>(); for (List<BufferRegion> regions : regionTable.values()) { for (BufferRegion region : regions) { for (Block block : region.getBufferedBlocks()) { if (block.getOwnerDiskId() == diskId) result.add(block); } } } return result; }
@Override public int getCorrespondingBufferId(Block block) { return assignor.assign(block.getBlockId(), block.getPrimaryDiskId(), block.getReplicaLevel()); }