k8s.io/apiserver/storage/etcd: refactor etcd GetList.

Reorder some code.

Signed-off-by: Siyuan Zhang <sizhang@google.com>
This commit is contained in:
Siyuan Zhang 2023-10-20 12:39:51 -07:00
parent 84ec5e2ecc
commit a968f51fa2
2 changed files with 22 additions and 29 deletions

View File

@ -634,15 +634,6 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption
newItemFunc := getNewItemFunc(listObj, v) 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 continueRV, withRev int64
var continueKey string var continueKey string
switch { switch {
@ -662,23 +653,25 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption
if continueRV > 0 { if continueRV > 0 {
withRev = continueRV withRev = continueRV
} }
default: case len(opts.ResourceVersion) > 0:
if fromRV != nil { parsedRV, err := s.versioner.ParseResourceVersion(opts.ResourceVersion)
if err != nil {
return apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %v", err))
}
switch opts.ResourceVersionMatch { switch opts.ResourceVersionMatch {
case metav1.ResourceVersionMatchNotOlderThan: case metav1.ResourceVersionMatchNotOlderThan:
// The not older than constraint is checked after we get a response from etcd, // 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. // and returnedRV is then set to the revision we get from the etcd response.
case metav1.ResourceVersionMatchExact: case metav1.ResourceVersionMatchExact:
withRev = int64(*fromRV) withRev = int64(parsedRV)
case "": // legacy case case "": // legacy case
if opts.Recursive && opts.Predicate.Limit > 0 && *fromRV > 0 { if opts.Recursive && opts.Predicate.Limit > 0 && parsedRV > 0 {
withRev = int64(*fromRV) withRev = int64(parsedRV)
} }
default: default:
return fmt.Errorf("unknown ResourceVersionMatch value: %v", opts.ResourceVersionMatch) return fmt.Errorf("unknown ResourceVersionMatch value: %v", opts.ResourceVersionMatch)
} }
} }
}
if withRev != 0 { if withRev != 0 {
options = append(options, clientv3.WithRev(withRev)) options = append(options, clientv3.WithRev(withRev))

View File

@ -527,12 +527,6 @@ func testListOptionsCase(t *testing.T, rsClient appsv1.ReplicaSetInterface, watc
} }
return 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 opts.Continue == invalidContinueToken {
if err == nil || !strings.Contains(err.Error(), "continue key is not valid") { if err == nil || !strings.Contains(err.Error(), "continue key is not valid") {
t.Fatalf("expected continue key not valid error, but got: %v", err) 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 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 // Check for too old errors
isExact := opts.ResourceVersionMatch == metav1.ResourceVersionMatchExact isExact := opts.ResourceVersionMatch == metav1.ResourceVersionMatchExact