{"record":{"id":"09c5a34c24b0f14a","repo":"dotnet/runtime","slug":"didn-t-find-any-collections-using-s","errorCode":null,"errorMessage":"Didn't find any collections using %s","messagePattern":"Didn't find any collections using (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/coreclr/scripts/superpmi_diffs_setup.py","lineNumber":248,"sourceCode":"        jit_ee_version = jit_ee_version.lower()\n    else:\n        raise Exception(\"Could not determine JIT-EE version\")\n\n    print(\"JIT-EE version determined to be {}\".format(jit_ee_version))\n\n    az_account_name = \"clrjit2\"\n    az_superpmi_container_name = \"superpmi\"\n    az_blob_storage_account_uri = \"https://\" + az_account_name + \".blob.core.windows.net/\"\n    az_blob_storage_superpmi_container_uri = az_blob_storage_account_uri + az_superpmi_container_name\n    az_collections_root_folder = \"collections\"\n    prefix = az_collections_root_folder + \"/\" + jit_ee_version\n    prefix_urlencoded = urllib.parse.quote(prefix)\n    list_superpmi_container_uri = az_blob_storage_superpmi_container_uri + \"?restype=container&comp=list&prefix=\" + prefix_urlencoded + \"/\"\n\n    try:\n        contents = urllib.request.urlopen(list_superpmi_container_uri).read().decode('utf-8')\n    except Exception as exception:\n        raise Exception(\"Didn't find any collections using %s\", list_superpmi_container_uri)\n\n    elem = ET.fromstring(contents)\n\n    # Each tuple is (target_os, target_arch, blob_arch) where blob_arch is the architecture\n    # directory used in blob storage. For wasm collections the MCH files are uploaded under\n    # the host architecture directory (e.g. <jit_ee_version>/browser/x64/) because the wasm\n    # mch_arch override in superpmi.py replaces mch_arch with the host arch. Recording the\n    # blob_arch separately lets us discover those collections while still recording the real\n    # target_arch (\"wasm\") in the per-partition JSON so the diffs script picks the wasm jit\n    # and passes --altjit.\n    if not target_windows and not do_asmdiffs:\n        targets = [(\"linux\", \"x64\", \"x64\")]\n    elif host_bitness == 64:\n        targets = [\n            (\"windows\", \"x64\", \"x64\"),\n            (\"windows\", \"arm64\", \"arm64\"),\n            (\"linux\", \"x64\", \"x64\"),\n            (\"linux\", \"arm64\", \"arm64\"),","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/dotnet/runtime/blob/290d5ab72cc1102813fbc0406fb186ceadabc340/src/coreclr/scripts/superpmi_diffs_setup.py#L230-L266","documentation":"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.","triggerScenarios":"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`.","commonSituations":"Air-gapped or proxy-blocked CI; wrong az_account_name ('clrjit2'); SAS/anonymous access disabled on the container; transient Azure blip.","solutions":["curl/GET the list_superpmi_container_uri manually to see the HTTP status.","Confirm the storage account/container names in the script are still correct.","Check proxy/firewall allows egress to *.blob.core.windows.net.","Retry — if it is a transient Azure 5xx, re-running usually succeeds."],"exampleFix":"// before\n# urlopen() raises -> re-raised as [196]\n// after\ncurl '<list_superpmi_container_uri>'  # confirm 200, fix proxy/account, then rerun","handlingStrategy":"retry","validationCode":"import urllib.request\ntry:\n    with urllib.request.urlopen(list_superpmi_container_uri, timeout=15) as r:\n        if r.status != 200: raise SystemExit('blob list returned non-200')\nexcept Exception as e:\n    raise SystemExit(f'cannot reach collections blob listing: {e}')","typeGuard":"def collections_listing_reachable(uri: str) -> bool:\n    import urllib.request\n    try:\n        with urllib.request.urlopen(uri, timeout=15) as r: return r.status == 200\n    except Exception: return False","tryCatchPattern":"for attempt in range(3):\n    try:\n        build_partitions(...); break\n    except Exception as e:\n        if 'Didn\\'t find any collections' in str(e) and attempt < 2:\n            time.sleep(5); continue\n        raise","preventionTips":["Whitelist *.blob.core.windows.net on proxies","Confirm storage account/container names","Add bounded retries for transient Azure 5xx"],"tags":["network","azure-storage","superpmi","proxy"],"analyzedSha":"290d5ab72cc1102813fbc0406fb186ceadabc340","analyzedAt":"2026-08-06T19:57:01.276Z","schemaVersion":2},"datasetVersion":"2026-08-06T23:17:07.152Z"}