调试ambari-server总结

7 篇文章 0 订阅

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

持续更新中,敬请关注…


更多精彩干货内容,请关注微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

create17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值