func (s *OortGroupStore) ReadGroup(ctx context.Context, req *groupproto.ReadGroupRequest) (*groupproto.ReadGroupResponse, error) { resp := groupproto.ReadGroupResponse{Rpcid: req.Rpcid} lgis, err := s.gs.LookupGroup(ctx, req.KeyA, req.KeyB) if err != nil { resp.Err = proto.TranslateError(err) } else { resp.Items = make([]*groupproto.ReadGroupItem, len(lgis)) itemCount := 0 var err error for i, lgi := range lgis { g := &groupproto.ReadGroupItem{} g.TimestampMicro, g.Value, err = s.gs.Read(ctx, req.KeyA, req.KeyB, lgi.ChildKeyA, lgi.ChildKeyB, nil) if err != nil { continue } g.ChildKeyA = lgi.ChildKeyA g.ChildKeyB = lgi.ChildKeyB resp.Items[i] = g itemCount++ } resp.Items = resp.Items[:itemCount] } return &resp, nil }
func (s *OortGroupStore) StreamReadGroup(stream groupproto.GroupStore_StreamReadGroupServer) error { var resp groupproto.ReadGroupResponse for { req, err := stream.Recv() if err == io.EOF { return nil } if err != nil { return err } resp.Reset() resp.Rpcid = req.Rpcid lgis, err := s.gs.LookupGroup(stream.Context(), req.KeyA, req.KeyB) if err != nil { resp.Err = proto.TranslateError(err) } else { resp.Items = make([]*groupproto.ReadGroupItem, len(lgis)) itemCount := 0 for i, lgi := range lgis { g := groupproto.ReadGroupItem{} g.TimestampMicro, g.Value, err = s.gs.Read(stream.Context(), req.KeyA, req.KeyB, lgi.ChildKeyA, lgi.ChildKeyB, nil) if err != nil { continue } g.ChildKeyA = lgi.ChildKeyA g.ChildKeyB = lgi.ChildKeyB resp.Items[i] = &g itemCount++ } resp.Items = resp.Items[:itemCount] } if err := stream.Send(&resp); err != nil { return err } } }