hashicorp/vagrant · error · Vagrant::Errors::UploaderInterrupted

The upload was interrupted by an external signal. It did not

Error message

The upload was interrupted by an external signal. It did not
complete.

What it means

The upload counterpart of DownloaderInterrupted: Vagrant::Util::Uploader wraps its curl upload in Busy.busy with an INT callback; when an external signal interrupts the transfer (interrupted = true) it raises UploaderInterrupted rather than a curl-exit error. This class backs box publication uploads such as `vagrant cloud publish`.

Source

Thrown at lib/vagrant/util/uploader.rb:81

      def execute_curl(options, subprocess_options, &data_proc)
        options = options.dup
        options << subprocess_options

        # Create the callback that is called if we are interrupted
        interrupted  = false
        int_callback = Proc.new do
          @logger.info("Uploader interrupted!")
          interrupted = true
        end

        # Execute!
        result = Busy.busy(int_callback) do
          Subprocess.execute("curl", *options, &data_proc)
        end

        # If the upload was interrupted, then raise a specific error
        raise Errors::UploaderInterrupted if interrupted

        # If it didn't exit successfully, we need to parse the data and
        # show an error message.
        if result.exit_code != 0
          @logger.warn("Uploader exit code: #{result.exit_code}")
          check = result.stderr.match(/\n*curl:\s+\((?<code>\d+)\)\s*(?<error>.*)$/)
          if !check
            err_msg = result.stderr
          else
            err_msg = check[:error]
          end

          raise Errors::UploaderError,
            exit_code: result.exit_code,
            message: err_msg
        end

        if @ui

View on GitHub (pinned to 35f3160f4a)

Solutions

  1. Re-run the publish once conditions are stable; first check the Vagrant Cloud UI for a partial/failed version and remove it
  2. If the SIGINT was unintended, fix the source (timeout wrappers, init signal policies) or exclude vagrant from forwarding
  3. For very large boxes, shorten the exposure window: upload on a stable link, or prepare/split the artifact beforehand
Defensive patterns

Strategy: retry

Try / catch

tries = 0
begin
  uploader.upload!
rescue Vagrant::Errors::UploaderInterrupted
  tries += 1
  sleep 5
  cleanup_partial_cloud_version!
  retry if tries < 3
end

Prevention

When it happens

Trigger: Ctrl-C (or any SIGINT) while `vagrant cloud publish` / a box upload is streaming the .box file; CI cancellations or signal-forwarding supervisors killing the curl child mid-upload.

Common situations: Cancelling slow multi-GB box uploads; CI timeouts aborting publish jobs; wrappers forwarding signals unexpectedly.

Related errors


AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21). Data as JSON: /api/errors/cedad66f60b0ab20. Report an issue: GitHub.