szetszwo commented on a change in pull request #364:
URL: https://github.com/apache/incubator-ratis/pull/364#discussion_r546351023
##########
File path:
ratis-client/src/main/java/org/apache/ratis/client/api/DataStreamApi.java
##########
@@ -44,4 +48,7 @@ default DataStreamOutput stream() {
/** Create a stream by providing a customized header message. */
DataStreamOutput stream(ByteBuffer headerMessage);
+
+ /** Create a stream by providing a customized header message and route
table. */
+ DataStreamOutput stream(ByteBuffer headerMessage, Map<RaftPeerId,
List<RaftPeerId>> routingTable);
Review comment:
Let's add a Builder.
```
public interface RoutingTable {
Set<RaftPeerId> getSuccessors(RaftPeerId peerId);
class Builder {
private final Map<RaftPeerId, Set<RaftPeerId>> map = new HashMap<>();
private Set<RaftPeerId> computeIfAbsent(RaftPeerId peerId) {
return map.computeIfAbsent(peerId, key -> new HashSet<>());
}
public Builder addSuccessor(RaftPeerId peerId, RaftPeerId successor) {
computeIfAbsent(peerId).add(successor);
return this;
}
public Builder addSuccessors(RaftPeerId peerId, List<RaftPeerId>
successors) {
computeIfAbsent(peerId).addAll(successors);
return this;
}
public Builder addSuccessors(RaftPeerId peerId, RaftPeerId...
successors) {
return addSuccessors(peerId, Arrays.asList(successors));
}
public RoutingTable build() {
return peerId ->
Optional.ofNullable(map.get(peerId)).orElseGet(Collections::emptySet);
}
}
}
```
In the code, we should keeping using RoutingTable instead of Map. It will
give us more flexibility.
Btw, it should return a Set instead of List. My bad!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]