Introduction

There is a need to provide admin some parameters with more granularity so that values can be customized at each granular level.

Here are some global config parameters and their proposed granularity.

There are around 7 parameters need to be changed to 'per Zone' level.

So instead of over loading the present createZone API and updateZone API a new API is introduced say "UpdateZoneLevelParamters API".

During the creation of zone default values for these parameters are set in the data_center_details table. These can be updated using the "updateZoneLevelParamters" API.

These are the parameters to make it zone level.

1) pool.storage.allocated.capacity.disablethreshold

2) pool.storage.capacity.disablethreshold

3) VM Allocation Algorithm

4) network.throttling.rate

5) router.template.id

6) Guest Domain Prefix

7) External DNS Usage

8) storage.cleanup.interval

Global Parameter

Description

Proposed change

Development

 

allow.public.user.templates

If false, users will not be able to create public templates.

Per Account, overrides the global, e.g. for resellers not end customers

The implementation goes like adding value in the account_details table. Whenever public template is created we need to check in the account details table and then proceed.
APIs need to be changed: CreateAccount and UpdateAccount. An optinal paramter default to 'true' will be used.

 

max.account.snapshots

The default maximum number of snapshots that can be created for an account

Offer additional parameter, link to sec storage capacity, per account

This is already been maintained and checked with account id, we need to take the value while creating an account.

Offer additional parameter, link to sec storage capacity: What this actually mean?

max.account.templates

The default maximum number of templates that can be deployed for an account

As per snapshots, ensure it includes ISOs

This is already been maintained and checked with account id, we need to take the value while creating an account.

 

max.account.user.vms

The default maximum number of user VMs that can be deployed for an account

n/a

 

Does this mean to skip the parameter?

max.account.volumes

The default maximum number of volumes that can be created for an account

This should refer to data vols, sys vols should be inherent from user VMs

 

will this change comes under this feature. This more like a bug.

max.template.iso.size

The maximum size for a downloaded template or ISO (in GB).

per account, also limited by sec storage - see snapshots, templates. So perhaps a new global/per account setting for max sec storage

 

 

mem.overprovisioning.factor

Used for memory overprovisioning calculation

per cluster, overrides global

 

This is done as part of cpu and ram overcommit feature

cpu.overprovisioning.factor

Used for CPU overprovisioning calculation; available CPU will be (actualCpuCapacity * cpu.overprovisioning.factor)

per cluster, overrides global

 

This is done as part of cpu and ram overcommit feature

remote.access.vpn.client.iprange

The range of ips to be allocated to remote access vpn clients. The first ip in the range is used by the VPN server

Per Account, overrides the global

account_details table will hold the key, value pair. In RemoteAccessVPNManager we need to take the value from the account_details table, validate it and then use.
APIs need to be changed: CreateAccount and UpdateAccount. An optinal paramter default to 'true' will be used.

 

storage.cleanup.interval

The interval (in seconds) to wait before running the storage cleanup thread.

Per AZ, eg for Private/Reseller AZ to offer differing storage service

 

Do we need to run different storage GC threads for different zones?
Or start single thread with the global value and within that check for each zone whether the interval is completed by storing the last cleanup time per zone and current time. If completed clenup the storage otherwise skip the zone ?

Storage Limit per Pool:
1) pool.storage.allocated.capacity.disablethreshold
2) pool.storage.capacity.disablethreshold

1) Percentage (as a value between 0 and 1) of allocated storage utilization above which allocators will disable using the pool for low allocated storage available.
2) Percentage (as a value between 0 and 1) of storage utilization above which allocators will disable using the pool for low storage available.

Per Zone

data_center_details table holds the 'name, value' pairs of these parameters. In Storagemanager, while checking the storage pool whether it has enough space for the vm's root disk or data disk, we need to consider the zone in which pool exists and get the details from the data_center_details table accordingly.


Oversubscription Ratio

 

Per Zone

 

Does this mean overprovisioning factors?
If it is the case, we have already planned to make it at cluster level. Do we need both?

Local Storage support

 

Per Zone

 

Currently this support is there for zone level.

VM Allocation Algorithm

