r2-outage-toggle

Désactiver ou réactiver l'utilisation de Cloudflare R2 (download-r2.pytorch.org) dans manage_v2.py lors des pannes R2. Permet d'activer/désactiver R2 pour les builds nightly, prod/stable…

npx skills add https://github.com/pytorch/test-infra --skill r2-outage-toggle

R2 Outage Toggle

Modifies s3_management/manage_v2.py to disable or re-enable Cloudflare R2 (download-r2.pytorch.org) URL generation for PyTorch foundation packages. Use during R2 outages to fall back to S3/CloudFront, or to restore R2 usage after an outage is resolved.

When to use this skill

Use when the user asks to:

  • Disable R2 / turn off R2 / stop using download-r2.pytorch.org
  • Re-enable R2 / turn on R2 / restore R2 usage
  • Handle an R2 outage or Cloudflare outage
  • Switch nightly or prod packages away from R2
  • Fall back to S3/CloudFront for foundation packages

Target file

s3_management/manage_v2.py (relative to repo root)

Key data structures

There are two sets that control which packages use R2 URLs:

SetPurposeLocation
PT_R2_PACKAGESPackages using R2 for nightly builds (whl/nightly)~line 437
PT_R2_PACKAGES_PRODPackages using R2 for prod/stable builds (not test, not nightly)~line 452

Both sets contain members of PT_FOUNDATION_PACKAGES. The URL routing logic is in the to_simple_package_html method (~line 799-824).

Instructions

Step 1: Determine the action and scope

Ask the user (if not already clear) two things:

  1. Action: disable R2 or re-enable R2?
  2. Scope: nightly only, prod only, or both?

Step 2: Read the current state

Read s3_management/manage_v2.py and check the current contents of PT_R2_PACKAGES and PT_R2_PACKAGES_PROD. They may already be empty (disabled) or populated (enabled).

Step 3a: To DISABLE R2

To disable R2, empty the relevant set(s) while preserving a comment showing the original contents. This ensures easy re-enablement.

Disable R2 for nightly — Replace the PT_R2_PACKAGES set with an empty set:

# Packages that should use R2 (download-r2.pytorch.org) for nightly builds
# These packages will have their URLs point to R2 instead of S3/CloudFront
# when the path is whl/nightly
# R2 DISABLED - original packages commented out during R2 outage:
# "torch", "torchvision", "torchaudio", "fbgemm_gpu", "fbgemm_gpu_genai",
# "triton", "pytorch_triton", "pytorch_triton_rocm", "pytorch_triton_xpu"
PT_R2_PACKAGES: set[str] = set()

Disable R2 for prod — Replace the PT_R2_PACKAGES_PROD set with an empty set:

# Packages that should use R2 (download-r2.pytorch.org) for prod/stable builds
# These packages will have their URLs point to R2 instead of S3/CloudFront
# when the path is NOT whl/test and NOT whl/nightly (i.e., prod)
# R2 DISABLED - original packages commented out during R2 outage:
# "torchaudio", "fbgemm_gpu", "fbgemm_gpu_genai"
PT_R2_PACKAGES_PROD: set[str] = set()

Step 3b: To RE-ENABLE R2

Restore the original set contents and remove the outage comments.

Re-enable R2 for nightly — Restore PT_R2_PACKAGES:

# Packages that should use R2 (download-r2.pytorch.org) for nightly builds
# These packages will have their URLs point to R2 instead of S3/CloudFront
# when the path is whl/nightly
PT_R2_PACKAGES = {
    "torch",
    "torchvision",
    "torchaudio",
    "fbgemm_gpu",
    "fbgemm_gpu_genai",
    "triton",
    "pytorch_triton",
    "pytorch_triton_rocm",
    "pytorch_triton_xpu",
}

Re-enable R2 for prod — Restore PT_R2_PACKAGES_PROD:

