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

zephyr
pytorch
Construire et configurer ExecuTorch en tant que module Zephyr RTOS pour cartes embarquées. Utiliser lors de la configuration d’un espace de travail Zephyr avec ET, de l’ajout de support de carte (superpositions,…
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…
skill-writer
pytorch
Guide pour créer des Agent Skills bien structurées pour Claude Code avec les bonnes pratiques et la validation. Couvre l'ensemble du cycle de vie d'une Skill : cadrage, structure des fichiers, validation du frontmatter YAML, organisation du contenu et procédures de test. Impose des règles de nommage strictes (minuscules, traits d'union, 64 caractères max) et des exigences de description (déclencheurs spécifiques, types de fichiers, clauses "quoi" et "quand"). Fournit des modèles pour les motifs courants, notamment les Skills en lecture seule, les Skills basées sur des scripts et les Skills multi-fichiers avec...
triaging-issues
pytorch
Trie les problèmes GitHub en les acheminant vers les équipes d'astreinte, en appliquant des étiquettes et en fermant les questions. À utiliser lors du traitement de nouveaux problèmes PyTorch ou lorsqu'on vous demande de trier un…
wheel-size-analyzer
pytorch
Analyser les tailles des wheels PyTorch nightly sur une plage de dates à l’aide de l’API des artefacts de GitHub Actions. À utiliser pour suivre les changements de taille des binaires, identifier la taille des wheels…
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…
pr-review
pytorch
Examiner les demandes de tirage PyTorch pour la qualité du code, la couverture des tests, la sécurité et la compatibilité ascendante. Utiliser lors de l'examen des PR, lorsqu'on vous demande de réviser des modifications de code,…
qualcomm
pytorch
Construire, tester ou développer le backend QNN (Qualcomm AI Engine Direct). Utiliser lorsque vous travaillez sur backends/qualcomm/, en construisant QNN (utiliser…