{"record":{"id":"e88fb5f158f618a4","repo":"apache/beam","slug":"unable-to-fetch-remote-prism-binary-at-s-s","errorCode":null,"errorMessage":"Unable to fetch remote prism binary at %s: %s","messagePattern":"Unable to fetch remote prism binary at (.+?): (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/portability/prism_runner.py","lineNumber":301,"sourceCode":"            'Using cached prism binary/zip from %s for %s' % (cached_file, url))\n      else:\n        _LOGGER.info('Downloading prism from %s' % url)\n        if not os.path.exists(bin_cache):\n          os.makedirs(bin_cache)\n        try:\n          try:\n            url_read = FileSystems.open(url)\n          except ValueError:\n            url_read = urlopen(url)\n          with open(cached_file + '.tmp', 'wb') as zip_write:\n            shutil.copyfileobj(\n                typing.cast(typing.BinaryIO, url_read),\n                zip_write,\n                length=1 << 20)\n\n          _rename_if_different(cached_file + '.tmp', cached_file)\n        except URLError as e:\n          raise RuntimeError(\n              'Unable to fetch remote prism binary at %s: %s' % (url, e))\n        # If we download a new prism, then we should always use it but not\n        # the cached one.\n        ignore_cache = True\n    return cached_file, ignore_cache\n\n  @staticmethod\n  def _construct_download_url(\n      version: str, root_tag: str, sys: str, mach: str) -> str:\n    \"\"\"Construct the prism download URL with the appropriate release tag.\n    This maps operating systems and machine architectures to the compatible\n    and canonical names used by the Go build targets.\n\n    platform.system() provides compatible listings, so we need to filter out\n    the unsupported versions.\"\"\"\n    opsys = sys.lower()\n    if opsys not in ['linux', 'windows', 'darwin']:\n      raise ValueError(","sourceCodeStart":283,"sourceCodeEnd":319,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/portability/prism_runner.py#L283-L319","documentation":"prism_runner._download_to_local_path fetches the Prism release binary over HTTP and wraps any URLError in this RuntimeError. It means the runner could not download the prism executable needed to run the pipeline locally.","triggerScenarios":"First run of PrismRunner without a cached or pre-built prism binary while the release download URL is unreachable (offline, proxy/firewall blocking github.com, DNS failure).","commonSituations":"Corporate networks/proxies blocking github.com; running in air-gapped CI; transient GitHub outage during first PrismRunner use.","solutions":["Verify network access to the release URL (github.com) or configure proxy env vars (HTTPS_PROXY).","Pre-install prism locally (`go build` a prism binary) and point --prism_location at the file path.","Retry after a transient network failure; the cache is used on subsequent runs.","Run an already-running prism job server and pass --job_endpoint to PrismRunner to skip download entirely."],"exampleFix":"// before (default, requires network)\n--runner=PrismRunner\n// after (offline-safe)\n--runner=PrismRunner --prism_location=/usr/local/bin/prism","handlingStrategy":"fallback","validationCode":"import urllib.request\nurllib.request.urlopen('https://github.com', timeout=5)  # check connectivity before running PrismRunner","typeGuard":null,"tryCatchPattern":"try:\n    result = pipeline.run()\nexcept RuntimeError as e:\n    if 'Unable to fetch remote prism binary' in str(e):\n        # fall back to a pre-installed local prism\n        options.view_as(PrismRunner._PRISM_OPTIONS).prism_location = '/usr/local/bin/prism'\n        raise","preventionTips":["Pre-install prism and set --prism_location in offline/proxied environments.","Configure HTTPS_PROXY for corporate networks.","Run once online to populate the binary cache before air-gapped runs.","Alternatively run a persistent prism server and use --job_endpoint."],"tags":["network","download","prism"],"backgroundTag":"http-request-failed","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}