HDFS-16080. RBF: Invoking method in all locations should break the loop after successful result (#3121). Contributed by Viraj Jasani.
Signed-off-by: Ayush Saxena <ayushsaxena@apache.org>
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java
index bc6d5be..a4833ff 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java
@@ -1129,25 +1129,17 @@
* Invoke method in all locations and return success if any succeeds.
*
* @param <T> The type of the remote location.
- * @param <R> The type of the remote method return.
* @param locations List of remote locations to call concurrently.
* @param method The remote method and parameters to invoke.
* @return If the call succeeds in any location.
* @throws IOException If any of the calls return an exception.
*/
- public <T extends RemoteLocationContext, R> boolean invokeAll(
+ public <T extends RemoteLocationContext> boolean invokeAll(
final Collection<T> locations, final RemoteMethod method)
- throws IOException {
- boolean anyResult = false;
+ throws IOException {
Map<T, Boolean> results =
invokeConcurrent(locations, method, false, false, Boolean.class);
- for (Boolean value : results.values()) {
- boolean result = value.booleanValue();
- if (result) {
- anyResult = true;
- }
- }
- return anyResult;
+ return results.containsValue(true);
}
/**