func()

in pkg/cloudmap/client.go [139:180]


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

	sdc.log.Info("registering 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
		endptAttrs := endpt.GetCloudMapAttributes()
		opCollector.Add(func() (opId string, err error) {
			return sdc.sdApi.RegisterInstance(ctx, svcId, endptId, endptAttrs)
		})
	}

	err = NewRegisterInstancePoller(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 registering endpoints")
	}

	return nil
}