{"record":{"id":"d8316c706e48c3f7","repo":"dotnet/runtime","slug":"not-found","errorCode":null,"errorMessage":"{} not found","messagePattern":"(.+?) not found","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/coreclr/scripts/superpmi.py","lineNumber":5006,"sourceCode":"        pintool_filename = \"libclrjit_inscount.so\"\n\n    return os.path.join(get_pintools_path(coreclr_args), \"clrjit_inscount_\" + coreclr_args.arch, pintool_filename)\n\ndef download_clrjit_pintool(coreclr_args):\n    \"\"\" Download the pintool package for doing measurements of the JIT from Azure Storage.\n    \"\"\"\n\n    if os.path.isfile(get_pin_exe_path(coreclr_args)):\n        return\n\n    pin_dir_path = get_pintools_path(coreclr_args)\n    extension = \"zip\" if coreclr_args.host_os.lower() == \"windows\" else \"tar.gz\"\n    pintools_rel_path = \"{}/{}/{}.{}\".format(az_pintools_root_folder, pintools_current_version, coreclr_args.host_os.lower(), extension)\n    pintool_uri = \"{}/{}\".format(az_blob_storage_superpmi_container_uri, pintools_rel_path)\n    local_files = download_files([pintool_uri], pin_dir_path, verbose=False, is_azure_storage=True, fail_if_not_found=False)\n    if len(local_files) <= 0:\n        logging.error(\"Error: {} not found\".format(pintools_rel_path))\n        raise RuntimeError(\"{} not found\".format(pintools_rel_path))\n\ndef setup_args(args):\n    \"\"\" Setup the args for SuperPMI to use.\n\n    Args:\n        args (ArgParse): args parsed by arg parser\n\n    Returns:\n        args (CoreclrArguments)\n\n    \"\"\"\n\n    # Start setting up logging.\n    # Set up the console logger immediately. Later, after we've parsed some arguments, we'll add the file logger and\n    # change the console logger level to the one parsed by the arguments. We need to do this initial setup before the first\n    # logging command is executed.\n    logger = logging.getLogger()\n    logger.setLevel(logging.DEBUG)","sourceCodeStart":4988,"sourceCodeEnd":5024,"githubUrl":"https://github.com/dotnet/runtime/blob/60108ba66eb7d1d12f595480091b4ad80a24b172/src/coreclr/scripts/superpmi.py#L4988-L5024","documentation":"Raised by download_clrjit_pintool when the attempt to download the Intel Pin-based clrjit pintool package from Azure Storage returns no files. The pintool is used for instruction-count measurements of the JIT; without it the measurement workflow cannot run. The {} is filled with the relative blob path (e.g. '<root>/<version>/<os>.<ext>').","triggerScenarios":"download_files([pintool_uri], pin_dir_path, ..., fail_if_not_found=False) returns an empty list, so len(local_files) <= 0 triggers the raise. Occurs when the pintool blob does not exist for the current pintools_current_version/host_os, when the download fails due to network/SAS issues, or when the version constant points at a not-yet-uploaded package.","commonSituations":"A new pintools_current_version that hasn't been uploaded yet; running on an OS/arch combination for which no pintool package was published; offline or behind a proxy that blocks Azure Storage; an expired SAS token in the container URI.","solutions":["Check network connectivity and that the Azure Storage container URI is reachable (the attempted URI is logged).","Verify pintools_current_version matches a published package for your host_os; if the version bumped upstream, pull the latest superpmi.py.","If a local pintool package exists, place it under the expected get_pintools_path(coreclr_args) directory so the early-return check at the top of the function succeeds.","Report the missing blob upstream if the version/OS combination should exist."],"exampleFix":"// before\npintool_uri = \"{}/{}\".format(az_blob_storage_superpmi_container_uri, pintools_rel_path)\nlocal_files = download_files([pintool_uri], pin_dir_path, verbose=False, is_azure_storage=True, fail_if_not_found=False)\nif len(local_files) <= 0:\n    logging.error(\"Error: {} not found\".format(pintools_rel_path))\n    raise RuntimeError(\"{} not found\".format(pintools_rel_path))\n// after (fix invocation)\n# Ensure network access, then re-run; or pre-populate the pintools cache:\nmkdir -p <spmi_location>/pintools/<version>/<os>\n# place pin + pintool files there, then re-run superpmi.py","handlingStrategy":"validation","validationCode":"import os\ndef preflight_pintool_download(coreclr_args, pintools_current_version, az_blob_storage_superpmi_container_uri):\n    pin_dir_path = os.path.join(coreclr_args.spmi_location, 'pintools', pintools_current_version, coreclr_args.host_os.lower())\n    extension = 'zip' if coreclr_args.host_os.lower() == 'windows' else 'tar.gz'\n    rel = f'{pintools_current_version}/{coreclr_args.host_os.lower()}.{extension}'\n    uri = f'{az_blob_storage_superpmi_container_uri}/{rel}'\n    logging.info('Will attempt to download pintool from: %s', uri)\n    if not os.path.isdir(coreclr_args.spmi_location) or not os.access(coreclr_args.spmi_location, os.W_OK):\n        raise RuntimeError(f'spmi_location not writable: {coreclr_args.spmi_location}')\n    return uri","typeGuard":null,"tryCatchPattern":"try:\n    download_clrjit_pintool(coreclr_args)\nexcept RuntimeError as e:\n    logging.error('Pintool download failed: %s', e)\n    logging.error('Ensure network access to Azure Storage, or pre-populate %s', get_pintools_path(coreclr_args))\n    raise","preventionTips":["Ensure network access to Azure Storage in CI for the first pintool download.","Keep superpmi.py updated so pintools_current_version matches published packages.","Cache the pintools directory across CI runs to avoid repeated downloads."],"tags":["pintool","azure-storage","download","network","superpmi"],"backgroundTag":null,"analyzedSha":"60108ba66eb7d1d12f595480091b4ad80a24b172","analyzedAt":"2026-08-10T18:54:11.478Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}