fix: unified resource server list queries order column (#108094)

This commit is contained in:
Mustafa Sencer Özcan
2025-07-16 08:09:31 +02:00
committed by GitHub
parent 5b82e05697
commit 4a779c4ccb
16 changed files with 123 additions and 43 deletions
+20 -10
View File
@@ -215,7 +215,6 @@ func (k *kvStorageBackend) ListIterator(ctx context.Context, req *resourcepb.Lis
// Fetch the latest objects
keys := make([]MetaDataKey, 0, min(defaultListBufferSize, req.Limit+1))
idx := 0
for metaKey, err := range k.metaStore.ListResourceKeysAtRevision(ctx, MetaListRequestKey{
Namespace: req.Options.Key.Namespace,
Group: req.Options.Key.Group,
@@ -225,17 +224,15 @@ func (k *kvStorageBackend) ListIterator(ctx context.Context, req *resourcepb.Lis
if err != nil {
return 0, err
}
// Skip the first offset items. This is not efficient, but it's a simple way to implement it for now.
if idx < int(offset) {
idx++
continue
}
keys = append(keys, metaKey)
// Only fetch the first limit items + 1 to get the next token.
if len(keys) >= int(req.Limit+1) {
break
}
}
sortMetaKeysByResourceVersion(keys, true) // sort ascending for sql parity
if offset > 0 && int64(len(keys)) > offset {
keys = keys[offset:]
}
iter := kvListIterator{
keys: keys,
currentIndex: -1,
@@ -433,6 +430,19 @@ func sortByResourceVersion(filteredKeys []DataKey, sortAscending bool) {
}
}
// sortMetaKeysByResourceVersion sorts the metadata keys based on the sortAscending flag
func sortMetaKeysByResourceVersion(keys []MetaDataKey, sortAscending bool) {
if sortAscending {
sort.Slice(keys, func(i, j int) bool {
return keys[i].ResourceVersion < keys[j].ResourceVersion
})
} else {
sort.Slice(keys, func(i, j int) bool {
return keys[i].ResourceVersion > keys[j].ResourceVersion
})
}
}
// applyPagination filters keys based on pagination parameters
func applyPagination(keys []DataKey, lastSeenRV int64, sortAscending bool) []DataKey {
if lastSeenRV == 0 {