Merge "HPE 3par: Update the calculation of free_capacity"

This commit is contained in:
Zuul 2025-02-06 20:23:05 +00:00 committed by Gerrit Code Review
commit a1fb7da213
3 changed files with 58 additions and 66 deletions

View File

@ -8174,7 +8174,7 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
stat_capabilities = { stat_capabilities = {
THROUGHPUT: 0, THROUGHPUT: 0,
@ -8201,9 +8201,9 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
self.assertFalse(stats['pools'][0]['QoS_support']) self.assertFalse(stats['pools'][0]['QoS_support'])
self.assertEqual(86.0, self.assertEqual(86.0,
stats['pools'][0]['provisioned_capacity_gb']) stats['pools'][0]['provisioned_capacity_gb'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual('up', stats['pools'][0]['backend_state']) self.assertEqual('up', stats['pools'][0]['backend_state'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
@ -8241,9 +8241,9 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
self.assertFalse(stats['pools'][0]['QoS_support']) self.assertFalse(stats['pools'][0]['QoS_support'])
self.assertEqual(86.0, self.assertEqual(86.0,
stats['pools'][0]['provisioned_capacity_gb']) stats['pools'][0]['provisioned_capacity_gb'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -8263,7 +8263,7 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
stats['pools'][0][AVG_BUSY_PERC]) stats['pools'][0][AVG_BUSY_PERC])
cpg2 = self.cpgs[0].copy() cpg2 = self.cpgs[0].copy()
cpg2.update({'SDGrowth': {'limitMiB': 8192}}) cpg2.update({'SDGrowth': {'limitMiB': 204800}})
mock_client.getCPG.return_value = cpg2 mock_client.getCPG.return_value = cpg2
stats = self.driver.get_volume_stats(True) stats = self.driver.get_volume_stats(True)
@ -8272,22 +8272,16 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
self.assertTrue(stats['pools'][0]['thin_provisioning_support']) self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support']) self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertFalse(stats['pools'][0]['QoS_support']) self.assertFalse(stats['pools'][0]['QoS_support'])
total_capacity_gb = 8192 * const total_capacity_gb = 200 * 1024 * const
self.assertEqual(total_capacity_gb, self.assertEqual(total_capacity_gb,
stats['pools'][0]['total_capacity_gb']) stats['pools'][0]['total_capacity_gb'])
free_capacity_gb = int( free_capacity_gb = 114
(8192 - (self.cpgs[0]['UsrUsage']['usedMiB'] +
self.cpgs[0]['SDUsage']['usedMiB'])) * const)
self.assertEqual(free_capacity_gb, self.assertEqual(free_capacity_gb,
stats['pools'][0]['free_capacity_gb']) stats['pools'][0]['free_capacity_gb'])
provisioned_capacity_gb = int( provisioned_capacity_gb = 86
(self.cpgs[0]['UsrUsage']['totalMiB'] +
self.cpgs[0]['SAUsage']['totalMiB'] +
self.cpgs[0]['SDUsage']['totalMiB']) * const)
self.assertEqual(provisioned_capacity_gb, self.assertEqual(provisioned_capacity_gb,
stats['pools'][0]['provisioned_capacity_gb']) stats['pools'][0]['provisioned_capacity_gb'])
cap_util = (float(total_capacity_gb - free_capacity_gb) / cap_util = 43.0
float(total_capacity_gb)) * 100
self.assertEqual(cap_util, self.assertEqual(cap_util,
stats['pools'][0]['capacity_utilization']) stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
@ -8336,7 +8330,7 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -8349,9 +8343,9 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertFalse(stats['pools'][0]['thin_provisioning_support']) self.assertFalse(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['QoS_support']) self.assertTrue(stats['pools'][0]['QoS_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -8392,7 +8386,7 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -8403,9 +8397,9 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
stats = self.driver.get_volume_stats(True) stats = self.driver.get_volume_stats(True)
self.assertEqual('FC', stats['storage_protocol']) self.assertEqual('FC', stats['storage_protocol'])
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -8452,7 +8446,7 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -8464,9 +8458,9 @@ class TestHPE3PARFCDriver(HPE3PARBaseDriver):
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support']) self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['QoS_support']) self.assertTrue(stats['pools'][0]['QoS_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -9614,7 +9608,7 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
stat_capabilities = { stat_capabilities = {
THROUGHPUT: 0, THROUGHPUT: 0,
@ -9636,11 +9630,11 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support']) self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support']) self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(86.0, self.assertEqual(86.0,
stats['pools'][0]['provisioned_capacity_gb']) stats['pools'][0]['provisioned_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -9671,7 +9665,7 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
mock_client.assert_has_calls(expected) mock_client.assert_has_calls(expected)
cpg2 = self.cpgs[0].copy() cpg2 = self.cpgs[0].copy()
cpg2.update({'SDGrowth': {'limitMiB': 8192}}) cpg2.update({'SDGrowth': {'limitMiB': 204800}})
mock_client.getCPG.return_value = cpg2 mock_client.getCPG.return_value = cpg2
stats = self.driver.get_volume_stats(True) stats = self.driver.get_volume_stats(True)
@ -9679,22 +9673,16 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support']) self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['thick_provisioning_support']) self.assertTrue(stats['pools'][0]['thick_provisioning_support'])
total_capacity_gb = 8192 * const total_capacity_gb = 200 * 1024 * const
self.assertEqual(total_capacity_gb, self.assertEqual(total_capacity_gb,
stats['pools'][0]['total_capacity_gb']) stats['pools'][0]['total_capacity_gb'])
free_capacity_gb = int( free_capacity_gb = 114
(8192 - (self.cpgs[0]['UsrUsage']['usedMiB'] +
self.cpgs[0]['SDUsage']['usedMiB'])) * const)
self.assertEqual(free_capacity_gb, self.assertEqual(free_capacity_gb,
stats['pools'][0]['free_capacity_gb']) stats['pools'][0]['free_capacity_gb'])
cap_util = (float(total_capacity_gb - free_capacity_gb) / cap_util = 43.0
float(total_capacity_gb)) * 100
self.assertEqual(cap_util, self.assertEqual(cap_util,
stats['pools'][0]['capacity_utilization']) stats['pools'][0]['capacity_utilization'])
provisioned_capacity_gb = int( provisioned_capacity_gb = 86
(self.cpgs[0]['UsrUsage']['totalMiB'] +
self.cpgs[0]['SAUsage']['totalMiB'] +
self.cpgs[0]['SDUsage']['totalMiB']) * const)
self.assertEqual(provisioned_capacity_gb, self.assertEqual(provisioned_capacity_gb,
stats['pools'][0]['provisioned_capacity_gb']) stats['pools'][0]['provisioned_capacity_gb'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
@ -9734,7 +9722,7 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -9745,9 +9733,9 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
stats = self.driver.get_volume_stats(True) stats = self.driver.get_volume_stats(True)
self.assertEqual('iSCSI', stats['storage_protocol']) self.assertEqual('iSCSI', stats['storage_protocol'])
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -9788,7 +9776,7 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -9799,9 +9787,9 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
stats = self.driver.get_volume_stats(True) stats = self.driver.get_volume_stats(True)
self.assertEqual('iSCSI', stats['storage_protocol']) self.assertEqual('iSCSI', stats['storage_protocol'])
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])
@ -9848,7 +9836,7 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
mock_client.getCPGAvailableSpace.return_value = { mock_client.getCPGAvailableSpace.return_value = {
"capacityEfficiency": {u'compaction': 594.4}, "capacityEfficiency": {u'compaction': 594.4},
"rawFreeMiB": 1024.0 * 6, "rawFreeMiB": 1024.0 * 6,
"usableFreeMiB": 1024.0 * 3 "usableFreeMiB": 1024.0 * 79
} }
with mock.patch.object(hpecommon.HPE3PARCommon, with mock.patch.object(hpecommon.HPE3PARCommon,
@ -9860,9 +9848,9 @@ class TestHPE3PARISCSIDriver(HPE3PARBaseDriver):
self.assertEqual('12345', stats['array_id']) self.assertEqual('12345', stats['array_id'])
self.assertTrue(stats['pools'][0]['thin_provisioning_support']) self.assertTrue(stats['pools'][0]['thin_provisioning_support'])
self.assertTrue(stats['pools'][0]['QoS_support']) self.assertTrue(stats['pools'][0]['QoS_support'])
self.assertEqual(24.0, stats['pools'][0]['total_capacity_gb']) self.assertEqual(100.0, stats['pools'][0]['total_capacity_gb'])
self.assertEqual(3.0, stats['pools'][0]['free_capacity_gb']) self.assertEqual(14.0, stats['pools'][0]['free_capacity_gb'])
self.assertEqual(87.5, stats['pools'][0]['capacity_utilization']) self.assertEqual(86.0, stats['pools'][0]['capacity_utilization'])
self.assertEqual(3, stats['pools'][0]['total_volumes']) self.assertEqual(3, stats['pools'][0]['total_volumes'])
self.assertEqual(GOODNESS_FUNCTION, self.assertEqual(GOODNESS_FUNCTION,
stats['pools'][0]['goodness_function']) stats['pools'][0]['goodness_function'])

View File

@ -312,11 +312,12 @@ class HPE3PARCommon(object):
4.0.22 - Fixed clone of replicated volume. Bug #2021941 4.0.22 - Fixed clone of replicated volume. Bug #2021941
4.0.23 - Fixed login/logout while accessing wsapi. Bug #2068795 4.0.23 - Fixed login/logout while accessing wsapi. Bug #2068795
4.0.24 - Fixed retype volume - thin to deco. Bug #2080927 4.0.24 - Fixed retype volume - thin to deco. Bug #2080927
4.0.25 - Update the calculation of free_capacity
""" """
VERSION = "4.0.24" VERSION = "4.0.25"
stats = {} stats = {}
@ -1749,8 +1750,6 @@ class HPE3PARCommon(object):
# cpg usable free space # cpg usable free space
cpg_avail_space = ( cpg_avail_space = (
self.client.getCPGAvailableSpace(cpg_name)) self.client.getCPGAvailableSpace(cpg_name))
free_capacity = int(
cpg_avail_space['usableFreeMiB'] * const)
# total_capacity is the best we can do for a limitless cpg # total_capacity is the best we can do for a limitless cpg
total_capacity = int( total_capacity = int(
(cpg['SDUsage']['usedMiB'] + (cpg['SDUsage']['usedMiB'] +
@ -1758,16 +1757,15 @@ class HPE3PARCommon(object):
cpg_avail_space['usableFreeMiB']) * const) cpg_avail_space['usableFreeMiB']) * const)
else: else:
total_capacity = int(cpg['SDGrowth']['limitMiB'] * const) total_capacity = int(cpg['SDGrowth']['limitMiB'] * const)
free_capacity = int((cpg['SDGrowth']['limitMiB'] -
(cpg['UsrUsage']['usedMiB'] +
cpg['SDUsage']['usedMiB'])) * const)
capacity_utilization = (
(float(total_capacity - free_capacity) /
float(total_capacity)) * 100)
provisioned_capacity = int((cpg['UsrUsage']['totalMiB'] + provisioned_capacity = int((cpg['UsrUsage']['totalMiB'] +
cpg['SAUsage']['totalMiB'] + cpg['SAUsage']['totalMiB'] +
cpg['SDUsage']['totalMiB']) * cpg['SDUsage']['totalMiB']) *
const) const)
free_capacity = total_capacity - provisioned_capacity
capacity_utilization = (
(float(total_capacity - free_capacity) /
float(total_capacity)) * 100)
except hpeexceptions.HTTPNotFound: except hpeexceptions.HTTPNotFound:
err = (_("CPG (%s) doesn't exist on array") err = (_("CPG (%s) doesn't exist on array")

View File

@ -0,0 +1,6 @@
---
other:
- |
HPE 3PAR driver: In get_volume_stats response, updated the
logic to calculate free_capacity