Skip to content

Conversation

@nvazquez
Copy link
Contributor

Actual behaviour

If there is snapshot on a data store that is removed, listSnapshots still tries to enumerate it and gives error (in this example data store 2 has been removed):
client/api?command=listSnapshots&isrecursive=true&listall=true

<listsnapshotsresponse cloud-stack-version="4.9.1.0-SNAPSHOT">
   <errorcode>530</errorcode>
   <cserrorcode>4250</cserrorcode>
   <errortext>Unable to locate datastore with id 2</errortext>
</listsnapshotsresponse>

Reproduce error

This steps can be followed to reproduce issue:

  • Take a snapshot of a volume (this creates a references for primary storage and secondary storage in snapshot_store_ref table
  • Simulate retiring primary data storage where snapshot is cached (in this example X is a fake data store and Y is snapshot id):
UPDATE `cloud`.`snapshot_store_ref` SET `store_id`='X', `state`="Destroyed" WHERE `id`='Y';
  • List snapshots: client/api?command=listSnapshots&isrecursive=true&listall=true

@yadvr
Copy link
Member

yadvr commented Nov 1, 2016

LGTM. I'll fire some regression tests.
@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-131

@yadvr
Copy link
Member

yadvr commented Nov 1, 2016

@blueorangutan test

@abhinandanprateek
Copy link
Contributor

LGTM on code review.

@nvazquez nvazquez force-pushed the list-snapshots-issue branch from dd7d85a to b63805c Compare November 4, 2016 13:12
@serg38
Copy link

serg38 commented Nov 8, 2016

@rhtyd @jburwell The tests didn't kick in last time. Can we fire matrix again?

@ustcweizhou
Copy link
Contributor

if the data store is deleted, the snapshot should be removed as well, right?

@yadvr
Copy link
Member

yadvr commented Nov 8, 2016

@blueorangutan package

@blueorangutan
Copy link

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


long storagePoolId = snapshotStore.getDataStoreId();
DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
if (! snapshotStore.getState().equals(ObjectInDataStoreStateMachine.State.Destroyed)){
Copy link
Member

Choose a reason for hiding this comment

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

@nvazquez this can cause NPE, instead use ObjectInDataStoreStateMachine.State.Destroyed.equals(...) or an explicit != null.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done, thanks @rhtyd

@blueorangutan
Copy link

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

@serg38
Copy link

serg38 commented Nov 8, 2016

@ustcweizhou Not necessary. The issue affects removal of primary storage DS where there are snapshot copies. After that the snapshot could remain on secondary storage.

@nvazquez nvazquez force-pushed the list-snapshots-issue branch from b63805c to 18d2a05 Compare November 8, 2016 14:42
@jburwell
Copy link
Contributor

jburwell commented Nov 8, 2016

@nvazquez could you please add a Marvin test to verify this fix?

@nvazquez
Copy link
Contributor Author

nvazquez commented Nov 8, 2016

@jburwell sure, will work on it

Boolean supportsStorageSystemSnapshots = new Boolean(value);
if (mapCapabilities != null) {
String value = mapCapabilities.get(DataStoreCapabilities.STORAGE_SYSTEM_SNAPSHOT.toString());
Boolean supportsStorageSystemSnapshots = new Boolean(value);
Copy link
Contributor

Choose a reason for hiding this comment

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

new Boolean skips the constant pool -- putting unnecessary pressure on the heap and creating a potential memory leak. Please use Boolean.valueOf to part the value to avoid this issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done, thanks!

@nvazquez nvazquez force-pushed the list-snapshots-issue branch from 18d2a05 to 0c2ad75 Compare November 18, 2016 13:53
@yadvr
Copy link
Member

yadvr commented Nov 20, 2016

@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-184

@nvazquez nvazquez force-pushed the list-snapshots-issue branch 2 times, most recently from 42be7f6 to 32c3e89 Compare November 21, 2016 20:40
@nvazquez
Copy link
Contributor Author

@jburwell I added new Marvin test in test_snapshots.py

@yadvr
Copy link
Member

yadvr commented Nov 23, 2016

@blueorangutan package

@yadvr
Copy link
Member

yadvr commented Nov 23, 2016

LGTM.

@jburwell
Copy link
Contributor

@nvazquez could you please check into the Travis failures?

@yadvr
Copy link
Member

yadvr commented Nov 24, 2016

@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-245

@yadvr
Copy link
Member

yadvr commented Nov 24, 2016

@jburwell the Travis failure is ignorable caused by a oobm corner case (exception is ignorable). I'll work on a fix soon.
@blueorangutan test

@blueorangutan
Copy link

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

@nvazquez
Copy link
Contributor Author

@jburwell @rhtyd sorry I've been off yesterday, do I push force to kick tests again?

@blueorangutan
Copy link

Trillian test result (tid-426)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 36018 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr1735-t426-kvm-centos7.zip
Test completed. 34 look ok, 14 have error(s)

Test Result Time (s) Test File
test_02_VPC_default_routes Failure 797.53 test_vpc_router_nics.py
test_01_VPC_nics_after_destroy Failure 837.70 test_vpc_router_nics.py
test_05_rvpc_multi_tiers Failure 364.54 test_vpc_redundant.py
test_04_rvpc_network_garbage_collector_nics Failure 302.68 test_vpc_redundant.py
test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers Failure 308.34 test_vpc_redundant.py
test_02_redundant_VPC_default_routes Failure 860.08 test_vpc_redundant.py
test_01_create_redundant_VPC_2tiers_4VMs_4IPs_4PF_ACL Failure 364.81 test_vpc_redundant.py
test_02_attach_volume Failure 668.53 test_volumes.py
test_01_create_volume Failure 684.11 test_volumes.py
test_10_attachAndDetach_iso Failure 683.95 test_vm_life_cycle.py
test_04_change_offering_small Failure 794.82 test_service_offerings.py
test_router_dns_guestipquery Failure 277.49 test_router_dns.py
test_router_dhcphosts Failure 188.63 test_router_dhcphosts.py
test_router_dhcp_opts Failure 21.43 test_router_dhcphosts.py
test_04_rvpc_privategw_static_routes Failure 1026.10 test_privategw_acl.py
test_03_vpc_privategw_restart_vpc_cleanup Failure 879.57 test_privategw_acl.py
test_02_vpc_privategw_static_routes Failure 975.48 test_privategw_acl.py
test_isolate_network_password_server Failure 188.89 test_password_server.py
test_reboot_router Failure 439.34 test_network.py
test_network_rules_acquired_public_ip_3_Load_Balancer_Rule Failure 831.86 test_network.py
test_network_rules_acquired_public_ip_2_nat_rule Failure 679.68 test_network.py
test_network_rules_acquired_public_ip_1_static_nat_rule Failure 675.78 test_network.py
test_02_port_fwd_on_non_src_nat Failure 678.99 test_network.py
test_01_port_fwd_on_src_nat Failure 673.86 test_network.py
test_assign_and_removal_lb Failure 110.42 test_loadbalance.py
test_02_create_lb_rule_non_nat Failure 110.46 test_loadbalance.py
test_01_create_lb_rule_src_nat Failure 110.59 test_loadbalance.py
test_02_internallb_roundrobin_1RVPC_3VM_HTTP_port80 Failure 301.21 test_internal_lb.py
test_01_internallb_roundrobin_1VPC_3VM_HTTP_port80 Failure 230.32 test_internal_lb.py
test_01_vpc_site2site_vpn Error 300.79 test_vpc_vpn.py
test_01_redundant_vpc_site2site_vpn Error 386.60 test_vpc_vpn.py
test_05_rvpc_multi_tiers Error 425.47 test_vpc_redundant.py
test_02_list_snapshots_with_removed_data_store Error 6.27 test_snapshots.py
ContextSuite context=TestRouterDHCPHosts>:teardown Error 239.35 test_router_dhcphosts.py
test_04_rvpc_internallb_haproxy_stats_on_all_interfaces Error 316.07 test_internal_lb.py
test_03_vpc_internallb_haproxy_stats_on_all_interfaces Error 230.54 test_internal_lb.py
test_01_vpc_remote_access_vpn Success 76.23 test_vpc_vpn.py
test_09_delete_detached_volume Success 15.48 test_volumes.py
test_08_resize_volume Success 15.39 test_volumes.py
test_07_resize_fail Success 20.49 test_volumes.py
test_06_download_detached_volume Success 15.29 test_volumes.py
test_05_detach_volume Success 100.26 test_volumes.py
test_04_delete_attached_volume Success 10.21 test_volumes.py
test_03_download_attached_volume Success 15.29 test_volumes.py
test_deploy_vm_multiple Success 324.11 test_vm_life_cycle.py
test_deploy_vm Success 0.03 test_vm_life_cycle.py
test_advZoneVirtualRouter Success 0.02 test_vm_life_cycle.py
test_09_expunge_vm Success 185.30 test_vm_life_cycle.py
test_08_migrate_vm Success 41.06 test_vm_life_cycle.py
test_07_restore_vm Success 0.15 test_vm_life_cycle.py
test_06_destroy_vm Success 125.85 test_vm_life_cycle.py
test_03_reboot_vm Success 125.90 test_vm_life_cycle.py
test_02_start_vm Success 5.15 test_vm_life_cycle.py
test_01_stop_vm Success 125.89 test_vm_life_cycle.py
test_CreateTemplateWithDuplicateName Success 65.66 test_templates.py
test_08_list_system_templates Success 0.03 test_templates.py
test_07_list_public_templates Success 0.05 test_templates.py
test_05_template_permissions Success 0.06 test_templates.py
test_04_extract_template Success 5.16 test_templates.py
test_03_delete_template Success 5.12 test_templates.py
test_02_edit_template Success 90.12 test_templates.py
test_01_create_template Success 80.70 test_templates.py
test_10_destroy_cpvm Success 161.62 test_ssvm.py
test_09_destroy_ssvm Success 163.71 test_ssvm.py
test_08_reboot_cpvm Success 161.68 test_ssvm.py
test_07_reboot_ssvm Success 133.68 test_ssvm.py
test_06_stop_cpvm Success 221.90 test_ssvm.py
test_05_stop_ssvm Success 133.82 test_ssvm.py
test_04_cpvm_internals Success 1.24 test_ssvm.py
test_03_ssvm_internals Success 3.27 test_ssvm.py
test_02_list_cpvm_vm Success 0.14 test_ssvm.py
test_01_list_sec_storage_vm Success 0.16 test_ssvm.py
test_01_snapshot_root_disk Success 11.55 test_snapshots.py
test_03_delete_service_offering Success 0.05 test_service_offerings.py
test_02_edit_service_offering Success 0.07 test_service_offerings.py
test_01_create_service_offering Success 0.11 test_service_offerings.py
test_02_sys_template_ready Success 0.17 test_secondary_storage.py
test_01_sys_vm_start Success 0.24 test_secondary_storage.py
test_09_reboot_router Success 35.34 test_routers.py
test_08_start_router Success 25.29 test_routers.py
test_07_stop_router Success 10.18 test_routers.py
test_06_router_advanced Success 0.07 test_routers.py
test_05_router_basic Success 0.05 test_routers.py
test_04_restart_network_wo_cleanup Success 5.70 test_routers.py
test_03_restart_network_cleanup Success 80.99 test_routers.py
test_02_router_internal_adv Success 1.13 test_routers.py
test_01_router_internal_basic Success 0.67 test_routers.py
test_router_dns_externalipquery Success 0.09 test_router_dns.py
test_01_updatevolumedetail Success 5.12 test_resource_detail.py
test_01_reset_vm_on_reboot Success 131.06 test_reset_vm_on_reboot.py
test_createRegion Success 0.04 test_regions.py
test_create_pvlan_network Success 5.26 test_pvlan.py
test_dedicatePublicIpRange Success 0.47 test_public_ip_range.py
test_01_vpc_privategw_acl Success 108.90 test_privategw_acl.py
test_01_primary_storage_nfs Success 35.85 test_primary_storage.py
test_createPortablePublicIPRange Success 15.23 test_portable_publicip.py
test_createPortablePublicIPAcquire Success 15.58 test_portable_publicip.py
test_UpdateStorageOverProvisioningFactor Success 0.22 test_over_provisioning.py
test_oobm_zchange_password Success 20.52 test_outofbandmanagement.py
test_oobm_multiple_mgmt_server_ownership Success 16.52 test_outofbandmanagement.py
test_oobm_issue_power_status Success 10.51 test_outofbandmanagement.py
test_oobm_issue_power_soft Success 15.52 test_outofbandmanagement.py
test_oobm_issue_power_reset Success 15.52 test_outofbandmanagement.py
test_oobm_issue_power_on Success 15.52 test_outofbandmanagement.py
test_oobm_issue_power_off Success 16.02 test_outofbandmanagement.py
test_oobm_issue_power_cycle Success 15.52 test_outofbandmanagement.py
test_oobm_enabledisable_across_clusterzones Success 62.56 test_outofbandmanagement.py
test_oobm_enable_feature_valid Success 5.22 test_outofbandmanagement.py
test_oobm_enable_feature_invalid Success 0.15 test_outofbandmanagement.py
test_oobm_disable_feature_valid Success 5.24 test_outofbandmanagement.py
test_oobm_disable_feature_invalid Success 0.14 test_outofbandmanagement.py
test_oobm_configure_invalid_driver Success 0.11 test_outofbandmanagement.py
test_oobm_configure_default_driver Success 0.10 test_outofbandmanagement.py
test_oobm_background_powerstate_sync Success 29.85 test_outofbandmanagement.py
test_extendPhysicalNetworkVlan Success 15.37 test_non_contigiousvlan.py
test_01_nic Success 592.15 test_nic.py
test_releaseIP Success 264.47 test_network.py
test_public_ip_user_account Success 10.27 test_network.py
test_public_ip_admin_account Success 40.34 test_network.py
test_delete_account Success 274.01 test_network.py
test_nic_secondaryip_add_remove Success 330.07 test_multipleips_per_nic.py
login_test_saml_user Success 25.58 test_login.py
test_03_list_snapshots Success 0.09 test_list_ids_parameter.py
test_02_list_templates Success 0.04 test_list_ids_parameter.py
test_01_list_volumes Success 0.04 test_list_ids_parameter.py
test_07_list_default_iso Success 0.08 test_iso.py
test_05_iso_permissions Success 0.08 test_iso.py
test_04_extract_Iso Success 5.40 test_iso.py
test_03_delete_iso Success 95.23 test_iso.py
test_02_edit_iso Success 0.08 test_iso.py
test_01_create_iso Success 22.08 test_iso.py
test_dedicateGuestVlanRange Success 10.45 test_guest_vlan_range.py
test_UpdateConfigParamWithScope Success 0.19 test_global_settings.py
test_rolepermission_lifecycle_update Success 7.11 test_dynamicroles.py
test_rolepermission_lifecycle_list Success 6.90 test_dynamicroles.py
test_rolepermission_lifecycle_delete Success 6.81 test_dynamicroles.py
test_rolepermission_lifecycle_create Success 7.16 test_dynamicroles.py
test_rolepermission_lifecycle_concurrent_updates Success 7.08 test_dynamicroles.py
test_role_lifecycle_update_role_inuse Success 6.95 test_dynamicroles.py
test_role_lifecycle_update Success 11.93 test_dynamicroles.py
test_role_lifecycle_list Success 6.93 test_dynamicroles.py
test_role_lifecycle_delete Success 11.82 test_dynamicroles.py
test_role_lifecycle_create Success 6.96 test_dynamicroles.py
test_role_inuse_deletion Success 7.00 test_dynamicroles.py
test_role_account_acls_multiple_mgmt_servers Success 9.19 test_dynamicroles.py
test_role_account_acls Success 9.85 test_dynamicroles.py
test_default_role_deletion Success 6.99 test_dynamicroles.py
test_04_create_fat_type_disk_offering Success 0.09 test_disk_offerings.py
test_03_delete_disk_offering Success 0.04 test_disk_offerings.py
test_02_edit_disk_offering Success 0.06 test_disk_offerings.py
test_02_create_sparse_type_disk_offering Success 0.09 test_disk_offerings.py
test_01_create_disk_offering Success 0.12 test_disk_offerings.py
test_deployvm_userdispersing Success 15.76 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userconcentrated Success 51.09 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_firstfit Success 60.79 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userdata_post Success 5.38 test_deploy_vm_with_userdata.py
test_deployvm_userdata Success 121.62 test_deploy_vm_with_userdata.py
test_02_deploy_vm_root_resize Success 7.02 test_deploy_vm_root_resize.py
test_01_deploy_vm_root_resize Success 7.09 test_deploy_vm_root_resize.py
test_00_deploy_vm_root_resize Success 243.91 test_deploy_vm_root_resize.py
test_deploy_vm_from_iso Success 224.12 test_deploy_vm_iso.py
test_DeployVmAntiAffinityGroup Success 237.38 test_affinity_groups.py
test_03_delete_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_02_revert_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_01_test_vm_volume_snapshot Skipped 0.00 test_vm_snapshots.py
test_01_create_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_06_copy_template Skipped 0.00 test_templates.py
test_static_role_account_acls Skipped 0.03 test_staticroles.py
test_01_scale_vm Skipped 0.00 test_scale_vm.py
test_01_primary_storage_iscsi Skipped 0.04 test_primary_storage.py
test_06_copy_iso Skipped 0.00 test_iso.py
test_deploy_vgpu_enabled_vm Skipped 0.01 test_deploy_vgpu_enabled_vm.py

@nvazquez nvazquez force-pushed the list-snapshots-issue branch from 32c3e89 to 8369007 Compare December 6, 2016 19:58
@nvazquez nvazquez force-pushed the list-snapshots-issue branch from 8369007 to ed87d66 Compare December 19, 2016 16:05
_accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
Long domainId = domainIdRecursiveListProject.first();
Boolean isRecursive = domainIdRecursiveListProject.second();
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();

Choose a reason for hiding this comment

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

@nvazquez What is changed here?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hi @anshul1886, at the beggining of each line there's one space added, to be consistent with indentation

Choose a reason for hiding this comment

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

These type of changes should not be done on unrelated file as it makes following changes difficult.

snapshotResponse.setObjectName("snapshot");
snapshotResponses.add(snapshotResponse);
if (snapshotResponse != null) {
snapshotResponse.setObjectName("snapshot");

Choose a reason for hiding this comment

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

Is any issue observed here for which null check is added?

Copy link
Contributor Author

@nvazquez nvazquez Jan 3, 2017

Choose a reason for hiding this comment

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

This check is added as we introduced a case in createSnapshotResponse where null is returned, and in that case we shouldn't add the response to the response list

Choose a reason for hiding this comment

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

What is the use case for null case when that can happen?

Copy link
Member

Choose a reason for hiding this comment

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

I've added a few comments.

If we implement those comments, then null should not be a problem here (in other words, the code in this class could remain unchanged).


long storagePoolId = snapshotStore.getDataStoreId();
DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
if (snapshotStore.getState() != null && ! snapshotStore.getState().equals(ObjectInDataStoreStateMachine.State.Destroyed)) {

Choose a reason for hiding this comment

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

As pointed out by @mike-tutkowski store cannot be destroyed if there are snapshots. Also that enum is meant for snapshot (and entities like that) and not for snapshot store.

Copy link
Member

Choose a reason for hiding this comment

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

For managed storage, that is true. For unmanaged storage, one should be able to delete the primary storage from which a snapshot was created and the snapshot should be able to remain (since the snapshot, in this case, is on secondary storage).

@serg38
Copy link

serg38 commented Jan 10, 2017

@mike-tutkowski @anshul1886 @rhtyd We had enough LGTM and successful test results for this PR. Are there any concern before merging it?

@yadvr
Copy link
Member

yadvr commented Jan 10, 2017

@serg38 sure
@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-453

@mike-tutkowski
Copy link
Member

@serg38 @anshul1886 @rhtyd Maybe someone could take a look at my comments before we check this in and see if they think any of those should be implemented here. Thanks

@yadvr
Copy link
Member

yadvr commented Jan 10, 2017

@mike-tutkowski sorry I don't have the bandwidth for a review, though I can facilitate with running tests. Maybe @anshul1886 and/or @serg38 can comment. Thanks.

@blueorangutan test

@blueorangutan
Copy link

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

@serg38
Copy link

serg38 commented Jan 11, 2017

@mike-tutkowski The only comments in this PR are about deletion of PS with a snapshot copy. I am 100% agree with your statement. This PR excludes destroyed snapshot copies including ones on the PS from evaluation during the listSnaphsot call thus avoiding NPE if original PS is already deleted.
Did you have other suggestions for this PR?

@anshul1886
Copy link

anshul1886 commented Jan 11, 2017

@serg38 I had some open questions on code which are not yet answered specifically related to use case of null case and comparison of non comparable properties.

Also, for unmanaged storage there is nothing called snapshot copy on primary yet once the snapshot is created. This PR is meant to fix that case i.e. unmanaged primary storage case only. So I am not understanding what are you referring to here. I had replied to your comment on dev mail but didn't get any response.

}

long storagePoolId = snapshotStore.getDataStoreId();
DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
Copy link
Member

Choose a reason for hiding this comment

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

Another possibility here is that we could simply still try to retrieve "dataStore" and then perform this check:

     DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);

     if (dataStore == null) {
         return DataStoreRole.Image;
      }

If "dataStore" equals null, then it was removed, which should only be something that happened when unmanaged storage is being used (thus when the the snapshot resides on secondary storage).

snapshotInfo = (SnapshotInfo)snapshot;
} else {
DataStoreRole dataStoreRole = getDataStoreRole(snapshot, _snapshotStoreDao, _dataStoreMgr);

Copy link
Member

Choose a reason for hiding this comment

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

I would say the default should be DataStoreRole.Image for getDataStoreRole and so getDataStoreRole should probably never return null.

@Override
public PrimaryDataStore getPrimaryDataStore(long dataStoreId) {
StoragePoolVO dataStoreVO = dataStoreDao.findById(dataStoreId);
StoragePoolVO dataStoreVO = dataStoreDao.findByIdIncludingRemoved(dataStoreId);
Copy link
Member

Choose a reason for hiding this comment

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

Is getPrimaryDataStore(long) called from many places? If so, it might be a bit risky to change this from findById to findByIdIncludingRemoved unless we are pretty sure all of the calling code is OK with that change.

snapshotResponse.setObjectName("snapshot");
snapshotResponses.add(snapshotResponse);
if (snapshotResponse != null) {
snapshotResponse.setObjectName("snapshot");
Copy link
Member

Choose a reason for hiding this comment

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

I've added a few comments.

If we implement those comments, then null should not be a problem here (in other words, the code in this class could remain unchanged).

@blueorangutan
Copy link

Trillian test result (tid-774)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 42807 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr1735-t774-kvm-centos7.zip
Intermitten failure detected: /marvin/tests/smoke/test_privategw_acl.py
Intermitten failure detected: /marvin/tests/smoke/test_routers_network_ops.py
Intermitten failure detected: /marvin/tests/smoke/test_snapshots.py
Intermitten failure detected: /marvin/tests/smoke/test_volumes.py
Intermitten failure detected: /marvin/tests/smoke/test_vpc_redundant.py
Test completed. 45 look ok, 3 have error(s)

Test Result Time (s) Test File
test_04_rvpc_privategw_static_routes Failure 345.63 test_privategw_acl.py
test_01_create_volume Error 249.60 test_volumes.py
test_02_list_snapshots_with_removed_data_store Error 0.04 test_snapshots.py
test_01_vpc_site2site_vpn Success 165.13 test_vpc_vpn.py
test_01_vpc_remote_access_vpn Success 71.17 test_vpc_vpn.py
test_01_redundant_vpc_site2site_vpn Success 301.46 test_vpc_vpn.py
test_02_VPC_default_routes Success 445.31 test_vpc_router_nics.py
test_01_VPC_nics_after_destroy Success 831.58 test_vpc_router_nics.py
test_05_rvpc_multi_tiers Success 516.55 test_vpc_redundant.py
test_04_rvpc_network_garbage_collector_nics Success 1406.00 test_vpc_redundant.py
test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers Success 548.52 test_vpc_redundant.py
test_02_redundant_VPC_default_routes Success 769.66 test_vpc_redundant.py
test_01_create_redundant_VPC_2tiers_4VMs_4IPs_4PF_ACL Success 1284.91 test_vpc_redundant.py
test_09_delete_detached_volume Success 156.68 test_volumes.py
test_08_resize_volume Success 156.39 test_volumes.py
test_07_resize_fail Success 161.38 test_volumes.py
test_06_download_detached_volume Success 156.25 test_volumes.py
test_05_detach_volume Success 236.36 test_volumes.py
test_04_delete_attached_volume Success 151.22 test_volumes.py
test_03_download_attached_volume Success 156.32 test_volumes.py
test_02_attach_volume Success 214.74 test_volumes.py
test_deploy_vm_multiple Success 388.71 test_vm_life_cycle.py
test_deploy_vm Success 0.03 test_vm_life_cycle.py
test_advZoneVirtualRouter Success 0.02 test_vm_life_cycle.py
test_10_attachAndDetach_iso Success 46.70 test_vm_life_cycle.py
test_09_expunge_vm Success 125.23 test_vm_life_cycle.py
test_08_migrate_vm Success 66.21 test_vm_life_cycle.py
test_07_restore_vm Success 0.12 test_vm_life_cycle.py
test_06_destroy_vm Success 130.85 test_vm_life_cycle.py
test_03_reboot_vm Success 125.84 test_vm_life_cycle.py
test_02_start_vm Success 10.17 test_vm_life_cycle.py
test_01_stop_vm Success 125.82 test_vm_life_cycle.py
test_CreateTemplateWithDuplicateName Success 65.57 test_templates.py
test_08_list_system_templates Success 0.03 test_templates.py
test_07_list_public_templates Success 0.04 test_templates.py
test_05_template_permissions Success 0.06 test_templates.py
test_04_extract_template Success 5.17 test_templates.py
test_03_delete_template Success 5.11 test_templates.py
test_02_edit_template Success 90.18 test_templates.py
test_01_create_template Success 65.56 test_templates.py
test_10_destroy_cpvm Success 166.69 test_ssvm.py
test_09_destroy_ssvm Success 164.22 test_ssvm.py
test_08_reboot_cpvm Success 101.57 test_ssvm.py
test_07_reboot_ssvm Success 133.39 test_ssvm.py
test_06_stop_cpvm Success 136.78 test_ssvm.py
test_05_stop_ssvm Success 163.33 test_ssvm.py
test_04_cpvm_internals Success 1.25 test_ssvm.py
test_03_ssvm_internals Success 2.83 test_ssvm.py
test_02_list_cpvm_vm Success 0.12 test_ssvm.py
test_01_list_sec_storage_vm Success 0.13 test_ssvm.py
test_01_snapshot_root_disk Success 11.08 test_snapshots.py
test_04_change_offering_small Success 204.53 test_service_offerings.py
test_03_delete_service_offering Success 0.04 test_service_offerings.py
test_02_edit_service_offering Success 0.06 test_service_offerings.py
test_01_create_service_offering Success 0.11 test_service_offerings.py
test_02_sys_template_ready Success 0.13 test_secondary_storage.py
test_01_sys_vm_start Success 0.18 test_secondary_storage.py
test_09_reboot_router Success 40.36 test_routers.py
test_08_start_router Success 35.31 test_routers.py
test_07_stop_router Success 10.16 test_routers.py
test_06_router_advanced Success 0.06 test_routers.py
test_05_router_basic Success 0.04 test_routers.py
test_04_restart_network_wo_cleanup Success 5.71 test_routers.py
test_03_restart_network_cleanup Success 70.61 test_routers.py
test_02_router_internal_adv Success 0.85 test_routers.py
test_01_router_internal_basic Success 0.46 test_routers.py
test_router_dns_guestipquery Success 76.78 test_router_dns.py
test_router_dns_externalipquery Success 0.08 test_router_dns.py
test_router_dhcphosts Success 362.54 test_router_dhcphosts.py
test_router_dhcp_opts Success 21.58 test_router_dhcphosts.py
test_01_updatevolumedetail Success 0.08 test_resource_detail.py
test_01_reset_vm_on_reboot Success 181.27 test_reset_vm_on_reboot.py
test_createRegion Success 0.07 test_regions.py
test_create_pvlan_network Success 5.28 test_pvlan.py
test_dedicatePublicIpRange Success 0.45 test_public_ip_range.py
test_03_vpc_privategw_restart_vpc_cleanup Success 641.01 test_privategw_acl.py
test_02_vpc_privategw_static_routes Success 591.72 test_privategw_acl.py
test_01_vpc_privategw_acl Success 92.18 test_privategw_acl.py
test_01_primary_storage_nfs Success 35.79 test_primary_storage.py
test_createPortablePublicIPRange Success 15.19 test_portable_publicip.py
test_createPortablePublicIPAcquire Success 15.49 test_portable_publicip.py
test_isolate_network_password_server Success 57.38 test_password_server.py
test_UpdateStorageOverProvisioningFactor Success 0.14 test_over_provisioning.py
test_oobm_zchange_password Success 30.64 test_outofbandmanagement.py
test_oobm_multiple_mgmt_server_ownership Success 16.37 test_outofbandmanagement.py
test_oobm_issue_power_status Success 10.25 test_outofbandmanagement.py
test_oobm_issue_power_soft Success 15.31 test_outofbandmanagement.py
test_oobm_issue_power_reset Success 15.34 test_outofbandmanagement.py
test_oobm_issue_power_on Success 15.33 test_outofbandmanagement.py
test_oobm_issue_power_off Success 15.32 test_outofbandmanagement.py
test_oobm_issue_power_cycle Success 15.32 test_outofbandmanagement.py
test_oobm_enabledisable_across_clusterzones Success 87.63 test_outofbandmanagement.py
test_oobm_enable_feature_valid Success 5.16 test_outofbandmanagement.py
test_oobm_enable_feature_invalid Success 0.09 test_outofbandmanagement.py
test_oobm_disable_feature_valid Success 0.15 test_outofbandmanagement.py
test_oobm_disable_feature_invalid Success 0.10 test_outofbandmanagement.py
test_oobm_configure_invalid_driver Success 0.09 test_outofbandmanagement.py
test_oobm_configure_default_driver Success 0.07 test_outofbandmanagement.py
test_oobm_background_powerstate_sync Success 23.41 test_outofbandmanagement.py
test_extendPhysicalNetworkVlan Success 15.32 test_non_contigiousvlan.py
test_01_nic Success 534.90 test_nic.py
test_releaseIP Success 237.83 test_network.py
test_reboot_router Success 504.00 test_network.py
test_public_ip_user_account Success 10.25 test_network.py
test_public_ip_admin_account Success 40.30 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.49 test_network.py
test_network_rules_acquired_public_ip_1_static_nat_rule Success 123.59 test_network.py
test_delete_account Success 293.29 test_network.py
test_02_port_fwd_on_non_src_nat Success 55.65 test_network.py
test_01_port_fwd_on_src_nat Success 111.72 test_network.py
test_nic_secondaryip_add_remove Success 247.88 test_multipleips_per_nic.py
login_test_saml_user Success 19.25 test_login.py
test_assign_and_removal_lb Success 133.48 test_loadbalance.py
test_02_create_lb_rule_non_nat Success 187.30 test_loadbalance.py
test_01_create_lb_rule_src_nat Success 208.34 test_loadbalance.py
test_03_list_snapshots Success 0.08 test_list_ids_parameter.py
test_02_list_templates Success 0.04 test_list_ids_parameter.py
test_01_list_volumes Success 0.03 test_list_ids_parameter.py
test_07_list_default_iso Success 0.06 test_iso.py
test_05_iso_permissions Success 0.07 test_iso.py
test_04_extract_Iso Success 5.26 test_iso.py
test_03_delete_iso Success 95.21 test_iso.py
test_02_edit_iso Success 0.06 test_iso.py
test_01_create_iso Success 21.01 test_iso.py
test_04_rvpc_internallb_haproxy_stats_on_all_interfaces Success 177.89 test_internal_lb.py
test_03_vpc_internallb_haproxy_stats_on_all_interfaces Success 127.47 test_internal_lb.py
test_02_internallb_roundrobin_1RVPC_3VM_HTTP_port80 Success 576.92 test_internal_lb.py
test_01_internallb_roundrobin_1VPC_3VM_HTTP_port80 Success 446.36 test_internal_lb.py
test_dedicateGuestVlanRange Success 10.27 test_guest_vlan_range.py
test_UpdateConfigParamWithScope Success 0.15 test_global_settings.py
test_rolepermission_lifecycle_update Success 6.15 test_dynamicroles.py
test_rolepermission_lifecycle_list Success 5.99 test_dynamicroles.py
test_rolepermission_lifecycle_delete Success 5.98 test_dynamicroles.py
test_rolepermission_lifecycle_create Success 5.90 test_dynamicroles.py
test_rolepermission_lifecycle_concurrent_updates Success 6.00 test_dynamicroles.py
test_role_lifecycle_update_role_inuse Success 5.91 test_dynamicroles.py
test_role_lifecycle_update Success 10.98 test_dynamicroles.py
test_role_lifecycle_list Success 5.89 test_dynamicroles.py
test_role_lifecycle_delete Success 10.94 test_dynamicroles.py
test_role_lifecycle_create Success 5.90 test_dynamicroles.py
test_role_inuse_deletion Success 6.01 test_dynamicroles.py
test_role_account_acls_multiple_mgmt_servers Success 8.10 test_dynamicroles.py
test_role_account_acls Success 8.35 test_dynamicroles.py
test_default_role_deletion Success 6.01 test_dynamicroles.py
test_04_create_fat_type_disk_offering Success 0.07 test_disk_offerings.py
test_03_delete_disk_offering Success 0.04 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.11 test_disk_offerings.py
test_deployvm_userdispersing Success 21.06 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userconcentrated Success 50.79 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_firstfit Success 45.63 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userdata_post Success 10.44 test_deploy_vm_with_userdata.py
test_deployvm_userdata Success 101.05 test_deploy_vm_with_userdata.py
test_02_deploy_vm_root_resize Success 6.02 test_deploy_vm_root_resize.py
test_01_deploy_vm_root_resize Success 6.00 test_deploy_vm_root_resize.py
test_00_deploy_vm_root_resize Success 257.85 test_deploy_vm_root_resize.py
test_deploy_vm_from_iso Success 197.44 test_deploy_vm_iso.py
test_DeployVmAntiAffinityGroup Success 111.25 test_affinity_groups.py
test_03_delete_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_02_revert_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_01_test_vm_volume_snapshot Skipped 0.00 test_vm_snapshots.py
test_01_create_vm_snapshots Skipped 0.00 test_vm_snapshots.py
test_06_copy_template Skipped 0.00 test_templates.py
test_static_role_account_acls Skipped 0.02 test_staticroles.py
test_01_scale_vm Skipped 0.00 test_scale_vm.py
test_01_primary_storage_iscsi Skipped 0.04 test_primary_storage.py
test_06_copy_iso Skipped 0.00 test_iso.py
test_deploy_vgpu_enabled_vm Skipped 0.06 test_deploy_vgpu_enabled_vm.py

@nvazquez
Copy link
Contributor Author

nvazquez commented Jan 11, 2017

@mike-tutkowski @anshul1886 thanks for your comments! I'll work on them!

@rhtyd this PR was targeted for 4.9, should I retarget it to master branch?

@nvazquez
Copy link
Contributor Author

Closing this PR as #1847 includes this changes in a simpler way

@nvazquez nvazquez closed this Feb 17, 2017
@nvazquez nvazquez deleted the list-snapshots-issue branch April 6, 2020 14:54
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.

9 participants