diff --git a/kv/shard_router.go b/kv/shard_router.go index 556860d..74050cb 100644 --- a/kv/shard_router.go +++ b/kv/shard_router.go @@ -59,20 +59,32 @@ func (s *ShardRouter) process(reqs []*pb.Request, fn func(*routerGroup, []*pb.Re } var max uint64 + var firstErr error for gid, rs := range grouped { g, ok := s.getGroup(gid) if !ok { - return nil, errors.Wrapf(ErrInvalidRequest, "unknown group %d", gid) + err := errors.Wrapf(ErrInvalidRequest, "unknown group %d", gid) + if firstErr == nil { + firstErr = err + } + continue } r, err := fn(g, rs) if err != nil { - return nil, errors.WithStack(err) + if firstErr == nil { + firstErr = errors.WithStack(err) + } + continue } if r.CommitIndex > max { max = r.CommitIndex } } - return &TransactionResponse{CommitIndex: max}, nil + resp := &TransactionResponse{CommitIndex: max} + if firstErr != nil { + return resp, firstErr + } + return resp, nil } func (s *ShardRouter) getGroup(id uint64) (*routerGroup, bool) {