From a29f7b18391f82519705a103699e43c471fde656 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Sat, 3 May 2025 09:12:01 -0700 Subject: [PATCH] fix: scoutfs missing ListObjectsV2() start after This brings ListObjectsV2 for scoutfs in sync with posix to handle the start after and continuation token ases. --- backend/posix/posix.go | 6 +----- backend/scoutfs/scoutfs.go | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/posix/posix.go b/backend/posix/posix.go index 1c3bbaa1..41e77ad2 100644 --- a/backend/posix/posix.go +++ b/backend/posix/posix.go @@ -4312,11 +4312,7 @@ func (p *Posix) ListObjectsV2(ctx context.Context, input *s3.ListObjectsV2Input) marker := "" if input.ContinuationToken != nil { if input.StartAfter != nil { - if *input.StartAfter > *input.ContinuationToken { - marker = *input.StartAfter - } else { - marker = *input.ContinuationToken - } + marker = max(*input.StartAfter, *input.ContinuationToken) } else { marker = *input.ContinuationToken } diff --git a/backend/scoutfs/scoutfs.go b/backend/scoutfs/scoutfs.go index 1cb5f6e3..a0930914 100644 --- a/backend/scoutfs/scoutfs.go +++ b/backend/scoutfs/scoutfs.go @@ -790,7 +790,11 @@ func (s *ScoutFS) ListObjectsV2(ctx context.Context, input *s3.ListObjectsV2Inpu } marker := "" if input.ContinuationToken != nil { - marker = *input.ContinuationToken + if input.StartAfter != nil { + marker = max(*input.StartAfter, *input.ContinuationToken) + } else { + marker = *input.ContinuationToken + } } delim := "" if input.Delimiter != nil { @@ -816,16 +820,20 @@ func (s *ScoutFS) ListObjectsV2(ctx context.Context, input *s3.ListObjectsV2Inpu return s3response.ListObjectsV2Result{}, fmt.Errorf("walk %v: %w", bucket, err) } + count := int32(len(results.Objects)) + return s3response.ListObjectsV2Result{ CommonPrefixes: results.CommonPrefixes, Contents: results.Objects, - Delimiter: &delim, IsTruncated: &results.Truncated, - ContinuationToken: &marker, MaxKeys: &maxkeys, Name: &bucket, - NextContinuationToken: &results.NextMarker, - Prefix: &prefix, + KeyCount: &count, + Delimiter: backend.GetPtrFromString(delim), + ContinuationToken: backend.GetPtrFromString(marker), + NextContinuationToken: backend.GetPtrFromString(results.NextMarker), + Prefix: backend.GetPtrFromString(prefix), + StartAfter: backend.GetPtrFromString(*input.StartAfter), }, nil }