Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.GetSmallFileRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.GetSmallFileResponseProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.KeyValue;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ListBlockRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ListBlockResponseProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutBlockRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutSmallFileRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutSmallFileResponseProto;
Expand Down Expand Up @@ -73,6 +75,50 @@ public final class ContainerProtocolCalls {
private ContainerProtocolCalls() {
}

/**
* Calls the container protocol to list blocks in container.
*
* @param xceiverClient client to perform call
* @param containerID the ID of the container to list block
* @param replicaIndex the index of the replica in pipeline
* @param startLocalID the localID of the first block to get
* @param count max number of blocks to get
* @param token a token for this block (may be null)
* @return container protocol list block response
* @throws IOException if there is an I/O error while performing the call
*/
public static ListBlockResponseProto listBlock(XceiverClientSpi xceiverClient,
long containerID, int replicaIndex, Long startLocalID, int count,
Token<? extends TokenIdentifier> token) throws IOException {

ListBlockRequestProto.Builder listBlockBuilder =
ListBlockRequestProto.newBuilder()
.setCount(count);

if (startLocalID != null) {
listBlockBuilder.setStartLocalID(startLocalID);
}

String datanodeID = xceiverClient.getPipeline().getNodesInOrder()
.get(replicaIndex).getUuidString();

ContainerCommandRequestProto.Builder builder =
ContainerCommandRequestProto.newBuilder()
.setCmdType(Type.ListBlock)
.setContainerID(containerID)
.setDatanodeUuid(datanodeID)
Comment thread
kaijchen marked this conversation as resolved.
.setListBlock(listBlockBuilder.build());

if (token != null) {
builder.setEncodedToken(token.encodeToUrlString());
}

ContainerCommandRequestProto request = builder.build();
ContainerCommandResponseProto response =
xceiverClient.sendCommand(request, getValidatorList());
Comment thread
kaijchen marked this conversation as resolved.
return response.getListBlock();
}

/**
* Calls the container protocol to get a container block.
*
Expand Down