DRBD: Remove cast to int in size calculation

In Python2.x, "int" is 32bit only, and so this overflows for 2TiB
volumes. If we remove the casting to int before return, then it
works for python 2 and 3.

This is a resubmission of 395132

Change-Id: I3e4814ee066df5726b0a2b599961511c2516135b
This commit is contained in:
Philipp Marek 2016-06-13 15:10:17 +02:00 committed by Hayley Swimelar
parent 85ca014ac8
commit d19fb59014
2 changed files with 14 additions and 2 deletions

View File

@ -618,6 +618,18 @@ class DrbdManageIscsiTestCase(test.TestCase):
self.assertEqual("set_drbdsetup_props", dmd.odm.next_call())
self.assertEqual("run_external_plugin", dmd.odm.next_call())
def test_unit_conversions(self):
dmd = drv.DrbdManageIscsiDriver(configuration=self.configuration)
self.assertEqual(1048576, dmd._vol_size_to_dm(1))
self.assertEqual(1, dmd._vol_size_to_cinder(1048576))
self.assertEqual(5368709120, dmd._vol_size_to_dm(5120))
self.assertEqual(5120, dmd._vol_size_to_cinder(5368709120))
self.assertEqual(10737418240, dmd._vol_size_to_dm(10240))
self.assertEqual(10240, dmd._vol_size_to_cinder(10737418240))
class DrbdManageDrbdTestCase(DrbdManageIscsiTestCase):

View File

@ -278,10 +278,10 @@ class DrbdManageBaseDriver(driver.VolumeDriver):
# DRBDmanage works in kiB units; Cinder uses GiB.
def _vol_size_to_dm(self, size):
return int(size * units.Gi / units.Ki)
return size * units.Gi / units.Ki
def _vol_size_to_cinder(self, size):
return int(size * units.Ki / units.Gi)
return size * units.Ki / units.Gi
def is_clean_volume_name(self, name, prefix):
try: