Skip to content

Commit c466e34

Browse files
committed
Merge branch 'shixin-ZCF-1365' into 'feature-5.5.12-zns'
<doc>[sdnController]: integraion zns into cloud See merge request zstackio/zstack!9447
2 parents 327b1cc + 1416f61 commit c466e34

35 files changed

Lines changed: 1902 additions & 127 deletions

File tree

compute/src/main/java/org/zstack/compute/vm/VmAllocateNicFlow.java

Lines changed: 194 additions & 84 deletions
Large diffs are not rendered by default.

compute/src/main/java/org/zstack/compute/vm/VmDetachNicFlow.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
import org.zstack.core.asyncbatch.While;
77
import org.zstack.core.cloudbus.CloudBus;
88
import org.zstack.core.cloudbus.CloudBusCallBack;
9+
import org.zstack.core.componentloader.PluginRegistry;
910
import org.zstack.core.db.DatabaseFacade;
1011
import org.zstack.core.db.UpdateQuery;
12+
import org.zstack.header.core.Completion;
1113
import org.zstack.header.core.WhileDoneCompletion;
1214
import org.zstack.header.core.workflow.FlowTrigger;
1315
import org.zstack.header.core.workflow.NoRollbackFlow;
16+
import org.zstack.header.errorcode.ErrorCode;
1417
import org.zstack.header.errorcode.ErrorCodeList;
1518
import org.zstack.header.message.MessageReply;
1619
import org.zstack.header.network.l3.L3NetworkConstant;
@@ -20,19 +23,28 @@
2023
import org.zstack.utils.CollectionUtils;
2124
import org.zstack.utils.function.Function;
2225

26+
import org.zstack.utils.Utils;
27+
import org.zstack.utils.logging.CLogger;
28+
29+
import java.util.List;
2330
import java.util.Map;
2431

