Management server hangs when js.interpretation.enabled=true
- Ngôn ngữ chính
- Java
- Star
- 3.1k
- Fork
- 1.4k
- Merge trung bình
- 6 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 32
Mô tả
### problem
Enabling the global setting `js.interpretation.enabled=true` causes the CloudStack management server to hang during startup at the module loading phase. This prevents using the secondary storage selector feature (`createSecondaryStorageSelector`, `updateSecondaryStorageSelector` APIs).
### versions
- 4.20 branch (4.20.3.0-SNAPSHOT) - **AFFECTED** - needs fix before 4.20.3.0 release
- 4.20.2.0 (released) - Not affected (commit not present, setting does not exist, APIs work unconditionally)
Introduced by commit `03a4b9f` ("server,utils: improve js interpretation functionality") merged on Oct 16, 2025 into the 4.20 branch.
The commit:
1. Added `js.interpretation.enabled` as a hidden ConfigKey (default: false)
2. Made `CreateSecondaryStorageSelectorCmd` and `UpdateSecondaryStorageSelectorCmd` conditional on this setting
3. Made significant changes to `JsInterpreter.java` (security hardening, daemon workers, etc.)
When the setting is enabled, something in the initialization causes the MS server to hang.
### The steps to reproduce the bug
1. Deploy CloudStack 4.20.3.0
2. Verify server is running:
```
curl -s "http://localhost:8080/client/api?command=listZones" | head -5
```
3. Enable the js.interpretation.enabled setting:
```
mysql -u root -p cloud -e "UPDATE configuration SET value='true' WHERE name='js.interpretation.enabled';"
```
4. Restart management server:
```
systemctl restart cloudstack-management
```
5. Wait 3+ minutes and check server status:
```
curl -s "http://localhost:8080/client/api?command=listZones" | head -5
```
### Expected Result
Server starts successfully and `createSecondaryStorageSelector` API is available.
### Actual Result
Server returns 503 Service Unavailable. Log shows server stuck at module loading phase:
```
2026-01-26 19:53:01,937 DEBUG [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:[]) (logid:) Trying to obtain module [redfish] context.
2026-01-26 19:53:01,937 WARN [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:[]) (logid:) Application context not found for module definition [redfish]
```
Log timestamp remains static while current time progresses - server is hung.
#### Evidence
**4.20 branch build (shapeblue18197) - Bug present:**
```
[root@ref-trl-10730-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# rpm -qa | grep cloudstack
cloudstack-common-4.20.3.0-shapeblue18197.noarch
cloudstack-management-4.20.3.0-shapeblue18197.noarch
[root@ref-trl-10730-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# mysql -u root -p cloud -e "UPDATE configuration SET value='true' WHERE name='js.interpretation.enabled';"
[root@ref-trl-10730-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# systemctl restart cloudstack-management
[root@ref-trl-10730-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# sleep 180
[root@ref-trl-10730-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# curl -s "http://localhost:8080/client/api?command=listZones" | head -5
Error 503 Service Unavailable
```
**4.20.2.0 released version (shapeblue17631) - Works correctly:**
```
[root@ref-trl-10714-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# rpm -qa | grep cloudstack
cloudstack-common-4.20.2.0-shapeblue17631.noarch
cloudstack-management-4.20.2.0-shapeblue17631.noarch
mysql> SELECT name, value FROM configuration WHERE name LIKE '%interpret%';
Empty set (0.00 sec)
[root@ref-trl-10714-k-Mol9-rositsa-kyuchukova-mgmt1 ~]# cmk list apis 2>/dev/null | grep -i "name.*selector"
"name": "createSecondaryStorageSelector",
"name": "updateSecondaryStorageSelector",
"name": "listSecondaryStorageSelectors",
"name": "removeSecondaryStorageSelector",
```
#### Impact
- Secondary storage selector feature is unusable on current 4.20 branch
- Quota tariff activation rules may also be affected (uses same JsInterpreter)
- Blocks testing of PR #10957 and any other functionality that depends on this feature
#### Related
- Commit: https://github.com/apache/cloudstack/commit/03a4b9f
- Blocks PR: #10957
### What to do about it?
_No response_
Hướng dẫn đóng góp
Hướng nghiên cứu
Tái hiện tình trạng treo khi khởi động với js.interpretation.enabled=true và kiểm tra các log của management-server xung quanh DefaultModuleDefinitionSet. Đọc JsInterpreter.java và các thay đổi trong commit 03a4b9f, bao gồm CreateSecondaryStorageSelectorCmd và UpdateSecondaryStorageSelectorCmd, đồng thời kiểm tra các PR liên quan. Được xem là hoàn thành khi management-server khởi động bình thường với thiết lập được bật và các API của secondary storage selector khả dụng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- backend, infrastructure
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100