调试 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实现具体的操作。
持续更新中,敬请关注...
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才。
白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !

调试 ambari-server 总结的更多相关文章
- IDEA远程调试Ambari Server
1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...
- Ambari server:无法显示内存,CPU等使用率
Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- Eclipse调试cas server 3.5.2.1
由于在配置CAS+LDAP总是报错,决定Eclipse调试cas server,跟踪问题出在哪里? ================================================== ...
- ambari server内存溢出
抛出的异常信息如下: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Me ...
- 如何设断点????-----使用WinDbg调试SQL Server查询
http://www.cnblogs.com/woodytu/p/4665427.html http://www.sqlservercentral.com/blogs/aschenbrenner/20 ...
- Ambari调整日志级别:How to enable debug logging in Ambari Server and Ambari Agent ?
PURPOSE When troubleshooting Ambari issues, it may be necessary to enable debug logging in the Ambar ...
- 基于Ambari Server部署HDP集群实战案例
基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...
- 部署Ambari Server实战案例
部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...
随机推荐
- 关于CPython中set集合的无序研究
set集合本身是无序的,但是无意间发现set集合中都是数字时set貌似有序了. 无论声明这个set时数字如何摆放,输出结果总是以一种固定的顺序!同样我将dict字典的key值设为int类型,这时候字典 ...
- Javascript中那些你不知道的事之-- false、0、null、undefined和空字符串
话不多说直接进入主题:(如果有写的不对的地方欢迎指正) 我们先来看看他们的类型分别是什么: typeof类型检测结果 结论:false是布尔类型对象,0是数字类型对象,null是object对象,un ...
- 2018-8-10-win10-uwp-Window.Current.Dispatcher中Current为null
title author date CreateTime categories win10 uwp Window.Current.Dispatcher中Current为null lindexi 201 ...
- 判断移动端还是PC端
window.onload=function(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAge ...
- API自动化测试指南
我相信自动化技能已经成为高级测试工程师总体技能的标配.敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式.当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量 ...
- 如何保存HTTPrequestbase和CloseableHttpResponse
在测试过程中,有一个重要的工作就是保存记录"现场",以方便开发人员更快发现BUG解决问题.在接口测试中更是如此,如果开发人员能够根据BUG的信息直接复现请求,是一件很方便的事情.为 ...
- Docker Swarm Mode简介与核心概念
什么是Docker Swarm Docker Swarm是Docker官方的一种容器编排方案,用于管理跨主机的Docker容器,可以快速对指定服务进行水平扩展.部署.删除 一个Docker Swarm ...
- 《美国纽约摄影学院摄影教材》PDF教材
下载地址: 美国纽约摄影学院摄影教材(上册).pdf 美国纽约摄影学院摄影教材(下册).pdf 欢迎你到纽约摄影学院来,我们急切地等待着开课,你们也在 跃跃欲试了.那就让我们马上开始吧! 你已 ...
- 1068 万绿丛中一点红 (20分)C语言
对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充 ...
- 7.netty内存管理-ByteBuf
ByteBuf ByteBuf是什么 ByteBuf重要API read.write.set.skipBytes mark和reset duplicate.slice.copy retain.rele ...