Loading node labels问题解决
温馨提示
此内容版本在 ttr-2.2.1
已经修复,低于该版本需要手动处理。有任何问题可以联系作者,或者访问 TTBigdata知识库 (opens new window) 获取其他技术支持。
# 一、问题出现:前端页面卡在 Loading 状态
当页面出现 “Loading node labels” 不动时,第一反应是查看前端。
我们按下 F12 打开开发者工具。

可以看到页面卡住不加载任何节点标签。
# 二、查看控制台日志
在 Console 里发现如下错误信息:

错误详情如下:
SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at app.js:1:5639
at v (vendor.js:16:9515)
at y (vendor.js:16:9599)
at m (vendor.js:16:9418)
at vendor.js:12:2562
at invoke (vendor.js:5:6789)
at r.flush (vendor.js:5:7297)
at i.end (vendor.js:5:2869)
at i.run (vendor.js:5:3250)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 三、定位问题源头(打断点)
我们点击 app.js:1:5639,跳转到具体位置。

接着在这里打上断点,并刷新页面。
这时可以看到变量 t 已经是一个 对象,所以 JSON.parse(t) 一定会报错。
# 四、验证推测与临时修改
我们的推测是:
若
t是字符串,则调用JSON.parse();若已是对象,直接返回。
那就改成类型判断的形式。
# 1、找到对应文件位置
我们知道这个 View 的静态资源在 ambari-server 的工作目录中, 路径一般为:
/var/lib/ambari-server/resources/views/work/
1


# 2、修改 app.js 文件
找到出错的代码行,将:
r = JSON.parse(t);
1
改成:
r = typeof t === "string" ? JSON.parse(t) : t;
1
# 3、刷新验证
修改保存后刷新页面。

可以看到页面已正常渲染,不再报错。 “Loading node labels” 也消失了。

临时修复
这种修改属于运行时快速修复,每次重新编译 Ambari Views 都会被覆盖。 建议仅在验证或应急时使用。
# 五、彻底修复(源码级改法)
上面的修改只是修改构建后的 js。 要想 一劳永逸,需要改动源代码。
该功能调用的是 getNodeLabels() 函数,我们在源码中找到:
contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js
1

# 1、补丁内容如下
Subject: [PATCH] feature: 解决 scheduler JSON 解析报错
---
Index: contrib/views/capacity-scheduler/src/main/resources/ui/app/adapters.js
===================================================================
@@ -253,7 +253,7 @@
return new Ember.RSVP.Promise(function(resolve, reject) {
_ajax(uri,'GET').then(function(data) {
- var parsedData = JSON.parse(data), labels;
+ var parsedData = (typeof data === 'string' && data.trim()) ? JSON.parse(data) : data, labels;
if (parsedData !== null) {
store.set('isNodeLabelsConfiguredByRM', true);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
修改说明
- 增加类型判断,兼容字符串与对象两种返回类型;
- 避免重复解析已被反序列化的对象;
- 修复 JSON.parse 触发 SyntaxError 的问题。
修改完成后重新编译 Views 模块:
cd contrib/views
mvn install -DskipTests
1
2
2
构建成功后刷新页面, 问题彻底解决 🎉。
# 六、使用 ambari-env 一键修复(推荐)
如果你正在使用 ambari-env 编译环境,
直接使用官方补丁路径即可:
https://github.com/TtBigdata/ambari-env/blob/dev/scripts/build/ambari3/common/patch2_2_1/patch2-VIEWS-COMPILE-FIXED.diff
1
该补丁已经包含此修复。

- 01
- Ambari开启Kerberos认证加密类型错误 Kylin V1011-05
- 02
- KERBEROS SERVICE CHECK 报错11-04