2532
/**
2633
* Created by frank on 7/18/2015.
2734
*/
2835
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
2936
public class VmDetachNicFlow extends NoRollbackFlow {
37+
private static final CLogger logger = Utils.getLogger(VmDetachNicFlow.class);
3038
@Autowired
3139
private DatabaseFacade dbf;
3240
@Autowired
3341
private CloudBus bus;
3442
@Autowired
3543
private VmInstanceDeviceManager vidm;
44+
@Autowired
45+
private VmInstanceManager vmMgr;
46+
@Autowired
47+
private PluginRegistry pluginRgty;
3648

3749
@Override
3850
public void run(FlowTrigger trigger, Map data) {
@@ -68,6 +80,10 @@ public String call(VmNicInventory arg) {
6880
return;
6981
}
7082

83+
returnIpsAndDeleteNic(nic, trigger);
84+
}
85+
86+
private void returnIpsAndDeleteNic(VmNicInventory nic, FlowTrigger trigger) {
7187
new While<>(nic.getUsedIps()).all((ip, comp) -> {
7288
ReturnIpMsg msg = new ReturnIpMsg();
7389
msg.setUsedIpUuid(ip.getUuid());
@@ -83,8 +99,51 @@ public void run(MessageReply reply) {
8399
@Override
84100
public void done(ErrorCodeList errorCodeList) {
85101
dbf.removeByPrimaryKey(nic.getUuid(), VmNicVO.class);
86-
trigger.next();
102+
103+
callAfterReleaseVmNicExtensions(nic, new Completion(trigger) {
104+
@Override
105+
public void success() {
106+
trigger.next();
107+
}
108+
109+
@Override
110+
public void fail(ErrorCode errorCode) {
111+
logger.warn(String.format("afterReleaseVmNic extensions failed for nic[uuid:%s]: %s, continue",
112+
nic.getUuid(), errorCode));
113+
trigger.next();
114+
}
115+
});
87116
}
88117
});
89118
}
119+
120+
private void callAfterReleaseVmNicExtensions(VmNicInventory nic, Completion completion) {
121+
List<AfterReleaseVmNicExtensionPoint> exts = pluginRgty.getExtensionList(AfterReleaseVmNicExtensionPoint.class);
122+
if (exts.isEmpty()) {
123+
completion.success();
124+
return;
125+
}
126+
127+
new While<>(exts).each((ext, wcomp) -> {
128+
ext.afterReleaseVmNic(nic, new Completion(wcomp) {
129+
@Override
130+
public void success() {
131+
wcomp.done();
132+
}
133+
134+
@Override
135+
public void fail(ErrorCode errorCode) {
136+
logger.warn(String.format("afterReleaseVmNic extension failed for nic[uuid:%s]: %s, continue",
137+
nic.getUuid(), errorCode));
138+
wcomp.done();
139+
}
140+
});
141+
}).run(new WhileDoneCompletion(completion) {
142+
@Override
143+
public void done(ErrorCodeList errorCodeList) {
144+
completion.success();
145+
}
146+
});
147+
}
148+
90149
}

compute/src/main/java/org/zstack/compute/vm/VmNicManagerImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,10 +295,17 @@ public VmNicType getVmNicType(String vmUuid, L3NetworkInventory l3nw) {
295295
logger.debug(String.format("create %s on l3 network[uuid:%s] inside VmAllocateNicFlow",
296296
enableSriov ? "vf nic" : "vnic", l3nw.getUuid()));
297297
boolean enableVhostUser = NetworkServiceGlobalConfig.ENABLE_VHOSTUSER.value(Boolean.class);
298+
299+
boolean enableDpdkVhostuser = Q.New(SystemTagVO.class)
300+
.eq(SystemTagVO_.resourceType, VmInstanceVO.class.getSimpleName())
301+
.eq(SystemTagVO_.resourceUuid, vmUuid)
302+
.eq(SystemTagVO_.tag, String.format("enableDpdkVhostuser::%s", l3nw.getUuid()))
303+
.isExists();
304+
298305
VmNicType.VmNicSubType subType = VmNicType.VmNicSubType.NONE;
299306
if (enableSriov) {
300307
subType = VmNicType.VmNicSubType.SRIOV;
301-
} else if (enableVhostUser) {
308+
} else if (enableVhostUser || enableDpdkVhostuser) {
302309
subType = VmNicType.VmNicSubType.VHOSTUSER;
303310
}
304311
L2NetworkVO l2nw = dbf.findByUuid(l3nw.getL2NetworkUuid(), L2NetworkVO.class);

compute/src/main/java/org/zstack/compute/vm/VmReturnReleaseNicFlow.java

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
import org.zstack.core.asyncbatch.While;
77
import org.zstack.core.cloudbus.CloudBus;
88
import org.zstack.core.cloudbus.CloudBusCallBack;
9+
import org.zstack.core.componentloader.PluginRegistry;
910
import org.zstack.core.db.DatabaseFacade;
11+
import org.zstack.header.core.Completion;
1012
import org.zstack.header.core.WhileDoneCompletion;
1113
import org.zstack.header.core.workflow.FlowTrigger;
1214
import org.zstack.header.core.workflow.NoRollbackFlow;
15+
import org.zstack.header.errorcode.ErrorCode;
1316
import org.zstack.header.errorcode.ErrorCodeList;
1417
import org.zstack.header.message.MessageReply;
1518
import org.zstack.header.network.l3.L3NetworkConstant;
@@ -34,6 +37,10 @@ public class VmReturnReleaseNicFlow extends NoRollbackFlow {
3437
protected CloudBus bus;
3538
@Autowired
3639
protected VmInstanceDeletionPolicyManager deletionPolicyMgr;
40+
@Autowired
41+
protected VmInstanceManager vmMgr;
42+
@Autowired
43+
protected PluginRegistry pluginRgty;
3744

3845
@Override
3946
public void run(FlowTrigger chain, Map data) {
@@ -43,6 +50,11 @@ public void run(FlowTrigger chain, Map data) {
4350
return;
4451
}
4552

53+
returnIpsAndReleaseNics(spec, data, chain);
54+
}
55+
56+
57+
private void returnIpsAndReleaseNics(VmInstanceSpec spec, Map data, FlowTrigger chain) {
4658
List<ReturnIpMsg> msgs = new ArrayList<>(spec.getVmInventory().getVmNics().size());
4759
for (VmNicInventory nic : spec.getVmInventory().getVmNics()) {
4860
for (UsedIpInventory ip : nic.getUsedIps()) {
@@ -66,6 +78,7 @@ public void run(MessageReply reply) {
6678
})).run(new WhileDoneCompletion(chain) {
6779
@Override
6880
public void done(ErrorCodeList errorCodeList) {
81+
List<VmNicInventory> releasedNics = new ArrayList<>();
6982
for (VmNicInventory nic : spec.getVmInventory().getVmNics()) {
7083
VmNicVO vo = dbf.findByUuid(nic.getUuid(), VmNicVO.class);
7184
if (VmInstanceConstant.USER_VM_TYPE.equals(spec.getVmInventory().getType())) {
@@ -82,8 +95,57 @@ public void done(ErrorCodeList errorCodeList) {
8295
} else {
8396
dbf.remove(vo);
8497
}
98+
releasedNics.add(nic);
99+
}
100+
101+
callAfterReleaseVmNicExtensions(releasedNics, new Completion(chain) {
102+
@Override
103+
public void success() {
104+
chain.next();
105+
}
106+
107+
@Override
108+
public void fail(ErrorCode errorCode) {
109+
logger.warn(String.format("afterReleaseVmNic extensions failed: %s, continue anyway", errorCode));
110+
chain.next();
111+
}
112+
});
113+
}
114+
});
115+
}
116+
117+
private void callAfterReleaseVmNicExtensions(List<VmNicInventory> nics, Completion completion) {
118+
List<AfterReleaseVmNicExtensionPoint> exts = pluginRgty.getExtensionList(AfterReleaseVmNicExtensionPoint.class);
119+
if (exts.isEmpty() || nics.isEmpty()) {
120+
completion.success();
121+
return;
122+
}
123+
124+
new While<>(nics).each((nic, wcomp) -> {
125+
new While<>(exts).each((ext, wcomp2) -> {
126+
ext.afterReleaseVmNic(nic, new Completion(wcomp2) {
127+
@Override
128+
public void success() {
129+
wcomp2.done();
130+
}
131+
132+
@Override
133+
public void fail(ErrorCode errorCode) {
134+
logger.warn(String.format("afterReleaseVmNic extension failed for nic[uuid:%s]: %s, continue",
135+
nic.getUuid(), errorCode));
136+
wcomp2.done();
137+
}
138+
});
139+
}).run(new WhileDoneCompletion(wcomp) {
140+
@Override
141+
public void done(ErrorCodeList errorCodeList) {
142+
wcomp.done();
85143
}
86-
chain.next();
144+
});
145+
}).run(new WhileDoneCompletion(completion) {
146+
@Override
147+
public void done(ErrorCodeList errorCodeList) {
148+
completion.success();
87149
}
88150
});
89151
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-- ZNS SDN Controller support
2+
3+
CREATE TABLE IF NOT EXISTS `ZnsControllerVO` (
4+
`uuid` varchar(32) NOT NULL,
5+
PRIMARY KEY (`uuid`),
6+
CONSTRAINT `fkZnsControllerVOSdnControllerVO` FOREIGN KEY (`uuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE
7+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
8+
9+
CREATE TABLE IF NOT EXISTS `L2GeneveNetworkVO` (
10+
`uuid` varchar(32) NOT NULL,
11+
`geneveId` int(10) unsigned NOT NULL,
12+
PRIMARY KEY (`uuid`),
13+
CONSTRAINT `fkL2GeneveNetworkVOL2NetworkEO` FOREIGN KEY (`uuid`) REFERENCES `L2NetworkEO` (`uuid`) ON DELETE CASCADE
14+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
15+
16+
CREATE TABLE IF NOT EXISTS `ZnsTransportZoneVO` (
17+
`uuid` varchar(32) NOT NULL,
18+
`name` varchar(255) DEFAULT NULL,
19+
`description` varchar(2048) DEFAULT NULL,
20+
`type` varchar(64) DEFAULT NULL,
21+
`physicalNetwork` varchar(255) DEFAULT NULL,
22+
`status` varchar(64) DEFAULT NULL,
23+
`isDefault` tinyint(1) NOT NULL DEFAULT 0,
24+
`tags` text DEFAULT NULL,
25+
`znsSdnControllerUuid` varchar(32) NOT NULL,
26+
`createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
27+
`lastOpDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
28+
PRIMARY KEY (`uuid`),
29+
CONSTRAINT `fkZnsTransportZoneVOSdnControllerVO` FOREIGN KEY (`znsSdnControllerUuid`) REFERENCES `SdnControllerVO` (`uuid`) ON DELETE CASCADE
30+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
31+

conf/springConfigXml/sdnController.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
<zstack:extension interface="org.zstack.header.network.l3.AfterAddIpRangeExtensionPoint"/>
3535
<zstack:extension interface="org.zstack.header.network.l3.IpRangeDeletionExtensionPoint"/>
3636
<zstack:extension interface="org.zstack.header.network.service.GetSdnControllerExtensionPoint"/>
37+
<zstack:extension interface="org.zstack.header.vm.BeforeAllocateVmNicExtensionPoint"/>
38+
<zstack:extension interface="org.zstack.header.vm.AfterReleaseVmNicExtensionPoint"/>
3739
</zstack:plugin>
3840
</bean>
3941

0 commit comments

Comments
 (0)