xkrogen commented on code in PR #4624:
URL: https://github.com/apache/hadoop/pull/4624#discussion_r929389912


##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableRatesWithAggregation.java:
##########
@@ -71,11 +74,20 @@ public void init(Class<?> protocol) {
     if (protocolCache.contains(protocol)) {
       return;
     }
-    protocolCache.add(protocol);
-    for (Method method : protocol.getDeclaredMethods()) {
-      String name = method.getName();
-      LOG.debug(name);
-      addMetricIfNotExists(name);
+
+    List<Class<?>> protocols = new ArrayList<>();
+    protocols.add(protocol);
+    if (protocol.getDeclaredMethods().length == 0) {
+      protocols.addAll(Arrays.asList(protocol.getInterfaces()));
+    }
+
+    for (Class<?> pClass : protocols) {
+      protocolCache.add(pClass);
+      for (Method method : pClass.getDeclaredMethods()) {
+        String name = method.getName();
+        LOG.debug(name);
+        addMetricIfNotExists(name);
+      }

Review Comment:
   Seems we can fix this much more simply by just using 
[getMethods()](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getMethods--)
 which includes inherited methods. The main difference is that we'll only get 
public methods, not private/package-private, but I don't think we have any use 
cases which need those methods anyway. This is focused on protocol classes for 
which we only need the public methods.
   
   ```suggestion
       protocolCache.add(protocol);
       for (Method method : protocol.getMethods()) {
         String name = method.getName();
         LOG.debug(name);
         addMetricIfNotExists(name);
   ```



-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to