Merge "Caching ResourceCollectionBase::get_members()"
This commit is contained in:
commit
9c268646c8
|
@ -358,6 +358,8 @@ class ResourceCollectionBase(ResourceBase):
|
|||
adapter=utils.get_members_identities)
|
||||
"""A tuple with the members identities"""
|
||||
|
||||
_members = None # caching variable
|
||||
|
||||
def __init__(self, connector, path, redfish_version=None):
|
||||
"""A class representing the base of any Redfish resource collection
|
||||
|
||||
|
@ -398,4 +400,19 @@ class ResourceCollectionBase(ResourceBase):
|
|||
|
||||
:returns: A list of ``_resource_type`` objects
|
||||
"""
|
||||
return [self.get_member(id_) for id_ in self.members_identities]
|
||||
if self._members is None:
|
||||
self._members = [self.get_member(id_)
|
||||
for id_ in self.members_identities]
|
||||
|
||||
for m in self._members:
|
||||
m.refresh(force=False)
|
||||
return self._members
|
||||
|
||||
def _do_refresh(self, force=False):
|
||||
"""Do refresh related activities.
|
||||
|
||||
Undefine the `_members` attribute here for fresh evaluation in
|
||||
subsequent calls to `get_members()` method. Other similar activities
|
||||
can also follow in future, if needed.
|
||||
"""
|
||||
self._members = None
|
||||
|
|
|
@ -83,4 +83,5 @@ class EthernetInterfaceCollection(base.ResourceCollectionBase):
|
|||
greedy-refresh not done for them unless forced by ``force``
|
||||
argument.
|
||||
"""
|
||||
super(EthernetInterfaceCollection, self)._do_refresh(force)
|
||||
self._summary = None
|
||||
|
|
|
@ -155,5 +155,6 @@ class ProcessorCollection(base.ResourceCollectionBase):
|
|||
greedy-refresh not done for them unless forced by ``force``
|
||||
argument.
|
||||
"""
|
||||
super(ProcessorCollection, self)._do_refresh(force)
|
||||
# Reset summary attribute
|
||||
self._summary = None
|
||||
|
|
|
@ -81,6 +81,7 @@ class SimpleStorageCollection(base.ResourceCollectionBase):
|
|||
return self._max_size_bytes
|
||||
|
||||
def _do_refresh(self, force=False):
|
||||
super(SimpleStorageCollection, self)._do_refresh(force)
|
||||
# Note(deray): undefine the attribute here for fresh creation in
|
||||
# subsequent calls to it's exposed property.
|
||||
self._max_size_bytes = None
|
||||
|
|
|
@ -53,5 +53,6 @@ class VolumeCollection(base.ResourceCollectionBase):
|
|||
return self._max_size_bytes
|
||||
|
||||
def _do_refresh(self, force=False):
|
||||
super(VolumeCollection, self)._do_refresh(force)
|
||||
# invalidate the attribute
|
||||
self._max_size_bytes = None
|
||||
|
|
|
@ -129,10 +129,9 @@ class ResourceCollectionBaseTestCase(base.TestCase):
|
|||
self.test_resource_collection.get_member, '2')
|
||||
self.conn.get.assert_called_once_with(path='Fakes/2')
|
||||
|
||||
def test_get_members(self):
|
||||
def _validate_get_members_result(self, member_ids):
|
||||
# | GIVEN |
|
||||
# setting some valid member paths
|
||||
member_ids = ('1', '2')
|
||||
self.test_resource_collection.members_identities = member_ids
|
||||
# | WHEN |
|
||||
result = self.test_resource_collection.get_members()
|
||||
|
@ -143,6 +142,26 @@ class ResourceCollectionBaseTestCase(base.TestCase):
|
|||
self.assertTrue(val.identity in member_ids)
|
||||
self.assertEqual('1.0.x', val.redfish_version)
|
||||
|
||||
return result
|
||||
|
||||
def test_get_members(self):
|
||||
self._validate_get_members_result(('1', '2'))
|
||||
|
||||
def test_get_members_on_refresh(self):
|
||||
self._validate_get_members_result(('1', '2'))
|
||||
|
||||
# Now emulating the resource invalidate and refresh action!
|
||||
self.test_resource_collection.invalidate()
|
||||
self.assertTrue(self.test_resource_collection._is_stale)
|
||||
self.test_resource_collection.refresh(force=False)
|
||||
|
||||
self._validate_get_members_result(('3', '4'))
|
||||
self.assertFalse(self.test_resource_collection._is_stale)
|
||||
|
||||
def test_get_members_caching(self):
|
||||
result = self._validate_get_members_result(('1', '2'))
|
||||
self.assertIs(result, self.test_resource_collection.get_members())
|
||||
|
||||
|
||||
TEST_JSON = {
|
||||
'String': 'a string',
|
||||
|
|
Loading…
Reference in New Issue