Skip to content
Open
Show file tree
Hide file tree
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
24 changes: 24 additions & 0 deletions compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -1023,6 +1023,8 @@ public void done(ErrorCodeList errorCodeList) {
}

sql.update();
refreshVO();
createPreFencePendingTag(msg);

startVm(msg, new Completion(msg, chain) {
@Override
Expand Down Expand Up @@ -1053,6 +1055,28 @@ public String getName() {
});
}

private void createPreFencePendingTag(HaStartVmInstanceMsg msg) {
String suspectHostUuid = StringUtils.trimToNull(CollectionUtils.isEmpty(msg.getSoftAvoidHostUuids()) ?
self.getLastHostUuid() : msg.getSoftAvoidHostUuids().get(0));
String peerHostUuid = StringUtils.trimToNull(msg.getAccessiblePeerHostUuid());
if (suspectHostUuid == null || peerHostUuid == null) {
logger.debug(String.format("HA-start vm[%s]: skip creating pre-fence tag because suspect host[%s] or peer host[%s] is absent",
self.getUuid(), suspectHostUuid, peerHostUuid));
return;
}

Map<String, String> tokens = new HashMap<>();
tokens.put(VmSystemTags.HA_PRE_FENCE_SUSPECT_HOST_UUID_TOKEN, suspectHostUuid);
tokens.put(VmSystemTags.HA_PRE_FENCE_ACCESSIBLE_PEER_HOST_UUID_TOKEN, peerHostUuid);

SystemTagCreator creator = VmSystemTags.HA_PRE_FENCE_PENDING.newSystemTagCreator(self.getUuid());
creator.inherent = true;
creator.recreate = true;
creator.ignoreIfExisting = true;
creator.setTagByTokens(tokens);
creator.create();
}

static class IpOverrideInfo {
private String netmask;
private String gateway;
Expand Down
7 changes: 7 additions & 0 deletions compute/src/main/java/org/zstack/compute/vm/VmSystemTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,13 @@ public String desensitizeTag(SystemTag systemTag, String tag) {

public static PatternedSystemTag VM_STATE_PAUSED_AFTER_MIGRATE = new PatternedSystemTag(("vmPausedAfterMigrate"), VmInstanceVO.class);

public static String HA_PRE_FENCE_SUSPECT_HOST_UUID_TOKEN = "suspectHostUuid";
public static String HA_PRE_FENCE_ACCESSIBLE_PEER_HOST_UUID_TOKEN = "accessiblePeerHostUuid";
public static PatternedSystemTag HA_PRE_FENCE_PENDING =
new PatternedSystemTag(String.format("haPreFencePending::{%s}::{%s}",
HA_PRE_FENCE_SUSPECT_HOST_UUID_TOKEN,
HA_PRE_FENCE_ACCESSIBLE_PEER_HOST_UUID_TOKEN), VmInstanceVO.class);

public static PatternedSystemTag VM_MEMORY_ACCESS_MODE_SHARED = new PatternedSystemTag(("vmMemoryAccessModeShared"), VmInstanceVO.class);

public static String ZNS_NIC_MODE_TOKEN = "znsNicMode";
Expand Down