Merge "Add volume size verify for replica based on master"
This commit is contained in:
commit
e94dcce00d
|
@ -286,6 +286,10 @@ common_opts = [
|
|||
help='Enable verification of Swift checksum before starting '
|
||||
'restore. Makes sure the checksum of original backup matches '
|
||||
'the checksum of the Swift backup file.'),
|
||||
cfg.BoolOpt('verify_replica_volume_size', default=True,
|
||||
help='Require the replica volume size to be greater than '
|
||||
'or equal to the size of the master volume '
|
||||
'during replica creation.'),
|
||||
cfg.StrOpt('storage_strategy', default='SwiftStorage',
|
||||
help="Default strategy to store backups."),
|
||||
cfg.StrOpt('storage_namespace',
|
||||
|
|
|
@ -955,6 +955,14 @@ class Instance(BuiltInstance):
|
|||
raise exception.Forbidden(
|
||||
_("Cannot create a replica of a replica %(id)s.")
|
||||
% {'id': slave_of_id})
|
||||
if (CONF.verify_replica_volume_size
|
||||
and replica_source.volume_size > volume_size):
|
||||
raise exception.Forbidden(
|
||||
_("Replica volume size should not be smaller than"
|
||||
" master's, replica volume size: %(replica_size)s"
|
||||
" and master volume size: %(master_size)s.")
|
||||
% {'replica_size': volume_size,
|
||||
'master_size': replica_source.volume_size})
|
||||
# load the replica source status to check if
|
||||
# source is available
|
||||
load_simple_instance_server_status(
|
||||
|
|
|
@ -681,7 +681,7 @@ class CreateInstance(object):
|
|||
instance_info.dbaas_datastore = CONFIG.dbaas_datastore
|
||||
instance_info.dbaas_datastore_version = CONFIG.dbaas_datastore_version
|
||||
if VOLUME_SUPPORT:
|
||||
instance_info.volume = {'size': CONFIG.get('trove_volume_size', 1)}
|
||||
instance_info.volume = {'size': CONFIG.get('trove_volume_size', 2)}
|
||||
else:
|
||||
instance_info.volume = None
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ def create_slave():
|
|||
result = instance_info.dbaas.instances.create(
|
||||
instance_info.name + "_slave",
|
||||
instance_info.dbaas_flavor_href,
|
||||
instance_info.volume,
|
||||
{'size': 2},
|
||||
datastore=instance_info.dbaas_datastore,
|
||||
datastore_version=instance_info.dbaas_datastore_version,
|
||||
nics=instance_info.nics,
|
||||
|
|
|
@ -351,7 +351,8 @@ class TestReplication(trove_testtools.TestCase):
|
|||
InstanceTasks.NONE,
|
||||
id=str(uuid.uuid4()),
|
||||
name="TestMasterInstance",
|
||||
datastore_version_id=self.datastore_version.id)
|
||||
datastore_version_id=self.datastore_version.id,
|
||||
volume_size=2)
|
||||
self.master.set_task_status(InstanceTasks.NONE)
|
||||
self.master.save()
|
||||
self.master_status = InstanceServiceStatus(
|
||||
|
@ -381,7 +382,7 @@ class TestReplication(trove_testtools.TestCase):
|
|||
self.assertRaises(exception.UnprocessableEntity,
|
||||
Instance.create,
|
||||
None, 'name', 1, "UUID", [], [], self.datastore,
|
||||
self.datastore_version, 1,
|
||||
self.datastore_version, 2,
|
||||
None, slave_of_id=self.master.id)
|
||||
|
||||
@patch('trove.instance.models.LOG')
|
||||
|
@ -389,7 +390,7 @@ class TestReplication(trove_testtools.TestCase):
|
|||
self.assertRaises(exception.NotFound,
|
||||
Instance.create,
|
||||
None, 'name', 1, "UUID", [], [], self.datastore,
|
||||
self.datastore_version, 1,
|
||||
self.datastore_version, 2,
|
||||
None, slave_of_id=str(uuid.uuid4()))
|
||||
|
||||
def test_create_replica_from_replica(self):
|
||||
|
@ -406,13 +407,13 @@ class TestReplication(trove_testtools.TestCase):
|
|||
self.replica_info.save()
|
||||
self.assertRaises(exception.Forbidden, Instance.create,
|
||||
None, 'name', 2, "UUID", [], [], self.datastore,
|
||||
self.datastore_version, 1,
|
||||
self.datastore_version, 2,
|
||||
None, slave_of_id=self.replica_info.id)
|
||||
|
||||
def test_create_replica_with_users(self):
|
||||
self.users.append({"name": "testuser", "password": "123456"})
|
||||
self.assertRaises(exception.ReplicaCreateWithUsersDatabasesError,
|
||||
Instance.create, None, 'name', 1, "UUID", [],
|
||||
Instance.create, None, 'name', 2, "UUID", [],
|
||||
self.users, self.datastore, self.datastore_version,
|
||||
1, None, slave_of_id=self.master.id)
|
||||
|
||||
|
@ -421,9 +422,16 @@ class TestReplication(trove_testtools.TestCase):
|
|||
self.assertRaises(exception.ReplicaCreateWithUsersDatabasesError,
|
||||
Instance.create, None, 'name', 1, "UUID",
|
||||
self.databases, [], self.datastore,
|
||||
self.datastore_version, 1, None,
|
||||
self.datastore_version, 2, None,
|
||||
slave_of_id=self.master.id)
|
||||
|
||||
def test_replica_volume_size_smaller_than_master(self):
|
||||
self.assertRaises(exception.Forbidden,
|
||||
Instance.create,
|
||||
None, 'name', 1, "UUID", [], [], self.datastore,
|
||||
self.datastore_version, 1,
|
||||
None, slave_of_id=self.master.id)
|
||||
|
||||
|
||||
def trivial_key_function(id):
|
||||
return id * id
|
||||
|
|
Loading…
Reference in New Issue