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
}