If 'random', hosts within a pod will be randomly considered for VM/volume allocation. If 'firstfit', they will be considered on a first-fit basis.

Per Zone

data_center_details table holds the 'name, value' pairs of these parameters.
During the allocation for VM/volume this value corresponding to zone is to be considered.
Logic need to be changed for volume allocation too since it also allocation based on this paramter.
APIs need to be changed: CreateZone and UpdateZone

 

VR Network Throttling Rate:
network.throttling.rate

Default data transfer rate in megabits per second allowed in network

Per Zone

For the domRs Guest and Public networks we take network throttling from the corresponding Guest Virtual networkOffering. In case the value is not specified in the network offering it should consider the value from the global parameter network.throttling.rate. But right now there is a bug that noticed, guest and public networks are always considering network rate from the global parameter.
Apart from this, we need to store this value per each zone and in the router vm life cycle we need to consider the zone level parameter. This value can be stored in the datacenter details table

n case of user VMs for non default network the throttling rate is considered from the network offering, if this is not specified it considers the value from global value network.throttling.rate.
For default network it consider value from vm.network.throttling.rate.

Since both these parameters(network.throttling.rate, vm.network.throttling.rate) are considered in case of guest vm networks,
Is that fine to change only network.throttling.rate per zone?

Router Template ID: router.template.id

Default ID for template

Per Zone

In the current implementation, the details of the templates are stored in the vm_templates table. These include all systemVM templates for all hypervisors, During the router vm deployment it gets the list of templates based on the hypervisor type and takes the 1st template from the list. Otherwise we are not using this parameter to select the template.
So the task is to make this paramter work and provide the value per zone.
Design: In the datacenter_details table we maintain the router.template.id for each hypervisor. During the router vm deployment we consider the template id from this table based on the hypervisor type

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Some other parameters:

Global Parameter

Description

Proposed change

Development

 

capacity.skipcounting.hours

Time (in seconds) to wait before release VM's cpu and memory when VM in stopped state

per cluster, overrides global

Need to maintain the value in cluster_details table and while updating the capacity for host the value in the cluster_details need to be checked with time since vm is stopped

 

cpu.capacity.threshold

Percentage (as a value between 0 and 1) of cpu utilization above which alerts will be sent about low cpu available.

per cluster, overrides global


This is a bit ambiguous, if we change this to cluster level then CPUCapacityDisableThreshold value also need to be changed to cluster level as they are relevant to each other.

network.gc.interval

Seconds to wait before checking for networks to shutdown

per cluster, overrides global

 

This doesn't make sense

network.gc.wait

Time (in seconds) to wait before shutting down a network that's not in used

per cluster, overrides global

 

This doesn't make sense

network.redundantrouter

Per Account (also per project?), overrides the global or via network offering

 

 

Redundant router has been deprecated.

vm.allocation.algorithm

If 'random', hosts within a pod will be randomly considered for VM/volume allocation. If 'firstfit', they will be considered on a first-fit basis.

per cluster, per account additional granularity to override global

The value will be stored in the cluster_details table and account_details table. APIs need to be changed are addCluster, updateCluster, addAccount and updateAccount.

Which one is more granular cluster or account? Who will get priority while both are set to different values? Why is this at cluster/account level, why not zone level? I want to know the  impact of changing this parameter ?

remote.access.vpn.psk.length

The length of the ipsec preshared key (minimum 8, maximum 256)

Per Account, overrides the global

account_details table will hold the key, value pair. In RemoteAccessVPNManagerImpl we need to take the value from the account_details table, validate it and then use.

 

remote.access.vpn.user.limit

The maximum number of VPN users that can be created per account

Per Account, overrides the global

account_details table will hold the key, value pair. In RemoteAccessVPNManagerImpl we need to take the value from the account_details table, validate it and then use.

 

capacity.skipcounting.hours

Time (in seconds) to wait before release VM's cpu and memory when VM in stopped state

per cluster, overrides global

cluster_details table will hold the value and in the capacityManagerImpl while updating the host's capacity we can get the cluster in which host is there and get the capacity.skipcounting.hours value per cluster.