func registerServiceDetails()

in server/service/disco/metadata.go [85:136]


func registerServiceDetails(ctx context.Context, in *pb.CreateServiceRequest, serviceID string) (*pb.CreateServiceResponse, error) {
	var chanLen = 0
	errorsCh := make(chan error, 10)
	//create tags
	if in.Tags != nil && len(in.Tags) != 0 {
		chanLen++
		gopool.Go(func(_ context.Context) {
			req := &pb.AddServiceTagsRequest{
				ServiceId: serviceID,
				Tags:      in.Tags,
			}
			err := PutManyTags(ctx, req)
			errorsCh <- err
		})
	}
	// create instance
	if in.Instances != nil && len(in.Instances) != 0 {
		chanLen++
		gopool.Go(func(_ context.Context) {
			for _, ins := range in.Instances {
				req := &pb.RegisterInstanceRequest{
					Instance: ins,
				}
				req.Instance.ServiceId = serviceID
				_, err := RegisterInstance(ctx, req)
				errorsCh <- err
			}
		})
	}

	// handle result
	var errMessages []string
	for err := range errorsCh {
		chanLen--
		if err != nil {
			errMessages = append(errMessages, err.Error())
		}

		if 0 == chanLen {
			close(errorsCh)
		}
	}

	if len(errMessages) != 0 {
		return nil, pb.NewError(pb.ErrInvalidParams, fmt.Sprintf("errMessages: %v", errMessages))
	}

	log.Info(fmt.Sprintf("createServiceEx, serviceID: %s, operator: %s", serviceID, util.GetIPFromContext(ctx)))
	return &pb.CreateServiceResponse{
		ServiceId: serviceID,
	}, nil
}