dotnet/runtime · error · Exception

Didn't find any collections using %s

Error message

Didn't find any collections using %s

What it means

Raised by build_partitions in superpmi_diffs_setup.py when `urllib.request.urlopen(list_superpmi_container_uri)` throws (the Azure blob 'list' REST call failed). Without the collection listing, no partitions can be generated.

Source

Thrown at src/coreclr/scripts/superpmi_diffs_setup.py:248

        jit_ee_version = jit_ee_version.lower()
    else:
        raise Exception("Could not determine JIT-EE version")

    print("JIT-EE version determined to be {}".format(jit_ee_version))

    az_account_name = "clrjit2"
    az_superpmi_container_name = "superpmi"
    az_blob_storage_account_uri = "https://" + az_account_name + ".blob.core.windows.net/"
    az_blob_storage_superpmi_container_uri = az_blob_storage_account_uri + az_superpmi_container_name
    az_collections_root_folder = "collections"
    prefix = az_collections_root_folder + "/" + jit_ee_version
    prefix_urlencoded = urllib.parse.quote(prefix)
    list_superpmi_container_uri = az_blob_storage_superpmi_container_uri + "?restype=container&comp=list&prefix=" + prefix_urlencoded + "/"

    try:
        contents = urllib.request.urlopen(list_superpmi_container_uri).read().decode('utf-8')
    except Exception as exception:
        raise Exception("Didn't find any collections using %s", list_superpmi_container_uri)

    elem = ET.fromstring(contents)

    # Each tuple is (target_os, target_arch, blob_arch) where blob_arch is the architecture
    # directory used in blob storage. For wasm collections the MCH files are uploaded under
    # the host architecture directory (e.g. <jit_ee_version>/browser/x64/) because the wasm
    # mch_arch override in superpmi.py replaces mch_arch with the host arch. Recording the
    # blob_arch separately lets us discover those collections while still recording the real
    # target_arch ("wasm") in the per-partition JSON so the diffs script picks the wasm jit
    # and passes --altjit.
    if not target_windows and not do_asmdiffs:
        targets = [("linux", "x64", "x64")]
    elif host_bitness == 64:
        targets = [
            ("windows", "x64", "x64"),
            ("windows", "arm64", "arm64"),
            ("linux", "x64", "x64"),
            ("linux", "arm64", "arm64"),

View on GitHub (pinned to 290d5ab72c)

Solutions

  1. curl/GET the list_superpmi_container_uri manually to see the HTTP status.
  2. Confirm the storage account/container names in the script are still correct.
  3. Check proxy/firewall allows egress to *.blob.core.windows.net.
  4. Retry — if it is a transient Azure 5xx, re-running usually succeeds.

Example fix

// before
# urlopen() raises -> re-raised as [196]
// after
curl '<list_superpmi_container_uri>'  # confirm 200, fix proxy/account, then rerun
Defensive patterns

Strategy: retry

Validate before calling

import urllib.request
try:
    with urllib.request.urlopen(list_superpmi_container_uri, timeout=15) as r:
        if r.status != 200: raise SystemExit('blob list returned non-200')
except Exception as e:
    raise SystemExit(f'cannot reach collections blob listing: {e}')

Type guard

def collections_listing_reachable(uri: str) -> bool:
    import urllib.request
    try:
        with urllib.request.urlopen(uri, timeout=15) as r: return r.status == 200
    except Exception: return False

Try / catch

for attempt in range(3):
    try:
        build_partitions(...); break
    except Exception as e:
        if 'Didn\'t find any collections' in str(e) and attempt < 2:
            time.sleep(5); continue
        raise

Prevention

When it happens

Trigger: Network/DNS/proxy error hitting the Azure storage container, the container/account name changed, an HTTP error (404/403/5xx), or transient outage. Caught by bare `except Exception`.

Common situations: Air-gapped or proxy-blocked CI; wrong az_account_name ('clrjit2'); SAS/anonymous access disabled on the container; transient Azure blip.

Related errors


AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06). Data as JSON: /api/errors/09c5a34c24b0f14a. Report an issue: GitHub.