Add util to generate resource request group UUID

Add a new utility function that can be used to generate a stable UUID
for a resource request group.

Related-Bug: #1922237
See-Also: https://review.opendev.org/785236
Change-Id: Ic3718defd74c2165077bb5a942e46474d3582cf5
This commit is contained in:
Przemyslaw Szczerbik 2021-08-18 13:24:06 +02:00
parent 272bb88a86
commit 794fc7032e
2 changed files with 42 additions and 0 deletions

View File

@ -111,6 +111,18 @@ def device_resource_provider_uuid(namespace, host, device, separator=':'):
return six_uuid5(namespace=namespace, name=name)
def resource_request_group_uuid(namespace, qos_rules, separator=':'):
"""Generate a stable UUID for a resource request group.
:param namespace: A UUID object identifying a port.
:param qos_rules: A list of QoS rules contributing to the group.
:param separator: A string used in assembling a name for uuid5(). Optional.
:returns: A unique and stable UUID identifying a resource request group.
"""
name = separator.join([rule.id for rule in qos_rules])
return six_uuid5(namespace=namespace, name=name)
def _parse_rp_rate(rate_str):
"""Parse the config string value to an non-negative integer.

View File

@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from unittest import mock
import uuid
from neutron_lib.placement import utils as place_utils
@ -73,6 +74,18 @@ class TestPlacementUtils(base.BaseTestCase):
except Exception:
self.fail('could not generate device resource provider uuid')
def test_resource_request_group_uuid(self):
try:
# assertNotRaises
place_utils.resource_request_group_uuid(
namespace=self._uuid_ns,
qos_rules=[
mock.MagicMock(id='fake_id_0'),
mock.MagicMock(id='fake_id_1')
])
except Exception:
self.fail('could not generate resource request group uuid')
def test_agent_resource_provider_uuid_stable(self):
uuid_a = place_utils.agent_resource_provider_uuid(
namespace=self._uuid_ns,
@ -93,6 +106,23 @@ class TestPlacementUtils(base.BaseTestCase):
device='some-device')
self.assertEqual(uuid_a, uuid_b)
def test_resource_request_group_uuid_stable(self):
uuid_a = place_utils.resource_request_group_uuid(
namespace=self._uuid_ns,
qos_rules=[
mock.MagicMock(id='fake_id_0'),
mock.MagicMock(id='fake_id_1')
]
)
uuid_b = place_utils.resource_request_group_uuid(
namespace=self._uuid_ns,
qos_rules=[
mock.MagicMock(id='fake_id_0'),
mock.MagicMock(id='fake_id_1')
]
)
self.assertEqual(uuid_a, uuid_b)
def test_parse_rp_bandwidths(self):
self.assertEqual(
{},