func()

in pkg/selector/selector.go [398:440]


func (s Selector) executeFilters(ctx context.Context, filterToInstanceSpecMapping map[string]filterPair, instanceType ec2types.InstanceType) (bool, error) {
	verdict := make(chan bool, len(filterToInstanceSpecMapping)+1)
	errs := make(chan error, len(filterToInstanceSpecMapping))
	ctx, cancel := context.WithCancel(ctx)
	defer cancel()
	var wg sync.WaitGroup
	for filterName, filter := range filterToInstanceSpecMapping {
		wg.Add(1)
		go func(ctx context.Context, filterName string, filter filterPair) {
			defer wg.Done()
			select {
			case <-ctx.Done():
				return
			default:
				ok, err := exec(instanceType, filterName, filter)
				if err != nil {
					errs <- err
				}
				if !ok {
					verdict <- false
				}
			}
		}(ctx, filterName, filter)
	}
	go func() {
		wg.Wait()
		verdict <- true
	}()

	if <-verdict {
		return true, nil
	}
	cancel()
	var err error
	for {
		select {
		case e := <-errs:
			err = multierr.Append(err, e)
		default:
			return false, err
		}
	}
}