func()

in pkg/cloudmap/client.go [182:222]


func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, nsName string, svcName string, endpts []*model.Endpoint) (err error) {
	if len(endpts) == 0 {
		sdc.log.Info("skipping endpoint deletion for empty endpoint list", "serviceName", svcName)
		return nil
	}

	sdc.log.Info("deleting endpoints", "namespaceName", nsName,
		"serviceName", svcName, "endpoints", endpts)

	svcIdMap, err := sdc.getServiceIds(ctx, nsName)
	if err != nil {
		return err
	}
	svcId, found := svcIdMap[svcName]
	if !found {
		return fmt.Errorf("service not found in Cloud Map: %s", svcName)
	}

	opCollector := NewOperationCollector()

	for _, endpt := range endpts {
		endptId := endpt.Id
		opCollector.Add(func() (opId string, err error) {
			return sdc.sdApi.DeregisterInstance(ctx, svcId, endptId)
		})
	}

	err = NewDeregisterInstancePoller(sdc.sdApi, svcId, opCollector.Collect(), opCollector.GetStartTime()).Poll(ctx)

	// Evict cache entry so next list call reflects changes
	sdc.cache.EvictEndpoints(nsName, svcName)
	if err != nil {
		return err
	}

	if !opCollector.IsAllOperationsCreated() {
		return errors.New("failure while de-registering endpoints")
	}

	return nil
}