22
33import org .springframework .beans .factory .annotation .Autowired ;
44import org .springframework .transaction .annotation .Transactional ;
5+ import org .zstack .compute .vm .VmInstanceBase ;
56import org .zstack .core .cloudbus .CloudBus ;
67import org .zstack .core .cloudbus .CloudBusCallBack ;
78import org .zstack .core .db .DatabaseFacade ;
1415import org .zstack .header .host .*;
1516import org .zstack .header .message .MessageReply ;
1617import org .zstack .header .network .l2 .*;
18+ import org .zstack .utils .Utils ;
19+ import org .zstack .utils .gson .JSONObjectUtil ;
20+ import org .zstack .utils .logging .CLogger ;
1721
1822import javax .persistence .TypedQuery ;
1923import java .util .*;
@@ -32,6 +36,7 @@ public class KVMConnectExtensionForL2Network implements KVMHostConnectExtensionP
3236 private KVMRealizeL2VlanNetworkBackend vlanNetworkBackend ;
3337 @ Autowired
3438 private CloudBus bus ;
39+ protected static final CLogger logger = Utils .getLogger (KVMConnectExtensionForL2Network .class );
3540
3641 @ Transactional (readOnly = true )
3742 private List <L2NetworkInventory > getL2Networks (String clusterUuid ) {
@@ -41,15 +46,26 @@ private List<L2NetworkInventory> getL2Networks(String clusterUuid) {
4146 q .setParameter ("supportTypes" , getSupportTypes ());
4247 List <L2NetworkVO > vos = q .getResultList ();
4348 List <L2NetworkInventory > ret = new ArrayList <L2NetworkInventory >(vos .size ());
49+ List <L2NetworkInventory > noVlanL2Networks = new ArrayList <>();
4450 for (L2NetworkVO vo : vos ) {
45- if (L2NetworkConstant .L2_VLAN_NETWORK_TYPE .equals (vo .getType ())) {
51+ if (L2NetworkConstant .L2_NO_VLAN_NETWORK_TYPE .equals (vo .getType ())) {
52+ noVlanL2Networks .add (L2NetworkInventory .valueOf (vo ));
53+ } else if (L2NetworkConstant .L2_VLAN_NETWORK_TYPE .equals (vo .getType ())) {
4654 L2VlanNetworkVO vlanvo = dbf .getEntityManager ().find (L2VlanNetworkVO .class , vo .getUuid ());
4755 ret .add (L2VlanNetworkInventory .valueOf (vlanvo ));
4856 } else {
4957 ret .add (L2NetworkInventory .valueOf (vo ));
5058 }
5159 }
52- return ret ;
60+
61+ /* when prepare l2 network, first prepare no vlan network, because mtu of vlan network must less than
62+ * no vlan network */
63+ if (!noVlanL2Networks .isEmpty ()) {
64+ noVlanL2Networks .addAll (ret );
65+ return noVlanL2Networks ;
66+ } else {
67+ return ret ;
68+ }
5369 }
5470
5571 private List <String > getSupportTypes () {
@@ -67,6 +83,8 @@ private void prepareNetwork(final Iterator<L2NetworkInventory> it, final String
6783 FlowChain chain = FlowChainBuilder .newSimpleFlowChain ();
6884 chain .setName (String .format ("prepare-l2-%s-for-kvm-%s-connect" , l2 .getUuid (), hostUuid ));
6985 chain .then (new NoRollbackFlow () {
86+ String __name__ = "check-network-physical-interface" ;
87+
7088 @ Override
7189 public void run (final FlowTrigger trigger , Map data ) {
7290 CheckNetworkPhysicalInterfaceMsg cmsg = new CheckNetworkPhysicalInterfaceMsg ();
@@ -88,6 +106,8 @@ public void run(MessageReply reply) {
88106
89107 if (l2 .getType ().equals (L2NetworkConstant .L2_NO_VLAN_NETWORK_TYPE )) {
90108 chain .then (new NoRollbackFlow () {
109+ String __name__ = "realize_no_vlan" ;
110+
91111 @ Override
92112 public void run (final FlowTrigger trigger , Map data ) {
93113 noVlanNetworkBackend .realize (l2 , hostUuid , true , new Completion (trigger ) {
@@ -105,6 +125,7 @@ public void fail(ErrorCode errorCode) {
105125 });
106126 } else if (L2NetworkConstant .L2_VLAN_NETWORK_TYPE .equals (l2 .getType ())) {
107127 chain .then (new NoRollbackFlow () {
128+ String __name__ = "realize_vlan" ;
108129 @ Override
109130 public void run (final FlowTrigger trigger , Map data ) {
110131 vlanNetworkBackend .realize (l2 , hostUuid , true , new Completion (trigger ) {
0 commit comments