Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Concurrency limits at the platform level

The most basic level of concurrency configuration is at the platform level:

{code:java}
abiquo.virtualfactory.openSession
abiquo.virtualfactory.device.openSession
abiquo.virtualfactory.backup.openSession
{code}

This limits the number of concurrent operations for the same connection (hypervisor IP or endpoint). So openSession= 2 means the platform can perform 2 concurrent operations on the same vCenter (for VMX_04 or CLUSTER plugins) or AWS region. So this means, you can have 2 connections to vCenter1 + 2 connections to vCenter2 + 2 connections to any of the public cloud regions.


VM concurrency

Abiquo only controls these concurrency constraints for VMs so the only operations affected are:
* VM state changes (powerOn, powerOff, etc)
* Configure/Deconfigure/Reconfigure VM
* Register/Unregister/Update VM with Firewall Policy / Load Balancer / Nat Rule
* Perform Backup / Schedule Backup / Restore From Backup of a VM


Concurrency limits at the virtual datacenter level

In Abiquo 4.5+ you can limit concurrency for a virtual datacenter (instead of for a connection):
VirtualDatacenterId (or vpc provider identifier) can be found in this entities:
* VirtualMachineIdentifier (+ VirtualMachineIdentifierWithAddresses + VirtualMachineDefinition)
* Vpc
* Network
* PublicIp
* FirewallPolicy
* LoadBalancer
* VPN
* NatIp (ABICLOUDPREMIUM-11391)

Its also required to provide a way to configure a different value based on the plugin type. (eg: 2 concurrent operations for all the vcenter instances but 1 for vcloud).

 

By virtualdatacenter

Explained for compute plugins but also valid for '''device''' and '''backup'''.
{code:java}
abiquo.virtualfactory.openSession.byvdc=false
{code}
If true then the limit of concurrency (openSession) apply for each distinct virtualdatacenter.

Eg:
abiquo.virtualfactory.openSession.byvdc=true
abiquo.virtualfactory.openSession=1

No concurrency in the same virtual datacenter. All the operations to the same vdc will be executed one after another.
In the same PCR endpoint (ConnectionData) will be possible to execute multiple concurrent operations but only if affects different virtualdatacentrs.

 

Fast state changes

{code:java}
abiquo.virtualfactory.openSession.faststatechanges=true
{code}
If true, VirtualMachine state changes (powerOn/powerOff/shutdown/reset/pause/resume) escape the ''openSession'' limitation, those operations are always executed when requested without waiting for any ''available worker in the pool''.

Eg:
abiquo.virtualfactory.openSession.faststatechanges=true
abiquo.virtualfactory.openSession=1

Only one configure/deconfigure/reconfigure etc at a time but any state changes can occurs concurrently.

 

By plugin type

{code:java}
abiquo.virtualfactory.{pluginTypeInLowerCase}.openSession ## also for ''device'' and ''backup''
abiquo.virtualfactory.{pluginTypeInLowerCase}.openSession.byvdc ## also for ''device'' and ''backup''
abiquo.virtualfactory.{pluginTypeInLowerCase}.openSession.faststatechanges ## only compute plugin
{code}
Only apply to specify plugin types, if not specified by type then the default is ''abiquo.virtualfactory.openSession

\{byvdc,faststatechanges}

''.

 

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 usgin ''opensessions.byvdc'' the max number of concurrent connections to the same ConnectionData (provider endpoint or hypervisor ip) is not limited.

* 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.

* also removed many DEBUG DeadLeter from virtualfactory.log caused by Ok$Ok messages confirming operations in AMQP channels.

 

Use Cases

* no concurrency in a virtualdatacenter (by type)
{code: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
{code}

* no limitation if not specified by type
{code: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
{code}

* change the default concurrency context
{code: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
{code}

* compute plugin without vpc device
{code: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
{code}

* fast powerOn
{code: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)
{code}

* fast powerOn during configure
{code: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
{code}

  • No labels