Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions compute/src/main/java/org/zstack/compute/host/HostManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -887,22 +887,22 @@ private void setupCanonicalEvents(){
evtf.on(PrimaryStorageCanonicalEvent.PRIMARY_STORAGE_HOST_STATUS_CHANGED_PATH, new EventCallback() {
@Override
protected void run(Map tokens, Object data) {
PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData d =
(PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData)data;
if (d.getNewStatus() == PrimaryStorageHostStatus.Disconnected &&
d.getOldStatus() != PrimaryStorageHostStatus.Disconnected &&
noStorageAccessible(d.getHostUuid())){
ChangeHostConnectionStateMsg msg = new ChangeHostConnectionStateMsg();
msg.setHostUuid(d.getHostUuid());
msg.setConnectionStateEvent(HostStatusEvent.disconnected.toString());
msg.setCause("base cause: host disconnected from other status and has no connected primary storage attached");
bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, d.getHostUuid());
bus.send(msg);

new HostBase.HostDisconnectedCanonicalEvent(d.getHostUuid(),
operr("primary storage[uuid:%s] becomes disconnected, the host has no connected primary storage attached",
d.getPrimaryStorageUuid())).fire();
}
// PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData d =
// (PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData)data;
// if (d.getNewStatus() == PrimaryStorageHostStatus.Disconnected &&
// d.getOldStatus() != PrimaryStorageHostStatus.Disconnected &&
// noStorageAccessible(d.getHostUuid())){
// ChangeHostConnectionStateMsg msg = new ChangeHostConnectionStateMsg();
// msg.setHostUuid(d.getHostUuid());
// msg.setConnectionStateEvent(HostStatusEvent.disconnected.toString());
// msg.setCause("base cause: host disconnected from other status and has no connected primary storage attached");
// bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, d.getHostUuid());
// bus.send(msg);
//
// new HostBase.HostDisconnectedCanonicalEvent(d.getHostUuid(),
// operr("primary storage[uuid:%s] becomes disconnected, the host has no connected primary storage attached",
// d.getPrimaryStorageUuid())).fire();
// }
Comment on lines +890 to +905
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

恢复主存断连后的 Host 断连处理链路

Line 890-905 把 Disconnected 分支整段注释后,这个 canonical event 回调变成空实现;当前没有其他监听器补上“无可达主存时置 Host 为 disconnected + 发出 HostDisconnectedCanonicalEvent”的逻辑,属于功能回退。

建议的最小修复(恢复原处理分支)
         evtf.on(PrimaryStorageCanonicalEvent.PRIMARY_STORAGE_HOST_STATUS_CHANGED_PATH, new EventCallback() {
             `@Override`
             protected void run(Map tokens, Object data) {
-//                PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData d =
-//                        (PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData)data;
-//                if (d.getNewStatus() == PrimaryStorageHostStatus.Disconnected &&
-//                        d.getOldStatus() != PrimaryStorageHostStatus.Disconnected &&
-//                        noStorageAccessible(d.getHostUuid())){
-//                    ChangeHostConnectionStateMsg msg = new ChangeHostConnectionStateMsg();
-//                    msg.setHostUuid(d.getHostUuid());
-//                    msg.setConnectionStateEvent(HostStatusEvent.disconnected.toString());
-//                    msg.setCause("base cause: host disconnected from other status and has no connected primary storage attached");
-//                    bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, d.getHostUuid());
-//                    bus.send(msg);
-//
-//                    new HostBase.HostDisconnectedCanonicalEvent(d.getHostUuid(),
-//                            operr("primary storage[uuid:%s] becomes disconnected, the host has no connected primary storage attached",
-//                                    d.getPrimaryStorageUuid())).fire();
-//                }
+                PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData d =
+                        (PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData) data;
+                if (d.getNewStatus() == PrimaryStorageHostStatus.Disconnected &&
+                        d.getOldStatus() != PrimaryStorageHostStatus.Disconnected &&
+                        noStorageAccessible(d.getHostUuid())) {
+                    ChangeHostConnectionStateMsg msg = new ChangeHostConnectionStateMsg();
+                    msg.setHostUuid(d.getHostUuid());
+                    msg.setConnectionStateEvent(HostStatusEvent.disconnected.toString());
+                    msg.setCause("base cause: host disconnected from other status and has no connected primary storage attached");
+                    bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, d.getHostUuid());
+                    bus.send(msg);
+
+                    new HostBase.HostDisconnectedCanonicalEvent(
+                            d.getHostUuid(),
+                            operr("primary storage[uuid:%s] becomes disconnected, the host has no connected primary storage attached",
+                                    d.getPrimaryStorageUuid())
+                    ).fire();
+                }
             }
         });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@compute/src/main/java/org/zstack/compute/host/HostManagerImpl.java` around
lines 890 - 905, Restore the commented "Disconnected" branch in HostManagerImpl:
re-enable the PrimaryStorageCanonicalEvent.PrimaryStorageHostStatusChangeData
handling that checks if d.getNewStatus() ==
PrimaryStorageHostStatus.Disconnected && d.getOldStatus() !=
PrimaryStorageHostStatus.Disconnected && noStorageAccessible(d.getHostUuid()),
then build and send a ChangeHostConnectionStateMsg (setHostUuid,
setConnectionStateEvent(HostStatusEvent.disconnected.toString()), setCause),
call bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID,
d.getHostUuid()) and bus.send(msg), and fire new
HostBase.HostDisconnectedCanonicalEvent(d.getHostUuid(), operr(...)) so hosts
with no accessible primary storage are marked disconnected and the
HostDisconnectedCanonicalEvent is emitted.

}
});
}
Expand Down