Skip to content

Non-deterministic failure with Multi-Machine provisioning #357

@feliperubin

Description

@feliperubin

Vagrant Version: 2.2.9
Parallels Desktop Version 15.1.4 (47270)
prlctl version 15.1.4 (47270)
Host: MacBook Pro 16" 2019 i9 (octa-core), 32GB RAM
Host OS: MacOS Catalina 10.15.4
Guest OS : Ubuntu 18.04 LTS

Example Vagrantfile below.

Vagrant.configure("2") do |config|

  hosts = {
    :router => { :nodes => 2, :box => "bento/ubuntu-18.04", :mem => 2048, :cpu => 2, :nestedvt => true, :linkedclone => true },
    :db => { :nodes => 1, :box => "bento/ubuntu-18.04", :mem => 1024, :cpu => 1, :nestedvt => false, :linkedclone => true },
    :gateway => { :nodes => 1, :box => "bento/ubuntu-18.04", :mem => 4096, :cpu => 2, :nestedvt => false, :linkedclone => true }
  }

  hosts.each do |k,h|
    (1..h[:nodes]).each do |i|
      hname = "#{k}"
      if h[:nodes] > 1 then 
        hname = "#{k}#{i}"
      end
      config.vm.define hname do |hnode|
        hnode.vm.synced_folder '.', '/home/vagrant/share', disabled: true
        hnode.vm.box = h[:box]
        hnode.vm.provider :parallels do |v, override|
            
            system "vagrant plugin install vagrant-parallels" unless Vagrant.has_plugin? "vagrant-parallels"
            v.name = hname
            v.memory = h[:mem]
            v.cpus = h[:cpu]
            if h[:nestedvt] then
              v.customize ["set", :id, "--nested-virt", "on"]
            end
            v.check_guest_tools = true
            v.update_guest_tools = true
            #Enables adaptive hypervisor, better core usage
            v.customize ["set", :id, "--adaptive-hypervisor","on"]
            v.customize ["set", :id, "--sync-ssh-ids","on"]
            v.customize ["set",:id, "--time-sync","on"]
            v.linked_clone = h[:linkedclone]
        end
      end
    end
  end
end

The following error occurs while provisioning a Multi-VM environment.

An error occurred while executing multiple actions in parallel.
Any errors that occurred are shown below.

An error occurred while executing the action on the 'router2'
machine. Please handle this error then try again:

There was an error while command execution. The command and stderr is shown below.

Command: ["/usr/local/bin/prlctl", "unregister", "9ff8208a-169c-4578-87ab-3ddb5e817c2e"]

Stderr: Failed to unregister the VM: Unable to perform the action because the virtual machine is busy. The virtual machine is being cloned. Please try again later.

I might be wrong, but it seems to be a concurrency problem; when creating a linked clone vm, it seems more than one process/thread tries to clone the original file at the same time.

vagrant_debug_flag.log

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions