Merge "Decrease amount of queries while adding aggregate metadata"
This commit is contained in:
commit
0b5cb4dda0
@ -5323,14 +5323,17 @@ def aggregate_metadata_add(context, aggregate_id, metadata, set_delete=False,
|
||||
meta_ref.update({"value": metadata[key]})
|
||||
already_existing_keys.add(key)
|
||||
|
||||
new_entries = []
|
||||
for key, value in metadata.iteritems():
|
||||
if key in already_existing_keys:
|
||||
continue
|
||||
meta_ref = models.AggregateMetadata()
|
||||
meta_ref.update({"key": key,
|
||||
"value": value,
|
||||
"aggregate_id": aggregate_id})
|
||||
session.add(meta_ref)
|
||||
new_entries.append({"key": key,
|
||||
"value": value,
|
||||
"aggregate_id": aggregate_id})
|
||||
if new_entries:
|
||||
session.execute(
|
||||
models.AggregateMetadata.__table__.insert(),
|
||||
new_entries)
|
||||
|
||||
return metadata
|
||||
except db_exc.DBDuplicateEntry:
|
||||
|
@ -578,6 +578,18 @@ class AggregateDBApiTestCase(test.TestCase):
|
||||
expected = db.aggregate_metadata_get(ctxt, result['id'])
|
||||
self.assertThat(metadata, matchers.DictMatches(expected))
|
||||
|
||||
def test_aggregate_metadata_add_and_update(self):
|
||||
ctxt = context.get_admin_context()
|
||||
result = _create_aggregate(context=ctxt)
|
||||
metadata = _get_fake_aggr_metadata()
|
||||
key = metadata.keys()[0]
|
||||
new_metadata = {key: 'foo',
|
||||
'fake_new_key': 'fake_new_value'}
|
||||
metadata.update(new_metadata)
|
||||
db.aggregate_metadata_add(ctxt, result['id'], new_metadata)
|
||||
expected = db.aggregate_metadata_get(ctxt, result['id'])
|
||||
self.assertThat(metadata, matchers.DictMatches(expected))
|
||||
|
||||
def test_aggregate_metadata_add_retry(self):
|
||||
ctxt = context.get_admin_context()
|
||||
result = _create_aggregate(context=ctxt, metadata=None)
|
||||
|
Loading…
Reference in New Issue
Block a user