'Finds backends that supports the group.
Returns a list of backends that meet the required specs,
ordered by their fitness.'

def _get_weighted_candidates_generic_group(self, context, group_spec, request_spec_list, group_filter_properties=None, filter_properties_list=None):

    elevated = context.elevated()
    backends_by_group_type = self._get_weighted_candidates_by_group_type(context, group_spec, group_filter_properties)
    weighed_backends = []
    backends_by_vol_type = []
    index = 0
    for request_spec in request_spec_list:
        volume_properties = request_spec['volume_properties']
        resource_properties = volume_properties.copy()
        volume_type = request_spec.get('volume_type', None)
        resource_type = request_spec.get('volume_type', None)
        request_spec.update({'resource_properties': resource_properties})
        config_options = self._get_configuration_options()
        filter_properties = {}
        if filter_properties_list:
            filter_properties = filter_properties_list[index]
            if (filter_properties is None):
                filter_properties = {}
        self._populate_retry(filter_properties, resource_properties)
        filter_properties.update({'context': context, 'request_spec': request_spec, 'config_options': config_options, 'volume_type': volume_type, 'resource_type': resource_type})
        self.populate_filter_properties(request_spec, filter_properties)
        all_backends = self.host_manager.get_all_backend_states(elevated)
        if (not all_backends):
            return []
        backends = self.host_manager.get_filtered_backends(all_backends, filter_properties)
        if (not backends):
            return []
        LOG.debug('Filtered    %s', backends)
        temp_weighed_backends = self.host_manager.get_weighed_backends(backends, filter_properties)
        if (not temp_weighed_backends):
            return []
        if (index == 0):
            backends_by_vol_type = temp_weighed_backends
        else:
            backends_by_vol_type = self._find_valid_backends(backends_by_vol_type, temp_weighed_backends)
            if (not backends_by_vol_type):
                return []
        index += 1
    weighed_backends = self._find_valid_backends(backends_by_vol_type, backends_by_group_type)
    return weighed_backends
