Selaa lähdekoodia

AMBARI-4976. YARN metrics missing from service summary section (Dmytro Sen via dlysnichenko)

Lisnichenko Dmitro 11 vuotta sitten
vanhempi
commit
374afc3857

+ 19 - 10
ambari-server/src/main/java/org/apache/ambari/server/api/query/render/MinimalRenderer.java

@@ -91,8 +91,8 @@ public class MinimalRenderer extends BaseRenderer implements Renderer {
       addSubResources(queryTree, resultTree);
       addKeysToEmptyResource = false;
     }
-    ensureRequiredProperties(resultTree, addKeysToEmptyResource);
     processRequestedProperties(queryTree);
+    ensureRequiredProperties(resultTree, addKeysToEmptyResource);
 
     return resultTree;
   }
@@ -109,14 +109,6 @@ public class MinimalRenderer extends BaseRenderer implements Renderer {
     return new MinimalPostProcessor(request);
   }
 
-  // ----- BaseRenderer ------------------------------------------------------
-
-  @Override
-  protected void addKeys(Resource.Type resourceType, Set<String> properties) {
-    // override to only add pk instead of pk and all fk's
-    addPrimaryKey(resourceType, properties);
-  }
-
   // ----- private instance methods ------------------------------------------
 
   /**
@@ -167,7 +159,7 @@ public class MinimalRenderer extends BaseRenderer implements Renderer {
           String absPropertyName = PropertyHelper.getPropertyId(categoryName, propName);
           if ((requestedProperties == null ||
               (! requestedProperties.contains(absPropertyName) &&
-                  ! requestedProperties.contains(categoryName))) &&
+              ! isSubCategory(requestedProperties, categoryName))) &&
               ! getPrimaryKeys(type).contains(absPropertyName)) {
             valueIter.remove();
           }
@@ -182,6 +174,23 @@ public class MinimalRenderer extends BaseRenderer implements Renderer {
     }
   }
 
+  /**
+   * Checks if properties contains a category for the subCategoryName
+   * Example: metrics/yarn/Queue/root/ActiveApplications and metrics/yarn/Queue
+   *
+   * @param properties categories
+   * @param subCategoryName subcategory
+   * @return
+   */
+  private boolean isSubCategory(Set<String> properties, String subCategoryName) {
+    for (String property : properties) {
+      if (subCategoryName.startsWith(property)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /**
    * Obtain the primary keys for the specified type.
    * This method is necessary because some resource types, specifically