Skip to content

Conversation

@sudhansu7
Copy link

Scale CentOS7 VM fails with error "Cannot scale up the vm because of memory constraint violation"

When creating VM from CentOS 7 template on the XenServer with dynamically scaling enabled, instance starts with base specified memory instead of memory * 4 as static limit.

As the result, attempt to scale VM throws error in MS log:

java.lang.RuntimeException: Job failed due to exception Unable to scale vm due to Catch exception com.cloud.utils.exception.CloudRuntimeException when scaling VM:i-24-3976-VM due to com.cloud.utils.exception.CloudRuntimeException: Cannot scale up the vm because of memory constraint violation: 0 <= memory-static-min(2147483648) <= memory-dynamic-min(8589934592) <= memory-dynamic-max(8589934592) <= memory-static-max(2147483648)

REPO STEPS

  1. Enable dynamic scaling in Global settings
    
  2. Register an CentOS 7 tempplate(with tools) and tick dynamic scaling
    
  3. Deploy VM with this template
    
  4. Start the VM and try to change service offering
    

EXPECTED RESULT: VM should start with static limit 4x and scale up when offering is changed
ACTUAL RESULT: VM starts with maximum static limit of and doesn't scale up with error in ms log :
Cannot scale up the vm because of memory constraint violation:

Root Cause: Xensever guest OS memory values are missing for 'CentOS 7'.

Solution: Add Xensever guest OS memory values for 'CentOS 7'. But this needs patching and restart of management server. In this fix the hardcoded values are moved from Java files to database.

  1. Removed XenServerGuestOsMemoryMap from CitrixHelper.java
    This java file was holding a static in memory map named XenServerGuestOsMemoryMap. This was the source for xenserver dynamic memory values(max and min). These values were moved to guest_os_details table.

  2. DAO layer was modified to access these values.

  3. VirtualMachineTo object was modified to populate the dynamic memory values.

  4. addGuestOs and UpdateGuestOS api has been modified to update memory values.

String configDriveIsoRootFolder = null;
String configDriveIsoFile = null;

Map<String, String> guestOsDetails = null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To avoid potential NPEs, construct a hashmap with no items, such as
Map<String, String> guestOsDetails = new Hashmap();

}

public Map getDetails() {
Map<String, String> detailsMap = null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't make getDetails return null, instead return an empty hashmap.

}

public Map getDetails() {
Map<String, String> detailsMap = null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't make getDetails return null, instead return an empty hashmap.

@sudhansu7
Copy link
Author

@rhtyd Thanks for the Review. I have amended the code as per your suggestion.

@karuturi
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@karuturi a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result: ✔centos6 ✔centos7 ✔debian. JID-436

@karuturi
Copy link
Member

@blueorangutan test centos7 xenserver-65sp1

@cloudmonger
Copy link

ACS CI BVT Run

Sumarry:
Build Number 414
Hypervisor xenserver
NetworkType Advanced
Passed=105
Failed=0
Skipped=7

Link to logs Folder (search by build_no): https://www.dropbox.com/sh/yj3wnzbceo9uef2/AAB6u-Iap-xztdm6jHX9SjPja?dl=0

Failed tests:

Skipped tests:
test_01_test_vm_volume_snapshot
test_vm_nic_adapter_vmxnet3
test_static_role_account_acls
test_11_ss_nfs_version_on_ssvm
test_nested_virtualization_vmware
test_3d_gpu_support
test_deploy_vgpu_enabled_vm

Passed test suits:
test_deploy_vm_with_userdata.py
test_affinity_groups_projects.py
test_portable_publicip.py
test_over_provisioning.py
test_global_settings.py
test_scale_vm.py
test_service_offerings.py
test_routers_iptables_default_policy.py
test_loadbalance.py
test_routers.py
test_reset_vm_on_reboot.py
test_deploy_vms_with_varied_deploymentplanners.py
test_network.py
test_router_dns.py
test_non_contigiousvlan.py
test_login.py
test_deploy_vm_iso.py
test_list_ids_parameter.py
test_public_ip_range.py
test_multipleips_per_nic.py
test_regions.py
test_affinity_groups.py
test_network_acl.py
test_pvlan.py
test_volumes.py
test_nic.py
test_deploy_vm_root_resize.py
test_resource_detail.py
test_secondary_storage.py
test_vm_life_cycle.py
test_routers_network_ops.py
test_disk_offerings.py

@jayakarteek
Copy link
Contributor

@sudhansu7

Tested the fix, LGTM.
I am able to change from small computer offering to medium computer offering for centos-7.

@jayantpatil1234
Copy link
Contributor

jayantpatil1234 commented Apr 4, 2017

@sudhansu7
There is one file "Upgrade4910to4920.java", which does not have any changes, still that get added in PR. If possible could you remove that file?

Otherwise code looks good. LGTM for code.

@karuturi
Copy link
Member

@sudhansu7 can you address @jayantpatil1234's comment?

1. Removed XenServerGuestOsMemoryMap from CitrixHelper.java
This java file was holding a static in memory map named XenServerGuestOsMemoryMap. This was the source for xenserver dynamic memory values(max and min). These values were moved to guest_os_details table.

2. DAO layer was modified to access these values.
3. VirtualMachineTo object was modified to populate the dynamic memory values.
4. addGuestOs and UpdateGuestOS api has been modified to update memory values.
@sudhansu7
Copy link
Author

@jayantpatil1234, I have removed Upgrade4910to4920.java from commit.

@sudhansu7
Copy link
Author

tag:mergeready

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants