Skip to content

Commit

Permalink
<feature>[sriov]: feature-5.1.0-sriov-live-migration
Browse files Browse the repository at this point in the history
DBImpact

Resolves: ZSTAC-63816

Change-Id: I6265696663776d636a6464706c69616562767a78
  • Loading branch information
pengchao.liu committed Apr 11, 2024
1 parent 8cd174b commit fc4fd4b
Show file tree
Hide file tree
Showing 24 changed files with 323 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
import org.zstack.header.message.*;
import org.zstack.header.network.l3.*;
import org.zstack.header.storage.primary.*;
import org.zstack.header.tag.SystemTagVO;
import org.zstack.header.tag.SystemTagVO_;
import org.zstack.header.vm.*;
import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicHostUuid;
import org.zstack.header.vm.ChangeVmMetaDataMsg.AtomicVmState;
Expand Down Expand Up @@ -6837,6 +6839,8 @@ public void done() {
}
});

chain.then(new VmMigratePostCallExtensionFlow());

chain.done(new FlowDoneHandler(completion) {
@Override
public void handle(final Map data) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,30 @@ public void beforeMigrateVm(final VmInstanceInventory inv, final String dstHostU
CollectionUtils.safeForEach(migrateVmExtensions, arg -> arg.beforeMigrateVm(inv, dstHostUuid));
}

public void postMigrateVm(final VmInstanceInventory inv, final String dstHostUuid, Completion completion) {
new While<>(migrateVmExtensions).each((ext, comp) -> ext.postMigrateVm(inv, dstHostUuid, new Completion(comp) {
@Override
public void success() {
comp.done();
}

@Override
public void fail(ErrorCode errorCode) {
comp.addError(errorCode);
comp.allDone();
}
})).run(new WhileDoneCompletion(completion) {
@Override
public void done(ErrorCodeList errorCodeList) {
if (errorCodeList.getCauses().size() > 0) {
completion.fail(errorCodeList.getCauses().get(0));
} else {
completion.success();
}
}
});
}

public void afterMigrateVm(final VmInstanceInventory inv, final String srcHostUuid, NoErrorCompletion completion) {
new While<>(migrateVmExtensions).each((ext, comp) -> ext.afterMigrateVm(inv, srcHostUuid, new NoErrorCompletion(comp) {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2678,6 +2678,11 @@ public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void afterMigrateVm(VmInstanceInventory inv, String srcHostUuid) {
if (!inv.getHypervisorType().equals(VmInstanceConstant.KVM_HYPERVISOR_TYPE)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.zstack.compute.vm;

import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.zstack.core.componentloader.PluginRegistry;
import org.zstack.header.core.Completion;
import org.zstack.header.core.workflow.Flow;
import org.zstack.header.core.workflow.FlowRollback;
import org.zstack.header.core.workflow.FlowTrigger;
import org.zstack.header.errorcode.ErrorCode;
import org.zstack.header.host.HostInventory;
import org.zstack.header.vm.VmInstanceConstant;
import org.zstack.header.vm.VmInstanceSpec;

import java.util.Map;

/**
*/
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class VmMigratePostCallExtensionFlow implements Flow {
@Autowired
protected PluginRegistry pluginRgty;
@Autowired
private VmInstanceExtensionPointEmitter extEmitter;

@Override
public void run(FlowTrigger trigger, Map data) {
final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString());

final HostInventory destHost = spec.getDestHost();
extEmitter.postMigrateVm(spec.getVmInventory(), destHost.getUuid(), new Completion(trigger) {
@Override
public void success() {
trigger.next();
}

@Override
public void fail(ErrorCode errorCode) {
trigger.fail(errorCode);
}
});
}

@Override
public void rollback(FlowRollback trigger, Map data) {
trigger.rollback();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,13 @@ public void setNicDriverType(VmNicInventory nic, boolean isImageSupportVirtIo, b

@Override
public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw) {
List<String> tags = new ArrayList<>();
tags.add(String.format("enableSRIOV::%s", l3nw.getUuid()));
tags.add(String.format("enableVFHA::%s", l3nw.getUuid()));
boolean enableSriov = Q.New(SystemTagVO.class)
.eq(SystemTagVO_.resourceType, VmInstanceVO.class.getSimpleName())
.eq(SystemTagVO_.resourceUuid, vmUuid)
.eq(SystemTagVO_.tag, String.format("enableSRIOV::%s", l3nw.getUuid()))
.in(SystemTagVO_.tag, tags)
.isExists();
logger.debug(String.format("create %s on l3 network[uuid:%s] inside VmAllocateNicFlow",
enableSriov ? "vf nic" : "vnic", l3nw.getUuid()));
Expand Down
2 changes: 2 additions & 0 deletions conf/db/upgrade/V5.1.0__schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ ALTER TABLE `zstack`.`LoadBalancerServerGroupVO` ADD COLUMN `ipVersion` int(10)
UPDATE `zstack`.`VipVO` set serviceProvider='SLB' where uuid in (select vipUuid from LoadBalancerVO where type='SLB');
UPDATE `zstack`.`VipVO` set serviceProvider='SLB' where uuid in (select ipv6VipUuid from LoadBalancerVO where type='SLB');

ALTER TABLE `zstack`.`VmVfNicVO` ADD COLUMN `haState` varchar(32) NOT NULL DEFAULT "Disabled" AFTER `pciDeviceUuid`;

CREATE TABLE IF NOT EXISTS `zstack`.`VpcSharedQosVO` (
`uuid` varchar(32) NOT NULL UNIQUE,
`name` varchar(255) NOT NULL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,11 @@ public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void afterMigrateVm(VmInstanceInventory inv, String srcHostUuid) {
ConsoleBackend bkd = getBackend();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,78 +5,78 @@ import java.sql.Timestamp

doc {

title "已使用IP的结构清单"
title "在这里输入结构的名称"

field {
name "uuid"
desc "资源的UUID,唯一标示该资源"
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "ipRangeUuid"
desc "IP段UUID"
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "l3NetworkUuid"
desc "三层网络UUID"
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "ipVersion"
desc ""
type "Integer"
since "4.7.13"
since "5.0.0"
}
field {
name "ip"
desc ""
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "netmask"
desc ""
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "gateway"
desc ""
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "usedFor"
desc ""
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "ipInLong"
desc ""
type "long"
since "4.7.13"
since "5.0.0"
}
field {
name "vmNicUuid"
desc "云主机网卡UUID"
type "String"
since "4.7.13"
since "5.0.0"
}
field {
name "createDate"
desc "创建时间"
type "Timestamp"
since "4.7.13"
since "5.0.0"
}
field {
name "lastOpDate"
desc "最后一次修改时间"
type "Timestamp"
since "4.7.13"
since "5.0.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ default void preMigrateVm(VmInstanceInventory inv, String destHostUuid, Completi

void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid);

default void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {}

default void postMigrateVm(VmInstanceInventory inv, String destHostUuid, Completion completion) {
postMigrateVm(inv, destHostUuid);
completion.success();
}

default void afterMigrateVm(VmInstanceInventory inv, String srcHostUuid) {}

default void afterMigrateVm(VmInstanceInventory inv, String srcHostUuid, NoErrorCompletion completion) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,11 @@ public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ public static class BatchDeleteEipCmd extends AgentCmd {
public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,11 @@ public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,11 @@ public void done(ErrorCodeList errorCodeList) {
});
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

Expand Down
8 changes: 4 additions & 4 deletions plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java
Original file line number Diff line number Diff line change
Expand Up @@ -2250,17 +2250,17 @@ private void handle(final DetachNicFromVmOnHypervisorMsg msg) {
if (msg.getNic().getL3NetworkUuid() == null) {
logger.debug(String.format("Skip detach nic[uuid=%s] on hypervisor: This nic is not attach any networks",
msg.getNic().getUuid()));
bus.reply(msg, new VmAttachNicOnHypervisorReply());
bus.reply(msg, new DetachNicFromVmOnHypervisorReply());
}

boolean running = Q.New(VmInstanceVO.class)
.eq(VmInstanceVO_.uuid, msg.getVmInstanceUuid())
.eq(VmInstanceVO_.state, VmInstanceState.Running)
.notNull(VmInstanceVO_.hostUuid)
.isExists();
if (!running) {
logger.debug(String.format("Skip detach nic[uuid=%s] on hypervisor: VM[uuid=%s] is not running",
msg.getNic().getUuid(), msg.getVmInstanceUuid()));
bus.reply(msg, new VmAttachNicOnHypervisorReply());
bus.reply(msg, new DetachNicFromVmOnHypervisorReply());
return;
}

Expand Down Expand Up @@ -3130,7 +3130,7 @@ public void fail(ErrorCode errorCode) {
private void handle(final VmAttachNicOnHypervisorMsg msg) {
boolean running = Q.New(VmInstanceVO.class)
.eq(VmInstanceVO_.uuid, msg.getNicInventory().getVmInstanceUuid())
.eq(VmInstanceVO_.state, VmInstanceState.Running)
.notNull(VmInstanceVO_.hostUuid)
.isExists();
if (!running) {
logger.debug(String.format("Skip attach nic[uuid=%s] on hypervisor: VM[uuid=%s] is not running",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
import org.zstack.header.message.MessageReply;
import org.zstack.header.vm.*;
import org.zstack.kvm.*;
import org.zstack.kvm.KVMAgentCommands.DestroyVmCmd;
import org.zstack.kvm.KVMAgentCommands.RebootVmResponse;
import org.zstack.kvm.KVMAgentCommands.StopVmCmd;
import org.zstack.kvm.KVMAgentCommands.VmDevicesInfoResponse;
import org.zstack.utils.Utils;
import org.zstack.utils.logging.CLogger;

Expand Down Expand Up @@ -126,6 +130,11 @@ public void run(MessageReply reply) {
@Override
public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2453,6 +2453,11 @@ public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {
notifySugonSdn(inv, destHostUuid, "add");
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,11 @@ public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) {
}
}

@Override
public void postMigrateVm(VmInstanceInventory inv, String destHostUuid) {

}

@Override
public void beforeMigrateVm(VmInstanceInventory inv, String destHostUuid) {

Expand Down
Loading

0 comments on commit fc4fd4b

Please sign in to comment.