diff --git a/pkg/logstructured/logstructured.go b/pkg/logstructured/logstructured.go index 8ae96f63..7a144b7a 100644 --- a/pkg/logstructured/logstructured.go +++ b/pkg/logstructured/logstructured.go @@ -59,10 +59,6 @@ func (l *LogStructured) Get(ctx context.Context, key, rangeEnd string, limit, re func (l *LogStructured) get(ctx context.Context, key, rangeEnd string, limit, revision int64, includeDeletes bool) (int64, *server.Event, error) { rev, events, err := l.log.List(ctx, key, rangeEnd, limit, revision, includeDeletes) - if err == server.ErrCompacted { - // ignore compacted when getting by revision - err = nil - } if err != nil { return 0, nil, err } diff --git a/pkg/logstructured/sqllog/sql.go b/pkg/logstructured/sqllog/sql.go index 05fcf10f..bf9c4462 100644 --- a/pkg/logstructured/sqllog/sql.go +++ b/pkg/logstructured/sqllog/sql.go @@ -287,13 +287,21 @@ func (s *SQLLog) List(ctx context.Context, prefix, startKey string, limit, revis } if revision > 0 && len(result) == 0 { - // a zero length result won't have the compact revision so get it manually + // a zero length result won't have the compact or current revisions so get them manually + rev, err = s.d.CurrentRevision(ctx) + if err != nil { + return 0, nil, err + } compact, err = s.d.GetCompactRevision(ctx) if err != nil { return 0, nil, err } } + if revision > rev { + return rev, result, server.ErrFutureRev + } + if revision > 0 && revision < compact { return rev, result, server.ErrCompacted } diff --git a/pkg/server/get.go b/pkg/server/get.go index 2a126742..dce2c32b 100644 --- a/pkg/server/get.go +++ b/pkg/server/get.go @@ -22,6 +22,7 @@ func (l *LimitedServer) get(ctx context.Context, r *etcdserverpb.RangeRequest) ( } if kv != nil { resp.Kvs = []*KeyValue{kv} + resp.Count = 1 } return resp, nil } diff --git a/pkg/server/types.go b/pkg/server/types.go index f2f4aa41..4cf55680 100644 --- a/pkg/server/types.go +++ b/pkg/server/types.go @@ -14,6 +14,7 @@ var ( ErrKeyExists = rpctypes.ErrGRPCDuplicateKey ErrCompacted = rpctypes.ErrGRPCCompacted + ErrFutureRev = rpctypes.ErrGRPCFutureRev ) type Backend interface {