[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-9280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15582348#comment-15582348
 ] 

ASF GitHub Bot commented on CLOUDSTACK-9280:
--------------------------------------------

Github user GabrielBrascher commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1559#discussion_r83595364
  
    --- Diff: 
engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
 ---
    @@ -345,15 +354,34 @@ public EndPoint select(DataObject object, 
StorageAction action) {
                 }
             } else if (action == StorageAction.DELETEVOLUME) {
                 VolumeInfo volume = (VolumeInfo)object;
    +            VirtualMachine vm = volume.getAttachedVM();
    +
                 if (volume.getHypervisorType() == 
Hypervisor.HypervisorType.VMware) {
    -                VirtualMachine vm = volume.getAttachedVM();
                     if (vm != null) {
                         Long hostId = vm.getHostId() != null ? vm.getHostId() 
: vm.getLastHostId();
                         if (hostId != null) {
                             return getEndPointFromHostId(hostId);
                         }
                     }
                 }
    +
    +            //Handle case where the volume is a volume of an expunging 
system VM and there are
    +            //no other system VMs existing in the zone.
    +            if (vm != null) {
    +                VirtualMachine.Type type = 
volume.getAttachedVM().getType();
    +                if ((type == VirtualMachine.Type.SecondaryStorageVm || 
type == VirtualMachine.Type.ConsoleProxy) &&
    +                        (vm.getState() == State.Expunging || vm.getState() 
== State.Destroyed)) {
    +
    +                    List<SecondaryStorageVmVO> ssvms = 
ssvmDao.listByZoneId(Role.templateProcessor, volume.getDataCenterId());
    +                    if (CollectionUtils.isEmpty(ssvms)) {
    +
    +                        s_logger.info("Volume " + volume.getName() + " is 
attached to a " + vm.getState() + " " + type + " and zone " +
    +                                        volume.getDataCenterId() + " has 
no SSVMs.");
    +                        s_logger.info("Volume " + volume.getName() + " 
will be handled by dummy endpoint.");
    +                        return DummyEndpoint.getEndpoint();
    +                    }
    +                }
    +            }
    --- End diff --
    
    @ProjectMoon, it might be interesting to extract the code (lines 370 - 384) 
for a new method [e.g. `getDummyEndpoint(VolumeInfo volume, VirtualMachine 
vm)`].
    
    With that, the `select(DataObject object, StorageAction action)` code gets 
a bit cleaner and the test case is "isolated" (test for `select(DataObject 
object, StorageAction action)` would just require a verify for the 
`getDummyEndpoint(VolumeInfo volume, VirtualMachine vm)`, which has its own 
unit test for its inner logic).
    
    Commented lines (368 and 369) could become Javadoc for the new method.
    
    Thanks.



> System VM volumes cannot be deleted when there are no system VMs
> ----------------------------------------------------------------
>
>                 Key: CLOUDSTACK-9280
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9280
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: Management Server
>    Affects Versions: 4.6.0, 4.7.0
>            Reporter: Jeff Hair
>
> Scenario: When deleting a zone, everything under it must be removed. This 
> results in the system VMs being destroyed as there are no more hosts running.
> The storage cleanup thread properly detects that there are volumes to be 
> deleted, but it cannot delete them because the endpoint selection fails with 
> "No remote endpoint to send DeleteCommand, check if host or ssvm is down?"



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to