Fix performance glitch while sorting image locations
Some of the available glance stores like file, cinder etc has capability to reuse already initiated driver (DRIVER_REUSABLE = 0b01000000). In Caracal we have added a feature to sort image locations based on store weight. As RBD driver of glance does not have this reuse capability, during image list API call it initializes the RBD driver for each of the available image which is causing noticable delay in list call. To avoid this, using new interface added in glance_store which will directly get the weight of the store from memory and return it back to user. Depends-On: https://review.opendev.org/c/openstack/glance_store/+/934362 Closes-Bug: #2086675 Change-Id: I662ba19697e03917ca999920ea7be93a0b2a8296
This commit is contained in:
parent
cfa36c1b55
commit
45202b1e04
@ -723,13 +723,12 @@ def sort_image_locations(locations):
|
||||
if not store_id:
|
||||
return 0
|
||||
try:
|
||||
store = glance_store.get_store_from_store_identifier(store_id)
|
||||
return glance_store.get_store_weight(store_id)
|
||||
except glance_store.exceptions.UnknownScheme:
|
||||
msg = (_LW("Unable to find store '%s', returning "
|
||||
"default weight '0'") % store_id)
|
||||
LOG.warning(msg)
|
||||
return 0
|
||||
return store.weight if store is not None else 0
|
||||
|
||||
sorted_locations = sorted(locations, key=get_store_weight, reverse=True)
|
||||
LOG.debug(('Sorted locations: %s'), sorted_locations)
|
||||
|
@ -192,7 +192,7 @@ class TestUtils(test_utils.BaseTestCase):
|
||||
'url': 'rbd://cccccccc/images/id',
|
||||
'metadata': {'store': 'rbd3'}
|
||||
}]
|
||||
mp = "glance.common.utils.glance_store.get_store_from_store_identifier"
|
||||
mp = "glance.common.utils.glance_store.get_store_weight"
|
||||
with mock.patch(mp) as mock_get_store:
|
||||
utils.sort_image_locations(locations)
|
||||
|
||||
@ -218,10 +218,9 @@ class TestUtils(test_utils.BaseTestCase):
|
||||
'url': 'rbd://cccccccc/images/id',
|
||||
'metadata': {'store': 'rbd3'}
|
||||
}]
|
||||
mp = "glance.common.utils.glance_store.get_store_from_store_identifier"
|
||||
mp = "glance.common.utils.glance_store.get_store_weight"
|
||||
with mock.patch(mp) as mock_get_store:
|
||||
mock_store = mock_get_store.return_value
|
||||
mock_store.weight = 100
|
||||
mock_get_store.return_value = 100
|
||||
utils.sort_image_locations(locations)
|
||||
|
||||
# Since 3 stores are configured, internal method will be called 3 times
|
||||
@ -246,7 +245,7 @@ class TestUtils(test_utils.BaseTestCase):
|
||||
'url': 'rbd://cccccccc/images/id',
|
||||
'metadata': {}
|
||||
}]
|
||||
mp = "glance.common.utils.glance_store.get_store_from_store_identifier"
|
||||
mp = "glance.common.utils.glance_store.get_store_weight"
|
||||
with mock.patch(mp) as mock_get_store:
|
||||
utils.sort_image_locations(locations)
|
||||
|
||||
@ -273,10 +272,9 @@ class TestUtils(test_utils.BaseTestCase):
|
||||
'url': 'rbd://cccccccc/images/id',
|
||||
'metadata': {}
|
||||
}]
|
||||
mp = "glance.common.utils.glance_store.get_store_from_store_identifier"
|
||||
mp = "glance.common.utils.glance_store.get_store_weight"
|
||||
with mock.patch(mp) as mock_get_store:
|
||||
mock_store = mock_get_store.return_value
|
||||
mock_store.weight = 100
|
||||
mock_get_store.return_value = 100
|
||||
utils.sort_image_locations(locations)
|
||||
|
||||
# Since 3 stores are configured, but only one location has
|
||||
@ -303,7 +301,7 @@ class TestUtils(test_utils.BaseTestCase):
|
||||
'url': 'rbd://cccccccc/images/id',
|
||||
'metadata': {'store': 'rbd3'}
|
||||
}]
|
||||
mp = "glance.common.utils.glance_store.get_store_from_store_identifier"
|
||||
mp = "glance.common.utils.glance_store.get_store_weight"
|
||||
with mock.patch(mp) as mock_get_store:
|
||||
mock_get_store.side_effect = store.UnknownScheme()
|
||||
sorted_locations = utils.sort_image_locations(locations)
|
||||
|
Loading…
x
Reference in New Issue
Block a user