track client disconnections properly for all ListObjects calls (#17804)

Currently ListObjects* calls were returning 200 OK for timed-out clients,
this makes debugging via `mc admin trace` very hard.
This commit is contained in:
Anis Eleuch 2023-08-04 23:57:27 +01:00 committed by GitHub
parent 3bc34ffd94
commit a436fd513b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1254,6 +1254,11 @@ func (z *erasureServerPools) ListObjectVersions(ctx context.Context, bucket, pre
return loi, err return loi, err
} }
defer merged.truncate(0) // Release when returning defer merged.truncate(0) // Release when returning
if contextCanceled(ctx) {
return ListObjectVersionsInfo{}, ctx.Err()
}
if versionMarker == "" { if versionMarker == "" {
o := listPathOptions{Marker: marker} o := listPathOptions{Marker: marker}
// If we are not looking for a specific version skip it. // If we are not looking for a specific version skip it.
@ -1341,6 +1346,10 @@ func (z *erasureServerPools) ListObjects(ctx context.Context, bucket, prefix, ma
loi.Objects = append(loi.Objects, objInfo) loi.Objects = append(loi.Objects, objInfo)
return loi, nil return loi, nil
} }
if contextCanceled(ctx) {
return ListObjectsInfo{}, ctx.Err()
}
} }
merged, err := z.listPath(ctx, &opts) merged, err := z.listPath(ctx, &opts)
@ -1354,6 +1363,10 @@ func (z *erasureServerPools) ListObjects(ctx context.Context, bucket, prefix, ma
merged.forwardPast(opts.Marker) merged.forwardPast(opts.Marker)
defer merged.truncate(0) // Release when returning defer merged.truncate(0) // Release when returning
if contextCanceled(ctx) {
return ListObjectsInfo{}, ctx.Err()
}
// Default is recursive, if delimiter is set then list non recursive. // Default is recursive, if delimiter is set then list non recursive.
objects := merged.fileInfos(bucket, prefix, delimiter) objects := merged.fileInfos(bucket, prefix, delimiter)
loi.IsTruncated = err == nil && len(objects) > 0 loi.IsTruncated = err == nil && len(objects) > 0