Skip to content

Commit 73aaff2

Browse files
craig[bot]kev-caoannrpom
committed
148821: backup: add retry loop to `doDownloadFiles` r=dt a=kev-cao Previously, `doDownloadFiles` would immediately fail the download job upon encountering an error. This commit teaches the download workers to retry the download requests before giving up and failing. Epic: CRDB-51394 Fixes: #148081 Release note: Download phase of fast restore now will retry downloads before giving up. 149367: storage: bump pebble, enable blob-file rewrites metamorphically r=annrpom a=annrpom ### go.mod: bump Pebble to a2947b4a9383 Changes: * [`a2947b4a`](cockroachdb/pebble@a2947b4a) cmd/pebble: enable blob file rewriting * [`5e1cd273`](cockroachdb/pebble@5e1cd273) compression: deflake TestAdaptiveCompressorCompressible * [`652bc0ca`](cockroachdb/pebble@652bc0ca) ascii/table: new package * [`2430d94a`](cockroachdb/pebble@2430d94a) internal/ascii: new package * [`7d17fe51`](cockroachdb/pebble@7d17fe51) metamorphic: enable blob file rewrite compactions * [`09c33960`](cockroachdb/pebble@09c33960) blob: deduplicate values during rewrite * [`8e65e154`](cockroachdb/pebble@8e65e154) pebble: setupInputs checks key range conflicts with in progress compactions * [`8dea64b3`](cockroachdb/pebble@8dea64b3) db: incorporate separated values when estimating compression ratios * [`9fd475aa`](cockroachdb/pebble@9fd475aa) db: add TestTableStats test case exercising separated values * [`3b556400`](cockroachdb/pebble@3b556400) tool: add tool for inspecting blob files * [`c726afea`](cockroachdb/pebble@c726afea) sstable: add blob value liveness writer random test * [`c0d37a5b`](cockroachdb/pebble@c0d37a5b) metamorphic: use leaktest in metamorphic test * [`4ad0e5fb`](cockroachdb/pebble@4ad0e5fb) Revert "sstable: lazy load the index block in single level iterator" * [`f5351564`](cockroachdb/pebble@f5351564) Revert "sstable: lazy load the index block in two level iterator" * [`46650aa8`](cockroachdb/pebble@46650aa8) github: add crl-release-25.3 to nightlies and crossversion * [`11cf2c4a`](cockroachdb/pebble@11cf2c4a) pebble: deflake move compaction datadriven test * [`fe43e7b5`](cockroachdb/pebble@fe43e7b5) sstable: lazy load the index block in two level iterator * [`f4af03ae`](cockroachdb/pebble@f4af03ae) test: introduce two level iterator benchmark test * [`527eebf4`](cockroachdb/pebble@527eebf4) sstable: lazy load the index block in single level iterator Release note: none. Epic: none. ### storage: metamorphically enable blob-file rewrites This patch enables blob-file rewrites metamorphically. Co-authored-by: Kevin Cao <[email protected]> Co-authored-by: Annie Pompa <[email protected]>
3 parents efcbc07 + a2c9cc8 + 4e99c55 commit 73aaff2

File tree

9 files changed

+140
-22
lines changed

9 files changed

+140
-22
lines changed

