Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLOUDSTACK-8867: Added retry logic to reconnect to host on connection termination to console #1269

Closed
wants to merge 1 commit into from

Conversation

anshul1886
Copy link

It also improves handling of sessions to hypervisor in console proxy

https://issues.apache.org/jira/browse/CLOUDSTACK-8867

To test:
Try on XenServer setup as frequent disconnections are more common for XenServer.
Try random key combinations on VM console and see after fix console access denied errors are less frequent.

@GabrielBrascher
Copy link
Member

@anshul1886 could you please create a method (with documentation) for those duplicate blocks in ConsoleProxy ( "if(viewer != null && !(viewer.getClientHostPort() == param.getClientHostPort())) {...}", lines 414-419 and 454-458 )?

@anshul1886
Copy link
Author

@GabrielBrascher That block of code is in synchronised block.

@alexandrelimassantana
Copy link
Contributor

@anshul1886 I don't think extracting that piece of code into another method would affect the lock on the coneectionMap variable. A method invocation inside a syncrhonized block acts just like regular code, but extracting it into a new method would reduce the code length and enhance reusabilty.

According to Javadocs https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html the lock is held until the end of the synchronized block.

This question on stackoverflow may be old but illustrates this same situation: http://stackoverflow.com/questions/6961848/calling-a-method-from-within-a-synchronized-method

@rohityadavcloud
Copy link
Member

@anshul1886 please rebase against latest master

@swill
Copy link
Contributor

swill commented May 2, 2016

I am missing code reviews on this one...

@swill
Copy link
Contributor

swill commented May 12, 2016

Can I get some code review on this? Thanks...

@DaanHoogland
Copy link
Contributor

tag:needsreview

@bvbharatk
Copy link
Contributor

ACS CI BVT Run

Sumarry:
Build Number 69
Hypervisor xenserver
NetworkType Advanced
Passed=73
Failed=0
Skipped=3

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

Failed tests:

Skipped tests:
test_vm_nic_adapter_vmxnet3
test_static_role_account_acls
test_deploy_vgpu_enabled_vm

Passed test suits:
test_deploy_vm_with_userdata.py
test_affinity_groups_projects.py
test_portable_publicip.py
test_vpc_vpn.py
test_over_provisioning.py
test_global_settings.py
test_scale_vm.py
test_service_offerings.py
test_routers_iptables_default_policy.py
test_routers.py
test_reset_vm_on_reboot.py
test_snapshots.py
test_deploy_vms_with_varied_deploymentplanners.py
test_login.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_disk_offerings.py

… termination to console.

It also improves handling of sessions to hypervisor in console proxy
@anshul1886
Copy link
Author

@rhtyd , Rebased against latest master

@cloudmonger
Copy link

ACS CI BVT Run

Sumarry:
Build Number 406
Hypervisor xenserver
NetworkType Advanced
Passed=104
Failed=1
Skipped=7

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

Failed tests:

  • test_non_contigiousvlan.py

  • test_extendPhysicalNetworkVlan Failing since 2 runs

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_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

@rohityadavcloud
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@rhtyd 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-547

@anshul1886 anshul1886 closed this Mar 6, 2017
@anshul1886 anshul1886 reopened this Mar 6, 2017
@anshul1886
Copy link
Author

@GabrielBrascher @alexandrelimassantana I kept it that way for readability as console proxy code is hard to debug.

@GabrielBrascher
Copy link
Member

Thanks for the response @anshul1886.

I am sorry, but I disagree with you. I think that it gets more stable and readable with less duplicated code. In my humble opinion, it is easier to document, test, read and debug when we have lots of small methods than few big methods.

@anshul1886
Copy link
Author

@GabrielBrascher The other method is there for legacy purposes and is no longer get used in Cloudstack. This was getting used in 2.x versions for UI. Some third party tool might be using it so kept it for that purpose. Mixing things will make it more complicated.

@rohityadavcloud
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@rhtyd 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-845

@rohityadavcloud
Copy link
Member

@blueorangutan test

@blueorangutan
Copy link

@rhtyd a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@blueorangutan
Copy link

