...
The most basic level of concurrency configuration is the existing control at the platform level. This limits the number of concurrent operations for the same connection (hypervisor IP or endpoint), device, or backup manager.
{codenewcode:java}
abiquo.virtualfactory.openSession
abiquo.virtualfactory.device.openSession
abiquo.virtualfactory.backup.openSession
{codenewcode}
For example, to allow 2 connections to vCenter1 + 2 connections to vCenter2 + 2 connections to each of the public cloud regions, set openSession to 2.
{codenewcode:java}
abiquo.virtualfactory.openSession=2
{codenewcode}
For example, the platform can perform 2 concurrent operations on the same vCenter (for VMX_04 or CLUSTER plugins) or AWS region.
...
If not specified by type, then the defaults are the platform level properties.
{codenewcode:java}
abiquo.virtualfactory.{pluginTypeInLowerCase}.openSession
...
abiquo.virtualfactory.{deviceLowerCase}.device.openSession
{codenewcode}
Control concurrency at the virtual datacenter level
...
The default value allows concurrent operations to the same VDC.
{codenewcode:java}
abiquo.virtualfactory.openSession.byvdc=false
...
abiquo.virtualfactory.backup.openSession.byvdc=false
{codenewcode}
For example, to prevent concurrency in the same virtual datacenter, which means all the operations to the same VDC will be executed one after another, set the following properties.
For the same PCR endpoint (connection data), it will be possible to execute multiple concurrent operations but only if they affect different virtual datacenters.
{codenewcode:java}
abiquo.virtualfactory.openSession.byvdc=true
abiquo.virtualfactory.openSession=1
{codenewcode}
You can also control concurrency for device and backup managers at the virtual datacenter level.
...
To always allow VM state changes without considering the ''openSession'' limitation, set the fast state changes property to true, as shown here.
{codenewcode:java}
abiquo.virtualfactory.openSession.faststatechanges=true
{codenewcode}
When you use this fast state changes functionality, the platform will always execute VM state changes when you request them, without waiting for an ''available worker in the pool''.
For example, with the following configuration, the platform will only allow one configure/deconfigure/reconfigure at a time, but state changes can occur concurrently.
{codenewcode:java}
abiquo.virtualfactory.openSession.faststatechanges=true
abiquo.virtualfactory.openSession=1
{codenewcode}
Limitations
—
* the properties only apply to the virtualfactory (vm centric ops) so don't expect other operations with entities related to virtualdatacenter are also executed in the same pool (eg: create private network doesn't follow this concurrency limitations)
* byvdc requires a Vpc interface implementation
** compute plugin also implements Vpc. eg: PCR vcloud
** compute plugin + networking device. eg: vcenter + nsx device
* when using ''faststatechanges'' the max number of concurrent operations coulb be <= opensessions x 2 for deploy operations (configure + powerOn) or unlimited if performing other state changes in vms.
* changing the behavior of the pool when using a provider also capable of device ops (public clouds with lb,fw, net or nat features), previously using 2 pools (opensessions + device.opensessions), now a plugin capable of executin device ops only use the opensessions pool.
Use Cases
—
* no concurrency in a virtualdatacenter (by type)
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vcd.openSession=1
* abiquo.virtualfactory.vcd.openSession.byvdc=true
a vcloud public cloud region
2 virtualdatacenters (2 vapps in vcloud)
When
deploy a vapp with +1 vm in each vdc
Then
only one concurrent operation for each virtualdatacenter
concurrent operations can affect different virtualdatacenters
{codenewcode}
* no limitation if not specified by type
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vcd.openSession=1
* abiquo.virtualfactory.vcd.openSession.byvdc=true
an amazon public cloud region
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
the default is applied (abiquo.virtualfactory.openSession=2 / abiquo.virtualfactory.openSession.byvdc=false)
only 2 concurrent operations independent of the virtualdatacenter
{codenewcode}
* change the default concurrency context
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.openSession.byvdc=true
a vcloud public cloud region
2 virtualdatacenters (2 vapps in vcloud)
When
deploy a vapp with +1 vm in each vdc
Then
only one concurrent operation for each virtualdatacenter
concurrent operations can affect different virtualdatacenters
{codenewcode}
* compute plugin without vpc device
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.openSession.byvdc=true
a esx datacenter without any networking device (or using a device not implementing Vpc - nowadays all implements Vpc)
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
vms doesnt have the sense of virtualdatacenter (any?=(no)? Vpc plugin capable of setting the vpc/vdcProviderId)
only 2 concurrent operations independent of the virtualdatacenter
this means the same result will apply with the same setup but using the default openSession.byvdc=false
{codenewcode}
* fast powerOn
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vmx_04.openSession=1
* abiquo.virtualfactory.vmx_04.openSession.faststatechanges=true
a esx-vcenter private datacenter (with or without device)
2 virtualdatacenters
When
deploy a vapp with +1 vm in each vdc
Then
only one configure operation concurrently, but all powerOn after the configure of the vm (regardless if performing other powerOns or other vm configure)
{codenewcode}
* fast powerOn during configure
{codenewcode:java}
Given
abiquo.properties:
* abiquo.virtualfactory.vmx_04.openSession=1
* abiquo.virtualfactory.vmx_04.openSession.faststatechanges=true
a esx-vcenter private datacenter (with or without device)
When
deploy a vapp with +1 vms
powerOn/powerOff/reset/pause or resume another vm (same vdc or not)
Then
only one configure operation concurrently, but the state change in the other vm is executed immediately
{codenewcode}