Don't query database with an empty list of tags for creation
It raises IntegrityError: NOT NULL constraint failed: tags.resource_id Closes-Bug: #1486041 Change-Id: I9fe43e50ef38bda7b81d0ff201a623742a39b824
This commit is contained in:
parent
e7f183569b
commit
8ffe9e9a8c
|
@ -6413,8 +6413,10 @@ def instance_tag_set(context, instance_uuid, tags):
|
|||
models.Tag.tag.in_(to_delete)).delete(
|
||||
synchronize_session=False)
|
||||
|
||||
data = [{'resource_id': instance_uuid, 'tag': tag} for tag in to_add]
|
||||
session.execute(models.Tag.__table__.insert(), data)
|
||||
if to_add:
|
||||
data = [
|
||||
{'resource_id': instance_uuid, 'tag': tag} for tag in to_add]
|
||||
session.execute(models.Tag.__table__.insert(), data)
|
||||
|
||||
return session.query(models.Tag).filter_by(
|
||||
resource_id=instance_uuid).all()
|
||||
|
|
|
@ -8818,6 +8818,24 @@ class TestDBInstanceTags(test.TestCase):
|
|||
expected = [(uuid, tag3), (uuid, tag4), (uuid, tag2)]
|
||||
self.assertEqual(set(expected), set(tags))
|
||||
|
||||
@mock.patch('nova.db.sqlalchemy.models.Tag.__table__.insert',
|
||||
return_value=models.Tag.__table__.insert())
|
||||
def test_instance_tag_set_empty_add(self, mock_insert):
|
||||
uuid = self._create_instance()
|
||||
tag1 = 'tag1'
|
||||
tag2 = 'tag2'
|
||||
|
||||
db.instance_tag_set(self.context, uuid, [tag1, tag2])
|
||||
|
||||
# Check insert() was called to insert 'tag1' and 'tag2'
|
||||
mock_insert.assert_called_once_with()
|
||||
|
||||
mock_insert.reset_mock()
|
||||
db.instance_tag_set(self.context, uuid, [tag1])
|
||||
|
||||
# Check insert() wasn't called because there are no tags for creation
|
||||
mock_insert.assert_not_called()
|
||||
|
||||
@mock.patch('sqlalchemy.orm.query.Query.delete')
|
||||
def test_instance_tag_set_empty_delete(self, mock_delete):
|
||||
uuid = self._create_instance()
|
||||
|
|
Loading…
Reference in New Issue