# Packages that should use R2 (download-r2.pytorch.org) for prod/stable builds
# These packages will have their URLs point to R2 instead of S3/CloudFront
# when the path is NOT whl/test and NOT whl/nightly (i.e., prod)
PT_R2_PACKAGES_PROD = {
    "torchaudio",
    "fbgemm_gpu",
    "fbgemm_gpu_genai",
}

Step 4: Verify the change

After editing, read back the modified sections to confirm correctness. Also verify that:

  • The to_simple_package_html method logic (~line 799-824) was NOT modified — it naturally handles empty sets correctly (no packages will match, so R2 URLs won't be generated).
  • No other references to PT_R2_PACKAGES or PT_R2_PACKAGES_PROD were affected.

Step 5: Remind about deployment

After making the change, remind the user:

Important: This change only modifies the source file. To take effect, you need to:

  1. Commit and land this change
  2. Re-run the index generation: python s3_management/manage_v2.py all (or target specific prefixes like whl/nightly or whl depending on scope)

The index HTML files will be regenerated with S3/CloudFront URLs (relative URLs for foundation packages) instead of download-r2.pytorch.org URLs.

How it works

The URL routing in to_simple_package_html checks package membership in these sets:

if package_name.lower() in PT_R2_PACKAGES and resolved_subdir.startswith("whl/nightly"):
    base_url = "https://download-r2.pytorch.org"
elif package_name.lower() in PT_R2_PACKAGES_PROD and not test and not nightly:
    base_url = "https://download-r2.pytorch.org"
elif use_cloudfront_for_non_foundation and package not in PT_FOUNDATION_PACKAGES:
    base_url = "https://d21usjoq99fcb9.cloudfront.net"
else:
    base_url = ""  # relative URL (served from S3)

When the sets are empty, no package matches the R2 conditions, so foundation packages fall through to base_url = "" (relative URLs served from S3). This is the safe fallback during an R2 outage.

Example usage

Disable R2 for everything during an outage:

R2 is down, disable R2 for both nightly and prod

Disable R2 for nightly only:

Turn off R2 for nightly builds

Re-enable after outage is resolved:

R2 outage is over, re-enable R2 for nightly and prod

Plus de skills de pytorch

aoti-debug
pytorch
Déboguer les erreurs et plantages d'AOTInductor (AOTI). Utiliser en cas de segfaults AOTI, d'erreurs de non-correspondance de périphérique, d'échecs de chargement de constantes ou d'erreurs d'exécution provenant de…
official
pt2-bug-basher
pytorch
Déboguer les échecs de la pile de compilation PyTorch 2, y compris les ruptures de graphe Dynamo, les erreurs de génération de code Inductor, les plantages AOTAutograd et les divergences de précision. Utiliser lorsque…
official
release-cherry-pick-missing-reverts
pytorch
Trouve les annulations qui ont atterri sur pytorch/pytorch main mais qui manquent dans une branche de version (release/X.Y) parce que le commit annulé a déjà été livré dans une…
official
release-create-tracker-issue
pytorch
Générer (et éventuellement ouvrir) un issue de suivi de version PyTorch / de suivi de cherry-pick à partir d'une annonce de version, comme…
official
release-create-validation-issue
pytorch
Générer un problème de checklist de validation de version PyTorch en extrayant les problèmes ouverts/fermés d'un jalon GitHub et les cherry-picks d'un problème de suivi de version.
official
release-go-live-binary-build-matrix
pytorch
Mettre à jour tools/scripts/generate_binary_build_matrix.py lorsqu'une version de PyTorch est mise en ligne. Avance CURRENT_STABLE_VERSION vers la nouvelle version stable, promeut la…
official
release-update-docker-image-pin
pytorch
Verrouiller (ou re-verrouiller) les images docker du constructeur manywheel Linux utilisées par les workflows de construction binaire nightly/release dans pytorch/pytorch vers une build .ci/docker fixe.…
official
vllm-pytorch-ci-triage
pytorch
Triage d’un échec de build CI vLLM Buildkite pour une PR de mise à jour de version PyTorch, isoler les nouvelles régressions par rapport aux échecs préexistants sur main en comparant avec les récents…
official