diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index b26cb4b8489..1e5e40d6235 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -634,15 +634,6 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption newItemFunc := getNewItemFunc(listObj, v) - var fromRV *uint64 - if len(opts.ResourceVersion) > 0 { - parsedRV, err := s.versioner.ParseResourceVersion(opts.ResourceVersion) - if err != nil { - return apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %v", err)) - } - fromRV = &parsedRV - } - var continueRV, withRev int64 var continueKey string switch { @@ -662,21 +653,23 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption if continueRV > 0 { withRev = continueRV } - default: - if fromRV != nil { - switch opts.ResourceVersionMatch { - case metav1.ResourceVersionMatchNotOlderThan: - // The not older than constraint is checked after we get a response from etcd, - // and returnedRV is then set to the revision we get from the etcd response. - case metav1.ResourceVersionMatchExact: - withRev = int64(*fromRV) - case "": // legacy case - if opts.Recursive && opts.Predicate.Limit > 0 && *fromRV > 0 { - withRev = int64(*fromRV) - } - default: - return fmt.Errorf("unknown ResourceVersionMatch value: %v", opts.ResourceVersionMatch) + case len(opts.ResourceVersion) > 0: + parsedRV, err := s.versioner.ParseResourceVersion(opts.ResourceVersion) + if err != nil { + return apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %v", err)) + } + switch opts.ResourceVersionMatch { + case metav1.ResourceVersionMatchNotOlderThan: + // The not older than constraint is checked after we get a response from etcd, + // and returnedRV is then set to the revision we get from the etcd response. + case metav1.ResourceVersionMatchExact: + withRev = int64(parsedRV) + case "": // legacy case + if opts.Recursive && opts.Predicate.Limit > 0 && parsedRV > 0 { + withRev = int64(parsedRV) } + default: + return fmt.Errorf("unknown ResourceVersionMatch value: %v", opts.ResourceVersionMatch) } } diff --git a/test/integration/apiserver/apiserver_test.go b/test/integration/apiserver/apiserver_test.go index 816220ee3e9..ecfbd348d2d 100644 --- a/test/integration/apiserver/apiserver_test.go +++ b/test/integration/apiserver/apiserver_test.go @@ -527,12 +527,6 @@ func testListOptionsCase(t *testing.T, rsClient appsv1.ReplicaSetInterface, watc } return } - if opts.ResourceVersion == invalidResourceVersion { - if err == nil || !strings.Contains(err.Error(), "Invalid value") { - t.Fatalf("expecting invalid value error, but got: %v", err) - } - return - } if opts.Continue == invalidContinueToken { if err == nil || !strings.Contains(err.Error(), "continue key is not valid") { t.Fatalf("expected continue key not valid error, but got: %v", err) @@ -546,6 +540,12 @@ func testListOptionsCase(t *testing.T, rsClient appsv1.ReplicaSetInterface, watc } return } + if opts.ResourceVersion == invalidResourceVersion { + if err == nil || !strings.Contains(err.Error(), "Invalid value") { + t.Fatalf("expecting invalid value error, but got: %v", err) + } + return + } // Check for too old errors isExact := opts.ResourceVersionMatch == metav1.ResourceVersionMatchExact