Skip to content

Accelerate source blob backups with high-throughput resumable transfers #1095

Closed

Description

@paullizer

Summary

Accelerate Data Management source-blob backups with high-throughput bounded transfers, durable per-file checkpoints, retry/skip behavior, and an evidence-based choice among AzCopy, Azure Blob server-side copy, and Azure SDK block transfer.

User Value

Large Enhanced Citations storage sets should finish within a practical backup window. The current implementation downloads each complete blob with readall() and uploads it serially, so tens of gigabytes can take hours and consume unnecessary App Service memory.

Proposed Behavior

  • Benchmark AzCopy, Blob server-side copy, and bounded Azure SDK block upload for the supported authentication, deployment, source/target account, and encryption configurations.
  • Document and implement the fastest safe transport per mode. AzCopy or server-side copy may be used when compatible; encrypted artifacts must retain the backup encryption contract through a bounded streaming fallback rather than silently disabling encryption.
  • Transfer blobs concurrently within configurable service and memory bounds, with chunked streaming or staged blocks when bytes must pass through the app.
  • Persist a durable per-file checkpoint containing container/blob identity, source ETag/Last-Modified/length, target artifact identity, bytes, status, retries, and latest-only backup state.
  • On retry/resume, validate source version and target checkpoint before skipping completed work; changed source blobs follow the stable backup cutoff policy.
  • Handle 408/409/412/429/5xx and transport timeouts with bounded retry/backoff, honor service guidance, and adapt concurrency under throttling.
  • Skip independent unreadable or failed files after the retry budget, continue the backup, and record sanitized failure detail for focused retry. Fail only when manifest integrity cannot be established.
  • Report per-container and aggregate blob count, bytes, completed/skipped/failed files, retries, elapsed time, bytes/sec, current file, and last durable checkpoint.
  • Never persist or return account keys, connection strings, SAS URLs, source contents, or raw sensitive exception data.

Acceptance Criteria

  • A documented benchmark compares AzCopy, server-side copy, and SDK transfer under representative SimpleChat constraints and records the chosen path for encrypted and unencrypted backups.
  • Backup transfer uses bounded concurrency and bounded memory; no file requires whole-blob readall() buffering.
  • A representative 50 GB test set demonstrates a material elapsed-time improvement over the serial baseline, with the achieved throughput and environment documented rather than treated as a universal guarantee.
  • Every file reaches a durable completed, skipped, or failed checkpoint with source-version and target-artifact identity sufficient for safe resume.
  • 429/5xx/timeouts use bounded adaptive retry, and one failed file does not abort independent file transfers.
  • Cancellation, worker restart, and Retry/Resume reuse verified files without duplicate target artifacts or silent omission.
  • Existing metadata/content-type requirements and optional backup encryption remain correct for every supported transfer path.
  • Progress and completion reports expose counts, bytes, rates, retries, and skip/failure summaries without secrets.
  • Focused tests cover chunking, concurrency limits, encryption, source mutation, checkpoint resume, throttling, skip behavior, cancellation, and secret safety.

Notes

Activity

  1. moved this from Pending Evaluation to Pending Assignment in Simple Chat Roadmapon Jul 29, 2026
  2. paullizer commented on Jul 30, 2026

    @paullizer
    CollaboratorAuthor

    Implemented in PR #1123 with bounded resumable source-blob transfers, durable checkpoints, adaptive retry, encrypted chunk framing, focused tests, and benchmark tooling.

  3. moved this from Pending Assignment to Released in Simple Chat Roadmapon Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions