You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by GitBox <gi...@apache.org> on 2018/10/10 09:50:38 UTC

[GitHub] rhtyd closed pull request #2888: router: Fixes #2719 program VR nics by device id order for VPC

rhtyd closed pull request #2888: router: Fixes #2719 program VR nics by device id order for VPC
URL: https://github.com/apache/cloudstack/pull/2888
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java
index d8733ca6c50..bf21c93c89f 100644
--- a/api/src/com/cloud/network/NetworkProfile.java
+++ b/api/src/com/cloud/network/NetworkProfile.java
@@ -16,12 +16,12 @@
 // under the License.
 package com.cloud.network;
 
+import java.net.URI;
+
 import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.Networks.Mode;
 import com.cloud.network.Networks.TrafficType;
 
-import java.net.URI;
-
 public class NetworkProfile implements Network {
     private final long id;
     private final String uuid;
@@ -33,6 +33,7 @@
     private URI broadcastUri;
     private final State state;
     private boolean isRedundant;
+    private boolean isRollingRestart = false;
     private final String name;
     private final Mode mode;
     private final BroadcastDomainType broadcastDomainType;
@@ -92,6 +93,7 @@ public NetworkProfile(Network network) {
         guruName = network.getGuruName();
         strechedL2Subnet = network.isStrechedL2Network();
         isRedundant = network.isRedundant();
+        isRollingRestart = network.isRollingRestart();
         externalId = network.getExternalId();
     }
 
@@ -157,7 +159,7 @@ public boolean isRedundant() {
 
     @Override
     public boolean isRollingRestart() {
-        return false;
+        return isRollingRestart;
     }
 
     @Override
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDao.java b/engine/schema/src/com/cloud/vm/dao/NicDao.java
index 0d86964974a..df4fb06325f 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDao.java
@@ -26,6 +26,8 @@
 public interface NicDao extends GenericDao<NicVO, Long> {
     List<NicVO> listByVmId(long instanceId);
 
+    List<NicVO> listByVmIdOrderByDeviceId(long instanceId);
+
     List<String> listIpAddressInNetwork(long networkConfigId);
 
     List<NicVO> listByVmIdIncludingRemoved(long instanceId);
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
index f953a4c1f93..c125d80c534 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
@@ -118,6 +118,13 @@ public void removeNicsForInstance(long instanceId) {
         return listBy(sc);
     }
 
+    @Override
+    public List<NicVO> listByVmIdOrderByDeviceId(long instanceId) {
+        SearchCriteria<NicVO> sc = AllFieldsSearch.create();
+        sc.setParameters("instance", instanceId);
+        return customSearch(sc, new Filter(NicVO.class, "deviceId", true, null, null));
+    }
+
     @Override
     public List<NicVO> listByVmIdIncludingRemoved(long instanceId) {
         SearchCriteria<NicVO> sc = AllFieldsSearch.create();
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index d22dcbafbba..fefd97217af 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -316,7 +316,7 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
             final List<Pair<Nic, Network>> publicNics = new ArrayList<Pair<Nic, Network>>();
             final Map<String, String> vlanMacAddress = new HashMap<String, String>();
 
-            final List<? extends Nic> routerNics = _nicDao.listByVmId(profile.getId());
+            final List<? extends Nic> routerNics = _nicDao.listByVmIdOrderByDeviceId(profile.getId());
             for (final Nic routerNic : routerNics) {
                 final Network network = _networkModel.getNetwork(routerNic.getNetworkId());
                 if (network.getTrafficType() == TrafficType.Guest) {
diff --git a/systemvm/debian/opt/cloud/bin/cs_ip.py b/systemvm/debian/opt/cloud/bin/cs_ip.py
index 1e7b326a1ec..a4e0c33e798 100755
--- a/systemvm/debian/opt/cloud/bin/cs_ip.py
+++ b/systemvm/debian/opt/cloud/bin/cs_ip.py
@@ -16,9 +16,21 @@
 # specific language governing permissions and limitations
 # under the License.
 
+import os
 from netaddr import *
 
 
+def macdevice_map():
+    device_map = {}
+    for eth in os.listdir('/sys/class/net'):
+        if not eth.startswith('eth'):
+            continue
+        with open('/sys/class/net/%s/address' % eth) as f:
+            mac_address = f.read().replace('\n', '')
+            device_map[mac_address] = eth[3:]
+    return device_map
+
+
 def merge(dbag, ip):
     nic_dev_id = None
     for dev in dbag:
@@ -33,6 +45,11 @@ def merge(dbag, ip):
     ipo = IPNetwork(ip['public_ip'] + '/' + ip['netmask'])
     if 'nic_dev_id' in ip:
         nic_dev_id = ip['nic_dev_id']
+    if 'vif_mac_address' in ip:
+        mac_address = ip['vif_mac_address']
+        device_map = macdevice_map()
+        if mac_address in device_map:
+            nic_dev_id = device_map[mac_address]
     ip['device'] = 'eth' + str(nic_dev_id)
     ip['broadcast'] = str(ipo.broadcast)
     ip['cidr'] = str(ipo.ip) + '/' + str(ipo.prefixlen)
diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java
index 80d25e874a2..262e928b68b 100644
--- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java
+++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java
@@ -37,13 +37,13 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import com.googlecode.ipv6.IPv6Network;
 import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils.SupersetOrSubset;
 import com.googlecode.ipv6.IPv6Address;
+import com.googlecode.ipv6.IPv6Network;
 
 public class NetUtilsTest {
 
@@ -682,6 +682,8 @@ public void testIsValidPort() {
     @Test
     public void testAllIpsOfDefaultNic() {
         final String defaultHostIp = NetUtils.getDefaultHostIp();
-        assertTrue(NetUtils.getAllDefaultNicIps().stream().anyMatch(defaultHostIp::contains));
+        if (defaultHostIp != null) {
+            assertTrue(NetUtils.getAllDefaultNicIps().stream().anyMatch(defaultHostIp::contains));
+        }
     }
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services