unified-storage: use name instead of offset in kvstore continue token (#113560)
* unified-storage: use name instead of offset in kvstore continue token --------- Co-authored-by: Georges Chaudy <chaudyg@gmail.com>
This commit is contained in:
co-authored by
Georges Chaudy
parent
bdf529c545
commit
047e6d45fa
@@ -730,7 +730,7 @@ func (b *backend) listAtRevision(ctx context.Context, req *resourcepb.ListReques
|
||||
// Get the RV
|
||||
iter := &listIter{listRV: req.ResourceVersion, sortAsc: false}
|
||||
if req.NextPageToken != "" {
|
||||
continueToken, err := resource.GetContinueToken(req.NextPageToken)
|
||||
continueToken, err := GetContinueToken(req.NextPageToken)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("get continue token (%q): %w", req.NextPageToken, err)
|
||||
}
|
||||
@@ -832,7 +832,7 @@ func (b *backend) getHistory(ctx context.Context, req *resourcepb.ListRequest, c
|
||||
useCurrentRV: true, // use the current RV for the continue token instead of the listRV
|
||||
}
|
||||
if req.NextPageToken != "" {
|
||||
continueToken, err := resource.GetContinueToken(req.NextPageToken)
|
||||
continueToken, err := GetContinueToken(req.NextPageToken)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("get continue token (%q): %w", req.NextPageToken, err)
|
||||
}
|
||||
|
||||
@@ -720,7 +720,7 @@ func TestBackend_getHistoryPagination(t *testing.T) {
|
||||
// Define all pages we want to test
|
||||
pages := []struct {
|
||||
versions []int64
|
||||
token *resource.ContinueToken
|
||||
token *ContinueToken
|
||||
}{
|
||||
{
|
||||
versions: []int64{rv51, rv52, rv53, rv54},
|
||||
@@ -728,7 +728,7 @@ func TestBackend_getHistoryPagination(t *testing.T) {
|
||||
},
|
||||
{
|
||||
versions: []int64{rv55, rv56, rv57, rv58},
|
||||
token: &resource.ContinueToken{
|
||||
token: &ContinueToken{
|
||||
ResourceVersion: rv54,
|
||||
StartOffset: 4,
|
||||
SortAscending: true,
|
||||
@@ -736,7 +736,7 @@ func TestBackend_getHistoryPagination(t *testing.T) {
|
||||
},
|
||||
{
|
||||
versions: []int64{rv59, rv60},
|
||||
token: &resource.ContinueToken{
|
||||
token: &ContinueToken{
|
||||
ResourceVersion: rv58,
|
||||
StartOffset: 8,
|
||||
SortAscending: true,
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package sql
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type ContinueToken struct {
|
||||
StartOffset int64 `json:"o"`
|
||||
ResourceVersion int64 `json:"v"`
|
||||
SortAscending bool `json:"s"`
|
||||
}
|
||||
|
||||
func (c ContinueToken) String() string {
|
||||
b, _ := json.Marshal(c)
|
||||
return base64.StdEncoding.EncodeToString(b)
|
||||
}
|
||||
|
||||
func GetContinueToken(token string) (*ContinueToken, error) {
|
||||
continueVal, err := base64.StdEncoding.DecodeString(token)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error decoding continue token")
|
||||
}
|
||||
|
||||
t := &ContinueToken{}
|
||||
err = json.Unmarshal(continueVal, t)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return t, nil
|
||||
}
|
||||
@@ -31,9 +31,9 @@ type listIter struct {
|
||||
// ContinueToken implements resource.ListIterator.
|
||||
func (l *listIter) ContinueToken() string {
|
||||
if l.useCurrentRV {
|
||||
return resource.ContinueToken{ResourceVersion: l.rv, StartOffset: l.offset, SortAscending: l.sortAsc}.String()
|
||||
return ContinueToken{ResourceVersion: l.rv, StartOffset: l.offset, SortAscending: l.sortAsc}.String()
|
||||
}
|
||||
return resource.ContinueToken{ResourceVersion: l.listRV, StartOffset: l.offset, SortAscending: l.sortAsc}.String()
|
||||
return ContinueToken{ResourceVersion: l.listRV, StartOffset: l.offset, SortAscending: l.sortAsc}.String()
|
||||
}
|
||||
|
||||
func (l *listIter) Error() error {
|
||||
|
||||
@@ -214,14 +214,14 @@ func TestIntegrationListIter(t *testing.T) {
|
||||
|
||||
token := iter.ContinueToken()
|
||||
|
||||
var actual resource.ContinueToken
|
||||
var actual ContinueToken
|
||||
b, err := base64.StdEncoding.DecodeString(token)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = json.Unmarshal(b, &actual)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := resource.ContinueToken{
|
||||
expected := ContinueToken{
|
||||
ResourceVersion: 300,
|
||||
StartOffset: 1,
|
||||
SortAscending: true,
|
||||
@@ -250,14 +250,14 @@ func TestIntegrationListIter(t *testing.T) {
|
||||
|
||||
token := iter.ContinueToken()
|
||||
|
||||
var actual resource.ContinueToken
|
||||
var actual ContinueToken
|
||||
b, err := base64.StdEncoding.DecodeString(token)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = json.Unmarshal(b, &actual)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := resource.ContinueToken{
|
||||
expected := ContinueToken{
|
||||
ResourceVersion: 100,
|
||||
StartOffset: 1,
|
||||
SortAscending: true,
|
||||
|
||||
Reference in New Issue
Block a user