ndimiduk commented on a change in pull request #754: HBASE-22978 : Online slow
response log
URL: https://github.com/apache/hbase/pull/754#discussion_r377213128
##########
File path:
hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
##########
@@ -3889,4 +3891,69 @@ private void getProcedureResult(long procId,
CompletableFuture<Void> future, int
.call();
}
+ @Override
+ public CompletableFuture<List<SlowLogPayload>> getSlowLogResponses(
+ List<ServerName> serverNames) {
+ CompletableFuture<List<SlowLogPayload>> slowLoadPayloads =
+ CompletableFuture.completedFuture(Collections.emptyList());
+ if (CollectionUtils.isEmpty(serverNames)) {
+ return slowLoadPayloads;
+ }
+ for (ServerName serverName : serverNames) {
+ CompletableFuture<List<SlowLogPayload>> slowLogPayloadFromServer =
+ getSlowLogResponseFromServer(serverName);
+ slowLoadPayloads =
slowLoadPayloads.thenCombine(slowLogPayloadFromServer, (l1, l2) -> {
+ List<SlowLogPayload> finalSlowLogPayloads = new LinkedList<>();
Review comment:
nit: For larger clusters, you can save yourself a lot of extra allocations
by using a stream-based approach, something like
```java
if (CollectionUtils.isEmpty(serverNames)) {
return CompletableFuture.completedFuture(Collections.emptyList());
}
return CompletableFuture.supplyAsync(() -> {
return serverNames.stream()
.map(this::getSlowLogResponseFromServer)
.map(CompletableFuture::join)
.flatMap(List::stream)
.collect(Collectors.toList());
});
```
Actually, what I think you really want is a solution that won't fall over in
the face of a very large cluster with lots of slow results. Such a solution
would involve a user-provided limit on the number of results returned,
partitioning the server list in batches of size N, processing a batch, and
short-circuiting the return when a result-count limit is reached. So, to
support this use case, you'll need to add a limit parameter to the methods (and
maybe a configuration point providing a default limit) and then implement
pagination (which I think can also be implemented as a stream over partitions
plus `Stream.limit`).
----------------------------------------------------------------
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]
With regards,
Apache Git Services