DEPS.bzl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,10 +1755,10 @@ def go_deps():
17551755
name = "com_github_cockroachdb_crlib",
17561756
build_file_proto_mode = "disable_global",
17571757
importpath = "github.com/cockroachdb/crlib",
1758-
sha256 = "1afc910b4ff270de79eecb42ab7bd5e6404e6128666c6c55e96db9e27d28e69e",
1759-
strip_prefix = "github.com/cockroachdb/[email protected]20241205160938-4a90b184f49c",
1758+
sha256 = "47ee61f8b5cc8327e3b3b65a93dee277137e762a73650c2f0a75a24a37361114",
1759+
strip_prefix = "github.com/cockroachdb/[email protected]20250617202621-0794c595bbe6",
17601760
urls = [
1761-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlib/com_github_cockroachdb_crlib-v0.0.0-20241205160938-4a90b184f49c.zip",
1761+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlib/com_github_cockroachdb_crlib-v0.0.0-20250617202621-0794c595bbe6.zip",
17621762
],
17631763
)
17641764
go_repository(
@@ -1835,10 +1835,10 @@ def go_deps():
18351835
patches = [
18361836
"@com_github_cockroachdb_cockroach//build/patches:com_github_cockroachdb_pebble.patch",
18371837
],
1838-
sha256 = "05c54b72d105a3bfa4a7dd5739be84d72596df37022c6c6df577b59650f87203",
1839-
strip_prefix = "github.com/cockroachdb/[email protected]20250627191025-c40280e0c860",
1838+
sha256 = "877549371ab3baba36d81ba2e10be21179453709b8f3f105e21017f3f0f561b4",
1839+
strip_prefix = "github.com/cockroachdb/[email protected]20250701175647-a2947b4a9383",
18401840
urls = [
1841-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250627191025-c40280e0c860.zip",
1841+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250701175647-a2947b4a9383.zip",
18421842
],
18431843
)
18441844
go_repository(

build/bazelutil/distdir_files.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ DISTDIR_FILES = {
347347
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/cmux/com_github_cockroachdb_cmux-v0.0.0-20250514152509-914d3bf9ec58.zip": "c1cf4cd99a1ad6a00f2ccd4188cbcf004cb0d56895670b2c171061ce564cd791",
348348
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/cockroach-go/v2/com_github_cockroachdb_cockroach_go_v2-v2.4.1.zip": "ba646db91152f3121a6812c7b74d12d8c0e126f7b4d3b927618b159692ceb424",
349349
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlfmt/com_github_cockroachdb_crlfmt-v0.0.0-20221214225007-b2fc5c302548.zip": "fedc01bdd6d964da0425d5eaac8efadc951e78e13f102292cc0774197f09ab63",
350-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlib/com_github_cockroachdb_crlib-v0.0.0-20241205160938-4a90b184f49c.zip": "1afc910b4ff270de79eecb42ab7bd5e6404e6128666c6c55e96db9e27d28e69e",
350+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlib/com_github_cockroachdb_crlib-v0.0.0-20250617202621-0794c595bbe6.zip": "47ee61f8b5cc8327e3b3b65a93dee277137e762a73650c2f0a75a24a37361114",
351351
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/datadriven/com_github_cockroachdb_datadriven-v1.0.3-0.20250407164829-2945557346d5.zip": "251593cd9c040fe84a99a3919de7ce6f85030d522159a37d625dc2dea7a4d17f",
352352
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/drpc/com_github_cockroachdb_drpc-v0.0.0-20250618091105-e79a954a2193.zip": "612016b7a145f386a2163d788e3376cb0f63410b8423f2ef3f723f7aa24c1971",
353353
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/errors/com_github_cockroachdb_errors-v1.12.0.zip": "f73d8a5f4d8fcbc4ed61db2b47f17e2601d8b32e9a49c0665667489d9d9d6e7c",
@@ -357,7 +357,7 @@ DISTDIR_FILES = {
357357
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/gostdlib/com_github_cockroachdb_gostdlib-v1.19.0.zip": "c4d516bcfe8c07b6fc09b8a9a07a95065b36c2855627cb3514e40c98f872b69e",
358358
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/logtags/com_github_cockroachdb_logtags-v0.0.0-20241215232642-bb51bb14a506.zip": "920068af09e3846d9ebb4e4a7787ff1dd10f3989c5f940ad861b0f6a9f824f6e",
359359
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/metamorphic/com_github_cockroachdb_metamorphic-v0.0.0-20231108215700-4ba948b56895.zip": "28c8cf42192951b69378cf537be5a9a43f2aeb35542908cc4fe5f689505853ea",
360-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250627191025-c40280e0c860.zip": "05c54b72d105a3bfa4a7dd5739be84d72596df37022c6c6df577b59650f87203",
360+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20250701175647-a2947b4a9383.zip": "877549371ab3baba36d81ba2e10be21179453709b8f3f105e21017f3f0f561b4",
361361
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/redact/com_github_cockroachdb_redact-v1.1.6.zip": "018eccb5fb9ca52d43ec9eaf213539d01c1f2b94e0e822406ebfb2e9321ef6cf",
362362
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/returncheck/com_github_cockroachdb_returncheck-v0.0.0-20200612231554-92cdbca611dd.zip": "ce92ba4352deec995b1f2eecf16eba7f5d51f5aa245a1c362dfe24c83d31f82b",
363363
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/stress/com_github_cockroachdb_stress-v0.0.0-20220803192808-1806698b1b7b.zip": "3fda531795c600daf25532a4f98be2a1335cd1e5e182c72789bca79f5f69fcc1",

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,13 @@ require (
133133
github.com/cockroachdb/cmux v0.0.0-20250514152509-914d3bf9ec58
134134
github.com/cockroachdb/cockroach-go/v2 v2.4.1
135135
github.com/cockroachdb/crlfmt v0.0.0-20221214225007-b2fc5c302548
136-
github.com/cockroachdb/crlib v0.0.0-20241205160938-4a90b184f49c
136+
github.com/cockroachdb/crlib v0.0.0-20250617202621-0794c595bbe6
137137
github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5
138138
github.com/cockroachdb/errors v1.12.0
139139
github.com/cockroachdb/go-test-teamcity v0.0.0-20191211140407-cff980ad0a55
140140
github.com/cockroachdb/gostdlib v1.19.0
141141
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506
142-
github.com/cockroachdb/pebble v0.0.0-20250627191025-c40280e0c860
142+
github.com/cockroachdb/pebble v0.0.0-20250701175647-a2947b4a9383
143143
github.com/cockroachdb/redact v1.1.6
144144
github.com/cockroachdb/returncheck v0.0.0-20200612231554-92cdbca611dd
145145
github.com/cockroachdb/stress v0.0.0-20220803192808-1806698b1b7b

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -556,8 +556,8 @@ github.com/cockroachdb/cockroach-go/v2 v2.4.1 h1:ACVT/zXsuK6waRPVYtDQpsM8pPA7IA/
556556
github.com/cockroachdb/cockroach-go/v2 v2.4.1/go.mod h1:9U179XbCx4qFWtNhc7BiWLPfuyMVQ7qdAhfrwLz1vH0=
557557
github.com/cockroachdb/crlfmt v0.0.0-20221214225007-b2fc5c302548 h1:i0bnjanlWAvM50wHMT7EFyxlt5HQusznWrkwl+HBIsU=
558558
github.com/cockroachdb/crlfmt v0.0.0-20221214225007-b2fc5c302548/go.mod h1:qtkxNlt5i3rrdirfJE/bQeW/IeLajKexErv7jEIV+Uc=
559-
github.com/cockroachdb/crlib v0.0.0-20241205160938-4a90b184f49c h1:9d6UHu3JQXisFa4JRFzCbX2Ba2ES5e0202N9qpt3VuM=
560-
github.com/cockroachdb/crlib v0.0.0-20241205160938-4a90b184f49c/go.mod h1:Gq51ZeKaFCXk6QwuGM0w1dnaOqc/F5zKT2zA9D6Xeac=
559+
github.com/cockroachdb/crlib v0.0.0-20250617202621-0794c595bbe6 h1:PZVolkXzVqPQQZ7Jm8/lGpI9ZM086mB55oOWqy0wG6E=
560+
github.com/cockroachdb/crlib v0.0.0-20250617202621-0794c595bbe6/go.mod h1:Gq51ZeKaFCXk6QwuGM0w1dnaOqc/F5zKT2zA9D6Xeac=
561561
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
562562
github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
563563
github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5 h1:UycK/E0TkisVrQbSoxvU827FwgBBcZ95nRRmpj/12QI=
@@ -580,8 +580,8 @@ github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILM
580580
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo=
581581
github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA=
582582
github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA=
583-
github.com/cockroachdb/pebble v0.0.0-20250627191025-c40280e0c860 h1:KW5Jo6irucGRYI3i6ZShw64tIK9japdTHu9KumyQDEw=
584-
github.com/cockroachdb/pebble v0.0.0-20250627191025-c40280e0c860/go.mod h1:+E2g3dO+px5IVuHgq5o+O5iy7fRK2eJLdckgrbtWzeE=
583+
github.com/cockroachdb/pebble v0.0.0-20250701175647-a2947b4a9383 h1:vaCj5U8yIg9ZFnuKBgFM5qvQIPNlA/IVmrKO7tYq6a8=
584+
github.com/cockroachdb/pebble v0.0.0-20250701175647-a2947b4a9383/go.mod h1:LLa+I2vZrOsrsy4QcuZ6wSXBNQll7erNg3GCr8NpE90=
585585
github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
586586
github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314=
587587
github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=

pkg/backup/restore_online.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ var onlineRestoreLayerLimit = settings.RegisterIntSetting(
6464
)
6565

6666
const linkCompleteKey = "link_complete"
67+
const maxDownloadAttempts = 5
6768

6869
// splitAndScatter runs through all entries produced by genSpans splitting and
6970
// scattering the key-space designated by the passed rewriter such that if all
@@ -556,15 +557,34 @@ func (r *restoreResumer) sendDownloadWorker(
556557
ctx, tsp := tracing.ChildSpan(ctx, "backup.sendDownloadWorker")
557558
defer tsp.Finish()
558559

559-
for rt := retry.StartWithCtx(
560-
ctx, retry.Options{InitialBackoff: time.Millisecond * 100, MaxBackoff: time.Second * 10},
561-
); ; rt.Next() {
560+
testingKnobs := execCtx.ExecCfg().BackupRestoreTestingKnobs
561+
for {
562562
if err := ctx.Err(); err != nil {
563563
return err
564564
}
565565

566-
if err := sendDownloadSpan(ctx, execCtx, spans); err != nil {
567-
return err
566+
var err error
567+
for r := retry.StartWithCtx(ctx, retry.Options{
568+
InitialBackoff: time.Millisecond * 100,
569+
MaxBackoff: time.Second,
570+
MaxRetries: maxDownloadAttempts - 1,
571+
}); r.Next(); {
572+
err = func() error {
573+
if testingKnobs != nil && testingKnobs.RunBeforeSendingDownloadSpan != nil {
574+
if err := testingKnobs.RunBeforeSendingDownloadSpan(); err != nil {
575+
return err
576+
}
577+
}
578+
return sendDownloadSpan(ctx, execCtx, spans)
579+
}()
580+
if err == nil {
581+
break
582+
}
583+
log.VInfof(ctx, 1, "attempt %d failed to download spans: %v", r.CurrentAttempt(), err)
584+
}
585+
586+
if err != nil {
587+
return errors.Wrapf(err, "retries exhausted for sending download spans")
568588
}
569589

570590
// Wait for the completion poller to signal that it has checked our work.
@@ -576,6 +596,11 @@ func (r *restoreResumer) sendDownloadWorker(
576596
case <-ctx.Done():
577597
return ctx.Err()
578598
}
599+
600+
// Sleep a bit before sending download requests again to avoid a hot loop.
601+
// This will only be hit if after a successful download request, there are
602+
// still spans to download (e.g. because of a rabalancing).
603+
time.Sleep(10 * time.Second)
579604
}
580605
}
581606
}

pkg/backup/restore_online_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"path/filepath"
1515
"reflect"
1616
"strings"
17+
"sync/atomic"
1718
"testing"
1819

1920
"github.com/cockroachdb/cockroach/pkg/base"
@@ -32,6 +33,7 @@ import (
3233
"github.com/cockroachdb/cockroach/pkg/util/log"
3334
"github.com/cockroachdb/cockroach/pkg/util/randutil"
3435
"github.com/cockroachdb/cockroach/pkg/util/stop"
36+
"github.com/cockroachdb/errors"
3537
"github.com/kr/pretty"
3638
"github.com/stretchr/testify/require"
3739
)
@@ -581,6 +583,65 @@ func TestOnlineRestoreErrors(t *testing.T) {
581583
})
582584
}
583585

586+
func TestOnlineRestoreRetryingDownloadRequests(t *testing.T) {
587+
defer leaktest.AfterTest(t)()
588+
defer log.Scope(t).Close(t)
589+
590+
defer nodelocal.ReplaceNodeLocalForTesting(t.TempDir())()
591+
592+
rng, seed := randutil.NewPseudoRand()
593+
t.Logf("random seed: %d", seed)
594+
595+
alwaysFail := rng.Intn(2) == 0
596+
t.Logf("always fail download requests: %t", alwaysFail)
597+
totalFailures := int32(rng.Intn(maxDownloadAttempts-1) + 1)
598+
var currentFailures atomic.Int32
599+
600+
clusterArgs := base.TestClusterArgs{
601+
ServerArgs: base.TestServerArgs{
602+
DefaultTestTenant: base.TestIsSpecificToStorageLayerAndNeedsASystemTenant,
603+
Knobs: base.TestingKnobs{
604+
BackupRestore: &sql.BackupRestoreTestingKnobs{
605+
RunBeforeSendingDownloadSpan: func() error {
606+
if alwaysFail {
607+
return errors.Newf("always fail download request")
608+
}
609+
if currentFailures.Load() >= totalFailures {
610+
return nil
611+
}
612+
currentFailures.Add(1)
613+
return errors.Newf("injected download request failure")
614+
},
615+
},
616+
},
617+
},
618+
}
619+
620+
const numAccounts = 1
621+
_, sqlDB, _, cleanupFn := backupRestoreTestSetupWithParams(
622+
t, singleNode, numAccounts, InitManualReplication, clusterArgs,
623+
)
624+
defer cleanupFn()
625+
626+
externalStorage := "nodelocal://1/backup"
627+
sqlDB.Exec(t, fmt.Sprintf("BACKUP INTO '%s'", externalStorage))
628+
sqlDB.Exec(
629+
t,
630+
fmt.Sprintf(`
631+
RESTORE DATABASE data FROM LATEST IN '%s'
632+
WITH EXPERIMENTAL DEFERRED COPY, new_db_name=data2
633+
`, externalStorage),
634+
)
635+
636+
var downloadJobID jobspb.JobID
637+
sqlDB.QueryRow(t, latestDownloadJobIDQuery).Scan(&downloadJobID)
638+
if alwaysFail {
639+
jobutils.WaitForJobToFail(t, sqlDB, downloadJobID)
640+
} else {
641+
jobutils.WaitForJobToSucceed(t, sqlDB, downloadJobID)
642+
}
643+
}
644+
584645
func bankOnlineRestore(
585646
t *testing.T,
586647
sqlDB *sqlutils.SQLRunner,

pkg/server/span_download.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ import (
1818
"github.com/cockroachdb/cockroach/pkg/storage"
1919
"github.com/cockroachdb/cockroach/pkg/util/ctxgroup"
2020
"github.com/cockroachdb/cockroach/pkg/util/log"
21+
"github.com/cockroachdb/cockroach/pkg/util/retry"
2122
"github.com/cockroachdb/errors"
2223
"github.com/cockroachdb/errors/errorspb"
2324
"google.golang.org/grpc/codes"
2425
"google.golang.org/grpc/status"
2526
)
2627

28+
var perNodeMaxDownloadAttempts = 5
29+
2730
func (t *statusServer) DownloadSpan(
2831
ctx context.Context, req *serverpb.DownloadSpanRequest,
2932
) (*serverpb.DownloadSpanResponse, error) {
@@ -62,8 +65,31 @@ func (s *systemStatusServer) DownloadSpan(
6265
// Send DownloadSpan request to all stores on all nodes.
6366
remoteRequest := *req
6467
remoteRequest.NodeID = "local"
65-
nodeFn := func(ctx context.Context, status serverpb.RPCStatusClient, _ roachpb.NodeID) (*serverpb.DownloadSpanResponse, error) {
66-
return status.DownloadSpan(ctx, &remoteRequest)
68+
nodeFn := func(
69+
ctx context.Context, status serverpb.RPCStatusClient, _ roachpb.NodeID,
70+
) (*serverpb.DownloadSpanResponse, error) {
71+
var nodeResp *serverpb.DownloadSpanResponse
72+
var err error
73+
for r := retry.StartWithCtx(ctx, retry.Options{
74+
InitialBackoff: time.Millisecond * 100,
75+
MaxBackoff: time.Second,
76+
MaxRetries: perNodeMaxDownloadAttempts - 1,
77+
}); r.Next(); {
78+
nodeResp, err = status.DownloadSpan(ctx, &remoteRequest)
79+
for node, encodedErr := range resp.Errors {
80+
err = errors.Wrapf(
81+
errors.DecodeError(ctx, encodedErr),
82+
"download span request failed with error on node n%d",
83+
node,
84+
)
85+
break
86+
}
87+
if err == nil {
88+
break
89+
}
90+
log.VInfof(ctx, 1, "attempt %d failed to download span: %v", r.CurrentAttempt(), err)
91+
}
92+
return nodeResp, err
6793
}
6894
responseFn := func(nodeID roachpb.NodeID, downloadSpanResp *serverpb.DownloadSpanResponse) {
6995
for i, e := range downloadSpanResp.Errors {

pkg/sql/exec_util_backup.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ type BackupRestoreTestingKnobs struct {
6969
RunAfterRestoreProcDrains func()
7070

7171
RunBeforeResolvingCompactionDest func() error
72+
73+
// RunBeforeSendingDownloadSpan is called within the retry loop of the
74+
// download span worker before sending the download span request.
75+
RunBeforeSendingDownloadSpan func() error
7276
}
7377

7478
var _ base.ModuleTestingKnobs = &BackupRestoreTestingKnobs{}

pkg/storage/pebble.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,9 @@ var (
456456
"storage.value_separation.compaction_garbage_threshold",
457457
"the max garbage threshold configures the percentage of unreferenced value "+
458458
"bytes that trigger blob-file rewrite compactions; 100 disables these compactions",
459-
100, /* default; disables blob-file rewrites */
459+
int64(metamorphic.ConstantWithTestRange("storage.value_separation.compaction_garbage_threshold",
460+
10, /* default */
461+
1 /* min */, 80 /* max */)),
460462
settings.IntInRange(1, 100),
461463
)
462464
)

0 commit comments

Comments
 (0)