码迷,mamicode.com
首页 > 其他好文 > 详细

调试 ambari-server 总结

时间:2020-01-26 15:54:32      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:编辑   VID   uem   cat   null   rip   png   deb   targe   

刚开始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实现具体的操作。

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


点关注,不迷路

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

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

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

技术图片

调试 ambari-server 总结

标签:编辑   VID   uem   cat   null   rip   png   deb   targe   

原文地址:https://www.cnblogs.com/createboke/p/12234215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!