From: Victor Stinner <vstinner@redhat.com>
Date: Wed, 7 Oct 2015 17:01:57 +0000 (+0200)
Subject: Port violin driver to Python 3
X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=1874f7cfae6bdfb30a7ed1877f4534a8f1f8852a;p=openstack-build%2Fcinder-build.git

Port violin driver to Python 3

* Replace dict.items()[0] with list(dict.items())[0], same for
  dict.values()
* Replace dict.iteritems() with dict.items()
* Replace dict.itervalues() with dict.values()
* Replace a/b with a//b to get integer on Python 3.
* test_get_active_fc_targets(): ignore order when comparing active
  FC targets. On Python 3, the hash function is randomized and so
  dictionaries values are returned in a random order.

Partial-Implements: blueprint cinder-python3
Change-Id: If2c50606ae68b7f645bfdbe5aaf7510a512e709a
---

diff --git a/cinder/tests/unit/test_v7000_fcp.py b/cinder/tests/unit/test_v7000_fcp.py
index b5c81912d..f736a7d8c 100644
--- a/cinder/tests/unit/test_v7000_fcp.py
+++ b/cinder/tests/unit/test_v7000_fcp.py
@@ -385,9 +385,9 @@ class V7000FCPDriverTestCase(test.TestCase):
 
         result = self.driver._get_active_fc_targets()
 
-        self.assertEqual(['2100001b9745e230', '2100001b9745e25f',
-                          '2100001b9745e231', '2100001b9745e25e'],
-                         result)
+        self.assertEqual({'2100001b9745e230', '2100001b9745e25f',
+                          '2100001b9745e231', '2100001b9745e25e'},
+                         set(result))
 
     def test_initialize_connection(self):
         lun_id = 1
diff --git a/cinder/volume/drivers/violin/v6000_common.py b/cinder/volume/drivers/violin/v6000_common.py
index a777d7d4f..9d1cc09c0 100644
--- a/cinder/volume/drivers/violin/v6000_common.py
+++ b/cinder/volume/drivers/violin/v6000_common.py
@@ -115,7 +115,7 @@ class V6000Common(object):
         ret_dict = self.vip.basic.get_node_values(
             "/vshare/state/local/container/*")
         if ret_dict:
-            self.container = ret_dict.items()[0][1]
+            self.container = list(ret_dict.items())[0][1]
 
     def check_for_setup_error(self):
         """Returns an error if prerequisites aren't met."""
diff --git a/cinder/volume/drivers/violin/v6000_fcp.py b/cinder/volume/drivers/violin/v6000_fcp.py
index af19efa3b..096aeee11 100644
--- a/cinder/volume/drivers/violin/v6000_fcp.py
+++ b/cinder/volume/drivers/violin/v6000_fcp.py
@@ -430,8 +430,8 @@ class V6000FCDriver(driver.FibreChannelDriver):
         free_gb = 0
         v = self.common.vip
 
-        master_cluster_id = v.basic.get_node_values(
-            '/cluster/state/master_id').values()[0]
+        master_cluster_id = list(v.basic.get_node_values(
+            '/cluster/state/master_id').values())[0]
 
         bn1 = "/vshare/state/global/%s/container/%s/total_bytes" \
             % (master_cluster_id, self.common.container)
@@ -440,14 +440,14 @@ class V6000FCDriver(driver.FibreChannelDriver):
         resp = v.basic.get_node_values([bn1, bn2])
 
         if bn1 in resp:
-            total_gb = resp[bn1] / units.Gi
+            total_gb = resp[bn1] // units.Gi
         else:
             LOG.warning(_LW("Failed to receive update for total_gb stat!"))
             if 'total_capacity_gb' in self.stats:
                 total_gb = self.stats['total_capacity_gb']
 
         if bn2 in resp:
-            free_gb = resp[bn2] / units.Gi
+            free_gb = resp[bn2] // units.Gi
         else:
             LOG.warning(_LW("Failed to receive update for free_gb stat!"))
             if 'free_capacity_gb' in self.stats:
diff --git a/cinder/volume/drivers/violin/v6000_iscsi.py b/cinder/volume/drivers/violin/v6000_iscsi.py
index aa525e9c7..adad1150b 100644
--- a/cinder/volume/drivers/violin/v6000_iscsi.py
+++ b/cinder/volume/drivers/violin/v6000_iscsi.py
@@ -449,8 +449,8 @@ class V6000ISCSIDriver(driver.ISCSIDriver):
         free_gb = 0
         v = self.common.vip
 
-        master_cluster_id = v.basic.get_node_values(
-            '/cluster/state/master_id').values()[0]
+        master_cluster_id = list(v.basic.get_node_values(
+            '/cluster/state/master_id').values())[0]
 
         bn1 = "/vshare/state/global/%s/container/%s/total_bytes" \
             % (master_cluster_id, self.common.container)
@@ -459,14 +459,14 @@ class V6000ISCSIDriver(driver.ISCSIDriver):
         resp = v.basic.get_node_values([bn1, bn2])
 
         if bn1 in resp:
