At first debug ambari-server, a lot of logic are the first contact. There is still a lot of knowledge about good record, to be a note. These custom api knowledge for development is still very role.
1. How api last sub-string href definition? For example, specifying a id?
answer:
ambari 2.6
Edit key_properties.json, the current resource type and value of the phase containing the id mapping.
For example:
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();
How 2. request value? What is the significance?
1) How to Value
QueryImpl.createRequest () within a method requestedProperties attribute XXXResourceProvider () of keyPropertyIds relevant
2 What is the significance)?
And rack/rack_name=rack1
such related assignments.
3. predicate how to define? What is the significance?
1) How to define?
QueryImpl.createPredicate() ==> QueryImpl.createInternalPredicate() ==> ClusterControllerImpl.getSchema() ==> QueryImpl.createInternalPredicate() ==>
907 ~ 914 lines, setPredicates () action is keyPropertyIds the type and RackHostResourceProvider comparison , the same is the predicateA .
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
实现具体的操作。
持续更新中,敬请关注...
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才。
白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !