in datasource/etcd/ms.go [1048:1111]
func (ds *MetadataManager) GetAllSchemas(ctx context.Context, request *pb.GetAllSchemaRequest) (
*pb.GetAllSchemaResponse, error) {
domainProject := util.ParseDomainProject(ctx)
service, err := eutil.GetService(ctx, domainProject, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("get service[%s] all schemas failed, service does not exist in db", request.ServiceId))
return nil, pb.NewError(pb.ErrServiceNotExists, "Service does not exist.")
}
log.Error(fmt.Sprintf("get service[%s] all schemas failed, get service failed", request.ServiceId), err)
return nil, pb.NewError(pb.ErrInternal, err.Error())
}
schemasList := service.Schemas
if len(schemasList) == 0 {
return &pb.GetAllSchemaResponse{
Schemas: []*pb.Schema{},
}, nil
}
key := path.GenerateServiceSchemaSummaryKey(domainProject, request.ServiceId, "")
opts := append(eutil.FromContext(ctx), etcdadpt.WithStrKey(key), etcdadpt.WithPrefix())
resp, errDo := sd.SchemaSummary().Search(ctx, opts...)
if errDo != nil {
log.Error(fmt.Sprintf("get service[%s] all schema summaries failed", request.ServiceId), errDo)
return nil, pb.NewError(pb.ErrUnavailableBackend, errDo.Error())
}
respWithSchema := &kvstore.Response{}
if request.WithSchema {
key := path.GenerateServiceSchemaKey(domainProject, request.ServiceId, "")
opts := append(eutil.FromContext(ctx), etcdadpt.WithStrKey(key), etcdadpt.WithPrefix())
respWithSchema, errDo = sd.Schema().Search(ctx, opts...)
if errDo != nil {
log.Error(fmt.Sprintf("get service[%s] all schemas failed", request.ServiceId), errDo)
return nil, pb.NewError(pb.ErrUnavailableBackend, errDo.Error())
}
}
schemas := make([]*pb.Schema, 0, len(schemasList))
for _, schemaID := range schemasList {
tempSchema := &pb.Schema{}
tempSchema.SchemaId = schemaID
for _, summarySchema := range resp.Kvs {
_, _, schemaIDOfSummary := path.GetInfoFromSchemaSummaryKV(summarySchema.Key)
if schemaID == schemaIDOfSummary {
tempSchema.Summary = summarySchema.Value.(string)
}
}
for _, contentSchema := range respWithSchema.Kvs {
_, _, schemaIDOfSchema := path.GetInfoFromSchemaKV(contentSchema.Key)
if schemaID == schemaIDOfSchema {
tempSchema.Schema = util.BytesToStringWithNoCopy(contentSchema.Value.([]byte))
}
}
schemas = append(schemas, tempSchema)
}
return &pb.GetAllSchemaResponse{
Schemas: schemas,
}, nil
}