Skip to content

br: retain latest mvcc version when merge into one SST - #68020

Merged
ti-chi-bot[bot] merged 14 commits into
pingcap:masterfrom
Leavrth:retain_latest_mvcc_version
Jun 22, 2026
Merged

ti-chi-bot[bot] merged 14 commits into
pingcap:masterfrom
Leavrth:retain_latest_mvcc_version

Conversation

@Leavrth

@Leavrth Leavrth commented Apr 24, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: ref #64308 close #68905

Problem Summary:
need to retain latest mvcc version when merge into SST to avoid space full.

What changed and how does it work?

retain latest mvcc version when merge into SST

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No need to test
    • I checked and no code files have been changed.

Side effects

  • Performance regression: Consumes more CPU
  • Performance regression: Consumes more Memory
  • Breaking backward compatibility

Documentation

  • Affects user behaviors
  • Contains syntax changes
  • Contains variable changes
  • Contains experimental features
  • Changes MySQL compatibility

Release note

Please refer to Release Notes Language Style Guide to write a quality release note.

None

Summary by CodeRabbit

  • New Features

    • Added --retain-latest-mvcc-version flag to optionally retain only the newest MVCC version when restoring compacted SSTs.
    • Added a batch "download latest MVCC" restore path and capability checks to enable conditional importer behavior when the flag is enabled.
  • Refactor

    • Split SST collection and restoration for clearer timing, progress, and concurrency control; import scheduling adapts when retention mode is enabled.
  • Bug Fixes

    • Stream restore now validates compaction coverage required by the retention mode and skips incompatible DML log restore with a warning.
  • Tests

    • Added tests for SST collection, compaction-coverage validation, write-CF detection, and batch-download parallelization.
  • Chores

    • Updated kvproto dependency version.

Leavrth added 2 commits April 24, 2026 13:07
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
@ti-chi-bot ti-chi-bot Bot added do-not-merge/invalid-title release-note-none Denotes a PR that doesn't merit a release note. do-not-merge/needs-tests-checked size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Apr 24, 2026
@tiprow

tiprow Bot commented Apr 24, 2026

Copy link
Copy Markdown

Hi @Leavrth. Thanks for your PR.

PRs from untrusted users cannot be marked as trusted with /ok-to-test in this repo meaning untrusted PR authors can never trigger tests themselves. Collaborators can still trigger tests on the PR using /test all.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@coderabbitai

coderabbitai Bot commented Apr 24, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a --retain-latest-mvcc-version stream restore option: pre-collects compacted SST sets, adds batch-download capability checks and download-path plumbing, updates client init and progress accounting, validates absence of user DML logs for the flag, adds tests, and bumps kvproto pins.

Changes

Stream restore retain-latest-mvcc-version

Layer / File(s) Summary
Collect & restore compacted SST file-sets
br/pkg/restore/log_client/client.go, br/pkg/restore/log_client/client_test.go
Adds CollectSSTFileSets to eagerly collect compaction SST groups and a RestoreSSTFileSets entrypoint to restore from pre-built file sets; adjusts logging and adds TestCollectSSTFileSets.
Client init and capability plumbing
br/pkg/restore/log_client/client.go, br/pkg/restore/snap_client/client.go, br/pkg/restore/internal/import_client/import_client.go
Adds retainLatestMVCCVersion parameter to InitClients, conditionally registers CheckBatchDownloadLatestMVCCSupport when enabled, and threads the flag into NewSnapFileImporterOptions and relevant call sites.
Stream config, validation, and progress accounting
br/pkg/task/restore.go, br/pkg/task/stream.go
Introduces CLI flag --retain-latest-mvcc-version and RestoreConfig.RetainLatestMVCCVersion; adds checkpoint-aware SST progress accounting; probes DML/log iterator to reject restores that include user DML logs when the flag is enabled and substitutes an empty iterator if none exist.
Snap importer options, batch-download paths, and retries
br/pkg/restore/snap_client/import.go, br/pkg/restore/snap_client/client.go
Adds retainLatestMVCCVersion to SnapFileImporter/options, adds CheckBatchDownloadLatestMVCCSupport, scales import worker pool when enabled, implements batchDownloadNewestVersionSST using BatchDownloadLatestMVCC, and adjusts batchDownloadSST request/response handling and retry paths.
Snap importer parallelization tests
br/pkg/restore/snap_client/import_test.go, br/pkg/restore/snap_client/export_test.go
Adds blocking fake importer client and tests to assert per-peer parallelization for both latest-MVCC batch downloads and SST mode; updates test imports/options usage.
Migration compaction coverage validation & tests
br/pkg/restore/log_client/migration.go, br/pkg/restore/log_client/migration_test.go
Parses compaction comment JSON to derive shard/TS intervals and validates full coverage when retain-latest-mvcc-version is used; adds builder and LogFileManager validation methods and unit tests.
Build/test shard and deps pin updates
br/pkg/restore/snap_client/BUILD.bazel, DEPS.bzl, go.mod, br/pkg/task/BUILD.bazel
Increases test shard counts, updates task test deps, bumps github.com/pingcap/kvproto pseudo-version in go.mod and updates the corresponding go_repository metadata in DEPS.bzl.

