From: Thomas Goirand Date: Sat, 29 Jun 2013 04:39:27 +0000 (+0800) Subject: Merge tag '2013.2_b1' into debian/havana X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=896537795b3c3e1daeeaf81c40793f27003ddd90;p=openstack-build%2Fcinder-build.git Merge tag '2013.2_b1' into debian/havana Cinder havana-1 milestone (2013.2.b1) Conflicts: cinder/openstack/common/setup.py cinder/openstack/common/version.py tools/flakes.py --- 896537795b3c3e1daeeaf81c40793f27003ddd90 diff --cc cinder/tests/test_nfs.py index ebeb0d1cd,3f967c6f2..3b42c1bb8 --- a/cinder/tests/test_nfs.py +++ b/cinder/tests/test_nfs.py @@@ -730,31 -659,8 +659,33 @@@ class NfsDriverTestCase(test.TestCase) mox.ReplayAll() - drv.delete_volume(volume) + drv.get_volume_stats() + self.assertEqual(drv._stats['total_capacity_gb'], 30.0) + self.assertEqual(drv._stats['free_capacity_gb'], 5.0) mox.VerifyAll() + + def test_get_volume_stats(self): + """get_volume_stats must fill the correct values""" + mox = self._mox + drv = self._driver + + drv._mounted_shares = [self.TEST_NFS_EXPORT1, self.TEST_NFS_EXPORT2] + + mox.StubOutWithMock(drv, '_ensure_shares_mounted') + mox.StubOutWithMock(drv, '_get_available_capacity') + + drv._ensure_shares_mounted() + + drv._get_available_capacity(self.TEST_NFS_EXPORT1).\ + AndReturn((2 * self.ONE_GB_IN_BYTES, 10 * self.ONE_GB_IN_BYTES)) + drv._get_available_capacity(self.TEST_NFS_EXPORT2).\ + AndReturn((3 * self.ONE_GB_IN_BYTES, 20 * self.ONE_GB_IN_BYTES)) + + mox.ReplayAll() + + drv.get_volume_stats() + self.assertEqual(drv._stats['total_capacity_gb'], 30.0) + self.assertEqual(drv._stats['free_capacity_gb'], 5.0) + + mox.VerifyAll() diff --cc cinder/volume/drivers/san/hp/hp_3par_common.py index 10a18bbb0,946890499..a3fb8aafd --- a/cinder/volume/drivers/san/hp/hp_3par_common.py +++ b/cinder/volume/drivers/san/hp/hp_3par_common.py @@@ -415,17 -416,19 +416,51 @@@ exi return self.stats + def _update_volume_stats(self, client): + # const to convert MiB to GB + const = 0.0009765625 + + # storage_protocol and volume_backend_name are + # set in the child classes + stats = {'driver_version': '1.0', + 'free_capacity_gb': 'unknown', + 'reserved_percentage': 0, + 'storage_protocol': None, + 'total_capacity_gb': 'unknown', + 'vendor_name': 'Hewlett-Packard', + 'volume_backend_name': None} ++ ++ try: ++ cpg = client.getCPG(self.config.hp3par_cpg) ++ if 'limitMiB' not in cpg['SDGrowth']: ++ total_capacity = 'infinite' ++ free_capacity = 'infinite' ++ else: ++ total_capacity = int(cpg['SDGrowth']['limitMiB'] * const) ++ free_capacity = int((cpg['SDGrowth']['limitMiB'] - ++ cpg['UsrUsage']['usedMiB']) * const) ++ ++ stats['total_capacity_gb'] = total_capacity ++ stats['free_capacity_gb'] = free_capacity ++ except hpexceptions.HTTPNotFound: ++ err = (_("CPG (%s) doesn't exist on array") ++ % self.config.hp3par_cpg) ++ LOG.error(err) ++ raise exception.InvalidInput(reason=err) ++ ++ self.stats = stats ++ + def _update_volume_stats(self, client): + + # storage_protocol and volume_backend_name are + # set in the child classes + stats = {'driver_version': '1.0', + 'free_capacity_gb': 'unknown', + 'reserved_percentage': 0, + 'storage_protocol': None, + 'total_capacity_gb': 'unknown', + 'vendor_name': 'Hewlett-Packard', + 'volume_backend_name': None} try: cpg = client.getCPG(self.config.hp3par_cpg) diff --cc cinder/volume/manager.py index f2be2d649,5e1397ec2..9a7513f3d --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@@ -487,12 -495,14 +495,19 @@@ class VolumeManager(manager.SchedulerDe context = context.elevated() snapshot_ref = self.db.snapshot_get(context, snapshot_id) LOG.info(_("snapshot %s: deleting"), snapshot_ref['name']) + self._notify_about_snapshot_usage( + context, snapshot_ref, "delete.start") + + if context.project_id != snapshot_ref['project_id']: + project_id = snapshot_ref['project_id'] + else: + project_id = context.project_id + if context.project_id != snapshot_ref['project_id']: + project_id = snapshot_ref['project_id'] + else: + project_id = context.project_id + try: LOG.debug(_("snapshot %s: deleting"), snapshot_ref['name']) self.driver.delete_snapshot(snapshot_ref)