Prevent caller from specifying id during Migration.create()

The patch is to remove id when it was set before creating a migration
in objects, and check if the migration exists before it is created.

Related to blueprint icehouse-objects.

Change-Id: I37ff279f5f74d17ce9c173458ff35826fb10f143
This commit is contained in:
Shane Wang 2014-01-07 14:53:23 +08:00
parent 4c09e4dca5
commit 2b24b3e00d
2 changed files with 18 additions and 0 deletions

View File

@ -13,6 +13,7 @@
# under the License.
from nova import db
from nova import exception
from nova.objects import base
from nova.objects import fields
from nova.objects import instance as instance_obj
@ -57,6 +58,9 @@ class Migration(base.NovaPersistentObject, base.NovaObject):
@base.remotable
def create(self, context):
if self.obj_attr_is_set('id'):
raise exception.ObjectActionError(action='create',
reason='already created')
updates = self.obj_get_changes()
updates.pop('id', None)
db_migration = db.migration_create(context, updates)

View File

@ -14,6 +14,7 @@
from nova import context
from nova import db
from nova import exception
from nova.objects import migration
from nova.openstack.common import timeutils
from nova.tests import fake_instance
@ -81,6 +82,19 @@ class _TestMigrationObject(object):
mig.create(ctxt)
self.assertEqual(fake_migration['dest_compute'], mig.dest_compute)
def test_recreate_fails(self):
ctxt = context.get_admin_context()
fake_migration = fake_db_migration()
self.mox.StubOutWithMock(db, 'migration_create')
db.migration_create(ctxt, {'source_compute': 'foo'}).AndReturn(
fake_migration)
self.mox.ReplayAll()
mig = migration.Migration()
mig.source_compute = 'foo'
mig.create(ctxt)
self.assertRaises(exception.ObjectActionError, mig.create,
self.context)
def test_save(self):
ctxt = context.get_admin_context()
fake_migration = fake_db_migration()