Sequence Diagram(s)

sequenceDiagram
  participant User as User/CLI
  participant Stream as Stream Restore
  participant LogClient as LogClient
  participant SnapClient as SnapClient
  participant Importer as ImporterClient
  participant TiKV as TiKV Stores

  User->>Stream: restore --retain-latest-mvcc-version
  Stream->>Stream: Probe DML/log iterator (hasAnyLogFiles)
  alt DML logs exist
    Stream->>User: Error (cannot use flag with user DML logs)
  else No DML logs
    Stream->>LogClient: InitClients(retainLatestMVCCVersion=true)
    LogClient->>SnapClient: NewSnapFileImporterOptions(..., retainLatestMVCCVersion=true)
    SnapClient->>Importer: CheckBatchDownloadLatestMVCCSupport(stores)
    Importer->>TiKV: BatchDownloadLatestMVCC probe
    alt TiKV supports BatchDownloadLatestMVCC
      SnapClient->>Importer: BatchDownloadLatestMVCC (download requests)
      Importer->>TiKV: Download latest MVCC versions
      TiKV->>Importer: DownloadResponse (SSTs)
    else TiKV returns Unimplemented
      Importer->>SnapClient: Error (Unimplemented → upgrade or disable flag)
      SnapClient->>Stream: Error
    end
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • pingcap/tidb#67730: Overlapping work adding BatchDownloadLatestMVCC support-check and retain-latest-mvcc-version plumbing across import_client, log_client, and snap_client.
  • pingcap/tidb#67142: Related changes to SnapFileImporterOptions plumbing and retainLatestMVCCVersion argument ordering.

Suggested labels

ok-to-test

Suggested reviewers

  • YuJuncen
  • RidRisR

Poem

🐰 I nibble flags and code with care,
I gather SSTs in tidy stacks,
probe logs to skip what shouldn't be there,
batch-download newest MVCC packs,
hop—restore finishes light and snappy!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.54% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: retaining latest MVCC version when merging into one SST, which is the primary objective of this changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The PR description covers the essential sections: issue references, problem summary, changes made, and test checklist with unit and manual tests completed.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
br/pkg/restore/snap_client/import.go (1)

731-852: Optional: consider extracting shared scaffolding with batchDownloadNewestVersionSST.

The per-peer loop, token acquisition, retry wrapping, empty/error response handling, and the mu-protected result recording are nearly identical between batchDownloadSST and the new batchDownloadNewestVersionSST. The meaningful differences are (1) request grouping shape (map-by-CF vs. one-per-group), (2) which RPC to call, and (3) how to map the response into result metas. Those three points are amenable to a small strategy-style helper, which would reduce drift risk the next time either path evolves.

Not required for this PR — leaving as a follow-up suggestion.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@br/pkg/restore/snap_client/import.go` around lines 731 - 852, The per-peer
download scaffolding in batchDownloadSST is duplicated in
batchDownloadNewestVersionSST; extract a helper (e.g., runPerPeerDownload) that
accepts the regionInfo, downloadReqs, importer.downloadTokensMap,
importer.concurrencyPerStore, a function parameter to perform the RPC (single vs
batch), and a small mapper that converts an RPC response into the SST meta
entries to store into resultMetasMap under mu; move token acquire/release,
utils.WithRetryV2 wrapper, empty/error response handling, and mu-protected
result recording into that helper and call it from both batchDownloadSST and
batchDownloadNewestVersionSST, preserving existing request-shape differences by
using the mapper and RPC function parameters.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@br/pkg/restore/snap_client/import.go`:
- Around line 731-852: The per-peer download scaffolding in batchDownloadSST is
duplicated in batchDownloadNewestVersionSST; extract a helper (e.g.,
runPerPeerDownload) that accepts the regionInfo, downloadReqs,
importer.downloadTokensMap, importer.concurrencyPerStore, a function parameter
to perform the RPC (single vs batch), and a small mapper that converts an RPC
response into the SST meta entries to store into resultMetasMap under mu; move
token acquire/release, utils.WithRetryV2 wrapper, empty/error response handling,
and mu-protected result recording into that helper and call it from both
batchDownloadSST and batchDownloadNewestVersionSST, preserving existing
request-shape differences by using the mapper and RPC function parameters.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 57a7a555-059b-47e3-a82a-95b15bf2c070

