def _create_cluster_instances(cls, context, cluster_id, cluster_name, datastore, datastore_version, instances, extended_properties, locality): LOG.debug("Processing a request for new cluster instances.") cassandra_conf = CONF.get(datastore_version.manager) eph_enabled = cassandra_conf.device_path vol_enabled = cassandra_conf.volume_support # Validate instance flavors. models.get_flavors_from_instance_defs(context, instances, vol_enabled, eph_enabled) # Compute the total volume allocation. req_volume_size = models.get_required_volume_size( instances, vol_enabled) # Check requirements against quota. num_new_instances = len(instances) deltas = {'instances': num_new_instances, 'volumes': req_volume_size} check_quotas(context.tenant, deltas) # Creating member instances. num_instances = len( CassandraClusterTasks.find_cluster_node_ids(cluster_id)) new_instances = [] for instance_idx, instance in enumerate(instances, num_instances + 1): instance_az = instance.get('availability_zone', None) member_config = { "id": cluster_id, "instance_type": "member", "dc": cls.DEFAULT_DATA_CENTER, "rack": instance_az or cls.DEFAULT_RACK } instance_name = instance.get('name') if not instance_name: instance_name = cls._build_instance_name( cluster_name, member_config['dc'], member_config['rack'], instance_idx) new_instance = inst_models.Instance.create( context, instance_name, instance['flavor_id'], datastore_version.image_id, [], [], datastore, datastore_version, instance['volume_size'], None, nics=instance.get('nics', None), availability_zone=instance_az, configuration_id=None, cluster_config=member_config, locality=locality) new_instances.append(new_instance) return new_instances
def _create_cluster_instances( cls, context, cluster_id, cluster_name, datastore, datastore_version, instances, extended_properties, locality): LOG.debug("Processing a request for new cluster instances.") cassandra_conf = CONF.get(datastore_version.manager) eph_enabled = cassandra_conf.device_path vol_enabled = cassandra_conf.volume_support # Validate instance flavors. models.get_flavors_from_instance_defs(context, instances, vol_enabled, eph_enabled) # Compute the total volume allocation. req_volume_size = models.get_required_volume_size(instances, vol_enabled) # Check requirements against quota. num_new_instances = len(instances) deltas = {'instances': num_new_instances, 'volumes': req_volume_size} check_quotas(context.tenant, deltas) # Creating member instances. num_instances = len( CassandraClusterTasks.find_cluster_node_ids(cluster_id)) new_instances = [] for instance_idx, instance in enumerate(instances, num_instances + 1): instance_az = instance.get('availability_zone', None) member_config = {"id": cluster_id, "instance_type": "member", "dc": cls.DEFAULT_DATA_CENTER, "rack": instance_az or cls.DEFAULT_RACK} instance_name = instance.get('name') if not instance_name: instance_name = cls._build_instance_name( cluster_name, member_config['dc'], member_config['rack'], instance_idx) new_instance = inst_models.Instance.create( context, instance_name, instance['flavor_id'], datastore_version.image_id, [], [], datastore, datastore_version, instance['volume_size'], None, nics=instance.get('nics', None), availability_zone=instance_az, configuration_id=None, cluster_config=member_config, locality=locality) new_instances.append(new_instance) return new_instances
def test_choose_seed_nodes(self): nodes = self._build_mock_nodes(3) seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual(1, len(seeds), "Only one seed node should be selected for a " "single-rack-single-dc cluster.") nodes = self._build_mock_nodes(3) nodes[0]["rack"] = "rack1" nodes[1]["rack"] = "rack2" seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual(2, len(seeds), "There should be exactly two seed nodes. " "One from each rack.") nodes = self._build_mock_nodes(3) nodes[0]["rack"] = "rack1" nodes[1]["rack"] = "rack2" nodes[2]["dc"] = "dc2" seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual( 3, len(seeds), "There should be exactly three seed nodes. " "One from each rack and data center." )
def test_choose_seed_nodes(self): nodes = self._build_mock_nodes(3) seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual( 1, len(seeds), "Only one seed node should be selected for a " "single-rack-single-dc cluster.") nodes = self._build_mock_nodes(3) nodes[0]['rack'] = 'rack1' nodes[1]['rack'] = 'rack2' seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual( 2, len(seeds), "There should be exactly two seed nodes. " "One from each rack.") nodes = self._build_mock_nodes(3) nodes[0]['rack'] = 'rack1' nodes[1]['rack'] = 'rack2' nodes[2]['dc'] = 'dc2' seeds = CassandraClusterTasks.choose_seed_nodes(nodes) self.assertEqual( 3, len(seeds), "There should be exactly three seed nodes. " "One from each rack and data center.")