diff --git a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockDatanodeStorage.java b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockDatanodeStorage.java index 1f29425e3d05..b458543f2b1a 100644 --- a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockDatanodeStorage.java +++ b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockDatanodeStorage.java @@ -25,7 +25,9 @@ import org.apache.ratis.thirdparty.com.google.protobuf.ByteString; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -34,6 +36,8 @@ public class MockDatanodeStorage { private final Map blocks = new HashedMap(); + private final Map> + containerBlocks = new HashedMap(); private final Map fullBlockData = new HashMap<>(); private final Map chunks = new HashMap<>(); @@ -48,12 +52,25 @@ public void setStorageFailed() { public void putBlock(DatanodeBlockID blockID, BlockData blockData) { blocks.put(blockID, blockData); + List dnBlocks = containerBlocks + .getOrDefault(blockID.getContainerID(), new ArrayList<>()); + dnBlocks.add(blockID); + containerBlocks.put(blockID.getContainerID(), dnBlocks); } public BlockData getBlock(DatanodeBlockID blockID) { return blocks.get(blockID); } + public List listBlock(long containerID) { + List datanodeBlockIDS = containerBlocks.get(containerID); + List listBlocksData = new ArrayList<>(); + for (DatanodeBlockID dBlock : datanodeBlockIDS) { + listBlocksData.add(blocks.get(dBlock)); + } + return listBlocksData; + } + public void writeChunk( DatanodeBlockID blockID, ChunkInfo chunkInfo, ByteString bytes) throws IOException { diff --git a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientSpi.java b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientSpi.java index 4dfe966a90e0..0a87fc066495 100644 --- a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientSpi.java +++ b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientSpi.java @@ -19,6 +19,7 @@ package org.apache.hadoop.ozone.client; import org.apache.hadoop.hdds.protocol.DatanodeDetails; +import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos; import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ChunkInfo; import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ContainerCommandRequestProto; import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ContainerCommandResponseProto; @@ -99,6 +100,9 @@ public XceiverClientReply sendCommandAsync( case GetBlock: return result(request, r -> r.setGetBlock(getBlock(request.getGetBlock()))); + case ListBlock: + return result(request, + r -> r.setListBlock(listBlock(request.getContainerID()))); default: throw new IllegalArgumentException( "Mock version of datanode call " + request.getCmdType() @@ -122,6 +126,11 @@ private GetBlockResponseProto getBlock(GetBlockRequestProto getBlock) { .build(); } + private ContainerProtos.ListBlockResponseProto listBlock(long containerID) { + return ContainerProtos.ListBlockResponseProto.newBuilder() + .addAllBlockData(datanodeStorage.listBlock(containerID)).build(); + } + private PutBlockResponseProto putBlock(PutBlockRequestProto putBlock) { long length = 0; for (ChunkInfo chunk : putBlock.getBlockData().getChunksList()) {