-            total_gb = resp[bn1] / units.Gi
+            total_gb = resp[bn1] // units.Gi
         else:
             LOG.warning(_LW("Failed to receive update for total_gb stat!"))
             if 'total_capacity_gb' in self.stats:
                 total_gb = self.stats['total_capacity_gb']
 
         if bn2 in resp:
-            free_gb = resp[bn2] / units.Gi
+            free_gb = resp[bn2] // units.Gi
         else:
             LOG.warning(_LW("Failed to receive update for free_gb stat!"))
             if 'free_capacity_gb' in self.stats:
@@ -554,7 +554,7 @@ class V6000ISCSIDriver(driver.ISCSIDriver):
 
         ret_dict = conn.basic.get_node_values("/system/hostname")
         if ret_dict:
-            hostname = ret_dict.items()[0][1]
+            hostname = list(ret_dict.items())[0][1]
         else:
             LOG.debug("Unable to fetch gateway hostname for %s.", mg_to_query)
 
diff --git a/cinder/volume/drivers/violin/v7000_common.py b/cinder/volume/drivers/violin/v7000_common.py
index fba65080e..b4e8516e0 100644
--- a/cinder/volume/drivers/violin/v7000_common.py
+++ b/cinder/volume/drivers/violin/v7000_common.py
@@ -133,7 +133,7 @@ class V7000Common(object):
             thin_lun = True
             # Set the actual allocation size for thin lun
             # default here is 10%
-            size_mb = size_mb / 10
+            size_mb = size_mb // 10
 
         typeid = volume['volume_type_id']
         if typeid:
@@ -143,7 +143,7 @@ class V7000Common(object):
                 thin_lun = True
                 # Set the actual allocation size for thin lun
                 # default here is 10%
-                size_mb = size_mb / 10
+                size_mb = size_mb // 10
 
             spec_value = self._get_volume_type_extra_spec(volume, "dedup")
             if spec_value and spec_value.lower() == "true":
@@ -153,7 +153,7 @@ class V7000Common(object):
                 # Set the actual allocation size for thin lun
                 # default here is 10%. The actual allocation may
                 # different, depending on other factors
-                size_mb = full_size_mb / 10
+                size_mb = full_size_mb // 10
 
             # Extract the storage_pool name if one is specified
             pool = self._get_violin_extra_spec(volume, "storage_pool")
@@ -817,7 +817,7 @@ class V7000Common(object):
         if typeid:
             volume_type = volume_types.get_volume_type(ctxt, typeid)
             volume_specs = volume_type.get('extra_specs')
-            for key, val in volume_specs.iteritems():
+            for key, val in volume_specs.items():
 
                 # Strip the prefix "capabilities"
                 if ':' in key:
@@ -842,7 +842,7 @@ class V7000Common(object):
         if typeid:
             volume_type = volume_types.get_volume_type(ctxt, typeid)
             volume_specs = volume_type.get('extra_specs')
-            for key, val in volume_specs.iteritems():
+            for key, val in volume_specs.items():
 
                 # Strip the prefix "violin"
                 if ':' in key:
diff --git a/cinder/volume/drivers/violin/v7000_fcp.py b/cinder/volume/drivers/violin/v7000_fcp.py
index f6aef8a9c..4e57bbce4 100644
--- a/cinder/volume/drivers/violin/v7000_fcp.py
+++ b/cinder/volume/drivers/violin/v7000_fcp.py
@@ -269,8 +269,8 @@ class V7000FCPDriver(driver.FibreChannelDriver):
 
         for x in all_devices:
             if socket.getfqdn(x['owner']) == array_name:
-                total_gb += x['size_mb'] / 1024
-                free_gb += x['availsize_mb'] / 1024
+                total_gb += x['size_mb'] // 1024
+                free_gb += x['availsize_mb'] // 1024
 
         backend_name = self.configuration.volume_backend_name
         data['volume_backend_name'] = backend_name or self.__class__.__name__
@@ -297,7 +297,7 @@ class V7000FCPDriver(driver.FibreChannelDriver):
         active_gw_fcp_wwns = []
 
         fc_info = v.adapter.get_fc_info()
-        for x in fc_info.itervalues():
+        for x in fc_info.values():
             active_gw_fcp_wwns.append(x[0])
 
         return active_gw_fcp_wwns
diff --git a/tests-py3.txt b/tests-py3.txt
index e933f6a31..af6b30412 100644
--- a/tests-py3.txt
+++ b/tests-py3.txt
@@ -80,6 +80,10 @@ cinder.tests.unit.test_solidfire
 cinder.tests.unit.test_test
 cinder.tests.unit.test_test_utils
 cinder.tests.unit.test_v6000_common
+cinder.tests.unit.test_v6000_fcp
+cinder.tests.unit.test_v6000_iscsi
+cinder.tests.unit.test_v7000_common
+cinder.tests.unit.test_v7000_fcp
 cinder.tests.unit.test_vmware_vmdk
 cinder.tests.unit.test_vmware_volumeops
 cinder.tests.unit.test_volume