📥 Commits

Reviewing files that changed from the base of the PR and between 25fa27a and dc843f8.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (9)
  • DEPS.bzl
  • br/pkg/restore/internal/import_client/import_client.go
  • br/pkg/restore/log_client/client.go
  • br/pkg/restore/snap_client/client.go
  • br/pkg/restore/snap_client/export_test.go
  • br/pkg/restore/snap_client/import.go
  • br/pkg/task/restore.go
  • br/pkg/task/stream.go
  • go.mod

@codecov

codecov Bot commented Apr 24, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 259 lines in your changes missing coverage. Please review.
✅ Project coverage is 75.3835%. Comparing base (a9267db) to head (9a18622).

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #68020        +/-   ##
================================================
- Coverage   76.3763%   75.3835%   -0.9929%     
================================================
  Files          2039       2021        -18     
  Lines        562829     566368      +3539     
================================================
- Hits         429868     426948      -2920     
- Misses       132045     139418      +7373     
+ Partials        916          2       -914     
Flag Coverage Δ
integration 41.5108% <0.0000%> (+1.7450%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
dumpling 60.4679% <ø> (ø)
parser ∅ <ø> (∅)
br 49.5166% <0.0000%> (-13.4076%) ⬇️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Leavrth Leavrth changed the title Retain latest mvcc version br: retain latest mvcc version when merge into one SST Apr 24, 2026
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
br/pkg/task/stream.go (1)

1733-1779: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Validate --retain-latest-mvcc-version before restoring any SSTs.

Line 1759 starts importing SSTs before the hasAnyLogFiles result is consumed at Line 1765. If user DML files exist, this path returns ErrInvalidArgument only after data has already been restored, which turns a request-validation failure into a partially applied restore.

Suggested fix
-	var hasDMLFilesResultCh <-chan hasLogFilesResult
-	if cfg.RetainLatestMVCCVersion {
-		ch := make(chan hasLogFilesResult, 1)
-		hasDMLFilesResultCh = ch
-		go func() {
-			hasDMLFiles, err := hasAnyLogFiles(ctx, logFilesIter)
-			ch <- hasLogFilesResult{hasFiles: hasDMLFiles, err: err}
-		}()
-	}
+	if cfg.RetainLatestMVCCVersion {
+		hasDMLFiles, err := hasAnyLogFiles(ctx, logFilesIter)
+		if err != nil {
+			return errors.Trace(err)
+		}
+		if hasDMLFiles {
+			return errors.Annotatef(
+				berrors.ErrInvalidArgument,
+				"%s requires no user DML log files during point restore (DDL files are allowed), but found log files in (%d, %d]",
+				FlagRetainLatestMVCCVersion,
+				cfg.StartTS,
+				cfg.RestoreTS,
+			)
+		}
+		log.Info("enabled restoring compacted SSTs with newest MVCC versions only; skip user DML log restore",
+			zap.String("flag", FlagRetainLatestMVCCVersion))
+		logFilesIter = iter.FromSlice([]*logclient.LogDataFileInfo{})
+	}
@@
-		if hasDMLFilesResultCh != nil {
-			result := <-hasDMLFilesResultCh
-			if result.err != nil {
-				return errors.Trace(result.err)
-			}
-			if result.hasFiles {
-				return errors.Annotatef(
-					berrors.ErrInvalidArgument,
-					"%s requires no user DML log files during point restore (DDL files are allowed), but found log files in (%d, %d]",
-					FlagRetainLatestMVCCVersion,
-					cfg.StartTS,
-					cfg.RestoreTS,
-				)
-			}
-			log.Info("enabled restoring compacted SSTs with newest MVCC versions only; skip user DML log restore",
-				zap.String("flag", FlagRetainLatestMVCCVersion))
-			logFilesIter = iter.FromSlice([]*logclient.LogDataFileInfo{})
-		}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@br/pkg/task/stream.go` around lines 1733 - 1779, The code calls
client.RestoreSSTFileSets before checking the hasAnyLogFiles result, which can
apply SSTs before rejecting an invalid --retain-latest-mvcc-version request; fix
by consuming hasDMLFilesResultCh and returning the ErrInvalidArgument if DML
files exist before invoking RestoreSSTFileSets. Specifically, when
hasDMLFilesResultCh != nil, receive from the channel (using hasAnyLogFiles
result), handle result.err and if result.hasFiles return the Annotatef error
referencing FlagRetainLatestMVCCVersion, cfg.StartTS and cfg.RestoreTS, and only
after that proceed to call client.RestoreSSTFileSets (function names:
hasAnyLogFiles, RestoreSSTFileSets, variable hasDMLFilesResultCh).
br/pkg/restore/log_client/client.go (1)

332-375: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Keep SST restore bounded instead of buffering the full iterator.

Line 340 drains the entire SST iterator up front, and Line 369 keeps appending every set into backupFileSets before any import starts. restoreStream now uses this on the normal PITR path, so large restores pay O(total SST metadata) memory and delayed time-to-first-import even when --retain-latest-mvcc-version is off. Please batch this collection or keep the streaming path for the default flow.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@br/pkg/restore/log_client/client.go` around lines 332 - 375,
CollectSSTFileSets currently drains the entire compactionsIter into memory
(backupFileSets) before any import, causing O(total SST metadata) memory and
delayed first-import; change it to a bounded/streaming approach: modify
CollectSSTFileSets to yield/emit batches instead of returning a full slice —
e.g., accept a callback or channel parameter (or an iterator-style return) and
emit restore.BackupFileSet batches as they are built (using the existing
iter.TryNextor loop), calling rc.rewriteRulesFor and computing totalKVs per
batch, or stop/flush a batch once it reaches a configurable size; update callers
(e.g., restoreStream) to consume batches and start imports immediately so memory
stays bounded and time-to-first-import is reduced while keeping logic in
CollectSSTFileSets, iter.TryNextor, rewriteRulesFor and the creation of
restore.BackupFileSet intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@br/pkg/restore/log_client/client.go`:
- Around line 332-375: CollectSSTFileSets currently drains the entire
compactionsIter into memory (backupFileSets) before any import, causing O(total
SST metadata) memory and delayed first-import; change it to a bounded/streaming
approach: modify CollectSSTFileSets to yield/emit batches instead of returning a
full slice — e.g., accept a callback or channel parameter (or an iterator-style
return) and emit restore.BackupFileSet batches as they are built (using the
existing iter.TryNextor loop), calling rc.rewriteRulesFor and computing totalKVs
per batch, or stop/flush a batch once it reaches a configurable size; update
callers (e.g., restoreStream) to consume batches and start imports immediately
so memory stays bounded and time-to-first-import is reduced while keeping logic
in CollectSSTFileSets, iter.TryNextor, rewriteRulesFor and the creation of
restore.BackupFileSet intact.

In `@br/pkg/task/stream.go`:
- Around line 1733-1779: The code calls client.RestoreSSTFileSets before
checking the hasAnyLogFiles result, which can apply SSTs before rejecting an
invalid --retain-latest-mvcc-version request; fix by consuming
hasDMLFilesResultCh and returning the ErrInvalidArgument if DML files exist
before invoking RestoreSSTFileSets. Specifically, when hasDMLFilesResultCh !=
nil, receive from the channel (using hasAnyLogFiles result), handle result.err
and if result.hasFiles return the Annotatef error referencing
FlagRetainLatestMVCCVersion, cfg.StartTS and cfg.RestoreTS, and only after that
proceed to call client.RestoreSSTFileSets (function names: hasAnyLogFiles,
RestoreSSTFileSets, variable hasDMLFilesResultCh).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9dbac409-2982-47ff-8d97-d7f0bf90a778

📥 Commits

Reviewing files that changed from the base of the PR and between dc843f8 and 29464f6.

📒 Files selected for processing (3)
  • br/pkg/restore/log_client/client.go
  • br/pkg/restore/log_client/client_test.go
  • br/pkg/task/stream.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
br/pkg/task/stream.go (1)

1769-1787: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fail-fast validation runs after SST ingestion

Line 1769 restores SST file sets before the retain-latest DML validation at Line 1774, so a disallowed input can partially mutate the target cluster and only then fail with ErrInvalidArgument.

🔧 Suggested fix (validate before any restore-side effects)
-		err = client.RestoreSSTFileSets(ctx, sstFileSets, importModeSwitcher, p.IncBy)
-		if err != nil {
-			return errors.Trace(err)
-		}
-
 		if hasDMLFilesResultCh != nil {
 			result := <-hasDMLFilesResultCh
 			if result.err != nil {
 				return errors.Trace(result.err)
 			}
 			if result.hasFiles {
 				return errors.Annotatef(
 					berrors.ErrInvalidArgument,
 					"%s requires no user DML log files during point restore (DDL files are allowed), but found log files in (%d, %d]",
 					FlagRetainLatestMVCCVersion,
 					cfg.StartTS,
 					cfg.RestoreTS,
 				)
 			}
 			log.Info("enabled restoring compacted SSTs with newest MVCC versions only; skip user DML log restore",
 				zap.String("flag", FlagRetainLatestMVCCVersion))
 			logFilesIter = iter.FromSlice([]*logclient.LogDataFileInfo{})
 		}
+
+		err = client.RestoreSSTFileSets(ctx, sstFileSets, importModeSwitcher, p.IncBy)
+		if err != nil {
+			return errors.Trace(err)
+		}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@br/pkg/task/stream.go` around lines 1769 - 1787, The retain-latest DML
validation must run before performing any side-effects; move the
hasDMLFilesResultCh check so it executes and returns ErrInvalidArgument (with
FlagRetainLatestMVCCVersion and cfg.StartTS/cfg.RestoreTS in the message) prior
to calling client.RestoreSSTFileSets. Concretely, evaluate
<-hasDMLFilesResultCh, handle result.err and result.hasFiles (returning the
annotated berrors.ErrInvalidArgument) before invoking
client.RestoreSSTFileSets(ctx, sstFileSets, importModeSwitcher, p.IncBy) to
ensure fail-fast validation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@br/pkg/task/stream.go`:
- Around line 1769-1787: The retain-latest DML validation must run before
performing any side-effects; move the hasDMLFilesResultCh check so it executes
and returns ErrInvalidArgument (with FlagRetainLatestMVCCVersion and
cfg.StartTS/cfg.RestoreTS in the message) prior to calling
client.RestoreSSTFileSets. Concretely, evaluate <-hasDMLFilesResultCh, handle
result.err and result.hasFiles (returning the annotated
berrors.ErrInvalidArgument) before invoking client.RestoreSSTFileSets(ctx,
sstFileSets, importModeSwitcher, p.IncBy) to ensure fail-fast validation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: d79b6626-2fc6-4284-9874-64502188fec4

📥 Commits

Reviewing files that changed from the base of the PR and between 29464f6 and 9a18622.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (5)
  • DEPS.bzl
  • br/pkg/restore/snap_client/client.go
  • br/pkg/task/restore.go
  • br/pkg/task/stream.go
  • go.mod
💤 Files with no reviewable changes (1)
  • DEPS.bzl

@codecov

codecov Bot commented May 23, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 20.33097% with 337 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.0285%. Comparing base (198e8f2) to head (13cb02f).
⚠️ Report is 8 commits behind head on master.

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #68020        +/-   ##
================================================
- Coverage   76.3192%   76.0285%   -0.2907%     
================================================
  Files          2041       2052        +11     
  Lines        561552     571942     +10390     
================================================
+ Hits         428572     434839      +6267     
- Misses       132076     135830      +3754     
- Partials        904       1273       +369     
Flag Coverage Δ
integration 44.6376% <20.3309%> (+4.9948%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
dumpling 60.4610% <ø> (ø)
parser ∅ <ø> (∅)
br 64.9409% <20.3309%> (+2.1243%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
@ti-chi-bot ti-chi-bot Bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jun 1, 2026
Leavrth added 4 commits June 9, 2026 11:09
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
@ti-chi-bot ti-chi-bot Bot added approved needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Jun 17, 2026
@ti-chi-bot

ti-chi-bot Bot commented Jun 18, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: RidRisR, YuJuncen

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ti-chi-bot ti-chi-bot Bot added lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Jun 18, 2026
@ti-chi-bot

ti-chi-bot Bot commented Jun 18, 2026

Copy link
Copy Markdown

[LGTM Timeline notifier]

Timeline:

  • 2026-06-17 09:13:53.790944652 +0000 UTC m=+1556134.861262042: ☑️ agreed by YuJuncen.
  • 2026-06-18 09:17:46.475976174 +0000 UTC m=+1642767.546293565: ☑️ agreed by RidRisR.

@Leavrth

Leavrth commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

/ok-to-test

@ti-chi-bot ti-chi-bot Bot added the ok-to-test Indicates a PR is ready to be tested. label Jun 18, 2026
Leavrth added 4 commits June 18, 2026 17:58
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
Signed-off-by: Jianjun Liao <jianjun.liao@outlook.com>
@Leavrth

Leavrth commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

/retest

1 similar comment
@Leavrth

Leavrth commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

/retest

@Leavrth

Leavrth commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

/retest

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved lgtm ok-to-test Indicates a PR is ready to be tested. release-note-none Denotes a PR that doesn't merit a release note. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[crrf]restore to downstream fail for BR:Common:ErrInvalidArgument

3 participants