zoukankan      html  css  js  c++  java
  • 调试 ambari-server 总结

    刚开始debug ambari-server的时候,很多逻辑都是第一次接触。其中有很多知识点还是记录一下的好,做个备忘。这些知识点对于自定义api的开发还是很有作用的。

    1. api的子href的最后一个字符串如何定义?例如,指定一个id?

    解答:

    ambari 2.6

    编辑key_properties.json,将当前资源类型与含有id的value相映射。

    举例:

    ambari 2.7

    路径:org/apache/ambari/server/controller/internal/RackResourceProvider.java

    public static final String RACK_ID_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_id");
        public static final String RACK_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_name");
        public static final String RACK_HEIGHT_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_height");
        public static final String RACK_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_type");
        public static final String RACK_LOCATION_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_location");
        public static final String RACK_DESCRIPTION_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_description");
    
    private static Map<Resource.Type, String> keyPropertyIds = ImmutableMap.<Resource.Type, String>builder()
            .put(Resource.Type.RepositoryVersion, RACK_NAME_PROPERTY_ID)
            .put(Resource.Type.Rack, RACK_ID_PROPERTY_ID)
            .put(Resource.Type.User, RACK_HEIGHT_PROPERTY_ID)
            .put(Resource.Type.Member, RACK_TYPE_PROPERTY_ID)
            .put(Resource.Type.Task, RACK_LOCATION_PROPERTY_ID)
            .put(Resource.Type.Auditlog, RACK_DESCRIPTION_PROPERTY_ID)
            .build();
    

    2. request如何取值?意义何在?

    1)如何取值

    QueryImpl.createRequest()方法内的requestedProperties属性与XXXResourceProvider()keyPropertyIds有关

    2)有何意义?

    rack/rack_name=rack1这样赋值有关。

    3. predicate如何定义?意义何在?

    1)如何定义?

    QueryImpl.createPredicate() ==> QueryImpl.createInternalPredicate() ==> ClusterControllerImpl.getSchema() ==> QueryImpl.createInternalPredicate() ==>

    907~914行,setPredicates() 作用就是keyPropertyIds的type与RackHostResourceProvider相比较,相同的就是predicate

    entry.getValue() 这个值会和Rackhost的value值相比较,并返回boolean值。如果为true,则合并。

    Predicate 可能会有多条匹配,这样多条的entry.getValue()会与对应的Rackhost的value值比较,返回true或false。如果有一个不对应,则两个Resource.Type的数据不合并,这里被坑过,特此记录。

    注:RackResourceProvider和RackHostResourceProvider的keyPropertyIds只能保证rack_name字段的key一致。

    2)有何意义?

    pridicate会在子数据的判断上(是否合并数据)起作用。

    4. getKeyValueMap()

    获取的是资源类型=>value 、、 比如: Rack ==> null

    5. 编译失败,改正了以后还是报那个地方失败?

    这时候就应该考虑一下 将target文件删掉,或直接mvn clean,重新生成这个文件了,可能是编译后的一些class文件没有被替换。

    6. 使用fields来拼接展示不用resource类型的数据?

    RackResourceDefinition.getSubResourceDefinitions()里面注册要展示其他resource的类型,调用xxxResourceDefinition.getPluralName(),最后就可以使用fields=rack_hosts来调取数据。

    org/apache/ambari/server/api/resources/RackResourceDefinition.java

    org/apache/ambari/server/api/resources/RackHostResourceDefinition.java

    7. api的入口

    xxxService.java是api的入口,经过一系列流程操作,进入到xxxResourceProvider.java,里面有getResources()createResources()deleteResources()updateResources()方法,这些方法具体实现是在AmbariManagementController.java里面定义,在AmbariManagementControllerImpl.java实现具体的操作。

    持续更新中,敬请关注...


    点关注,不迷路

    好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才

    白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

    如果本篇博客有任何错误,请批评指教,不胜感激 !

  • 相关阅读:
    LeetCode OJ 107. Binary Tree Level Order Traversal II
    LeetCode OJ 116. Populating Next Right Pointers in Each Node
    LeetCode OJ 108. Convert Sorted Array to Binary Search Tree
    LeetCode OJ 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode OJ 98. Validate Binary Search Tree
    老程序员解Bug的通用套路
    转载 四年努力,梦归阿里,和大家聊聊成长感悟
    转载面试感悟----一名3年工作经验的程序员应该具备的技能
    Web Service和Servlet的区别
    关于spring xml文件中的xmlns,xsi:schemaLocation
  • 原文地址:https://www.cnblogs.com/createboke/p/12234215.html
Copyright © 2011-2022 走看看