刚开始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 总结的更多相关文章

  1. IDEA远程调试Ambari Server

    1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...

  2. Ambari server:无法显示内存,CPU等使用率

    Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...

  3. 使用WinDbg调试SQL Server查询

    上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...

  4. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  5. Eclipse调试cas server 3.5.2.1

    由于在配置CAS+LDAP总是报错,决定Eclipse调试cas server,跟踪问题出在哪里? ================================================== ...

  6. ambari server内存溢出

    抛出的异常信息如下: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Me ...

  7. 如何设断点????-----使用WinDbg调试SQL Server查询

    http://www.cnblogs.com/woodytu/p/4665427.html http://www.sqlservercentral.com/blogs/aschenbrenner/20 ...

  8. 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 ...

  9. 基于Ambari Server部署HDP集群实战案例

    基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...

  10. 部署Ambari Server实战案例

    部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...

随机推荐

  1. 关于CPython中set集合的无序研究

    set集合本身是无序的,但是无意间发现set集合中都是数字时set貌似有序了. 无论声明这个set时数字如何摆放,输出结果总是以一种固定的顺序!同样我将dict字典的key值设为int类型,这时候字典 ...

  2. Javascript中那些你不知道的事之-- false、0、null、undefined和空字符串

    话不多说直接进入主题:(如果有写的不对的地方欢迎指正) 我们先来看看他们的类型分别是什么: typeof类型检测结果 结论:false是布尔类型对象,0是数字类型对象,null是object对象,un ...

  3. 2018-8-10-win10-uwp-Window.Current.Dispatcher中Current为null

    title author date CreateTime categories win10 uwp Window.Current.Dispatcher中Current为null lindexi 201 ...

  4. 判断移动端还是PC端

    window.onload=function(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAge ...

  5. API自动化测试指南

    我相信自动化技能已经成为高级测试工程师总体技能的标配.敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式.当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量 ...

  6. 如何保存HTTPrequestbase和CloseableHttpResponse

    在测试过程中,有一个重要的工作就是保存记录"现场",以方便开发人员更快发现BUG解决问题.在接口测试中更是如此,如果开发人员能够根据BUG的信息直接复现请求,是一件很方便的事情.为 ...

  7. Docker Swarm Mode简介与核心概念

    什么是Docker Swarm Docker Swarm是Docker官方的一种容器编排方案,用于管理跨主机的Docker容器,可以快速对指定服务进行水平扩展.部署.删除 一个Docker Swarm ...

  8. 《美国纽约摄影学院摄影教材》PDF教材

        下载地址: 美国纽约摄影学院摄影教材(上册).pdf 美国纽约摄影学院摄影教材(下册).pdf 欢迎你到纽约摄影学院来,我们急切地等待着开课,你们也在 跃跃欲试了.那就让我们马上开始吧! 你已 ...

  9. 1068 万绿丛中一点红 (20分)C语言

    对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充 ...

  10. 7.netty内存管理-ByteBuf

    ByteBuf ByteBuf是什么 ByteBuf重要API read.write.set.skipBytes mark和reset duplicate.slice.copy retain.rele ...