Trillian test result (tid-1243)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 34676 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr1269-t1243-kvm-centos7.zip
Intermitten failure detected: /marvin/tests/smoke/test_privategw_acl.py
Intermitten failure detected: /marvin/tests/smoke/test_routers_network_ops.py
Test completed. 50 look ok, 1 have error(s)

Test Result Time (s) Test File
test_04_rvpc_privategw_static_routes Failure 400.50 test_privategw_acl.py
test_01_vpc_site2site_vpn Success 184.56 test_vpc_vpn.py
test_01_vpc_remote_access_vpn Success 70.98 test_vpc_vpn.py
test_01_redundant_vpc_site2site_vpn Success 285.13 test_vpc_vpn.py
test_02_VPC_default_routes Success 309.57 test_vpc_router_nics.py
test_01_VPC_nics_after_destroy Success 645.53 test_vpc_router_nics.py
test_05_rvpc_multi_tiers Success 525.52 test_vpc_redundant.py
test_04_rvpc_network_garbage_collector_nics Success 1332.25 test_vpc_redundant.py
test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers Success 588.35 test_vpc_redundant.py
test_02_redundant_VPC_default_routes Success 767.39 test_vpc_redundant.py
test_01_create_redundant_VPC_2tiers_4VMs_4IPs_4PF_ACL Success 1322.39 test_vpc_redundant.py
test_09_delete_detached_volume Success 156.38 test_volumes.py
test_08_resize_volume Success 156.35 test_volumes.py
test_07_resize_fail Success 151.38 test_volumes.py
test_06_download_detached_volume Success 156.15 test_volumes.py
test_05_detach_volume Success 151.04 test_volumes.py
test_04_delete_attached_volume Success 151.03 test_volumes.py
test_03_download_attached_volume Success 156.19 test_volumes.py
test_02_attach_volume Success 124.74 test_volumes.py
test_01_create_volume Success 715.15 test_volumes.py
test_03_delete_vm_snapshots Success 275.21 test_vm_snapshots.py
test_02_revert_vm_snapshots Success 106.03 test_vm_snapshots.py
test_01_create_vm_snapshots Success 174.19 test_vm_snapshots.py
test_deploy_vm_multiple Success 252.28 test_vm_life_cycle.py
test_deploy_vm Success 0.02 test_vm_life_cycle.py
test_advZoneVirtualRouter Success 0.02 test_vm_life_cycle.py
test_10_attachAndDetach_iso Success 27.01 test_vm_life_cycle.py
test_09_expunge_vm Success 125.20 test_vm_life_cycle.py
test_08_migrate_vm Success 30.73 test_vm_life_cycle.py
test_07_restore_vm Success 0.09 test_vm_life_cycle.py
test_06_destroy_vm Success 130.82 test_vm_life_cycle.py
test_03_reboot_vm Success 126.01 test_vm_life_cycle.py
test_02_start_vm Success 10.17 test_vm_life_cycle.py
test_01_stop_vm_forced Success 5.16 test_vm_life_cycle.py
test_01_stop_vm Success 35.26 test_vm_life_cycle.py
test_CreateTemplateWithDuplicateName Success 120.89 test_templates.py
test_08_list_system_templates Success 0.02 test_templates.py
test_07_list_public_templates Success 0.03 test_templates.py
test_05_template_permissions Success 0.06 test_templates.py
test_04_extract_template Success 5.20 test_templates.py
test_03_delete_template Success 5.10 test_templates.py
test_02_edit_template Success 90.16 test_templates.py
test_01_create_template Success 60.50 test_templates.py
test_10_destroy_cpvm Success 161.78 test_ssvm.py
test_09_destroy_ssvm Success 163.74 test_ssvm.py
test_08_reboot_cpvm Success 132.61 test_ssvm.py
test_07_reboot_ssvm Success 133.56 test_ssvm.py
test_06_stop_cpvm Success 166.98 test_ssvm.py
test_05_stop_ssvm Success 134.06 test_ssvm.py
test_04_cpvm_internals Success 1.46 test_ssvm.py
test_03_ssvm_internals Success 3.82 test_ssvm.py
test_02_list_cpvm_vm Success 0.15 test_ssvm.py
test_01_list_sec_storage_vm Success 0.18 test_ssvm.py
test_02_list_snapshots_with_removed_data_store Success 86.90 test_snapshots.py
test_01_snapshot_root_disk Success 16.12 test_snapshots.py
test_04_change_offering_small Success 209.83 test_service_offerings.py
test_03_delete_service_offering Success 0.03 test_service_offerings.py
test_02_edit_service_offering Success 0.07 test_service_offerings.py
test_01_create_service_offering Success 0.15 test_service_offerings.py
test_02_sys_template_ready Success 0.20 test_secondary_storage.py
test_01_sys_vm_start Success 0.21 test_secondary_storage.py
test_09_reboot_router Success 35.27 test_routers.py
test_08_start_router Success 30.26 test_routers.py
test_07_stop_router Success 10.15 test_routers.py
test_06_router_advanced Success 0.04 test_routers.py
test_05_router_basic Success 0.04 test_routers.py
test_04_restart_network_wo_cleanup Success 15.71 test_routers.py
test_03_restart_network_cleanup Success 65.46 test_routers.py
test_02_router_internal_adv Success 1.22 test_routers.py
test_01_router_internal_basic Success 0.70 test_routers.py
test_router_dns_guestipquery Success 76.91 test_router_dns.py
test_router_dns_externalipquery Success 0.15 test_router_dns.py
test_router_dhcphosts Success 272.24 test_router_dhcphosts.py
test_router_dhcp_opts Success 21.96 test_router_dhcphosts.py
test_01_updatevolumedetail Success 0.12 test_resource_detail.py
test_01_reset_vm_on_reboot Success 201.32 test_reset_vm_on_reboot.py
test_createRegion Success 0.05 test_regions.py
test_create_pvlan_network Success 5.19 test_pvlan.py
test_dedicatePublicIpRange Success 0.34 test_public_ip_range.py
test_03_vpc_privategw_restart_vpc_cleanup Success 479.99 test_privategw_acl.py
test_02_vpc_privategw_static_routes Success 500.13 test_privategw_acl.py
test_01_vpc_privategw_acl Success 87.20 test_privategw_acl.py
test_03_migration_options_storage_tags Success 161.59 test_primary_storage.py
test_02_edit_primary_storage_tags Success 0.12 test_primary_storage.py
test_01_primary_storage_nfs Success 35.99 test_primary_storage.py
test_01_deploy_vms_storage_tags Success 30.78 test_primary_storage.py
test_createPortablePublicIPRange Success 15.14 test_portable_publicip.py
test_createPortablePublicIPAcquire Success 10.37 test_portable_publicip.py
test_isolate_network_password_server Success 90.29 test_password_server.py
test_UpdateStorageOverProvisioningFactor Success 0.18 test_over_provisioning.py
test_oobm_zchange_password Success 25.60 test_outofbandmanagement.py
test_oobm_multiple_mgmt_server_ownership Success 16.45 test_outofbandmanagement.py
test_oobm_issue_power_status Success 10.25 test_outofbandmanagement.py
test_oobm_issue_power_soft Success 15.29 test_outofbandmanagement.py
test_oobm_issue_power_reset Success 15.29 test_outofbandmanagement.py
test_oobm_issue_power_on Success 15.33 test_outofbandmanagement.py
test_oobm_issue_power_off Success 15.34 test_outofbandmanagement.py
test_oobm_issue_power_cycle Success 15.31 test_outofbandmanagement.py
test_oobm_enabledisable_across_clusterzones Success 52.31 test_outofbandmanagement.py
test_oobm_enable_feature_valid Success 5.20 test_outofbandmanagement.py
test_oobm_enable_feature_invalid Success 0.37 test_outofbandmanagement.py
test_oobm_disable_feature_valid Success 0.16 test_outofbandmanagement.py
test_oobm_disable_feature_invalid Success 0.10 test_outofbandmanagement.py
test_oobm_configure_invalid_driver Success 0.14 test_outofbandmanagement.py
test_oobm_configure_default_driver Success 0.09 test_outofbandmanagement.py
test_oobm_background_powerstate_sync Success 18.40 test_outofbandmanagement.py
test_extendPhysicalNetworkVlan Success 10.45 test_non_contigiousvlan.py
test_01_nic Success 524.72 test_nic.py
test_releaseIP Success 262.48 test_network.py
test_reboot_router Success 438.22 test_network.py
test_public_ip_user_account Success 10.26 test_network.py
test_public_ip_admin_account Success 40.37 test_network.py
test_network_rules_acquired_public_ip_3_Load_Balancer_Rule Success 66.72 test_network.py
test_network_rules_acquired_public_ip_2_nat_rule Success 61.93 test_network.py
test_network_rules_acquired_public_ip_1_static_nat_rule Success 124.00 test_network.py
test_delete_account Success 292.36 test_network.py
test_02_port_fwd_on_non_src_nat Success 55.57 test_network.py
test_01_port_fwd_on_src_nat Success 111.96 test_network.py
test_nic_secondaryip_add_remove Success 253.00 test_multipleips_per_nic.py
test_list_zones_metrics Success 0.19 test_metrics_api.py
test_list_volumes_metrics Success 0.38 test_metrics_api.py
test_list_vms_metrics Success 221.87 test_metrics_api.py
test_list_pstorage_metrics Success 0.39 test_metrics_api.py
test_list_infrastructure_metrics Success 0.58 test_metrics_api.py
test_list_hosts_metrics Success 0.37 test_metrics_api.py
test_list_clusters_metrics Success 0.41 test_metrics_api.py
login_test_saml_user Success 18.17 test_login.py
test_assign_and_removal_lb Success 135.97 test_loadbalance.py
test_02_create_lb_rule_non_nat Success 188.79 test_loadbalance.py
test_01_create_lb_rule_src_nat Success 219.32 test_loadbalance.py
test_03_list_snapshots Success 0.07 test_list_ids_parameter.py
test_02_list_templates Success 0.04 test_list_ids_parameter.py
test_01_list_volumes Success 0.02 test_list_ids_parameter.py
test_07_list_default_iso Success 0.07 test_iso.py
test_05_iso_permissions Success 0.07 test_iso.py
test_04_extract_Iso Success 5.19 test_iso.py
test_03_delete_iso Success 95.17 test_iso.py
test_02_edit_iso Success 0.07 test_iso.py
test_01_create_iso Success 20.79 test_iso.py
test_04_rvpc_internallb_haproxy_stats_on_all_interfaces Success 248.49 test_internal_lb.py
test_03_vpc_internallb_haproxy_stats_on_all_interfaces Success 182.35 test_internal_lb.py
test_02_internallb_roundrobin_1RVPC_3VM_HTTP_port80 Success 533.70 test_internal_lb.py
test_01_internallb_roundrobin_1VPC_3VM_HTTP_port80 Success 432.85 test_internal_lb.py
test_dedicateGuestVlanRange Success 5.19 test_guest_vlan_range.py
test_UpdateConfigParamWithScope Success 0.11 test_global_settings.py
test_rolepermission_lifecycle_update Success 5.80 test_dynamicroles.py
test_rolepermission_lifecycle_list Success 5.69 test_dynamicroles.py
test_rolepermission_lifecycle_delete Success 5.57 test_dynamicroles.py
test_rolepermission_lifecycle_create Success 5.59 test_dynamicroles.py
test_rolepermission_lifecycle_concurrent_updates Success 5.68 test_dynamicroles.py
test_role_lifecycle_update_role_inuse Success 5.62 test_dynamicroles.py
test_role_lifecycle_update Success 5.66 test_dynamicroles.py
test_role_lifecycle_list Success 5.64 test_dynamicroles.py
test_role_lifecycle_delete Success 5.64 test_dynamicroles.py
test_role_lifecycle_create Success 5.65 test_dynamicroles.py
test_role_inuse_deletion Success 5.59 test_dynamicroles.py
test_role_account_acls_multiple_mgmt_servers Success 7.08 test_dynamicroles.py
test_role_account_acls Success 7.24 test_dynamicroles.py
test_default_role_deletion Success 5.70 test_dynamicroles.py
test_04_create_fat_type_disk_offering Success 0.07 test_disk_offerings.py
test_03_delete_disk_offering Success 0.03 test_disk_offerings.py
test_02_edit_disk_offering Success 0.05 test_disk_offerings.py
test_02_create_sparse_type_disk_offering Success 0.07 test_disk_offerings.py
test_01_create_disk_offering Success 0.08 test_disk_offerings.py
test_deployvm_userdispersing Success 20.46 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userconcentrated Success 35.49 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_firstfit Success 135.90 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userdata_post Success 10.31 test_deploy_vm_with_userdata.py
test_deployvm_userdata Success 75.70 test_deploy_vm_with_userdata.py
test_02_deploy_vm_root_resize Success 0.05 test_deploy_vm_root_resize.py
test_01_deploy_vm_root_resize Success 0.05 test_deploy_vm_root_resize.py
test_00_deploy_vm_root_resize Success 216.32 test_deploy_vm_root_resize.py
test_deploy_vm_from_iso Success 206.78 test_deploy_vm_iso.py
test_06_verify_guest_lspci_again Success 40.49 test_deploy_virtio_scsi_vm.py
test_05_change_vm_ostype_restart Success 16.05 test_deploy_virtio_scsi_vm.py
test_04_verify_guest_lspci Success 40.67 test_deploy_virtio_scsi_vm.py
test_03_verify_libvirt_attach_disk Success 11.02 test_deploy_virtio_scsi_vm.py
test_02_verify_libvirt_after_restart Success 136.73 test_deploy_virtio_scsi_vm.py
test_01_verify_libvirt Success 0.61 test_deploy_virtio_scsi_vm.py
test_DeployVmAntiAffinityGroup Success 115.90 test_affinity_groups.py
test_change_service_offering_for_vm_with_snapshots Skipped 0.01 test_vm_snapshots.py
test_09_copy_delete_template Skipped 0.01 test_templates.py
test_06_copy_template Skipped 0.00 test_templates.py
test_static_role_account_acls Skipped 0.03 test_staticroles.py
test_11_ss_nfs_version_on_ssvm Skipped 0.03 test_ssvm.py
test_01_scale_vm Skipped 0.00 test_scale_vm.py
test_01_primary_storage_iscsi Skipped 0.03 test_primary_storage.py
test_nested_virtualization_vmware Skipped 0.00 test_nested_virtualization.py
test_06_copy_iso Skipped 0.00 test_iso.py
test_deploy_vgpu_enabled_vm Skipped 0.02 test_deploy_vgpu_enabled_vm.py
test_3d_gpu_support Skipped 0.03 test_deploy_vgpu_enabled_vm.py

@rohityadavcloud
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@rhtyd 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-1402

@rohityadavcloud
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@rhtyd 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-1407

@DennisKonrad
Copy link
Contributor

Is it reasonable to block a merge on this because of a coding style disagreement? Also I agree with @anshul1886 that it seems to make the code harder to understand if one would create a helper function because of five line of duplicated code.

Especially because there is no obvious way to name the new function so it would make sense semantically. At least from my point of understanding.

Maybe you have some suggestion on how to name the function? @GabrielBrascher

@GabrielBrascher
Copy link
Member

@DennisKonrad the PR is not blocked because of coding style. The author simply did not provide a technical reason to leave it as is. The problem here is also not about function naming. The issue here goes beyond that, and it has to do with code quality. ACS project has been suffering for years because of duplicated and convoluted code (bad practices that were implemented along the years). I only started a discussion regarding technical problems I found in this PR.

Although I disagree with his approach, I did not block this PR (I do not even have powers to do that). The problem here is that the author did not care enough to provide a reasonable answer to maintain the duplicated code, or to reduce the code duplication, document it and create unit-tests for the newly added block of code.

@DaanHoogland
Copy link
Contributor

@anshul1886 please rebase and re-open if still relevant

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.

None yet